text_ux 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
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,39 @@
1
+ // Copyright 2006, Google Inc.
2
+ // All rights reserved.
3
+ //
4
+ // Redistribution and use in source and binary forms, with or without
5
+ // modification, are permitted provided that the following conditions are
6
+ // met:
7
+ //
8
+ // * Redistributions of source code must retain the above copyright
9
+ // notice, this list of conditions and the following disclaimer.
10
+ // * Redistributions in binary form must reproduce the above
11
+ // copyright notice, this list of conditions and the following disclaimer
12
+ // in the documentation and/or other materials provided with the
13
+ // distribution.
14
+ // * Neither the name of Google Inc. nor the names of its
15
+ // contributors may be used to endorse or promote products derived from
16
+ // this software without specific prior written permission.
17
+ //
18
+ // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19
+ // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20
+ // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21
+ // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22
+ // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23
+ // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24
+ // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25
+ // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26
+ // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27
+ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28
+ // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29
+
30
+ #include <iostream>
31
+
32
+ #include "gtest/gtest.h"
33
+
34
+ GTEST_API_ int main(int argc, char **argv) {
35
+ std::cout << "Running main() from gtest_main.cc\n";
36
+
37
+ testing::InitGoogleTest(&argc, argv);
38
+ return RUN_ALL_TESTS();
39
+ }
@@ -0,0 +1,733 @@
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,errno,re,shutil
6
+ try:import cPickle
7
+ except:import pickle as cPickle
8
+ from waflib import Runner,TaskGen,Utils,ConfigSet,Task,Logs,Options,Context,Errors
9
+ import waflib.Node
10
+ CACHE_DIR='c4che'
11
+ CACHE_SUFFIX='_cache.py'
12
+ INSTALL=1337
13
+ UNINSTALL=-1337
14
+ SAVED_ATTRS='root node_deps raw_deps task_sigs'.split()
15
+ CFG_FILES='cfg_files'
16
+ POST_AT_ONCE=0
17
+ POST_LAZY=1
18
+ POST_BOTH=2
19
+ class BuildContext(Context.Context):
20
+ '''executes the build'''
21
+ cmd='build'
22
+ variant=''
23
+ def __init__(self,**kw):
24
+ super(BuildContext,self).__init__(**kw)
25
+ self.is_install=0
26
+ self.top_dir=kw.get('top_dir',Context.top_dir)
27
+ self.run_dir=kw.get('run_dir',Context.run_dir)
28
+ self.post_mode=POST_AT_ONCE
29
+ self.out_dir=kw.get('out_dir',Context.out_dir)
30
+ self.cache_dir=kw.get('cache_dir',None)
31
+ if not self.cache_dir:
32
+ self.cache_dir=self.out_dir+os.sep+CACHE_DIR
33
+ self.all_envs={}
34
+ self.task_sigs={}
35
+ self.node_deps={}
36
+ self.raw_deps={}
37
+ self.cache_dir_contents={}
38
+ self.task_gen_cache_names={}
39
+ self.launch_dir=Context.launch_dir
40
+ self.jobs=Options.options.jobs
41
+ self.targets=Options.options.targets
42
+ self.keep=Options.options.keep
43
+ self.cache_global=Options.cache_global
44
+ self.nocache=Options.options.nocache
45
+ self.progress_bar=Options.options.progress_bar
46
+ self.deps_man=Utils.defaultdict(list)
47
+ self.current_group=0
48
+ self.groups=[]
49
+ self.group_names={}
50
+ def get_variant_dir(self):
51
+ if not self.variant:
52
+ return self.out_dir
53
+ return os.path.join(self.out_dir,self.variant)
54
+ variant_dir=property(get_variant_dir,None)
55
+ def __call__(self,*k,**kw):
56
+ kw['bld']=self
57
+ ret=TaskGen.task_gen(*k,**kw)
58
+ self.task_gen_cache_names={}
59
+ self.add_to_group(ret,group=kw.get('group',None))
60
+ return ret
61
+ def __copy__(self):
62
+ raise Errors.WafError('build contexts are not supposed to be copied')
63
+ def install_files(self,*k,**kw):
64
+ pass
65
+ def install_as(self,*k,**kw):
66
+ pass
67
+ def symlink_as(self,*k,**kw):
68
+ pass
69
+ def load_envs(self):
70
+ try:
71
+ lst=Utils.listdir(self.cache_dir)
72
+ except OSError ,e:
73
+ if e.errno==errno.ENOENT:
74
+ raise Errors.WafError('The project was not configured: run "waf configure" first!')
75
+ else:
76
+ raise
77
+ if not lst:
78
+ raise Errors.WafError('The cache directory is empty: reconfigure the project')
79
+ for fname in lst:
80
+ if fname.endswith(CACHE_SUFFIX):
81
+ env=ConfigSet.ConfigSet(os.path.join(self.cache_dir,fname))
82
+ name=fname[:-len(CACHE_SUFFIX)]
83
+ self.all_envs[name]=env
84
+ for f in env[CFG_FILES]:
85
+ newnode=self.root.find_resource(f)
86
+ try:
87
+ h=Utils.h_file(newnode.abspath())
88
+ except(IOError,AttributeError):
89
+ Logs.error('cannot find %r'%f)
90
+ h=Utils.SIG_NIL
91
+ newnode.sig=h
92
+ def init_dirs(self):
93
+ if not(os.path.isabs(self.top_dir)and os.path.isabs(self.out_dir)):
94
+ raise Errors.WafError('The project was not configured: run "waf configure" first!')
95
+ self.path=self.srcnode=self.root.find_dir(self.top_dir)
96
+ self.bldnode=self.root.make_node(self.variant_dir)
97
+ self.bldnode.mkdir()
98
+ def execute(self):
99
+ self.restore()
100
+ if not self.all_envs:
101
+ self.load_envs()
102
+ self.execute_build()
103
+ def execute_build(self):
104
+ Logs.info("Waf: Entering directory `%s'"%self.variant_dir)
105
+ self.recurse([self.run_dir])
106
+ self.pre_build()
107
+ self.timer=Utils.Timer()
108
+ if self.progress_bar:
109
+ sys.stderr.write(Logs.colors.cursor_off)
110
+ try:
111
+ self.compile()
112
+ finally:
113
+ if self.progress_bar==1:
114
+ c=len(self.returned_tasks)or 1
115
+ self.to_log(self.progress_line(c,c,Logs.colors.BLUE,Logs.colors.NORMAL))
116
+ print('')
117
+ sys.stdout.flush()
118
+ sys.stderr.write(Logs.colors.cursor_on)
119
+ Logs.info("Waf: Leaving directory `%s'"%self.variant_dir)
120
+ self.post_build()
121
+ def restore(self):
122
+ try:
123
+ env=ConfigSet.ConfigSet(os.path.join(self.cache_dir,'build.config.py'))
124
+ except(IOError,OSError):
125
+ pass
126
+ else:
127
+ if env['version']<Context.HEXVERSION:
128
+ raise Errors.WafError('Version mismatch! reconfigure the project')
129
+ for t in env['tools']:
130
+ self.setup(**t)
131
+ f=None
132
+ try:
133
+ dbfn=os.path.join(self.variant_dir,Context.DBFILE)
134
+ try:
135
+ f=open(dbfn,'rb')
136
+ except(IOError,EOFError):
137
+ Logs.debug('build: could not load the build cache %s (missing)'%dbfn)
138
+ else:
139
+ try:
140
+ waflib.Node.pickle_lock.acquire()
141
+ waflib.Node.Nod3=self.node_class
142
+ try:
143
+ data=cPickle.load(f)
144
+ except Exception ,e:
145
+ Logs.debug('build: could not pickle the build cache %s: %r'%(dbfn,e))
146
+ else:
147
+ for x in SAVED_ATTRS:
148
+ setattr(self,x,data[x])
149
+ finally:
150
+ waflib.Node.pickle_lock.release()
151
+ finally:
152
+ if f:
153
+ f.close()
154
+ self.init_dirs()
155
+ def store(self):
156
+ data={}
157
+ for x in SAVED_ATTRS:
158
+ data[x]=getattr(self,x)
159
+ db=os.path.join(self.variant_dir,Context.DBFILE)
160
+ try:
161
+ waflib.Node.pickle_lock.acquire()
162
+ waflib.Node.Nod3=self.node_class
163
+ f=None
164
+ try:
165
+ f=open(db+'.tmp','wb')
166
+ cPickle.dump(data,f)
167
+ finally:
168
+ if f:
169
+ f.close()
170
+ finally:
171
+ waflib.Node.pickle_lock.release()
172
+ try:
173
+ st=os.stat(db)
174
+ os.unlink(db)
175
+ if not Utils.is_win32:
176
+ os.chown(db+'.tmp',st.st_uid,st.st_gid)
177
+ except(AttributeError,OSError):
178
+ pass
179
+ os.rename(db+'.tmp',db)
180
+ def compile(self):
181
+ Logs.debug('build: compile()')
182
+ self.producer=Runner.Parallel(self,self.jobs)
183
+ self.producer.biter=self.get_build_iterator()
184
+ self.returned_tasks=[]
185
+ try:
186
+ self.producer.start()
187
+ except KeyboardInterrupt:
188
+ self.store()
189
+ raise
190
+ else:
191
+ if self.producer.dirty:
192
+ self.store()
193
+ if self.producer.error:
194
+ raise Errors.BuildError(self.producer.error)
195
+ def setup(self,tool,tooldir=None,funs=None):
196
+ if isinstance(tool,list):
197
+ for i in tool:self.setup(i,tooldir)
198
+ return
199
+ module=Context.load_tool(tool,tooldir)
200
+ if hasattr(module,"setup"):module.setup(self)
201
+ def get_env(self):
202
+ try:
203
+ return self.all_envs[self.variant]
204
+ except KeyError:
205
+ return self.all_envs['']
206
+ def set_env(self,val):
207
+ self.all_envs[self.variant]=val
208
+ env=property(get_env,set_env)
209
+ def add_manual_dependency(self,path,value):
210
+ if isinstance(path,waflib.Node.Node):
211
+ node=path
212
+ elif os.path.isabs(path):
213
+ node=self.root.find_resource(path)
214
+ else:
215
+ node=self.path.find_resource(path)
216
+ self.deps_man[id(node)].append(value)
217
+ def launch_node(self):
218
+ try:
219
+ return self.p_ln
220
+ except AttributeError:
221
+ self.p_ln=self.root.find_dir(self.launch_dir)
222
+ return self.p_ln
223
+ def hash_env_vars(self,env,vars_lst):
224
+ if not env.table:
225
+ env=env.parent
226
+ if not env:
227
+ return Utils.SIG_NIL
228
+ idx=str(id(env))+str(vars_lst)
229
+ try:
230
+ cache=self.cache_env
231
+ except AttributeError:
232
+ cache=self.cache_env={}
233
+ else:
234
+ try:
235
+ return self.cache_env[idx]
236
+ except KeyError:
237
+ pass
238
+ lst=[env[a]for a in vars_lst]
239
+ ret=Utils.h_list(lst)
240
+ Logs.debug('envhash: %s %r',Utils.to_hex(ret),lst)
241
+ cache[idx]=ret
242
+ return ret
243
+ def get_tgen_by_name(self,name):
244
+ cache=self.task_gen_cache_names
245
+ if not cache:
246
+ for g in self.groups:
247
+ for tg in g:
248
+ try:
249
+ cache[tg.name]=tg
250
+ except AttributeError:
251
+ pass
252
+ try:
253
+ return cache[name]
254
+ except KeyError:
255
+ raise Errors.WafError('Could not find a task generator for the name %r'%name)
256
+ def progress_line(self,state,total,col1,col2):
257
+ n=len(str(total))
258
+ Utils.rot_idx+=1
259
+ ind=Utils.rot_chr[Utils.rot_idx%4]
260
+ pc=(100.*state)/total
261
+ eta=str(self.timer)
262
+ fs="[%%%dd/%%%dd][%%s%%2d%%%%%%s][%s]["%(n,n,ind)
263
+ left=fs%(state,total,col1,pc,col2)
264
+ right='][%s%s%s]'%(col1,eta,col2)
265
+ cols=Logs.get_term_cols()-len(left)-len(right)+2*len(col1)+2*len(col2)
266
+ if cols<7:cols=7
267
+ ratio=((cols*state)//total)-1
268
+ bar=('='*ratio+'>').ljust(cols)
269
+ msg=Utils.indicator%(left,bar,right)
270
+ return msg
271
+ def declare_chain(self,*k,**kw):
272
+ return TaskGen.declare_chain(*k,**kw)
273
+ def pre_build(self):
274
+ for m in getattr(self,'pre_funs',[]):
275
+ m(self)
276
+ def post_build(self):
277
+ for m in getattr(self,'post_funs',[]):
278
+ m(self)
279
+ def add_pre_fun(self,meth):
280
+ try:
281
+ self.pre_funs.append(meth)
282
+ except AttributeError:
283
+ self.pre_funs=[meth]
284
+ def add_post_fun(self,meth):
285
+ try:
286
+ self.post_funs.append(meth)
287
+ except AttributeError:
288
+ self.post_funs=[meth]
289
+ def get_group(self,x):
290
+ if not self.groups:
291
+ self.add_group()
292
+ if x is None:
293
+ return self.groups[self.current_group]
294
+ if x in self.group_names:
295
+ return self.group_names[x]
296
+ return self.groups[x]
297
+ def add_to_group(self,tgen,group=None):
298
+ assert(isinstance(tgen,TaskGen.task_gen)or isinstance(tgen,Task.TaskBase))
299
+ tgen.bld=self
300
+ self.get_group(group).append(tgen)
301
+ def get_group_name(self,g):
302
+ if not isinstance(g,list):
303
+ g=self.groups[g]
304
+ for x in self.group_names:
305
+ if id(self.group_names[x])==id(g):
306
+ return x
307
+ return''
308
+ def get_group_idx(self,tg):
309
+ se=id(tg)
310
+ for i in range(len(self.groups)):
311
+ for t in self.groups[i]:
312
+ if id(t)==se:
313
+ return i
314
+ return None
315
+ def add_group(self,name=None,move=True):
316
+ if name and name in self.group_names:
317
+ Logs.error('add_group: name %s already present'%name)
318
+ g=[]
319
+ self.group_names[name]=g
320
+ self.groups.append(g)
321
+ if move:
322
+ self.current_group=len(self.groups)-1
323
+ def set_group(self,idx):
324
+ if isinstance(idx,str):
325
+ g=self.group_names[idx]
326
+ for i in range(len(self.groups)):
327
+ if id(g)==id(self.groups[i]):
328
+ self.current_group=i
329
+ else:
330
+ self.current_group=idx
331
+ def total(self):
332
+ total=0
333
+ for group in self.groups:
334
+ for tg in group:
335
+ try:
336
+ total+=len(tg.tasks)
337
+ except AttributeError:
338
+ total+=1
339
+ return total
340
+ def get_targets(self):
341
+ to_post=[]
342
+ min_grp=0
343
+ for name in self.targets.split(','):
344
+ tg=self.get_tgen_by_name(name)
345
+ if not tg:
346
+ raise Errors.WafError('target %r does not exist'%name)
347
+ m=self.get_group_idx(tg)
348
+ if m>min_grp:
349
+ min_grp=m
350
+ to_post=[tg]
351
+ elif m==min_grp:
352
+ to_post.append(tg)
353
+ return(min_grp,to_post)
354
+ def post_group(self):
355
+ if self.targets=='*':
356
+ for tg in self.groups[self.cur]:
357
+ try:
358
+ f=tg.post
359
+ except AttributeError:
360
+ pass
361
+ else:
362
+ f()
363
+ elif self.targets:
364
+ if self.cur<self._min_grp:
365
+ for tg in self.groups[self.cur]:
366
+ try:
367
+ f=tg.post
368
+ except AttributeError:
369
+ pass
370
+ else:
371
+ f()
372
+ else:
373
+ for tg in self._exact_tg:
374
+ tg.post()
375
+ else:
376
+ ln=self.launch_node()
377
+ for tg in self.groups[self.cur]:
378
+ try:
379
+ f=tg.post
380
+ except AttributeError:
381
+ pass
382
+ else:
383
+ if tg.path.is_child_of(ln):
384
+ f()
385
+ def get_tasks_group(self,idx):
386
+ tasks=[]
387
+ for tg in self.groups[idx]:
388
+ if isinstance(tg,Task.TaskBase):
389
+ tasks.append(tg)
390
+ else:
391
+ tasks.extend(tg.tasks)
392
+ return tasks
393
+ def get_build_iterator(self):
394
+ self.cur=0
395
+ if self.targets and self.targets!='*':
396
+ (self._min_grp,self._exact_tg)=self.get_targets()
397
+ global lazy_post
398
+ if self.post_mode!=POST_LAZY:
399
+ while self.cur<len(self.groups):
400
+ self.post_group()
401
+ self.cur+=1
402
+ self.cur=0
403
+ while self.cur<len(self.groups):
404
+ if self.post_mode!=POST_AT_ONCE:
405
+ self.post_group()
406
+ tasks=self.get_tasks_group(self.cur)
407
+ Task.set_file_constraints(tasks)
408
+ Task.set_precedence_constraints(tasks)
409
+ self.cur_tasks=tasks
410
+ self.cur+=1
411
+ if not tasks:
412
+ continue
413
+ yield tasks
414
+ while 1:
415
+ yield[]
416
+ class inst(Task.Task):
417
+ color='CYAN'
418
+ def post(self):
419
+ buf=[]
420
+ for x in self.source:
421
+ if isinstance(x,waflib.Node.Node):
422
+ y=x
423
+ else:
424
+ y=self.path.find_resource(x)
425
+ if not y:
426
+ idx=self.generator.bld.get_group_idx(self)
427
+ for tg in self.generator.bld.groups[idx]:
428
+ if not isinstance(tg,inst)and id(tg)!=id(self):
429
+ tg.post()
430
+ y=self.path.find_resource(x)
431
+ if y:
432
+ break
433
+ else:
434
+ raise Errors.WafError('could not find %r in %r'%(x,self.path))
435
+ buf.append(y)
436
+ self.inputs=buf
437
+ def runnable_status(self):
438
+ ret=super(inst,self).runnable_status()
439
+ if ret==Task.SKIP_ME:
440
+ return Task.RUN_ME
441
+ return ret
442
+ def __str__(self):
443
+ return''
444
+ def run(self):
445
+ return self.generator.exec_task()
446
+ def get_install_path(self,destdir=True):
447
+ dest=Utils.subst_vars(self.dest,self.env)
448
+ dest=dest.replace('/',os.sep)
449
+ if destdir and Options.options.destdir:
450
+ dest=os.path.join(Options.options.destdir,os.path.splitdrive(dest)[1].lstrip(os.sep))
451
+ return dest
452
+ def exec_install_files(self):
453
+ destpath=self.get_install_path()
454
+ if not destpath:
455
+ raise Errors.WafError('unknown installation path %r'%self.generator)
456
+ for x,y in zip(self.source,self.inputs):
457
+ if self.relative_trick:
458
+ destfile=os.path.join(destpath,y.path_from(self.path))
459
+ Utils.check_dir(os.path.dirname(destfile))
460
+ else:
461
+ destfile=os.path.join(destpath,y.name)
462
+ self.generator.bld.do_install(y.abspath(),destfile,self.chmod)
463
+ def exec_install_as(self):
464
+ destfile=self.get_install_path()
465
+ self.generator.bld.do_install(self.inputs[0].abspath(),destfile,self.chmod)
466
+ def exec_symlink_as(self):
467
+ destfile=self.get_install_path()
468
+ self.generator.bld.do_link(self.link,destfile)
469
+ class InstallContext(BuildContext):
470
+ '''installs the targets on the system'''
471
+ cmd='install'
472
+ def __init__(self,**kw):
473
+ super(InstallContext,self).__init__(**kw)
474
+ self.uninstall=[]
475
+ self.is_install=INSTALL
476
+ def do_install(self,src,tgt,chmod=Utils.O644):
477
+ d,_=os.path.split(tgt)
478
+ if not d:
479
+ raise Errors.WafError('Invalid installation given %r->%r'%(src,tgt))
480
+ Utils.check_dir(d)
481
+ srclbl=src.replace(self.srcnode.abspath()+os.sep,'')
482
+ if not Options.options.force:
483
+ try:
484
+ st1=os.stat(tgt)
485
+ st2=os.stat(src)
486
+ except OSError:
487
+ pass
488
+ else:
489
+ if st1.st_mtime+2>=st2.st_mtime and st1.st_size==st2.st_size:
490
+ if not self.progress_bar:
491
+ Logs.info('- install %s (from %s)'%(tgt,srclbl))
492
+ return False
493
+ if not self.progress_bar:
494
+ Logs.info('+ install %s (from %s)'%(tgt,srclbl))
495
+ try:
496
+ os.remove(tgt)
497
+ except OSError:
498
+ pass
499
+ try:
500
+ shutil.copy2(src,tgt)
501
+ os.chmod(tgt,chmod)
502
+ except IOError:
503
+ try:
504
+ os.stat(src)
505
+ except(OSError,IOError):
506
+ Logs.error('File %r does not exist'%src)
507
+ raise Errors.WafError('Could not install the file %r'%tgt)
508
+ def do_link(self,src,tgt):
509
+ d,_=os.path.split(tgt)
510
+ Utils.check_dir(d)
511
+ link=False
512
+ if not os.path.islink(tgt):
513
+ link=True
514
+ elif os.readlink(tgt)!=src:
515
+ link=True
516
+ if link:
517
+ try:os.remove(tgt)
518
+ except OSError:pass
519
+ if not self.progress_bar:
520
+ Logs.info('+ symlink %s (to %s)'%(tgt,src))
521
+ os.symlink(src,tgt)
522
+ else:
523
+ if not self.progress_bar:
524
+ Logs.info('- symlink %s (to %s)'%(tgt,src))
525
+ def run_task_now(self,tsk,postpone):
526
+ tsk.post()
527
+ if not postpone:
528
+ if tsk.runnable_status()==Task.ASK_LATER:
529
+ raise self.WafError('cannot post the task %r'%tsk)
530
+ tsk.run()
531
+ def install_files(self,dest,files,env=None,chmod=Utils.O644,relative_trick=False,cwd=None,add=True,postpone=True):
532
+ tsk=inst(env=env or self.env)
533
+ tsk.bld=self
534
+ tsk.path=cwd or self.path
535
+ tsk.chmod=chmod
536
+ if isinstance(files,waflib.Node.Node):
537
+ tsk.source=[files]
538
+ else:
539
+ tsk.source=Utils.to_list(files)
540
+ tsk.dest=dest
541
+ tsk.exec_task=tsk.exec_install_files
542
+ tsk.relative_trick=relative_trick
543
+ if add:self.add_to_group(tsk)
544
+ self.run_task_now(tsk,postpone)
545
+ return tsk
546
+ def install_as(self,dest,srcfile,env=None,chmod=Utils.O644,cwd=None,add=True,postpone=True):
547
+ tsk=inst(env=env or self.env)
548
+ tsk.bld=self
549
+ tsk.path=cwd or self.path
550
+ tsk.chmod=chmod
551
+ tsk.source=[srcfile]
552
+ tsk.dest=dest
553
+ tsk.exec_task=tsk.exec_install_as
554
+ if add:self.add_to_group(tsk)
555
+ self.run_task_now(tsk,postpone)
556
+ return tsk
557
+ def symlink_as(self,dest,src,env=None,cwd=None,add=True,postpone=True):
558
+ if Utils.is_win32:
559
+ return
560
+ tsk=inst(env=env or self.env)
561
+ tsk.bld=self
562
+ tsk.dest=dest
563
+ tsk.path=cwd or self.path
564
+ tsk.source=[]
565
+ tsk.link=src
566
+ tsk.exec_task=tsk.exec_symlink_as
567
+ if add:self.add_to_group(tsk)
568
+ self.run_task_now(tsk,postpone)
569
+ return tsk
570
+ class UninstallContext(InstallContext):
571
+ '''removes the targets installed'''
572
+ cmd='uninstall'
573
+ def __init__(self,**kw):
574
+ super(UninstallContext,self).__init__(**kw)
575
+ self.is_install=UNINSTALL
576
+ def do_install(self,src,tgt,chmod=Utils.O644):
577
+ if not self.progress_bar:
578
+ Logs.info('- remove %s'%tgt)
579
+ self.uninstall.append(tgt)
580
+ try:
581
+ os.remove(tgt)
582
+ except OSError ,e:
583
+ if e.errno!=errno.ENOENT:
584
+ if not getattr(self,'uninstall_error',None):
585
+ self.uninstall_error=True
586
+ Logs.warn('build: some files could not be uninstalled (retry with -vv to list them)')
587
+ if Logs.verbose>1:
588
+ Logs.warn('could not remove %s (error code %r)'%(e.filename,e.errno))
589
+ while tgt:
590
+ tgt=os.path.dirname(tgt)
591
+ try:
592
+ os.rmdir(tgt)
593
+ except OSError:
594
+ break
595
+ def do_link(self,src,tgt):
596
+ try:
597
+ if not self.progress_bar:
598
+ Logs.info('- unlink %s'%tgt)
599
+ os.remove(tgt)
600
+ except OSError:
601
+ pass
602
+ while tgt:
603
+ tgt=os.path.dirname(tgt)
604
+ try:
605
+ os.rmdir(tgt)
606
+ except OSError:
607
+ break
608
+ def execute(self):
609
+ try:
610
+ def runnable_status(self):
611
+ return Task.SKIP_ME
612
+ setattr(Task.Task,'runnable_status_back',Task.Task.runnable_status)
613
+ setattr(Task.Task,'runnable_status',runnable_status)
614
+ super(UninstallContext,self).execute()
615
+ finally:
616
+ setattr(Task.Task,'runnable_status',Task.Task.runnable_status_back)
617
+ class CleanContext(BuildContext):
618
+ '''cleans the project'''
619
+ cmd='clean'
620
+ def execute(self):
621
+ self.restore()
622
+ if not self.all_envs:
623
+ self.load_envs()
624
+ self.recurse([self.run_dir])
625
+ try:
626
+ self.clean()
627
+ finally:
628
+ self.store()
629
+ def clean(self):
630
+ Logs.debug('build: clean called')
631
+ if self.bldnode!=self.srcnode:
632
+ lst=[self.root.find_or_declare(f)for f in self.env[CFG_FILES]]
633
+ for n in self.bldnode.ant_glob('**/*',excl='lock* *conf_check_*/** config.log c4che/*'):
634
+ if n in lst:
635
+ continue
636
+ n.delete()
637
+ self.root.children={}
638
+ for v in'node_deps task_sigs raw_deps'.split():
639
+ setattr(self,v,{})
640
+ class ListContext(BuildContext):
641
+ '''lists the targets to execute'''
642
+ cmd='list'
643
+ def execute(self):
644
+ self.restore()
645
+ if not self.all_envs:
646
+ self.load_envs()
647
+ self.recurse([self.run_dir])
648
+ self.pre_build()
649
+ self.timer=Utils.Timer()
650
+ for g in self.groups:
651
+ for tg in g:
652
+ try:
653
+ f=tg.post
654
+ except AttributeError:
655
+ pass
656
+ else:
657
+ f()
658
+ try:
659
+ self.get_tgen_by_name('')
660
+ except:
661
+ pass
662
+ lst=list(self.task_gen_cache_names.keys())
663
+ lst.sort()
664
+ for k in lst:
665
+ Logs.pprint('GREEN',k)
666
+ class StepContext(BuildContext):
667
+ '''executes tasks in a step-by-step fashion, for debugging'''
668
+ cmd='step'
669
+ def __init__(self,**kw):
670
+ super(StepContext,self).__init__(**kw)
671
+ self.files=Options.options.files
672
+ def compile(self):
673
+ if not self.files:
674
+ Logs.warn('Add a pattern for the debug build, for example "waf step --files=main.c,app"')
675
+ BuildContext.compile(self)
676
+ return
677
+ for g in self.groups:
678
+ for tg in g:
679
+ try:
680
+ f=tg.post
681
+ except AttributeError:
682
+ pass
683
+ else:
684
+ f()
685
+ for pat in self.files.split(','):
686
+ matcher=self.get_matcher(pat)
687
+ for tg in g:
688
+ if isinstance(tg,Task.TaskBase):
689
+ lst=[tg]
690
+ else:
691
+ lst=tg.tasks
692
+ for tsk in lst:
693
+ do_exec=False
694
+ for node in getattr(tsk,'inputs',[]):
695
+ if matcher(node,output=False):
696
+ do_exec=True
697
+ break
698
+ for node in getattr(tsk,'outputs',[]):
699
+ if matcher(node,output=True):
700
+ do_exec=True
701
+ break
702
+ if do_exec:
703
+ ret=tsk.run()
704
+ Logs.info('%s -> exit %r'%(str(tsk),ret))
705
+ def get_matcher(self,pat):
706
+ inn=True
707
+ out=True
708
+ if pat.startswith('in:'):
709
+ out=False
710
+ pat=pat.replace('in:','')
711
+ elif pat.startswith('out:'):
712
+ inn=False
713
+ pat=pat.replace('out:','')
714
+ anode=self.root.find_node(pat)
715
+ pattern=None
716
+ if not anode:
717
+ if not pat.startswith('^'):
718
+ pat='^.+?%s'%pat
719
+ if not pat.endswith('$'):
720
+ pat='%s$'%pat
721
+ pattern=re.compile(pat)
722
+ def match(node,output):
723
+ if output==True and not out:
724
+ return False
725
+ if output==False and not inn:
726
+ return False
727
+ if anode:
728
+ return anode==node
729
+ else:
730
+ return pattern.match(node.abspath())
731
+ return match
732
+ BuildContext.store=Utils.nogc(BuildContext.store)
733
+ BuildContext.restore=Utils.nogc(BuildContext.restore)