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,30 @@
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
+ from waflib import Task,Errors
6
+ from waflib.TaskGen import taskgen_method,before_method
7
+ def add_dbus_file(self,filename,prefix,mode):
8
+ if not hasattr(self,'dbus_lst'):
9
+ self.dbus_lst=[]
10
+ if not'process_dbus'in self.meths:
11
+ self.meths.append('process_dbus')
12
+ self.dbus_lst.append([filename,prefix,mode])
13
+ def process_dbus(self):
14
+ for filename,prefix,mode in getattr(self,'dbus_lst',[]):
15
+ node=self.path.find_resource(filename)
16
+ if not node:
17
+ raise Errors.WafError('file not found '+filename)
18
+ tsk=self.create_task('dbus_binding_tool',node,node.change_ext('.h'))
19
+ tsk.env.DBUS_BINDING_TOOL_PREFIX=prefix
20
+ tsk.env.DBUS_BINDING_TOOL_MODE=mode
21
+ class dbus_binding_tool(Task.Task):
22
+ color='BLUE'
23
+ ext_out=['.h']
24
+ run_str='${DBUS_BINDING_TOOL} --prefix=${DBUS_BINDING_TOOL_PREFIX} --mode=${DBUS_BINDING_TOOL_MODE} --output=${TGT} ${SRC}'
25
+ shell=True
26
+ def configure(conf):
27
+ dbus_binding_tool=conf.find_program('dbus-binding-tool',var='DBUS_BINDING_TOOL')
28
+
29
+ taskgen_method(add_dbus_file)
30
+ before_method('apply_core')(process_dbus)
@@ -0,0 +1,43 @@
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
+ from waflib.Tools import ar,d
7
+ from waflib.Configure import conf
8
+ def find_dmd(conf):
9
+ conf.find_program(['dmd','ldc'],var='D')
10
+ def common_flags_ldc(conf):
11
+ v=conf.env
12
+ v['DFLAGS']=['-d-version=Posix']
13
+ v['LINKFLAGS']=[]
14
+ v['DFLAGS_dshlib']=['-relocation-model=pic']
15
+ def common_flags_dmd(conf):
16
+ v=conf.env
17
+ v['D_SRC_F']=['-c']
18
+ v['D_TGT_F']='-of%s'
19
+ v['D_LINKER']=v['D']
20
+ v['DLNK_SRC_F']=''
21
+ v['DLNK_TGT_F']='-of%s'
22
+ v['DINC_ST']='-I%s'
23
+ v['DSHLIB_MARKER']=v['DSTLIB_MARKER']=''
24
+ v['DSTLIB_ST']=v['DSHLIB_ST']='-L-l%s'
25
+ v['DSTLIBPATH_ST']=v['DLIBPATH_ST']='-L-L%s'
26
+ v['LINKFLAGS_dprogram']=['-quiet']
27
+ v['DFLAGS_dshlib']=['-fPIC']
28
+ v['LINKFLAGS_dshlib']=['-L-shared']
29
+ v['DHEADER_ext']='.di'
30
+ v.DFLAGS_d_with_header=['-H','-Hf']
31
+ v['D_HDR_F']='%s'
32
+ def configure(conf):
33
+ conf.find_dmd()
34
+ conf.load('ar')
35
+ conf.load('d')
36
+ conf.common_flags_dmd()
37
+ conf.d_platform_flags()
38
+ if str(conf.env.D).find('ldc')>-1:
39
+ conf.common_flags_ldc()
40
+
41
+ conf(find_dmd)
42
+ conf(common_flags_ldc)
43
+ conf(common_flags_dmd)
@@ -0,0 +1,153 @@
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
+ typos={'feature':'features','sources':'source','targets':'target','include':'includes','export_include':'export_includes','define':'defines','importpath':'includes','installpath':'install_path',}
8
+ meths_typos=['__call__','program','shlib','stlib','objects']
9
+ from waflib import Logs,Build,Node,Task,TaskGen,ConfigSet,Errors,Utils
10
+ import waflib.Tools.ccroot
11
+ def check_same_targets(self):
12
+ mp=Utils.defaultdict(list)
13
+ uids={}
14
+ def check_task(tsk):
15
+ if not isinstance(tsk,Task.Task):
16
+ return
17
+ for node in tsk.outputs:
18
+ mp[node].append(tsk)
19
+ try:
20
+ uids[tsk.uid()].append(tsk)
21
+ except:
22
+ uids[tsk.uid()]=[tsk]
23
+ for g in self.groups:
24
+ for tg in g:
25
+ try:
26
+ for tsk in tg.tasks:
27
+ check_task(tsk)
28
+ except AttributeError:
29
+ check_task(tg)
30
+ dupe=False
31
+ for(k,v)in mp.items():
32
+ if len(v)>1:
33
+ dupe=True
34
+ msg='* Node %r is created by more than once%s. The task generators are:'%(k,Logs.verbose==1 and" (full message on 'waf -v -v')"or"")
35
+ Logs.error(msg)
36
+ for x in v:
37
+ if Logs.verbose>1:
38
+ Logs.error(' %d. %r'%(1+v.index(x),x.generator))
39
+ else:
40
+ Logs.error(' %d. %r in %r'%(1+v.index(x),x.generator.name,getattr(x.generator,'path',None)))
41
+ if not dupe:
42
+ for(k,v)in uids.items():
43
+ if len(v)>1:
44
+ Logs.error('* Several tasks use the same identifier. Please check the information on\n http://waf.googlecode.com/git/docs/apidocs/Task.html#waflib.Task.Task.uid')
45
+ for tsk in v:
46
+ Logs.error(' - object %r (%r) defined in %r'%(tsk.__class__.__name__,tsk,tsk.generator))
47
+ def check_invalid_constraints(self):
48
+ feat=set([])
49
+ for x in list(TaskGen.feats.values()):
50
+ feat.union(set(x))
51
+ for(x,y)in TaskGen.task_gen.prec.items():
52
+ feat.add(x)
53
+ feat.union(set(y))
54
+ ext=set([])
55
+ for x in TaskGen.task_gen.mappings.values():
56
+ ext.add(x.__name__)
57
+ invalid=ext&feat
58
+ if invalid:
59
+ Logs.error('The methods %r have invalid annotations: @extension <-> @feature/@before_method/@after_method'%list(invalid))
60
+ for cls in list(Task.classes.values()):
61
+ for x in('before','after'):
62
+ for y in Utils.to_list(getattr(cls,x,[])):
63
+ if not Task.classes.get(y,None):
64
+ Logs.error('Erroneous order constraint %r=%r on task class %r'%(x,y,cls.__name__))
65
+ def replace(m):
66
+ oldcall=getattr(Build.BuildContext,m)
67
+ def call(self,*k,**kw):
68
+ ret=oldcall(self,*k,**kw)
69
+ for x in typos:
70
+ if x in kw:
71
+ err=True
72
+ Logs.error('Fix the typo %r -> %r on %r'%(x,typos[x],ret))
73
+ return ret
74
+ setattr(Build.BuildContext,m,call)
75
+ def enhance_lib():
76
+ for m in meths_typos:
77
+ replace(m)
78
+ old_ant_glob=Node.Node.ant_glob
79
+ def ant_glob(self,*k,**kw):
80
+ if k:
81
+ lst=Utils.to_list(k[0])
82
+ for pat in lst:
83
+ if'..'in pat.split('/'):
84
+ Logs.error("In ant_glob pattern %r: '..' means 'two dots', not 'parent directory'"%k[0])
85
+ return old_ant_glob(self,*k,**kw)
86
+ Node.Node.ant_glob=ant_glob
87
+ old=Task.is_before
88
+ def is_before(t1,t2):
89
+ ret=old(t1,t2)
90
+ if ret and old(t2,t1):
91
+ Logs.error('Contradictory order constraints in classes %r %r'%(t1,t2))
92
+ return ret
93
+ Task.is_before=is_before
94
+ def check_err_features(self):
95
+ lst=self.to_list(self.features)
96
+ if'shlib'in lst:
97
+ Logs.error('feature shlib -> cshlib, dshlib or cxxshlib')
98
+ for x in('c','cxx','d','fc'):
99
+ if not x in lst and lst and lst[0]in[x+y for y in('program','shlib','stlib')]:
100
+ Logs.error('%r features is probably missing %r'%(self,x))
101
+ TaskGen.feature('*')(check_err_features)
102
+ def check_err_order(self):
103
+ if not hasattr(self,'rule'):
104
+ for x in('before','after','ext_in','ext_out'):
105
+ if hasattr(self,x):
106
+ Logs.warn('Erroneous order constraint %r on non-rule based task generator %r'%(x,self))
107
+ else:
108
+ for x in('before','after'):
109
+ for y in self.to_list(getattr(self,x,[])):
110
+ if not Task.classes.get(y,None):
111
+ Logs.error('Erroneous order constraint %s=%r on %r'%(x,y,self))
112
+ TaskGen.feature('*')(check_err_order)
113
+ def check_compile(self):
114
+ check_invalid_constraints(self)
115
+ try:
116
+ ret=self.orig_compile()
117
+ finally:
118
+ check_same_targets(self)
119
+ return ret
120
+ Build.BuildContext.orig_compile=Build.BuildContext.compile
121
+ Build.BuildContext.compile=check_compile
122
+ def use_rec(self,name,**kw):
123
+ try:
124
+ y=self.bld.get_tgen_by_name(name)
125
+ except Errors.WafError:
126
+ pass
127
+ else:
128
+ idx=self.bld.get_group_idx(self)
129
+ odx=self.bld.get_group_idx(y)
130
+ if odx>idx:
131
+ msg="Invalid 'use' across build groups:"
132
+ if Logs.verbose>1:
133
+ msg+='\n target %r\n uses:\n %r'%(self,y)
134
+ else:
135
+ msg+=" %r uses %r (try 'waf -v -v' for the full error)"%(self.name,name)
136
+ raise Errors.WafError(msg)
137
+ self.orig_use_rec(name,**kw)
138
+ TaskGen.task_gen.orig_use_rec=TaskGen.task_gen.use_rec
139
+ TaskGen.task_gen.use_rec=use_rec
140
+ def getattri(self,name,default=None):
141
+ if name=='append'or name=='add':
142
+ raise Errors.WafError('env.append and env.add do not exist: use env.append_value/env.append_unique')
143
+ elif name=='prepend':
144
+ raise Errors.WafError('env.prepend does not exist: use env.prepend_value')
145
+ if name in self.__slots__:
146
+ return object.__getattr__(self,name,default)
147
+ else:
148
+ return self[name]
149
+ ConfigSet.ConfigSet.__getattr__=getattri
150
+ def options(opt):
151
+ enhance_lib()
152
+ def configure(conf):
153
+ pass
@@ -0,0 +1,123 @@
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 re
8
+ from waflib import Utils,Task,TaskGen,Logs
9
+ from waflib.Tools import ccroot,fc_config,fc_scan
10
+ from waflib.TaskGen import feature,before_method,after_method,extension
11
+ from waflib.Configure import conf
12
+ ccroot.USELIB_VARS['fc']=set(['FCFLAGS','DEFINES','INCLUDES'])
13
+ ccroot.USELIB_VARS['fcprogram_test']=ccroot.USELIB_VARS['fcprogram']=set(['LIB','STLIB','LIBPATH','STLIBPATH','LINKFLAGS','RPATH','LINKDEPS'])
14
+ ccroot.USELIB_VARS['fcshlib']=set(['LIB','STLIB','LIBPATH','STLIBPATH','LINKFLAGS','RPATH','LINKDEPS'])
15
+ ccroot.USELIB_VARS['fcstlib']=set(['ARFLAGS','LINKDEPS'])
16
+ def dummy(self):
17
+ pass
18
+ def fc_hook(self,node):
19
+ return self.create_compiled_task('fc',node)
20
+ def modfile(conf,name):
21
+ return{'lower':name.lower()+'.mod','lower.MOD':name.upper()+'.MOD','UPPER.mod':name.upper()+'.mod','UPPER':name.upper()+'.MOD'}[conf.env.FC_MOD_CAPITALIZATION or'lower']
22
+ def get_fortran_tasks(tsk):
23
+ bld=tsk.generator.bld
24
+ tasks=bld.get_tasks_group(bld.get_group_idx(tsk.generator))
25
+ return[x for x in tasks if isinstance(x,fc)and not getattr(x,'nomod',None)and not getattr(x,'mod_fortran_done',None)]
26
+ class fc(Task.Task):
27
+ color='GREEN'
28
+ run_str='${FC} ${FCFLAGS} ${FCINCPATH_ST:INCPATHS} ${FCDEFINES_ST:DEFINES} ${_FCMODOUTFLAGS} ${FC_TGT_F}${TGT[0].abspath()} ${FC_SRC_F}${SRC[0].abspath()}'
29
+ vars=["FORTRANMODPATHFLAG"]
30
+ def scan(self):
31
+ tmp=fc_scan.fortran_parser(self.generator.includes_nodes)
32
+ tmp.task=self
33
+ tmp.start(self.inputs[0])
34
+ if Logs.verbose:
35
+ Logs.debug('deps: deps for %r: %r; unresolved %r'%(self.inputs,tmp.nodes,tmp.names))
36
+ return(tmp.nodes,tmp.names)
37
+ def runnable_status(self):
38
+ if getattr(self,'mod_fortran_done',None):
39
+ return super(fc,self).runnable_status()
40
+ bld=self.generator.bld
41
+ lst=get_fortran_tasks(self)
42
+ for tsk in lst:
43
+ tsk.mod_fortran_done=True
44
+ for tsk in lst:
45
+ ret=tsk.runnable_status()
46
+ if ret==Task.ASK_LATER:
47
+ for x in lst:
48
+ x.mod_fortran_done=None
49
+ return Task.ASK_LATER
50
+ ins=Utils.defaultdict(set)
51
+ outs=Utils.defaultdict(set)
52
+ for tsk in lst:
53
+ key=tsk.uid()
54
+ for x in bld.raw_deps[key]:
55
+ if x.startswith('MOD@'):
56
+ name=bld.modfile(x.replace('MOD@',''))
57
+ node=bld.srcnode.find_or_declare(name)
58
+ tsk.set_outputs(node)
59
+ outs[id(node)].add(tsk)
60
+ for tsk in lst:
61
+ key=tsk.uid()
62
+ for x in bld.raw_deps[key]:
63
+ if x.startswith('USE@'):
64
+ name=bld.modfile(x.replace('USE@',''))
65
+ node=bld.srcnode.find_resource(name)
66
+ if node and node not in tsk.outputs:
67
+ if not node in bld.node_deps[key]:
68
+ bld.node_deps[key].append(node)
69
+ ins[id(node)].add(tsk)
70
+ for k in ins.keys():
71
+ for a in ins[k]:
72
+ a.run_after.update(outs[k])
73
+ tmp=[]
74
+ for t in outs[k]:
75
+ tmp.extend(t.outputs)
76
+ a.dep_nodes.extend(tmp)
77
+ try:
78
+ a.dep_nodes.sort(key=lambda x:x.abspath())
79
+ except:
80
+ a.dep_nodes.sort(lambda x,y:cmp(x.abspath(),y.abspath()))
81
+ for tsk in lst:
82
+ try:
83
+ delattr(tsk,'cache_sig')
84
+ except AttributeError:
85
+ pass
86
+ return super(fc,self).runnable_status()
87
+ class fcprogram(ccroot.link_task):
88
+ color='YELLOW'
89
+ run_str='${FC} ${LINKFLAGS} ${FCLNK_SRC_F}${SRC} ${FCLNK_TGT_F}${TGT[0].abspath()} ${RPATH_ST:RPATH} ${FCSTLIB_MARKER} ${FCSTLIBPATH_ST:STLIBPATH} ${FCSTLIB_ST:STLIB} ${FCSHLIB_MARKER} ${FCLIBPATH_ST:LIBPATH} ${FCLIB_ST:LIB}'
90
+ inst_to='${BINDIR}'
91
+ chmod=Utils.O755
92
+ class fcshlib(fcprogram):
93
+ inst_to='${LIBDIR}'
94
+ class fcprogram_test(fcprogram):
95
+ def can_retrieve_cache(self):
96
+ return False
97
+ def runnable_status(self):
98
+ ret=super(fcprogram_test,self).runnable_status()
99
+ if ret==Task.SKIP_ME:
100
+ ret=Task.RUN_ME
101
+ return ret
102
+ def exec_command(self,cmd,**kw):
103
+ bld=self.generator.bld
104
+ kw['shell']=isinstance(cmd,str)
105
+ kw['stdout']=kw['stderr']=Utils.subprocess.PIPE
106
+ kw['cwd']=bld.variant_dir
107
+ bld.out=bld.err=''
108
+ bld.to_log('command: %s\n'%cmd)
109
+ kw['output']=0
110
+ try:
111
+ (bld.out,bld.err)=bld.cmd_and_log(cmd,**kw)
112
+ except Exception ,e:
113
+ return-1
114
+ if bld.out:
115
+ bld.to_log("out: %s\n"%bld.out)
116
+ if bld.err:
117
+ bld.to_log("err: %s\n"%bld.err)
118
+ class fcstlib(ccroot.stlink_task):
119
+ pass
120
+
121
+ feature('fcprogram','fcshlib','fcstlib','fcprogram_test')(dummy)
122
+ extension('.f','.f90','.F','.F90','.for','.FOR')(fc_hook)
123
+ conf(modfile)
@@ -0,0 +1,271 @@
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 re,shutil,os,sys,string,shlex
6
+ from waflib.Configure import conf
7
+ from waflib.TaskGen import feature,after_method,before_method
8
+ from waflib import Build,Utils
9
+ FC_FRAGMENT=' program main\n end program main\n'
10
+ FC_FRAGMENT2=' PROGRAM MAIN\n END\n'
11
+ def fc_flags(conf):
12
+ v=conf.env
13
+ v['FC_SRC_F']=[]
14
+ v['FC_TGT_F']=['-c','-o']
15
+ v['FCINCPATH_ST']='-I%s'
16
+ v['FCDEFINES_ST']='-D%s'
17
+ if not v['LINK_FC']:v['LINK_FC']=v['FC']
18
+ v['FCLNK_SRC_F']=[]
19
+ v['FCLNK_TGT_F']=['-o']
20
+ v['FCFLAGS_fcshlib']=['-fpic']
21
+ v['LINKFLAGS_fcshlib']=['-shared']
22
+ v['fcshlib_PATTERN']='lib%s.so'
23
+ v['fcstlib_PATTERN']='lib%s.a'
24
+ v['FCLIB_ST']='-l%s'
25
+ v['FCLIBPATH_ST']='-L%s'
26
+ v['FCSTLIB_ST']='-l%s'
27
+ v['FCSTLIBPATH_ST']='-L%s'
28
+ v['FCSTLIB_MARKER']='-Wl,-Bstatic'
29
+ v['FCSHLIB_MARKER']='-Wl,-Bdynamic'
30
+ v['SONAME_ST']='-Wl,-h,%s'
31
+ def check_fortran(self,*k,**kw):
32
+ self.check_cc(fragment=FC_FRAGMENT,compile_filename='test.f',features='fc fcprogram',msg='Compiling a simple fortran app')
33
+ def check_fc(self,*k,**kw):
34
+ kw['compiler']='fc'
35
+ if not'compile_mode'in kw:
36
+ kw['compile_mode']='fc'
37
+ if not'type'in kw:
38
+ kw['type']='fcprogram'
39
+ if not'compile_filename'in kw:
40
+ kw['compile_filename']='test.f90'
41
+ if not'code'in kw:
42
+ kw['code']=FC_FRAGMENT
43
+ return self.check(*k,**kw)
44
+ def fortran_modifier_darwin(conf):
45
+ v=conf.env
46
+ v['FCFLAGS_fcshlib']=['-fPIC','-compatibility_version','1','-current_version','1']
47
+ v['LINKFLAGS_fcshlib']=['-dynamiclib']
48
+ v['fcshlib_PATTERN']='lib%s.dylib'
49
+ v['FRAMEWORKPATH_ST']='-F%s'
50
+ v['FRAMEWORK_ST']='-framework %s'
51
+ v['LINKFLAGS_fcstlib']=[]
52
+ v['FCSHLIB_MARKER']=''
53
+ v['FCSTLIB_MARKER']=''
54
+ v['SONAME_ST']=''
55
+ def fortran_modifier_win32(conf):
56
+ v=conf.env
57
+ v['fcprogram_PATTERN']=v['fcprogram_test_PATTERN']='%s.exe'
58
+ v['fcshlib_PATTERN']='%s.dll'
59
+ v['implib_PATTERN']='lib%s.dll.a'
60
+ v['IMPLIB_ST']='-Wl,--out-implib,%s'
61
+ v['FCFLAGS_fcshlib']=[]
62
+ v.append_value('FCFLAGS_fcshlib',['-DDLL_EXPORT'])
63
+ v.append_value('LINKFLAGS',['-Wl,--enable-auto-import'])
64
+ def fortran_modifier_cygwin(conf):
65
+ fortran_modifier_win32(conf)
66
+ v=conf.env
67
+ v['fcshlib_PATTERN']='cyg%s.dll'
68
+ v.append_value('LINKFLAGS_fcshlib',['-Wl,--enable-auto-image-base'])
69
+ v['FCFLAGS_fcshlib']=[]
70
+ def check_fortran_dummy_main(self,*k,**kw):
71
+ if not self.env.CC:
72
+ self.fatal('A c compiler is required for check_fortran_dummy_main')
73
+ lst=['MAIN__','__MAIN','_MAIN','MAIN_','MAIN']
74
+ lst.extend([m.lower()for m in lst])
75
+ lst.append('')
76
+ self.start_msg('Detecting whether we need a dummy main')
77
+ for main in lst:
78
+ kw['fortran_main']=main
79
+ try:
80
+ self.check_cc(fragment='int %s() { return 0; }\n'%(main or'test'),features='c fcprogram',mandatory=True)
81
+ if not main:
82
+ self.env.FC_MAIN=-1
83
+ self.end_msg('no')
84
+ else:
85
+ self.env.FC_MAIN=main
86
+ self.end_msg('yes %s'%main)
87
+ break
88
+ except self.errors.ConfigurationError:
89
+ pass
90
+ else:
91
+ self.end_msg('not found')
92
+ self.fatal('could not detect whether fortran requires a dummy main, see the config.log')
93
+ GCC_DRIVER_LINE=re.compile('^Driving:')
94
+ POSIX_STATIC_EXT=re.compile('\S+\.a')
95
+ POSIX_LIB_FLAGS=re.compile('-l\S+')
96
+ def is_link_verbose(self,txt):
97
+ assert isinstance(txt,str)
98
+ for line in txt.splitlines():
99
+ if not GCC_DRIVER_LINE.search(line):
100
+ if POSIX_STATIC_EXT.search(line)or POSIX_LIB_FLAGS.search(line):
101
+ return True
102
+ return False
103
+ def check_fortran_verbose_flag(self,*k,**kw):
104
+ self.start_msg('fortran link verbose flag')
105
+ for x in['-v','--verbose','-verbose','-V']:
106
+ try:
107
+ self.check_cc(features='fc fcprogram_test',fragment=FC_FRAGMENT2,compile_filename='test.f',linkflags=[x],mandatory=True)
108
+ except self.errors.ConfigurationError:
109
+ pass
110
+ else:
111
+ if self.is_link_verbose(self.test_bld.err)or self.is_link_verbose(self.test_bld.out):
112
+ self.end_msg(x)
113
+ break
114
+ else:
115
+ self.end_msg('failure')
116
+ self.fatal('Could not obtain the fortran link verbose flag (see config.log)')
117
+ self.env.FC_VERBOSE_FLAG=x
118
+ return x
119
+ LINKFLAGS_IGNORED=[r'-lang*',r'-lcrt[a-zA-Z0-9\.]*\.o',r'-lc$',r'-lSystem',r'-libmil',r'-LIST:*',r'-LNO:*']
120
+ if os.name=='nt':
121
+ LINKFLAGS_IGNORED.extend([r'-lfrt*',r'-luser32',r'-lkernel32',r'-ladvapi32',r'-lmsvcrt',r'-lshell32',r'-lmingw',r'-lmoldname'])
122
+ else:
123
+ LINKFLAGS_IGNORED.append(r'-lgcc*')
124
+ RLINKFLAGS_IGNORED=[re.compile(f)for f in LINKFLAGS_IGNORED]
125
+ def _match_ignore(line):
126
+ for i in RLINKFLAGS_IGNORED:
127
+ if i.match(line):
128
+ return True
129
+ return False
130
+ def parse_fortran_link(lines):
131
+ final_flags=[]
132
+ for line in lines:
133
+ if not GCC_DRIVER_LINE.match(line):
134
+ _parse_flink_line(line,final_flags)
135
+ return final_flags
136
+ SPACE_OPTS=re.compile('^-[LRuYz]$')
137
+ NOSPACE_OPTS=re.compile('^-[RL]')
138
+ def _parse_flink_line(line,final_flags):
139
+ lexer=shlex.shlex(line,posix=True)
140
+ lexer.whitespace_split=True
141
+ t=lexer.get_token()
142
+ tmp_flags=[]
143
+ while t:
144
+ def parse(token):
145
+ if _match_ignore(token):
146
+ pass
147
+ elif token.startswith('-lkernel32')and sys.platform=='cygwin':
148
+ tmp_flags.append(token)
149
+ elif SPACE_OPTS.match(token):
150
+ t=lexer.get_token()
151
+ if t.startswith('P,'):
152
+ t=t[2:]
153
+ for opt in t.split(os.pathsep):
154
+ tmp_flags.append('-L%s'%opt)
155
+ elif NOSPACE_OPTS.match(token):
156
+ tmp_flags.append(token)
157
+ elif POSIX_LIB_FLAGS.match(token):
158
+ tmp_flags.append(token)
159
+ else:
160
+ pass
161
+ t=lexer.get_token()
162
+ return t
163
+ t=parse(t)
164
+ final_flags.extend(tmp_flags)
165
+ return final_flags
166
+ def check_fortran_clib(self,autoadd=True,*k,**kw):
167
+ if not self.env.FC_VERBOSE_FLAG:
168
+ self.fatal('env.FC_VERBOSE_FLAG is not set: execute check_fortran_verbose_flag?')
169
+ self.start_msg('Getting fortran runtime link flags')
170
+ try:
171
+ self.check_cc(fragment=FC_FRAGMENT2,compile_filename='test.f',features='fc fcprogram_test',linkflags=[self.env.FC_VERBOSE_FLAG])
172
+ except:
173
+ self.end_msg(False)
174
+ if kw.get('mandatory',True):
175
+ conf.fatal('Could not find the c library flags')
176
+ else:
177
+ out=self.test_bld.err
178
+ flags=parse_fortran_link(out.splitlines())
179
+ self.end_msg('ok (%s)'%' '.join(flags))
180
+ self.env.LINKFLAGS_CLIB=flags
181
+ return flags
182
+ return[]
183
+ def getoutput(conf,cmd,stdin=False):
184
+ try:
185
+ if stdin:
186
+ stdin=Utils.subprocess.PIPE
187
+ else:
188
+ stdin=None
189
+ p=Utils.subprocess.Popen(cmd,stdin=stdin,stdout=Utils.subprocess.PIPE,stderr=Utils.subprocess.PIPE)
190
+ if stdin:
191
+ p.stdin.write('\n')
192
+ stdout,stderr=p.communicate()
193
+ except:
194
+ conf.fatal('could not determine the compiler version %r'%cmd)
195
+ else:
196
+ if not isinstance(stdout,str):
197
+ stdout=stdout.decode(sys.stdout.encoding)
198
+ if not isinstance(stderr,str):
199
+ stderr=stderr.decode(sys.stdout.encoding)
200
+ return stdout,stderr
201
+ ROUTINES_CODE="""\
202
+ subroutine foobar()
203
+ return
204
+ end
205
+ subroutine foo_bar()
206
+ return
207
+ end
208
+ """
209
+ MAIN_CODE="""
210
+ void %(dummy_func_nounder)s(void);
211
+ void %(dummy_func_under)s(void);
212
+ int %(main_func_name)s() {
213
+ %(dummy_func_nounder)s();
214
+ %(dummy_func_under)s();
215
+ return 0;
216
+ }
217
+ """
218
+ def link_main_routines_tg_method(self):
219
+ def write_test_file(task):
220
+ task.outputs[0].write(task.generator.code)
221
+ bld=self.bld
222
+ bld(rule=write_test_file,target='main.c',code=MAIN_CODE%self.__dict__)
223
+ bld(rule=write_test_file,target='test.f',code=ROUTINES_CODE)
224
+ bld(features='fc fcstlib',source='test.f',target='test')
225
+ bld(features='c fcprogram',source='main.c',target='app',use='test')
226
+ def mangling_schemes():
227
+ for u in['_','']:
228
+ for du in['','_']:
229
+ for c in["lower","upper"]:
230
+ yield(u,du,c)
231
+ def mangle_name(u,du,c,name):
232
+ return getattr(name,c)()+u+(name.find('_')!=-1 and du or'')
233
+ def check_fortran_mangling(self,*k,**kw):
234
+ if not self.env.CC:
235
+ self.fatal('A c compiler is required for link_main_routines')
236
+ if not self.env.FC:
237
+ self.fatal('A fortran compiler is required for link_main_routines')
238
+ if not self.env.FC_MAIN:
239
+ self.fatal('Checking for mangling requires self.env.FC_MAIN (execute "check_fortran_dummy_main" first?)')
240
+ self.start_msg('Getting fortran mangling scheme')
241
+ for(u,du,c)in mangling_schemes():
242
+ try:
243
+ self.check_cc(compile_filename=[],features='link_main_routines_func',msg='nomsg',errmsg='nomsg',mandatory=True,dummy_func_nounder=mangle_name(u,du,c,"foobar"),dummy_func_under=mangle_name(u,du,c,"foo_bar"),main_func_name=self.env.FC_MAIN)
244
+ except self.errors.ConfigurationError:
245
+ pass
246
+ else:
247
+ self.end_msg("ok ('%s', '%s', '%s-case')"%(u,du,c))
248
+ self.env.FORTRAN_MANGLING=(u,du,c)
249
+ break
250
+ else:
251
+ self.end_msg(False)
252
+ self.fatal('mangler not found')
253
+ return(u,du,c)
254
+ def set_lib_pat(self):
255
+ self.env['fcshlib_PATTERN']=self.env['pyext_PATTERN']
256
+
257
+ conf(fc_flags)
258
+ conf(check_fortran)
259
+ conf(check_fc)
260
+ conf(fortran_modifier_darwin)
261
+ conf(fortran_modifier_win32)
262
+ conf(fortran_modifier_cygwin)
263
+ conf(check_fortran_dummy_main)
264
+ conf(is_link_verbose)
265
+ conf(check_fortran_verbose_flag)
266
+ conf(check_fortran_clib)
267
+ feature('link_main_routines_func')(link_main_routines_tg_method)
268
+ before_method('process_source')(link_main_routines_tg_method)
269
+ conf(check_fortran_mangling)
270
+ feature('pyext')(set_lib_pat)
271
+ before_method('propagate_uselib_vars','apply_link')(set_lib_pat)