text_ux 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (147) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +25 -0
  3. data/.rspec +2 -0
  4. data/Gemfile +4 -0
  5. data/LICENSE.txt +22 -0
  6. data/README.md +51 -0
  7. data/Rakefile +18 -0
  8. data/ext/text_ux/extconf.rb +5 -0
  9. data/ext/text_ux/text_ux.cpp +252 -0
  10. data/lib/text_ux.rb +5 -0
  11. data/lib/text_ux/version.rb +3 -0
  12. data/spec/fixtures/test.ux +0 -0
  13. data/spec/spec_helper.rb +19 -0
  14. data/spec/text_ux_spec.rb +137 -0
  15. data/text_ux.gemspec +26 -0
  16. data/vendor/ux-trie/ux-0.1.9/.lock-waf_darwin_build +8 -0
  17. data/vendor/ux-trie/ux-0.1.9/.unittest-gtest/gtest-1.6.0/fused-src/gtest/gtest-all.cc +9118 -0
  18. data/vendor/ux-trie/ux-0.1.9/.unittest-gtest/gtest-1.6.0/fused-src/gtest/gtest.h +19537 -0
  19. data/vendor/ux-trie/ux-0.1.9/.unittest-gtest/gtest-1.6.0/fused-src/gtest/gtest_main.cc +39 -0
  20. data/vendor/ux-trie/ux-0.1.9/.waf-1.6.8-3e3391c5f23fbabad81e6d17c63a1b1e/waflib/Build.py +733 -0
  21. data/vendor/ux-trie/ux-0.1.9/.waf-1.6.8-3e3391c5f23fbabad81e6d17c63a1b1e/waflib/Build.pyc +0 -0
  22. data/vendor/ux-trie/ux-0.1.9/.waf-1.6.8-3e3391c5f23fbabad81e6d17c63a1b1e/waflib/ConfigSet.py +147 -0
  23. data/vendor/ux-trie/ux-0.1.9/.waf-1.6.8-3e3391c5f23fbabad81e6d17c63a1b1e/waflib/ConfigSet.pyc +0 -0
  24. data/vendor/ux-trie/ux-0.1.9/.waf-1.6.8-3e3391c5f23fbabad81e6d17c63a1b1e/waflib/Configure.py +314 -0
  25. data/vendor/ux-trie/ux-0.1.9/.waf-1.6.8-3e3391c5f23fbabad81e6d17c63a1b1e/waflib/Configure.pyc +0 -0
  26. data/vendor/ux-trie/ux-0.1.9/.waf-1.6.8-3e3391c5f23fbabad81e6d17c63a1b1e/waflib/Context.py +298 -0
  27. data/vendor/ux-trie/ux-0.1.9/.waf-1.6.8-3e3391c5f23fbabad81e6d17c63a1b1e/waflib/Context.pyc +0 -0
  28. data/vendor/ux-trie/ux-0.1.9/.waf-1.6.8-3e3391c5f23fbabad81e6d17c63a1b1e/waflib/Errors.py +37 -0
  29. data/vendor/ux-trie/ux-0.1.9/.waf-1.6.8-3e3391c5f23fbabad81e6d17c63a1b1e/waflib/Errors.pyc +0 -0
  30. data/vendor/ux-trie/ux-0.1.9/.waf-1.6.8-3e3391c5f23fbabad81e6d17c63a1b1e/waflib/Logs.py +149 -0
  31. data/vendor/ux-trie/ux-0.1.9/.waf-1.6.8-3e3391c5f23fbabad81e6d17c63a1b1e/waflib/Logs.pyc +0 -0
  32. data/vendor/ux-trie/ux-0.1.9/.waf-1.6.8-3e3391c5f23fbabad81e6d17c63a1b1e/waflib/Node.py +500 -0
  33. data/vendor/ux-trie/ux-0.1.9/.waf-1.6.8-3e3391c5f23fbabad81e6d17c63a1b1e/waflib/Node.pyc +0 -0
  34. data/vendor/ux-trie/ux-0.1.9/.waf-1.6.8-3e3391c5f23fbabad81e6d17c63a1b1e/waflib/Options.py +130 -0
  35. data/vendor/ux-trie/ux-0.1.9/.waf-1.6.8-3e3391c5f23fbabad81e6d17c63a1b1e/waflib/Options.pyc +0 -0
  36. data/vendor/ux-trie/ux-0.1.9/.waf-1.6.8-3e3391c5f23fbabad81e6d17c63a1b1e/waflib/Runner.py +191 -0
  37. data/vendor/ux-trie/ux-0.1.9/.waf-1.6.8-3e3391c5f23fbabad81e6d17c63a1b1e/waflib/Runner.pyc +0 -0
  38. data/vendor/ux-trie/ux-0.1.9/.waf-1.6.8-3e3391c5f23fbabad81e6d17c63a1b1e/waflib/Scripting.py +358 -0
  39. data/vendor/ux-trie/ux-0.1.9/.waf-1.6.8-3e3391c5f23fbabad81e6d17c63a1b1e/waflib/Scripting.pyc +0 -0
  40. data/vendor/ux-trie/ux-0.1.9/.waf-1.6.8-3e3391c5f23fbabad81e6d17c63a1b1e/waflib/Task.py +669 -0
  41. data/vendor/ux-trie/ux-0.1.9/.waf-1.6.8-3e3391c5f23fbabad81e6d17c63a1b1e/waflib/Task.pyc +0 -0
  42. data/vendor/ux-trie/ux-0.1.9/.waf-1.6.8-3e3391c5f23fbabad81e6d17c63a1b1e/waflib/TaskGen.py +341 -0
  43. data/vendor/ux-trie/ux-0.1.9/.waf-1.6.8-3e3391c5f23fbabad81e6d17c63a1b1e/waflib/TaskGen.pyc +0 -0
  44. data/vendor/ux-trie/ux-0.1.9/.waf-1.6.8-3e3391c5f23fbabad81e6d17c63a1b1e/waflib/Tools/__init__.py +4 -0
  45. data/vendor/ux-trie/ux-0.1.9/.waf-1.6.8-3e3391c5f23fbabad81e6d17c63a1b1e/waflib/Tools/__init__.pyc +0 -0
  46. data/vendor/ux-trie/ux-0.1.9/.waf-1.6.8-3e3391c5f23fbabad81e6d17c63a1b1e/waflib/Tools/ar.py +12 -0
  47. data/vendor/ux-trie/ux-0.1.9/.waf-1.6.8-3e3391c5f23fbabad81e6d17c63a1b1e/waflib/Tools/ar.pyc +0 -0
  48. data/vendor/ux-trie/ux-0.1.9/.waf-1.6.8-3e3391c5f23fbabad81e6d17c63a1b1e/waflib/Tools/asm.py +25 -0
  49. data/vendor/ux-trie/ux-0.1.9/.waf-1.6.8-3e3391c5f23fbabad81e6d17c63a1b1e/waflib/Tools/bison.py +29 -0
  50. data/vendor/ux-trie/ux-0.1.9/.waf-1.6.8-3e3391c5f23fbabad81e6d17c63a1b1e/waflib/Tools/c.py +27 -0
  51. data/vendor/ux-trie/ux-0.1.9/.waf-1.6.8-3e3391c5f23fbabad81e6d17c63a1b1e/waflib/Tools/c_aliases.py +56 -0
  52. data/vendor/ux-trie/ux-0.1.9/.waf-1.6.8-3e3391c5f23fbabad81e6d17c63a1b1e/waflib/Tools/c_aliases.pyc +0 -0
  53. data/vendor/ux-trie/ux-0.1.9/.waf-1.6.8-3e3391c5f23fbabad81e6d17c63a1b1e/waflib/Tools/c_config.py +708 -0
  54. data/vendor/ux-trie/ux-0.1.9/.waf-1.6.8-3e3391c5f23fbabad81e6d17c63a1b1e/waflib/Tools/c_config.pyc +0 -0
  55. data/vendor/ux-trie/ux-0.1.9/.waf-1.6.8-3e3391c5f23fbabad81e6d17c63a1b1e/waflib/Tools/c_osx.py +121 -0
  56. data/vendor/ux-trie/ux-0.1.9/.waf-1.6.8-3e3391c5f23fbabad81e6d17c63a1b1e/waflib/Tools/c_osx.pyc +0 -0
  57. data/vendor/ux-trie/ux-0.1.9/.waf-1.6.8-3e3391c5f23fbabad81e6d17c63a1b1e/waflib/Tools/c_preproc.py +606 -0
  58. data/vendor/ux-trie/ux-0.1.9/.waf-1.6.8-3e3391c5f23fbabad81e6d17c63a1b1e/waflib/Tools/c_preproc.pyc +0 -0
  59. data/vendor/ux-trie/ux-0.1.9/.waf-1.6.8-3e3391c5f23fbabad81e6d17c63a1b1e/waflib/Tools/c_tests.py +110 -0
  60. data/vendor/ux-trie/ux-0.1.9/.waf-1.6.8-3e3391c5f23fbabad81e6d17c63a1b1e/waflib/Tools/c_tests.pyc +0 -0
  61. data/vendor/ux-trie/ux-0.1.9/.waf-1.6.8-3e3391c5f23fbabad81e6d17c63a1b1e/waflib/Tools/ccroot.py +372 -0
  62. data/vendor/ux-trie/ux-0.1.9/.waf-1.6.8-3e3391c5f23fbabad81e6d17c63a1b1e/waflib/Tools/ccroot.pyc +0 -0
  63. data/vendor/ux-trie/ux-0.1.9/.waf-1.6.8-3e3391c5f23fbabad81e6d17c63a1b1e/waflib/Tools/compiler_c.py +39 -0
  64. data/vendor/ux-trie/ux-0.1.9/.waf-1.6.8-3e3391c5f23fbabad81e6d17c63a1b1e/waflib/Tools/compiler_cxx.py +39 -0
  65. data/vendor/ux-trie/ux-0.1.9/.waf-1.6.8-3e3391c5f23fbabad81e6d17c63a1b1e/waflib/Tools/compiler_cxx.pyc +0 -0
  66. data/vendor/ux-trie/ux-0.1.9/.waf-1.6.8-3e3391c5f23fbabad81e6d17c63a1b1e/waflib/Tools/compiler_d.py +30 -0
  67. data/vendor/ux-trie/ux-0.1.9/.waf-1.6.8-3e3391c5f23fbabad81e6d17c63a1b1e/waflib/Tools/compiler_fc.py +45 -0
  68. data/vendor/ux-trie/ux-0.1.9/.waf-1.6.8-3e3391c5f23fbabad81e6d17c63a1b1e/waflib/Tools/cs.py +98 -0
  69. data/vendor/ux-trie/ux-0.1.9/.waf-1.6.8-3e3391c5f23fbabad81e6d17c63a1b1e/waflib/Tools/cxx.py +27 -0
  70. data/vendor/ux-trie/ux-0.1.9/.waf-1.6.8-3e3391c5f23fbabad81e6d17c63a1b1e/waflib/Tools/cxx.pyc +0 -0
  71. data/vendor/ux-trie/ux-0.1.9/.waf-1.6.8-3e3391c5f23fbabad81e6d17c63a1b1e/waflib/Tools/d.py +51 -0
  72. data/vendor/ux-trie/ux-0.1.9/.waf-1.6.8-3e3391c5f23fbabad81e6d17c63a1b1e/waflib/Tools/d_config.py +47 -0
  73. data/vendor/ux-trie/ux-0.1.9/.waf-1.6.8-3e3391c5f23fbabad81e6d17c63a1b1e/waflib/Tools/d_scan.py +133 -0
  74. data/vendor/ux-trie/ux-0.1.9/.waf-1.6.8-3e3391c5f23fbabad81e6d17c63a1b1e/waflib/Tools/dbus.py +30 -0
  75. data/vendor/ux-trie/ux-0.1.9/.waf-1.6.8-3e3391c5f23fbabad81e6d17c63a1b1e/waflib/Tools/dmd.py +43 -0
  76. data/vendor/ux-trie/ux-0.1.9/.waf-1.6.8-3e3391c5f23fbabad81e6d17c63a1b1e/waflib/Tools/errcheck.py +153 -0
  77. data/vendor/ux-trie/ux-0.1.9/.waf-1.6.8-3e3391c5f23fbabad81e6d17c63a1b1e/waflib/Tools/fc.py +123 -0
  78. data/vendor/ux-trie/ux-0.1.9/.waf-1.6.8-3e3391c5f23fbabad81e6d17c63a1b1e/waflib/Tools/fc_config.py +271 -0
  79. data/vendor/ux-trie/ux-0.1.9/.waf-1.6.8-3e3391c5f23fbabad81e6d17c63a1b1e/waflib/Tools/fc_scan.py +68 -0
  80. data/vendor/ux-trie/ux-0.1.9/.waf-1.6.8-3e3391c5f23fbabad81e6d17c63a1b1e/waflib/Tools/flex.py +27 -0
  81. data/vendor/ux-trie/ux-0.1.9/.waf-1.6.8-3e3391c5f23fbabad81e6d17c63a1b1e/waflib/Tools/g95.py +55 -0
  82. data/vendor/ux-trie/ux-0.1.9/.waf-1.6.8-3e3391c5f23fbabad81e6d17c63a1b1e/waflib/Tools/gas.py +10 -0
  83. data/vendor/ux-trie/ux-0.1.9/.waf-1.6.8-3e3391c5f23fbabad81e6d17c63a1b1e/waflib/Tools/gcc.py +98 -0
  84. data/vendor/ux-trie/ux-0.1.9/.waf-1.6.8-3e3391c5f23fbabad81e6d17c63a1b1e/waflib/Tools/gdc.py +34 -0
  85. data/vendor/ux-trie/ux-0.1.9/.waf-1.6.8-3e3391c5f23fbabad81e6d17c63a1b1e/waflib/Tools/gfortran.py +69 -0
  86. data/vendor/ux-trie/ux-0.1.9/.waf-1.6.8-3e3391c5f23fbabad81e6d17c63a1b1e/waflib/Tools/glib2.py +174 -0
  87. data/vendor/ux-trie/ux-0.1.9/.waf-1.6.8-3e3391c5f23fbabad81e6d17c63a1b1e/waflib/Tools/gnu_dirs.py +65 -0
  88. data/vendor/ux-trie/ux-0.1.9/.waf-1.6.8-3e3391c5f23fbabad81e6d17c63a1b1e/waflib/Tools/gxx.py +98 -0
  89. data/vendor/ux-trie/ux-0.1.9/.waf-1.6.8-3e3391c5f23fbabad81e6d17c63a1b1e/waflib/Tools/gxx.pyc +0 -0
  90. data/vendor/ux-trie/ux-0.1.9/.waf-1.6.8-3e3391c5f23fbabad81e6d17c63a1b1e/waflib/Tools/icc.py +31 -0
  91. data/vendor/ux-trie/ux-0.1.9/.waf-1.6.8-3e3391c5f23fbabad81e6d17c63a1b1e/waflib/Tools/icpc.py +30 -0
  92. data/vendor/ux-trie/ux-0.1.9/.waf-1.6.8-3e3391c5f23fbabad81e6d17c63a1b1e/waflib/Tools/ifort.py +42 -0
  93. data/vendor/ux-trie/ux-0.1.9/.waf-1.6.8-3e3391c5f23fbabad81e6d17c63a1b1e/waflib/Tools/intltool.py +78 -0
  94. data/vendor/ux-trie/ux-0.1.9/.waf-1.6.8-3e3391c5f23fbabad81e6d17c63a1b1e/waflib/Tools/irixcc.py +49 -0
  95. data/vendor/ux-trie/ux-0.1.9/.waf-1.6.8-3e3391c5f23fbabad81e6d17c63a1b1e/waflib/Tools/javaw.py +272 -0
  96. data/vendor/ux-trie/ux-0.1.9/.waf-1.6.8-3e3391c5f23fbabad81e6d17c63a1b1e/waflib/Tools/kde4.py +49 -0
  97. data/vendor/ux-trie/ux-0.1.9/.waf-1.6.8-3e3391c5f23fbabad81e6d17c63a1b1e/waflib/Tools/lua.py +19 -0
  98. data/vendor/ux-trie/ux-0.1.9/.waf-1.6.8-3e3391c5f23fbabad81e6d17c63a1b1e/waflib/Tools/msvc.py +650 -0
  99. data/vendor/ux-trie/ux-0.1.9/.waf-1.6.8-3e3391c5f23fbabad81e6d17c63a1b1e/waflib/Tools/nasm.py +13 -0
  100. data/vendor/ux-trie/ux-0.1.9/.waf-1.6.8-3e3391c5f23fbabad81e6d17c63a1b1e/waflib/Tools/perl.py +78 -0
  101. data/vendor/ux-trie/ux-0.1.9/.waf-1.6.8-3e3391c5f23fbabad81e6d17c63a1b1e/waflib/Tools/python.py +303 -0
  102. data/vendor/ux-trie/ux-0.1.9/.waf-1.6.8-3e3391c5f23fbabad81e6d17c63a1b1e/waflib/Tools/qt4.py +424 -0
  103. data/vendor/ux-trie/ux-0.1.9/.waf-1.6.8-3e3391c5f23fbabad81e6d17c63a1b1e/waflib/Tools/ruby.py +104 -0
  104. data/vendor/ux-trie/ux-0.1.9/.waf-1.6.8-3e3391c5f23fbabad81e6d17c63a1b1e/waflib/Tools/suncc.py +54 -0
  105. data/vendor/ux-trie/ux-0.1.9/.waf-1.6.8-3e3391c5f23fbabad81e6d17c63a1b1e/waflib/Tools/suncxx.py +55 -0
  106. data/vendor/ux-trie/ux-0.1.9/.waf-1.6.8-3e3391c5f23fbabad81e6d17c63a1b1e/waflib/Tools/tex.py +222 -0
  107. data/vendor/ux-trie/ux-0.1.9/.waf-1.6.8-3e3391c5f23fbabad81e6d17c63a1b1e/waflib/Tools/vala.py +215 -0
  108. data/vendor/ux-trie/ux-0.1.9/.waf-1.6.8-3e3391c5f23fbabad81e6d17c63a1b1e/waflib/Tools/waf_unit_test.py +79 -0
  109. data/vendor/ux-trie/ux-0.1.9/.waf-1.6.8-3e3391c5f23fbabad81e6d17c63a1b1e/waflib/Tools/winres.py +34 -0
  110. data/vendor/ux-trie/ux-0.1.9/.waf-1.6.8-3e3391c5f23fbabad81e6d17c63a1b1e/waflib/Tools/xlc.py +46 -0
  111. data/vendor/ux-trie/ux-0.1.9/.waf-1.6.8-3e3391c5f23fbabad81e6d17c63a1b1e/waflib/Tools/xlcxx.py +46 -0
  112. data/vendor/ux-trie/ux-0.1.9/.waf-1.6.8-3e3391c5f23fbabad81e6d17c63a1b1e/waflib/Utils.py +334 -0
  113. data/vendor/ux-trie/ux-0.1.9/.waf-1.6.8-3e3391c5f23fbabad81e6d17c63a1b1e/waflib/Utils.pyc +0 -0
  114. data/vendor/ux-trie/ux-0.1.9/.waf-1.6.8-3e3391c5f23fbabad81e6d17c63a1b1e/waflib/__init__.py +4 -0
  115. data/vendor/ux-trie/ux-0.1.9/.waf-1.6.8-3e3391c5f23fbabad81e6d17c63a1b1e/waflib/__init__.pyc +0 -0
  116. data/vendor/ux-trie/ux-0.1.9/.waf-1.6.8-3e3391c5f23fbabad81e6d17c63a1b1e/waflib/ansiterm.py +173 -0
  117. data/vendor/ux-trie/ux-0.1.9/.waf-1.6.8-3e3391c5f23fbabad81e6d17c63a1b1e/waflib/ansiterm.pyc +0 -0
  118. data/vendor/ux-trie/ux-0.1.9/.waf-1.6.8-3e3391c5f23fbabad81e6d17c63a1b1e/waflib/extras/__init__.py +4 -0
  119. data/vendor/ux-trie/ux-0.1.9/.waf-1.6.8-3e3391c5f23fbabad81e6d17c63a1b1e/waflib/extras/__init__.pyc +0 -0
  120. data/vendor/ux-trie/ux-0.1.9/.waf-1.6.8-3e3391c5f23fbabad81e6d17c63a1b1e/waflib/extras/compat15.py +223 -0
  121. data/vendor/ux-trie/ux-0.1.9/.waf-1.6.8-3e3391c5f23fbabad81e6d17c63a1b1e/waflib/extras/compat15.pyc +0 -0
  122. data/vendor/ux-trie/ux-0.1.9/.waf-1.6.8-3e3391c5f23fbabad81e6d17c63a1b1e/waflib/fixpy2.py +50 -0
  123. data/vendor/ux-trie/ux-0.1.9/.waf-1.6.8-3e3391c5f23fbabad81e6d17c63a1b1e/waflib/fixpy2.pyc +0 -0
  124. data/vendor/ux-trie/ux-0.1.9/src/bitVec.cpp +119 -0
  125. data/vendor/ux-trie/ux-0.1.9/src/bitVec.hpp +64 -0
  126. data/vendor/ux-trie/ux-0.1.9/src/bitVecTest.cpp +143 -0
  127. data/vendor/ux-trie/ux-0.1.9/src/cmdline.h +809 -0
  128. data/vendor/ux-trie/ux-0.1.9/src/rsDic.cpp +121 -0
  129. data/vendor/ux-trie/ux-0.1.9/src/rsDic.hpp +57 -0
  130. data/vendor/ux-trie/ux-0.1.9/src/ux.hpp +26 -0
  131. data/vendor/ux-trie/ux-0.1.9/src/uxMain.cpp +206 -0
  132. data/vendor/ux-trie/ux-0.1.9/src/uxMap.cpp +0 -0
  133. data/vendor/ux-trie/ux-0.1.9/src/uxMap.hpp +248 -0
  134. data/vendor/ux-trie/ux-0.1.9/src/uxMapTest.cpp +139 -0
  135. data/vendor/ux-trie/ux-0.1.9/src/uxTest.cpp +229 -0
  136. data/vendor/ux-trie/ux-0.1.9/src/uxTrie.cpp +529 -0
  137. data/vendor/ux-trie/ux-0.1.9/src/uxTrie.hpp +220 -0
  138. data/vendor/ux-trie/ux-0.1.9/src/uxUtil.cpp +92 -0
  139. data/vendor/ux-trie/ux-0.1.9/src/uxUtil.hpp +35 -0
  140. data/vendor/ux-trie/ux-0.1.9/src/wscript +43 -0
  141. data/vendor/ux-trie/ux-0.1.9/unittest_gtest.py +0 -0
  142. data/vendor/ux-trie/ux-0.1.9/unittest_gtest.pyc +0 -0
  143. data/vendor/ux-trie/ux-0.1.9/unittestt.py +166 -0
  144. data/vendor/ux-trie/ux-0.1.9/ux.pc.in +10 -0
  145. data/vendor/ux-trie/ux-0.1.9/waf +0 -0
  146. data/vendor/ux-trie/ux-0.1.9/wscript +32 -0
  147. metadata +249 -0
@@ -0,0 +1,56 @@
1
+ #! /usr/bin/env python
2
+ # encoding: utf-8
3
+ # WARNING! Do not edit! http://waf.googlecode.com/git/docs/wafbook/single.html#_obtaining_the_waf_file
4
+
5
+ import os,sys,re
6
+ from waflib import Utils,Build
7
+ from waflib.Configure import conf
8
+ def get_extensions(lst):
9
+ ret=[]
10
+ for x in Utils.to_list(lst):
11
+ try:
12
+ if not isinstance(x,str):
13
+ x=x.name
14
+ ret.append(x[x.rfind('.')+1:])
15
+ except:
16
+ pass
17
+ return ret
18
+ def sniff_features(**kw):
19
+ exts=get_extensions(kw['source'])
20
+ type=kw['_type']
21
+ feats=[]
22
+ if'cxx'in exts or'cpp'in exts or'c++'in exts or'cc'in exts or'C'in exts:
23
+ feats.append('cxx')
24
+ if'c'in exts or'vala'in exts:
25
+ feats.append('c')
26
+ if'd'in exts:
27
+ feats.append('d')
28
+ if'java'in exts:
29
+ feats.append('java')
30
+ if'java'in exts:
31
+ return'java'
32
+ if type in['program','shlib','stlib']:
33
+ for x in feats:
34
+ if x in['cxx','d','c']:
35
+ feats.append(x+type)
36
+ return feats
37
+ def set_features(kw,_type):
38
+ kw['_type']=_type
39
+ kw['features']=Utils.to_list(kw.get('features',[]))+Utils.to_list(sniff_features(**kw))
40
+ def program(bld,*k,**kw):
41
+ set_features(kw,'program')
42
+ return bld(*k,**kw)
43
+ def shlib(bld,*k,**kw):
44
+ set_features(kw,'shlib')
45
+ return bld(*k,**kw)
46
+ def stlib(bld,*k,**kw):
47
+ set_features(kw,'stlib')
48
+ return bld(*k,**kw)
49
+ def objects(bld,*k,**kw):
50
+ set_features(kw,'objects')
51
+ return bld(*k,**kw)
52
+
53
+ conf(program)
54
+ conf(shlib)
55
+ conf(stlib)
56
+ conf(objects)
@@ -0,0 +1,708 @@
1
+ #! /usr/bin/env python
2
+ # encoding: utf-8
3
+ # WARNING! Do not edit! http://waf.googlecode.com/git/docs/wafbook/single.html#_obtaining_the_waf_file
4
+
5
+ import sys
6
+ if sys.hexversion < 0x020400f0: from sets import Set as set
7
+ import os,imp,sys,re,shlex,shutil
8
+ from waflib import Build,Utils,Configure,Task,Options,Logs,TaskGen,Errors,ConfigSet,Runner
9
+ from waflib.TaskGen import before_method,after_method,feature
10
+ from waflib.Configure import conf
11
+ WAF_CONFIG_H='config.h'
12
+ DEFKEYS='define_key'
13
+ INCKEYS='include_key'
14
+ cfg_ver={'atleast-version':'>=','exact-version':'==','max-version':'<=',}
15
+ SNIP_FUNCTION='''
16
+ int main() {
17
+ void *p;
18
+ p=(void*)(%s);
19
+ return 0;
20
+ }
21
+ '''
22
+ SNIP_TYPE='''
23
+ int main() {
24
+ if ((%(type_name)s *) 0) return 0;
25
+ if (sizeof (%(type_name)s)) return 0;
26
+ }
27
+ '''
28
+ SNIP_CLASS='''
29
+ int main() {
30
+ if (
31
+ }
32
+ '''
33
+ SNIP_EMPTY_PROGRAM='''
34
+ int main() {
35
+ return 0;
36
+ }
37
+ '''
38
+ SNIP_FIELD='''
39
+ int main() {
40
+ char *off;
41
+ off = (char*) &((%(type_name)s*)0)->%(field_name)s;
42
+ return (size_t) off < sizeof(%(type_name)s);
43
+ }
44
+ '''
45
+ MACRO_TO_DESTOS={'__linux__':'linux','__GNU__':'gnu','__FreeBSD__':'freebsd','__NetBSD__':'netbsd','__OpenBSD__':'openbsd','__sun':'sunos','__hpux':'hpux','__sgi':'irix','_AIX':'aix','__CYGWIN__':'cygwin','__MSYS__':'msys','_UWIN':'uwin','_WIN64':'win32','_WIN32':'win32','__POWERPC__':'powerpc','__QNX__':'qnx'}
46
+ MACRO_TO_DEST_CPU={'__x86_64__':'x86_64','__i386__':'x86','__ia64__':'ia','__mips__':'mips','__sparc__':'sparc','__alpha__':'alpha','__arm__':'arm','__hppa__':'hppa','__powerpc__':'powerpc',}
47
+ def parse_flags(self,line,uselib,env=None):
48
+ assert(isinstance(line,str))
49
+ env=env or self.env
50
+ app=env.append_value
51
+ appu=env.append_unique
52
+ lex=shlex.shlex(line,posix=False)
53
+ lex.whitespace_split=True
54
+ lex.commenters=''
55
+ lst=list(lex)
56
+ while lst:
57
+ x=lst.pop(0)
58
+ st=x[:2]
59
+ ot=x[2:]
60
+ if st=='-I'or st=='/I':
61
+ if not ot:ot=lst.pop(0)
62
+ appu('INCLUDES_'+uselib,[ot])
63
+ elif st=='-include':
64
+ tmp=[x,lst.pop(0)]
65
+ app('CFLAGS',tmp)
66
+ app('CXXFLAGS',tmp)
67
+ elif st=='-D'or(self.env.CXX_NAME=='msvc'and st=='/D'):
68
+ if not ot:ot=lst.pop(0)
69
+ app('DEFINES_'+uselib,[ot])
70
+ elif st=='-l':
71
+ if not ot:ot=lst.pop(0)
72
+ appu('LIB_'+uselib,[ot])
73
+ elif st=='-L':
74
+ if not ot:ot=lst.pop(0)
75
+ appu('LIBPATH_'+uselib,[ot])
76
+ elif x=='-pthread'or x.startswith('+')or x.startswith('-std'):
77
+ app('CFLAGS_'+uselib,[x])
78
+ app('CXXFLAGS_'+uselib,[x])
79
+ app('LINKFLAGS_'+uselib,[x])
80
+ elif x=='-framework':
81
+ appu('FRAMEWORK_'+uselib,[lst.pop(0)])
82
+ elif x.startswith('-F'):
83
+ appu('FRAMEWORKPATH_'+uselib,[x[2:]])
84
+ elif x.startswith('-Wl'):
85
+ app('LINKFLAGS_'+uselib,[x])
86
+ elif x.startswith('-m')or x.startswith('-f')or x.startswith('-dynamic'):
87
+ app('CFLAGS_'+uselib,[x])
88
+ app('CXXFLAGS_'+uselib,[x])
89
+ elif x.startswith('-bundle'):
90
+ app('LINKFLAGS_'+uselib,[x])
91
+ elif x.startswith('-undefined'):
92
+ arg=lst.pop(0)
93
+ app('LINKFLAGS_'+uselib,[x,arg])
94
+ elif x.startswith('-arch')or x.startswith('-isysroot'):
95
+ tmp=[x,lst.pop(0)]
96
+ app('CFLAGS_'+uselib,tmp)
97
+ app('CXXFLAGS_'+uselib,tmp)
98
+ app('LINKFLAGS_'+uselib,tmp)
99
+ elif x.endswith('.a')or x.endswith('.so')or x.endswith('.dylib'):
100
+ appu('LINKFLAGS_'+uselib,[x])
101
+ def ret_msg(self,f,kw):
102
+ if isinstance(f,str):
103
+ return f
104
+ return f(kw)
105
+ def validate_cfg(self,kw):
106
+ if not'path'in kw:
107
+ if not self.env.PKGCONFIG:
108
+ self.find_program('pkg-config',var='PKGCONFIG')
109
+ kw['path']=self.env.PKGCONFIG
110
+ if'atleast_pkgconfig_version'in kw:
111
+ if not'msg'in kw:
112
+ kw['msg']='Checking for pkg-config version >= %r'%kw['atleast_pkgconfig_version']
113
+ return
114
+ if not'okmsg'in kw:
115
+ kw['okmsg']='yes'
116
+ if not'errmsg'in kw:
117
+ kw['errmsg']='not found'
118
+ if'modversion'in kw:
119
+ if not'msg'in kw:
120
+ kw['msg']='Checking for %r version'%kw['modversion']
121
+ return
122
+ for x in cfg_ver.keys():
123
+ y=x.replace('-','_')
124
+ if y in kw:
125
+ if not'package'in kw:
126
+ raise ValueError('%s requires a package'%x)
127
+ if not'msg'in kw:
128
+ kw['msg']='Checking for %r %s %s'%(kw['package'],cfg_ver[x],kw[y])
129
+ return
130
+ if not'msg'in kw:
131
+ kw['msg']='Checking for %r'%(kw['package']or kw['path'])
132
+ def exec_cfg(self,kw):
133
+ if'atleast_pkgconfig_version'in kw:
134
+ cmd=[kw['path'],'--atleast-pkgconfig-version=%s'%kw['atleast_pkgconfig_version']]
135
+ self.cmd_and_log(cmd)
136
+ if not'okmsg'in kw:
137
+ kw['okmsg']='yes'
138
+ return
139
+ for x in cfg_ver:
140
+ y=x.replace('-','_')
141
+ if y in kw:
142
+ self.cmd_and_log([kw['path'],'--%s=%s'%(x,kw[y]),kw['package']])
143
+ if not'okmsg'in kw:
144
+ kw['okmsg']='yes'
145
+ self.define(self.have_define(kw.get('uselib_store',kw['package'])),1,0)
146
+ break
147
+ if'modversion'in kw:
148
+ version=self.cmd_and_log([kw['path'],'--modversion',kw['modversion']]).strip()
149
+ self.define('%s_VERSION'%Utils.quote_define_name(kw.get('uselib_store',kw['modversion'])),version)
150
+ return version
151
+ lst=[kw['path']]
152
+ defi=kw.get('define_variable',None)
153
+ if not defi:
154
+ defi=self.env.PKG_CONFIG_DEFINES or{}
155
+ for key,val in defi.items():
156
+ lst.append('--define-variable=%s=%s'%(key,val))
157
+ if kw['package']:
158
+ lst.extend(Utils.to_list(kw['package']))
159
+ if'variables'in kw:
160
+ env=kw.get('env',self.env)
161
+ uselib=kw.get('uselib_store',kw['package'].upper())
162
+ vars=Utils.to_list(kw['variables'])
163
+ for v in vars:
164
+ val=self.cmd_and_log(lst+['--variable='+v]).strip()
165
+ var='%s_%s'%(uselib,v)
166
+ env[var]=val
167
+ if not'okmsg'in kw:
168
+ kw['okmsg']='yes'
169
+ return
170
+ if'args'in kw:
171
+ lst+=Utils.to_list(kw['args'])
172
+ ret=self.cmd_and_log(lst)
173
+ if not'okmsg'in kw:
174
+ kw['okmsg']='yes'
175
+ self.define(self.have_define(kw.get('uselib_store',kw['package'])),1,0)
176
+ self.parse_flags(ret,kw.get('uselib_store',kw['package'].upper()),kw.get('env',self.env))
177
+ return ret
178
+ def check_cfg(self,*k,**kw):
179
+ if k:
180
+ lst=k[0].split()
181
+ kw['package']=lst[0]
182
+ kw['args']=' '.join(lst[1:])
183
+ self.validate_cfg(kw)
184
+ if'msg'in kw:
185
+ self.start_msg(kw['msg'])
186
+ ret=None
187
+ try:
188
+ ret=self.exec_cfg(kw)
189
+ except self.errors.WafError ,e:
190
+ if'errmsg'in kw:
191
+ self.end_msg(kw['errmsg'],'YELLOW')
192
+ if Logs.verbose>1:
193
+ raise
194
+ else:
195
+ self.fatal('The configuration failed')
196
+ else:
197
+ kw['success']=ret
198
+ if'okmsg'in kw:
199
+ self.end_msg(self.ret_msg(kw['okmsg'],kw))
200
+ return ret
201
+ def validate_c(self,kw):
202
+ if not'env'in kw:
203
+ kw['env']=self.env.derive()
204
+ env=kw['env']
205
+ if not'compiler'in kw and not'features'in kw:
206
+ kw['compiler']='c'
207
+ if env['CXX_NAME']and Task.classes.get('cxx',None):
208
+ kw['compiler']='cxx'
209
+ if not self.env['CXX']:
210
+ self.fatal('a c++ compiler is required')
211
+ else:
212
+ if not self.env['CC']:
213
+ self.fatal('a c compiler is required')
214
+ if not'compile_mode'in kw:
215
+ kw['compile_mode']='c'
216
+ if'cxx'in Utils.to_list(kw.get('features',[]))or kw.get('compiler','')=='cxx':
217
+ kw['compile_mode']='cxx'
218
+ if not'type'in kw:
219
+ kw['type']='cprogram'
220
+ if not'features'in kw:
221
+ kw['features']=[kw['compile_mode'],kw['type']]
222
+ else:
223
+ kw['features']=Utils.to_list(kw['features'])
224
+ if not'compile_filename'in kw:
225
+ kw['compile_filename']='test.c'+((kw['compile_mode']=='cxx')and'pp'or'')
226
+ def to_header(dct):
227
+ if'header_name'in dct:
228
+ dct=Utils.to_list(dct['header_name'])
229
+ return''.join(['#include <%s>\n'%x for x in dct])
230
+ return''
231
+ if'framework_name'in kw:
232
+ fwkname=kw['framework_name']
233
+ if not'uselib_store'in kw:
234
+ kw['uselib_store']=fwkname.upper()
235
+ if not kw.get('no_header',False):
236
+ if not'header_name'in kw:
237
+ kw['header_name']=[]
238
+ fwk='%s/%s.h'%(fwkname,fwkname)
239
+ if kw.get('remove_dot_h',None):
240
+ fwk=fwk[:-2]
241
+ kw['header_name']=Utils.to_list(kw['header_name'])+[fwk]
242
+ kw['msg']='Checking for framework %s'%fwkname
243
+ kw['framework']=fwkname
244
+ if'function_name'in kw:
245
+ fu=kw['function_name']
246
+ if not'msg'in kw:
247
+ kw['msg']='Checking for function %s'%fu
248
+ kw['code']=to_header(kw)+SNIP_FUNCTION%fu
249
+ if not'uselib_store'in kw:
250
+ kw['uselib_store']=fu.upper()
251
+ if not'define_name'in kw:
252
+ kw['define_name']=self.have_define(fu)
253
+ elif'type_name'in kw:
254
+ tu=kw['type_name']
255
+ if not'header_name'in kw:
256
+ kw['header_name']='stdint.h'
257
+ if'field_name'in kw:
258
+ field=kw['field_name']
259
+ kw['code']=to_header(kw)+SNIP_FIELD%{'type_name':tu,'field_name':field}
260
+ if not'msg'in kw:
261
+ kw['msg']='Checking for field %s in %s'%(field,tu)
262
+ if not'define_name'in kw:
263
+ kw['define_name']=self.have_define((tu+'_'+field).upper())
264
+ else:
265
+ kw['code']=to_header(kw)+SNIP_TYPE%{'type_name':tu}
266
+ if not'msg'in kw:
267
+ kw['msg']='Checking for type %s'%tu
268
+ if not'define_name'in kw:
269
+ kw['define_name']=self.have_define(tu.upper())
270
+ elif'header_name'in kw:
271
+ if not'msg'in kw:
272
+ kw['msg']='Checking for header %s'%kw['header_name']
273
+ l=Utils.to_list(kw['header_name'])
274
+ assert len(l)>0,'list of headers in header_name is empty'
275
+ kw['code']=to_header(kw)+SNIP_EMPTY_PROGRAM
276
+ if not'uselib_store'in kw:
277
+ kw['uselib_store']=l[0].upper()
278
+ if not'define_name'in kw:
279
+ kw['define_name']=self.have_define(l[0])
280
+ if'lib'in kw:
281
+ if not'msg'in kw:
282
+ kw['msg']='Checking for library %s'%kw['lib']
283
+ if not'uselib_store'in kw:
284
+ kw['uselib_store']=kw['lib'].upper()
285
+ if'stlib'in kw:
286
+ if not'msg'in kw:
287
+ kw['msg']='Checking for static library %s'%kw['stlib']
288
+ if not'uselib_store'in kw:
289
+ kw['uselib_store']=kw['stlib'].upper()
290
+ if'fragment'in kw:
291
+ kw['code']=kw['fragment']
292
+ if not'msg'in kw:
293
+ kw['msg']='Checking for code snippet'
294
+ if not'errmsg'in kw:
295
+ kw['errmsg']='no'
296
+ for(flagsname,flagstype)in[('cxxflags','compiler'),('cflags','compiler'),('linkflags','linker')]:
297
+ if flagsname in kw:
298
+ if not'msg'in kw:
299
+ kw['msg']='Checking for %s flags %s'%(flagstype,kw[flagsname])
300
+ if not'errmsg'in kw:
301
+ kw['errmsg']='no'
302
+ if not'execute'in kw:
303
+ kw['execute']=False
304
+ if kw['execute']:
305
+ kw['features'].append('test_exec')
306
+ if not'errmsg'in kw:
307
+ kw['errmsg']='not found'
308
+ if not'okmsg'in kw:
309
+ kw['okmsg']='yes'
310
+ if not'code'in kw:
311
+ kw['code']=SNIP_EMPTY_PROGRAM
312
+ if self.env[INCKEYS]:
313
+ kw['code']='\n'.join(['#include <%s>'%x for x in self.env[INCKEYS]])+'\n'+kw['code']
314
+ if not kw.get('success'):kw['success']=None
315
+ if'define_name'in kw:
316
+ self.undefine(kw['define_name'])
317
+ assert'msg'in kw,'invalid parameters, read http://freehackers.org/~tnagy/wafbook/single.html#config_helpers_c'
318
+ def post_check(self,*k,**kw):
319
+ is_success=0
320
+ if kw['execute']:
321
+ if kw['success']is not None:
322
+ if kw.get('define_ret',False):
323
+ is_success=kw['success']
324
+ else:
325
+ is_success=(kw['success']==0)
326
+ else:
327
+ is_success=(kw['success']==0)
328
+ if'define_name'in kw:
329
+ if'header_name'in kw or'function_name'in kw or'type_name'in kw or'fragment'in kw:
330
+ nm=kw['define_name']
331
+ if kw['execute']and kw.get('define_ret',None)and isinstance(is_success,str):
332
+ self.define(kw['define_name'],is_success,quote=kw.get('quote',1))
333
+ else:
334
+ self.define_cond(kw['define_name'],is_success)
335
+ else:
336
+ self.define_cond(kw['define_name'],is_success)
337
+ if'header_name'in kw:
338
+ if kw.get('auto_add_header_name',False):
339
+ self.env.append_value(INCKEYS,Utils.to_list(kw['header_name']))
340
+ if is_success and'uselib_store'in kw:
341
+ from waflib.Tools import ccroot
342
+ _vars=set([])
343
+ for x in kw['features']:
344
+ if x in ccroot.USELIB_VARS:
345
+ _vars|=ccroot.USELIB_VARS[x]
346
+ for k in _vars:
347
+ lk=k.lower()
348
+ if k=='INCLUDES':lk='includes'
349
+ if k=='DEFINES':lk='defines'
350
+ if lk in kw:
351
+ val=kw[lk]
352
+ if isinstance(val,str):
353
+ val=val.rstrip(os.path.sep)
354
+ self.env.append_unique(k+'_'+kw['uselib_store'],val)
355
+ return is_success
356
+ def check(self,*k,**kw):
357
+ self.validate_c(kw)
358
+ self.start_msg(kw['msg'])
359
+ ret=None
360
+ try:
361
+ ret=self.run_c_code(*k,**kw)
362
+ except self.errors.ConfigurationError ,e:
363
+ self.end_msg(kw['errmsg'],'YELLOW')
364
+ if Logs.verbose>1:
365
+ raise
366
+ else:
367
+ self.fatal('The configuration failed')
368
+ else:
369
+ kw['success']=ret
370
+ self.end_msg(self.ret_msg(kw['okmsg'],kw))
371
+ ret=self.post_check(*k,**kw)
372
+ if not ret:
373
+ self.fatal('The configuration failed %r'%ret)
374
+ return ret
375
+ class test_exec(Task.Task):
376
+ color='PINK'
377
+ def run(self):
378
+ if getattr(self.generator,'rpath',None):
379
+ if getattr(self.generator,'define_ret',False):
380
+ self.generator.bld.retval=self.generator.bld.cmd_and_log([self.inputs[0].abspath()])
381
+ else:
382
+ self.generator.bld.retval=self.generator.bld.exec_command([self.inputs[0].abspath()])
383
+ else:
384
+ env=self.env.env or{}
385
+ env.update(dict(os.environ))
386
+ for var in('LD_LIBRARY_PATH','DYLD_LIBRARY_PATH','PATH'):
387
+ env[var]=self.inputs[0].parent.abspath()+os.path.pathsep+env.get(var,'')
388
+ if getattr(self.generator,'define_ret',False):
389
+ self.generator.bld.retval=self.generator.bld.cmd_and_log([self.inputs[0].abspath()],env=env)
390
+ else:
391
+ self.generator.bld.retval=self.generator.bld.exec_command([self.inputs[0].abspath()],env=env)
392
+ def test_exec_fun(self):
393
+ self.create_task('test_exec',self.link_task.outputs[0])
394
+ CACHE_RESULTS=1
395
+ COMPILE_ERRORS=2
396
+ def run_c_code(self,*k,**kw):
397
+ lst=[str(v)for(p,v)in kw.items()if p!='env']
398
+ h=Utils.h_list(lst)
399
+ dir=self.bldnode.abspath()+os.sep+(not Utils.is_win32 and'.'or'')+'conf_check_'+Utils.to_hex(h)
400
+ try:
401
+ os.makedirs(dir)
402
+ except:
403
+ pass
404
+ try:
405
+ os.stat(dir)
406
+ except:
407
+ self.fatal('cannot use the configuration test folder %r'%dir)
408
+ cachemode=getattr(Options.options,'confcache',None)
409
+ if cachemode==CACHE_RESULTS:
410
+ try:
411
+ proj=ConfigSet.ConfigSet(os.path.join(dir,'cache_run_c_code'))
412
+ ret=proj['cache_run_c_code']
413
+ except:
414
+ pass
415
+ else:
416
+ if isinstance(ret,str)and ret.startswith('Test does not build'):
417
+ self.fatal(ret)
418
+ return ret
419
+ bdir=os.path.join(dir,'testbuild')
420
+ if not os.path.exists(bdir):
421
+ os.makedirs(bdir)
422
+ self.test_bld=bld=Build.BuildContext(top_dir=dir,out_dir=bdir)
423
+ bld.init_dirs()
424
+ bld.progress_bar=0
425
+ bld.targets='*'
426
+ if kw['compile_filename']:
427
+ node=bld.srcnode.make_node(kw['compile_filename'])
428
+ node.write(kw['code'])
429
+ bld.logger=self.logger
430
+ bld.all_envs.update(self.all_envs)
431
+ bld.env=kw['env']
432
+ o=bld(features=kw['features'],source=kw['compile_filename'],target='testprog')
433
+ for k,v in kw.items():
434
+ setattr(o,k,v)
435
+ self.to_log("==>\n%s\n<=="%kw['code'])
436
+ bld.targets='*'
437
+ ret=-1
438
+ try:
439
+ try:
440
+ bld.compile()
441
+ except Errors.WafError:
442
+ ret='Test does not build: %s'%Utils.ex_stack()
443
+ self.fatal(ret)
444
+ else:
445
+ ret=getattr(bld,'retval',0)
446
+ finally:
447
+ proj=ConfigSet.ConfigSet()
448
+ proj['cache_run_c_code']=ret
449
+ proj.store(os.path.join(dir,'cache_run_c_code'))
450
+ return ret
451
+ def check_cxx(self,*k,**kw):
452
+ kw['compiler']='cxx'
453
+ return self.check(*k,**kw)
454
+ def check_cc(self,*k,**kw):
455
+ kw['compiler']='c'
456
+ return self.check(*k,**kw)
457
+ def define(self,key,val,quote=True):
458
+ assert key and isinstance(key,str)
459
+ if isinstance(val,int)or isinstance(val,float):
460
+ s='%s=%s'
461
+ else:
462
+ s=quote and'%s="%s"'or'%s=%s'
463
+ app=s%(key,str(val))
464
+ ban=key+'='
465
+ lst=self.env['DEFINES']
466
+ for x in lst:
467
+ if x.startswith(ban):
468
+ lst[lst.index(x)]=app
469
+ break
470
+ else:
471
+ self.env.append_value('DEFINES',app)
472
+ self.env.append_unique(DEFKEYS,key)
473
+ def undefine(self,key):
474
+ assert key and isinstance(key,str)
475
+ ban=key+'='
476
+ lst=[x for x in self.env['DEFINES']if not x.startswith(ban)]
477
+ self.env['DEFINES']=lst
478
+ self.env.append_unique(DEFKEYS,key)
479
+ def define_cond(self,key,val):
480
+ assert key and isinstance(key,str)
481
+ if val:
482
+ self.define(key,1)
483
+ else:
484
+ self.undefine(key)
485
+ def is_defined(self,key):
486
+ assert key and isinstance(key,str)
487
+ ban=key+'='
488
+ for x in self.env['DEFINES']:
489
+ if x.startswith(ban):
490
+ return True
491
+ return False
492
+ def get_define(self,key):
493
+ assert key and isinstance(key,str)
494
+ ban=key+'='
495
+ for x in self.env['DEFINES']:
496
+ if x.startswith(ban):
497
+ return x[len(ban):]
498
+ return None
499
+ def have_define(self,key):
500
+ return self.__dict__.get('HAVE_PAT','HAVE_%s')%Utils.quote_define_name(key)
501
+ def write_config_header(self,configfile='',guard='',top=False,env=None,defines=True,headers=False,remove=True):
502
+ if not configfile:configfile=WAF_CONFIG_H
503
+ waf_guard=guard or'_%s_WAF'%Utils.quote_define_name(configfile)
504
+ node=top and self.bldnode or self.path.get_bld()
505
+ node=node.make_node(configfile)
506
+ node.parent.mkdir()
507
+ lst=['/* WARNING! All changes made to this file will be lost! */\n']
508
+ lst.append('#ifndef %s\n#define %s\n'%(waf_guard,waf_guard))
509
+ lst.append(self.get_config_header(defines,headers))
510
+ lst.append('\n#endif /* %s */\n'%waf_guard)
511
+ node.write('\n'.join(lst))
512
+ env=env or self.env
513
+ env.append_unique(Build.CFG_FILES,[node.abspath()])
514
+ if remove:
515
+ for key in self.env[DEFKEYS]:
516
+ self.undefine(key)
517
+ self.env[DEFKEYS]=[]
518
+ def get_config_header(self,defines=True,headers=False):
519
+ lst=[]
520
+ if headers:
521
+ for x in self.env[INCKEYS]:
522
+ lst.append('#include <%s>'%x)
523
+ if defines:
524
+ for x in self.env[DEFKEYS]:
525
+ if self.is_defined(x):
526
+ val=self.get_define(x)
527
+ lst.append('#define %s %s'%(x,val))
528
+ else:
529
+ lst.append('/* #undef %s */'%x)
530
+ return"\n".join(lst)
531
+ def cc_add_flags(conf):
532
+ conf.add_os_flags('CPPFLAGS','CFLAGS')
533
+ conf.add_os_flags('CFLAGS')
534
+ def cxx_add_flags(conf):
535
+ conf.add_os_flags('CPPFLAGS','CXXFLAGS')
536
+ conf.add_os_flags('CXXFLAGS')
537
+ def link_add_flags(conf):
538
+ conf.add_os_flags('LINKFLAGS')
539
+ conf.add_os_flags('LDFLAGS','LINKFLAGS')
540
+ def cc_load_tools(conf):
541
+ if not conf.env.DEST_OS:
542
+ conf.env.DEST_OS=Utils.unversioned_sys_platform()
543
+ conf.load('c')
544
+ def cxx_load_tools(conf):
545
+ if not conf.env.DEST_OS:
546
+ conf.env.DEST_OS=Utils.unversioned_sys_platform()
547
+ conf.load('cxx')
548
+ def get_cc_version(conf,cc,gcc=False,icc=False):
549
+ cmd=cc+['-dM','-E','-']
550
+ try:
551
+ p=Utils.subprocess.Popen(cmd,stdin=Utils.subprocess.PIPE,stdout=Utils.subprocess.PIPE,stderr=Utils.subprocess.PIPE)
552
+ p.stdin.write('\n')
553
+ out=p.communicate()[0]
554
+ except:
555
+ conf.fatal('could not determine the compiler version %r'%cmd)
556
+ if not isinstance(out,str):
557
+ out=out.decode(sys.stdout.encoding)
558
+ if gcc:
559
+ if out.find('__INTEL_COMPILER')>=0:
560
+ conf.fatal('The intel compiler pretends to be gcc')
561
+ if out.find('__GNUC__')<0:
562
+ conf.fatal('Could not determine the compiler type')
563
+ if icc and out.find('__INTEL_COMPILER')<0:
564
+ conf.fatal('Not icc/icpc')
565
+ k={}
566
+ if icc or gcc:
567
+ out=out.split('\n')
568
+ import shlex
569
+ for line in out:
570
+ lst=shlex.split(line)
571
+ if len(lst)>2:
572
+ key=lst[1]
573
+ val=lst[2]
574
+ k[key]=val
575
+ def isD(var):
576
+ return var in k
577
+ def isT(var):
578
+ return var in k and k[var]!='0'
579
+ if not conf.env.DEST_OS:
580
+ conf.env.DEST_OS=''
581
+ for i in MACRO_TO_DESTOS:
582
+ if isD(i):
583
+ conf.env.DEST_OS=MACRO_TO_DESTOS[i]
584
+ break
585
+ else:
586
+ if isD('__APPLE__')and isD('__MACH__'):
587
+ conf.env.DEST_OS='darwin'
588
+ elif isD('__unix__'):
589
+ conf.env.DEST_OS='generic'
590
+ if isD('__ELF__'):
591
+ conf.env.DEST_BINFMT='elf'
592
+ elif isD('__WINNT__')or isD('__CYGWIN__'):
593
+ conf.env.DEST_BINFMT='pe'
594
+ conf.env.LIBDIR=conf.env['PREFIX']+'/bin'
595
+ elif isD('__APPLE__'):
596
+ conf.env.DEST_BINFMT='mac-o'
597
+ if not conf.env.DEST_BINFMT:
598
+ conf.env.DEST_BINFMT=Utils.destos_to_binfmt(conf.env.DEST_OS)
599
+ for i in MACRO_TO_DEST_CPU:
600
+ if isD(i):
601
+ conf.env.DEST_CPU=MACRO_TO_DEST_CPU[i]
602
+ break
603
+ Logs.debug('ccroot: dest platform: '+' '.join([conf.env[x]or'?'for x in('DEST_OS','DEST_BINFMT','DEST_CPU')]))
604
+ if icc:
605
+ ver=k['__INTEL_COMPILER']
606
+ conf.env['CC_VERSION']=(ver[:-2],ver[-2],ver[-1])
607
+ else:
608
+ conf.env['CC_VERSION']=(k['__GNUC__'],k['__GNUC_MINOR__'],k['__GNUC_PATCHLEVEL__'])
609
+ return k
610
+ def get_xlc_version(conf,cc):
611
+ version_re=re.compile(r"IBM XL C/C\+\+.*, V(?P<major>\d*)\.(?P<minor>\d*)",re.I).search
612
+ cmd=cc+['-qversion']
613
+ try:
614
+ out,err=conf.cmd_and_log(cmd,output=0)
615
+ except Errors.WafError:
616
+ conf.fatal('Could not find xlc %r'%cmd)
617
+ if out:match=version_re(out)
618
+ else:match=version_re(err)
619
+ if not match:
620
+ conf.fatal('Could not determine the XLC version.')
621
+ k=match.groupdict()
622
+ conf.env['CC_VERSION']=(k['major'],k['minor'])
623
+ def add_as_needed(self):
624
+ if self.env.DEST_BINFMT=='elf'and'gcc'in(self.env.CXX_NAME,self.env.CC_NAME):
625
+ self.env.append_unique('LINKFLAGS','--as-needed')
626
+ class cfgtask(Task.TaskBase):
627
+ def display(self):
628
+ return''
629
+ def runnable_status(self):
630
+ return Task.RUN_ME
631
+ def run(self):
632
+ conf=self.conf
633
+ bld=Build.BuildContext(top_dir=conf.srcnode.abspath(),out_dir=conf.bldnode.abspath())
634
+ bld.env=conf.env
635
+ bld.init_dirs()
636
+ bld.in_msg=1
637
+ bld.logger=self.logger
638
+ try:
639
+ bld.check(**self.args)
640
+ except:
641
+ return 1
642
+ def multicheck(self,*k,**kw):
643
+ self.start_msg(kw.get('msg','Executing %d configuration tests'%len(k)))
644
+ class par(object):
645
+ def __init__(self):
646
+ self.keep=False
647
+ self.cache_global=Options.cache_global
648
+ self.nocache=Options.options.nocache
649
+ self.returned_tasks=[]
650
+ def total(self):
651
+ return len(tasks)
652
+ def to_log(self,*k,**kw):
653
+ return
654
+ bld=par()
655
+ tasks=[]
656
+ for dct in k:
657
+ x=cfgtask(bld=bld)
658
+ tasks.append(x)
659
+ x.args=dct
660
+ x.bld=bld
661
+ x.conf=self
662
+ x.args=dct
663
+ x.logger=Logs.make_mem_logger(str(id(x)),self.logger)
664
+ def it():
665
+ yield tasks
666
+ while 1:
667
+ yield[]
668
+ p=Runner.Parallel(bld,Options.options.jobs)
669
+ p.biter=it()
670
+ p.start()
671
+ for x in tasks:
672
+ x.logger.memhandler.flush()
673
+ for x in tasks:
674
+ if x.hasrun!=Task.SUCCESS:
675
+ self.end_msg(kw.get('errmsg','no'),color='YELLOW')
676
+ self.fatal(kw.get('fatalmsg',None)or'One of the tests has failed, see the config.log for more information')
677
+ self.end_msg('ok')
678
+
679
+ conf(parse_flags)
680
+ conf(ret_msg)
681
+ conf(validate_cfg)
682
+ conf(exec_cfg)
683
+ conf(check_cfg)
684
+ conf(validate_c)
685
+ conf(post_check)
686
+ conf(check)
687
+ feature('test_exec')(test_exec_fun)
688
+ after_method('apply_link')(test_exec_fun)
689
+ conf(run_c_code)
690
+ conf(check_cxx)
691
+ conf(check_cc)
692
+ conf(define)
693
+ conf(undefine)
694
+ conf(define_cond)
695
+ conf(is_defined)
696
+ conf(get_define)
697
+ conf(have_define)
698
+ conf(write_config_header)
699
+ conf(get_config_header)
700
+ conf(cc_add_flags)
701
+ conf(cxx_add_flags)
702
+ conf(link_add_flags)
703
+ conf(cc_load_tools)
704
+ conf(cxx_load_tools)
705
+ conf(get_cc_version)
706
+ conf(get_xlc_version)
707
+ conf(add_as_needed)
708
+ conf(multicheck)