passenger 4.0.20 → 4.0.21

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of passenger might be problematic. Click here for more details.

Files changed (496) hide show
  1. checksums.yaml +8 -8
  2. checksums.yaml.gz.asc +7 -7
  3. data.tar.gz.asc +7 -7
  4. data/.gitignore +1 -0
  5. data/.travis.yml +1 -1
  6. data/NEWS +15 -0
  7. data/README.md +5 -3
  8. data/Rakefile +1 -0
  9. data/bin/passenger-config +1 -5
  10. data/bin/passenger-install-apache2-module +53 -5
  11. data/bin/passenger-install-nginx-module +19 -6
  12. data/bin/passenger-memory-stats +3 -3
  13. data/build/agents.rb +11 -8
  14. data/build/apache2.rb +9 -5
  15. data/build/basics.rb +15 -21
  16. data/build/common_library.rb +16 -6
  17. data/build/cplusplus_support.rb +5 -5
  18. data/build/cxx_tests.rb +3 -3
  19. data/build/documentation.rb +1 -1
  20. data/build/misc.rb +4 -37
  21. data/build/node_tests.rb +29 -0
  22. data/build/oxt_tests.rb +1 -1
  23. data/build/packaging.rb +29 -10
  24. data/build/preprocessor.rb +2 -1
  25. data/build/test_basics.rb +15 -6
  26. data/debian.template/locations.ini.template +1 -0
  27. data/debian.template/passenger.install.template +1 -0
  28. data/dev/copy_boost_headers.rb +7 -3
  29. data/dev/run_travis.sh +32 -16
  30. data/doc/Users guide Apache.idmap.txt +22 -34
  31. data/doc/Users guide Apache.txt +20 -234
  32. data/doc/Users guide Nginx.idmap.txt +84 -66
  33. data/doc/Users guide Nginx.txt +50 -1
  34. data/doc/Users guide Standalone.idmap.txt +74 -0
  35. data/doc/Users guide Standalone.txt +22 -9
  36. data/doc/Users guide.txt +51 -0
  37. data/doc/users_guide_snippets/environment_variables.txt +0 -3
  38. data/doc/users_guide_snippets/installation.txt +337 -380
  39. data/doc/users_guide_snippets/installation/run_installer.txt +58 -0
  40. data/doc/users_guide_snippets/installation/verify_running_epilogue.txt +6 -0
  41. data/doc/users_guide_snippets/support_information.txt +2 -9
  42. data/doc/users_guide_snippets/troubleshooting/default.txt +112 -0
  43. data/doc/users_guide_snippets/troubleshooting/rails.txt +56 -0
  44. data/doc/users_guide_snippets/where_to_get_support.txt +9 -0
  45. data/ext/apache2/Bucket.h +1 -1
  46. data/ext/apache2/Configuration.hpp +0 -44
  47. data/ext/apache2/CreateDirConfig.cpp +1 -1
  48. data/ext/apache2/CreateDirConfig.cpp.erb +1 -1
  49. data/ext/apache2/Hooks.cpp +28 -21
  50. data/ext/apache2/MergeDirConfig.cpp +1 -0
  51. data/ext/apache2/MergeDirConfig.cpp.erb +1 -1
  52. data/ext/apache2/SetHeaders.cpp +73 -0
  53. data/ext/apache2/SetHeaders.cpp.erb +88 -0
  54. data/ext/boost/algorithm/string/detail/find_format.hpp +5 -5
  55. data/ext/boost/algorithm/string/detail/find_format_all.hpp +5 -5
  56. data/ext/boost/algorithm/string/detail/finder.hpp +1 -1
  57. data/ext/boost/algorithm/string/formatter.hpp +2 -2
  58. data/ext/boost/assert.hpp +6 -1
  59. data/ext/boost/atomic.hpp +18 -0
  60. data/ext/boost/atomic/atomic.hpp +241 -0
  61. data/ext/boost/atomic/detail/base.hpp +585 -0
  62. data/ext/boost/atomic/detail/cas32strong.hpp +885 -0
  63. data/ext/boost/atomic/detail/cas32weak.hpp +947 -0
  64. data/ext/boost/atomic/detail/cas64strong.hpp +443 -0
  65. data/ext/boost/atomic/detail/config.hpp +54 -0
  66. data/ext/boost/atomic/detail/gcc-alpha.hpp +368 -0
  67. data/ext/boost/atomic/detail/gcc-armv6plus.hpp +252 -0
  68. data/ext/boost/atomic/detail/gcc-cas.hpp +157 -0
  69. data/ext/boost/atomic/detail/gcc-ppc.hpp +2850 -0
  70. data/ext/boost/atomic/detail/gcc-sparcv9.hpp +1259 -0
  71. data/ext/boost/atomic/detail/gcc-x86.hpp +1766 -0
  72. data/ext/boost/atomic/detail/generic-cas.hpp +206 -0
  73. data/ext/boost/atomic/detail/interlocked.hpp +200 -0
  74. data/ext/boost/atomic/detail/linux-arm.hpp +189 -0
  75. data/ext/boost/atomic/detail/lockpool.hpp +97 -0
  76. data/ext/boost/atomic/detail/platform.hpp +62 -0
  77. data/ext/boost/atomic/detail/type-classification.hpp +45 -0
  78. data/ext/boost/chrono/config.hpp +8 -3
  79. data/ext/boost/chrono/duration.hpp +9 -10
  80. data/ext/boost/chrono/system_clocks.hpp +1 -1
  81. data/ext/boost/chrono/time_point.hpp +4 -3
  82. data/ext/boost/config/auto_link.hpp +53 -52
  83. data/ext/boost/config/compiler/borland.hpp +1 -0
  84. data/ext/boost/config/compiler/clang.hpp +24 -1
  85. data/ext/boost/config/compiler/codegear.hpp +1 -0
  86. data/ext/boost/config/compiler/common_edg.hpp +1 -0
  87. data/ext/boost/config/compiler/cray.hpp +1 -0
  88. data/ext/boost/config/compiler/digitalmars.hpp +1 -0
  89. data/ext/boost/config/compiler/gcc.hpp +29 -3
  90. data/ext/boost/config/compiler/gcc_xml.hpp +2 -1
  91. data/ext/boost/config/compiler/hp_acc.hpp +1 -0
  92. data/ext/boost/config/compiler/intel.hpp +1 -1
  93. data/ext/boost/config/compiler/metrowerks.hpp +1 -0
  94. data/ext/boost/config/compiler/mpw.hpp +1 -0
  95. data/ext/boost/config/compiler/pathscale.hpp +1 -0
  96. data/ext/boost/config/compiler/pgi.hpp +1 -0
  97. data/ext/boost/config/compiler/sunpro_cc.hpp +1 -0
  98. data/ext/boost/config/compiler/vacpp.hpp +3 -2
  99. data/ext/boost/config/compiler/visualc.hpp +25 -11
  100. data/ext/boost/config/platform/vxworks.hpp +353 -15
  101. data/ext/boost/config/select_compiler_config.hpp +4 -4
  102. data/ext/boost/config/stdlib/dinkumware.hpp +10 -3
  103. data/ext/boost/config/stdlib/libstdcpp3.hpp +2 -1
  104. data/ext/boost/config/suffix.hpp +45 -19
  105. data/ext/boost/date_time/format_date_parser.hpp +1 -11
  106. data/ext/boost/date_time/strings_from_facet.hpp +5 -3
  107. data/ext/boost/detail/atomic_redef_macros.hpp +19 -0
  108. data/ext/boost/detail/atomic_undef_macros.hpp +39 -0
  109. data/ext/boost/detail/endian.hpp +52 -4
  110. data/ext/boost/detail/scoped_enum_emulation.hpp +10 -10
  111. data/ext/boost/detail/select_type.hpp +36 -0
  112. data/ext/boost/exception/current_exception_cast.hpp +1 -1
  113. data/ext/boost/exception/detail/error_info_impl.hpp +3 -5
  114. data/ext/boost/exception/detail/exception_ptr.hpp +3 -3
  115. data/ext/boost/exception/detail/is_output_streamable.hpp +1 -1
  116. data/ext/boost/exception/detail/object_hex_dump.hpp +1 -1
  117. data/ext/boost/exception/detail/type_info.hpp +1 -1
  118. data/ext/boost/exception/diagnostic_information.hpp +15 -14
  119. data/ext/boost/exception/exception.hpp +1 -1
  120. data/ext/boost/exception/get_error_info.hpp +1 -1
  121. data/ext/boost/exception/info.hpp +12 -13
  122. data/ext/boost/exception/to_string.hpp +6 -1
  123. data/ext/boost/exception/to_string_stub.hpp +9 -1
  124. data/ext/boost/foreach.hpp +5 -5
  125. data/ext/boost/function/function_template.hpp +6 -6
  126. data/ext/boost/functional/hash/detail/float_functions.hpp +90 -0
  127. data/ext/boost/functional/hash/detail/hash_float.hpp +11 -2
  128. data/ext/boost/functional/hash/extensions.hpp +14 -2
  129. data/ext/boost/functional/hash/hash.hpp +26 -5
  130. data/ext/boost/get_pointer.hpp +17 -2
  131. data/ext/boost/integer_traits.hpp +1 -1
  132. data/ext/boost/lexical_cast.hpp +615 -395
  133. data/ext/boost/libs/atomic/lockpool.cpp +24 -0
  134. data/ext/boost/libs/system/src/error_code.cpp +25 -18
  135. data/ext/boost/libs/thread/src/future.cpp +7 -5
  136. data/ext/boost/libs/thread/src/pthread/once.cpp +9 -3
  137. data/ext/boost/libs/thread/src/pthread/once_atomic.cpp +90 -0
  138. data/ext/boost/libs/thread/src/pthread/thread.cpp +129 -95
  139. data/ext/boost/libs/thread/src/pthread/timeconv.inl +20 -1
  140. data/ext/boost/limits.hpp +1 -1
  141. data/ext/boost/math/policies/policy.hpp +10 -0
  142. data/ext/boost/math/special_functions/detail/round_fwd.hpp +17 -4
  143. data/ext/boost/math/special_functions/fpclassify.hpp +114 -45
  144. data/ext/boost/math/special_functions/math_fwd.hpp +195 -83
  145. data/ext/boost/math/special_functions/sign.hpp +13 -8
  146. data/ext/boost/math/tools/config.hpp +38 -16
  147. data/ext/boost/move/algorithm.hpp +275 -0
  148. data/ext/boost/move/core.hpp +332 -0
  149. data/ext/boost/move/detail/config_begin.hpp +23 -0
  150. data/ext/boost/move/detail/config_end.hpp +20 -0
  151. data/ext/boost/move/detail/meta_utils.hpp +158 -0
  152. data/ext/boost/move/iterator.hpp +298 -0
  153. data/ext/boost/move/move.hpp +10 -1256
  154. data/ext/boost/move/traits.hpp +142 -0
  155. data/ext/boost/move/utility.hpp +194 -0
  156. data/ext/boost/mpl/assert.hpp +72 -4
  157. data/ext/boost/noncopyable.hpp +15 -3
  158. data/ext/boost/pointer_to_other.hpp +55 -0
  159. data/ext/boost/range/concepts.hpp +4 -4
  160. data/ext/boost/range/detail/extract_optional_type.hpp +1 -1
  161. data/ext/boost/range/empty.hpp +1 -1
  162. data/ext/boost/range/iterator_range_core.hpp +4 -1
  163. data/ext/boost/range/iterator_range_io.hpp +2 -2
  164. data/ext/boost/ratio/config.hpp +6 -0
  165. data/ext/boost/ratio/detail/overflow_helpers.hpp +2 -2
  166. data/ext/boost/smart_ptr/allocate_shared_array.hpp +250 -0
  167. data/ext/boost/smart_ptr/detail/allocate_array_helper.hpp +169 -0
  168. data/ext/boost/smart_ptr/detail/array_deleter.hpp +124 -0
  169. data/ext/boost/smart_ptr/detail/array_traits.hpp +53 -0
  170. data/ext/boost/smart_ptr/detail/array_utility.hpp +178 -0
  171. data/ext/boost/smart_ptr/detail/make_array_helper.hpp +157 -0
  172. data/ext/boost/smart_ptr/detail/operator_bool.hpp +16 -9
  173. data/ext/boost/smart_ptr/detail/shared_count.hpp +78 -7
  174. data/ext/boost/smart_ptr/detail/sp_convertible.hpp +15 -0
  175. data/ext/boost/smart_ptr/detail/sp_counted_base.hpp +12 -6
  176. data/ext/boost/smart_ptr/detail/sp_counted_base_acc_ia64.hpp +1 -0
  177. data/ext/boost/smart_ptr/detail/sp_counted_base_aix.hpp +1 -0
  178. data/ext/boost/smart_ptr/detail/sp_counted_base_cw_ppc.hpp +1 -0
  179. data/ext/boost/smart_ptr/detail/sp_counted_base_cw_x86.hpp +1 -0
  180. data/ext/boost/smart_ptr/detail/sp_counted_base_gcc_ia64.hpp +1 -0
  181. data/ext/boost/smart_ptr/detail/sp_counted_base_gcc_mips.hpp +1 -0
  182. data/ext/boost/smart_ptr/detail/sp_counted_base_gcc_ppc.hpp +1 -0
  183. data/ext/boost/smart_ptr/detail/sp_counted_base_gcc_sparc.hpp +1 -0
  184. data/ext/boost/smart_ptr/detail/sp_counted_base_gcc_x86.hpp +1 -0
  185. data/ext/boost/smart_ptr/detail/sp_counted_base_nt.hpp +1 -0
  186. data/ext/boost/smart_ptr/detail/sp_counted_base_pt.hpp +1 -0
  187. data/ext/boost/smart_ptr/detail/sp_counted_base_snc_ps3.hpp +162 -0
  188. data/ext/boost/smart_ptr/detail/sp_counted_base_solaris.hpp +1 -0
  189. data/ext/boost/smart_ptr/detail/sp_counted_base_spin.hpp +1 -0
  190. data/ext/boost/smart_ptr/detail/sp_counted_base_sync.hpp +1 -0
  191. data/ext/boost/smart_ptr/detail/sp_counted_base_vacpp_ppc.hpp +1 -0
  192. data/ext/boost/smart_ptr/detail/sp_counted_impl.hpp +15 -0
  193. data/ext/boost/smart_ptr/detail/sp_forward.hpp +39 -0
  194. data/ext/boost/smart_ptr/detail/sp_has_sync.hpp +19 -3
  195. data/ext/boost/smart_ptr/detail/sp_if_array.hpp +31 -0
  196. data/ext/boost/smart_ptr/detail/sp_nullptr_t.hpp +45 -0
  197. data/ext/boost/smart_ptr/detail/spinlock_gcc_arm.hpp +5 -12
  198. data/ext/boost/smart_ptr/enable_shared_from_this.hpp +4 -4
  199. data/ext/boost/smart_ptr/make_shared.hpp +5 -1060
  200. data/ext/boost/smart_ptr/make_shared_array.hpp +247 -0
  201. data/ext/boost/smart_ptr/make_shared_object.hpp +1128 -0
  202. data/ext/boost/smart_ptr/scoped_array.hpp +32 -7
  203. data/ext/boost/smart_ptr/scoped_ptr.hpp +31 -5
  204. data/ext/boost/smart_ptr/shared_array.hpp +135 -20
  205. data/ext/boost/smart_ptr/shared_ptr.hpp +444 -126
  206. data/ext/boost/smart_ptr/weak_ptr.hpp +39 -28
  207. data/ext/boost/static_assert.hpp +74 -17
  208. data/ext/boost/system/error_code.hpp +76 -68
  209. data/ext/boost/system/system_error.hpp +5 -1
  210. data/ext/boost/thread/barrier.hpp +6 -2
  211. data/ext/boost/thread/completion_latch.hpp +233 -0
  212. data/ext/boost/thread/condition.hpp +6 -1
  213. data/ext/boost/thread/detail/async_func.hpp +571 -0
  214. data/ext/boost/thread/detail/config.hpp +248 -40
  215. data/ext/boost/thread/detail/counter.hpp +93 -0
  216. data/ext/boost/thread/detail/delete.hpp +12 -0
  217. data/ext/boost/thread/detail/invoke.hpp +1351 -0
  218. data/ext/boost/thread/detail/is_convertible.hpp +48 -0
  219. data/ext/boost/thread/detail/lockable_wrapper.hpp +45 -0
  220. data/ext/boost/thread/detail/log.hpp +83 -0
  221. data/ext/boost/thread/detail/make_tuple_indices.hpp +224 -0
  222. data/ext/boost/thread/detail/move.hpp +32 -16
  223. data/ext/boost/thread/detail/thread.hpp +236 -41
  224. data/ext/boost/thread/detail/thread_group.hpp +55 -9
  225. data/ext/boost/thread/detail/thread_interruption.hpp +4 -1
  226. data/ext/boost/thread/exceptions.hpp +2 -0
  227. data/ext/boost/thread/externally_locked.hpp +351 -0
  228. data/ext/boost/thread/externally_locked_stream.hpp +170 -0
  229. data/ext/boost/thread/future.hpp +2517 -455
  230. data/ext/boost/thread/future_error_code.hpp +61 -0
  231. data/ext/boost/thread/is_locked_by_this_thread.hpp +39 -0
  232. data/ext/boost/thread/latch.hpp +142 -0
  233. data/ext/boost/thread/lock_algorithms.hpp +468 -0
  234. data/ext/boost/thread/lock_concepts.hpp +197 -0
  235. data/ext/boost/thread/lock_factories.hpp +78 -0
  236. data/ext/boost/thread/lock_guard.hpp +88 -0
  237. data/ext/boost/thread/lock_options.hpp +31 -0
  238. data/ext/boost/thread/lock_traits.hpp +45 -0
  239. data/ext/boost/thread/lock_types.hpp +1226 -0
  240. data/ext/boost/thread/lockable_adapter.hpp +226 -0
  241. data/ext/boost/thread/lockable_concepts.hpp +157 -0
  242. data/ext/boost/thread/lockable_traits.hpp +207 -0
  243. data/ext/boost/thread/locks.hpp +5 -1816
  244. data/ext/boost/thread/mutex.hpp +33 -1
  245. data/ext/boost/thread/null_mutex.hpp +243 -0
  246. data/ext/boost/thread/once.hpp +10 -1
  247. data/ext/boost/thread/poly_lockable.hpp +68 -0
  248. data/ext/boost/thread/poly_lockable_adapter.hpp +89 -0
  249. data/ext/boost/thread/poly_shared_lockable.hpp +135 -0
  250. data/ext/boost/thread/poly_shared_lockable_adapter.hpp +170 -0
  251. data/ext/boost/thread/pthread/condition_variable.hpp +74 -26
  252. data/ext/boost/thread/pthread/condition_variable_fwd.hpp +54 -27
  253. data/ext/boost/thread/pthread/mutex.hpp +101 -38
  254. data/ext/boost/thread/pthread/once.hpp +459 -44
  255. data/ext/boost/thread/pthread/once_atomic.hpp +313 -0
  256. data/ext/boost/thread/pthread/recursive_mutex.hpp +19 -10
  257. data/ext/boost/thread/pthread/shared_mutex.hpp +226 -61
  258. data/ext/boost/thread/pthread/shared_mutex_assert.hpp +724 -0
  259. data/ext/boost/thread/pthread/thread_data.hpp +53 -50
  260. data/ext/boost/thread/pthread/timespec.hpp +96 -12
  261. data/ext/boost/thread/recursive_mutex.hpp +44 -1
  262. data/ext/boost/thread/reverse_lock.hpp +3 -2
  263. data/ext/boost/thread/scoped_thread.hpp +285 -0
  264. data/ext/boost/thread/shared_lock_guard.hpp +2 -1
  265. data/ext/boost/thread/shared_mutex.hpp +23 -0
  266. data/ext/boost/thread/strict_lock.hpp +235 -0
  267. data/ext/boost/thread/sync_bounded_queue.hpp +594 -0
  268. data/ext/boost/thread/sync_queue.hpp +516 -0
  269. data/ext/boost/thread/synchronized_value.hpp +1001 -0
  270. data/ext/boost/thread/testable_mutex.hpp +148 -0
  271. data/ext/boost/thread/thread.hpp +1 -13
  272. data/ext/boost/thread/thread_functors.hpp +57 -0
  273. data/ext/boost/thread/thread_guard.hpp +46 -0
  274. data/ext/boost/thread/thread_only.hpp +29 -0
  275. data/ext/boost/thread/v2/shared_mutex.hpp +1062 -0
  276. data/ext/boost/thread/v2/thread.hpp +37 -10
  277. data/ext/boost/thread/xtime.hpp +2 -1
  278. data/ext/boost/token_functions.hpp +16 -16
  279. data/ext/boost/type_traits/add_lvalue_reference.hpp +26 -0
  280. data/ext/boost/type_traits/add_reference.hpp +1 -1
  281. data/ext/boost/type_traits/add_rvalue_reference.hpp +4 -4
  282. data/ext/boost/type_traits/aligned_storage.hpp +13 -0
  283. data/ext/boost/type_traits/common_type.hpp +11 -12
  284. data/ext/boost/type_traits/config.hpp +1 -1
  285. data/ext/boost/type_traits/detail/common_type_imp.hpp +1 -1
  286. data/ext/boost/type_traits/detail/has_binary_operator.hpp +1 -1
  287. data/ext/boost/type_traits/detail/is_function_ptr_tester.hpp +1 -1
  288. data/ext/boost/type_traits/has_left_shift.hpp +49 -0
  289. data/ext/boost/type_traits/has_right_shift.hpp +49 -0
  290. data/ext/boost/type_traits/has_trivial_move_assign.hpp +57 -0
  291. data/ext/boost/type_traits/has_trivial_move_constructor.hpp +57 -0
  292. data/ext/boost/type_traits/intrinsics.hpp +18 -2
  293. data/ext/boost/type_traits/is_abstract.hpp +1 -1
  294. data/ext/boost/type_traits/is_array.hpp +1 -1
  295. data/ext/boost/type_traits/is_const.hpp +1 -1
  296. data/ext/boost/type_traits/is_convertible.hpp +78 -17
  297. data/ext/boost/type_traits/is_function.hpp +6 -1
  298. data/ext/boost/type_traits/is_integral.hpp +6 -1
  299. data/ext/boost/type_traits/is_nothrow_move_assignable.hpp +84 -0
  300. data/ext/boost/type_traits/is_nothrow_move_constructible.hpp +84 -0
  301. data/ext/boost/type_traits/is_pod.hpp +3 -1
  302. data/ext/boost/type_traits/is_rvalue_reference.hpp +1 -1
  303. data/ext/boost/type_traits/is_volatile.hpp +1 -1
  304. data/ext/boost/type_traits/make_signed.hpp +153 -0
  305. data/ext/boost/type_traits/make_unsigned.hpp +16 -0
  306. data/ext/boost/type_traits/remove_const.hpp +1 -1
  307. data/ext/boost/type_traits/remove_cv.hpp +1 -1
  308. data/ext/boost/type_traits/remove_reference.hpp +1 -1
  309. data/ext/boost/type_traits/remove_volatile.hpp +1 -1
  310. data/ext/boost/unordered/detail/allocate.hpp +1120 -0
  311. data/ext/boost/unordered/detail/buckets.hpp +876 -0
  312. data/ext/boost/unordered/detail/equivalent.hpp +680 -0
  313. data/ext/boost/unordered/detail/extract_key.hpp +183 -0
  314. data/ext/boost/unordered/detail/fwd.hpp +23 -0
  315. data/ext/boost/unordered/detail/table.hpp +861 -0
  316. data/ext/boost/unordered/detail/unique.hpp +622 -0
  317. data/ext/boost/unordered/detail/util.hpp +260 -0
  318. data/ext/boost/unordered/unordered_map.hpp +1652 -0
  319. data/ext/boost/unordered/unordered_map_fwd.hpp +65 -0
  320. data/ext/boost/unordered/unordered_set.hpp +1549 -0
  321. data/ext/boost/unordered/unordered_set_fwd.hpp +63 -0
  322. data/ext/boost/unordered_map.hpp +18 -0
  323. data/ext/boost/unordered_set.hpp +18 -0
  324. data/ext/boost/utility/addressof.hpp +2 -2
  325. data/ext/boost/utility/result_of.hpp +8 -1
  326. data/ext/boost/version.hpp +2 -2
  327. data/ext/common/Account.h +1 -1
  328. data/ext/common/AccountsDatabase.h +1 -1
  329. data/ext/common/AgentsStarter.cpp +3 -1
  330. data/ext/common/AgentsStarter.h +2 -2
  331. data/ext/common/ApplicationPool2/AppTypes.cpp +24 -6
  332. data/ext/common/ApplicationPool2/AppTypes.h +17 -8
  333. data/ext/common/ApplicationPool2/Common.h +12 -12
  334. data/ext/common/ApplicationPool2/DirectSpawner.h +2 -2
  335. data/ext/common/ApplicationPool2/DummySpawner.h +3 -3
  336. data/ext/common/ApplicationPool2/Group.h +6 -6
  337. data/ext/common/ApplicationPool2/Implementation.cpp +19 -19
  338. data/ext/common/ApplicationPool2/PipeWatcher.h +5 -5
  339. data/ext/common/ApplicationPool2/Pool.h +21 -21
  340. data/ext/common/ApplicationPool2/Process.h +6 -6
  341. data/ext/common/ApplicationPool2/Session.h +1 -1
  342. data/ext/common/ApplicationPool2/SmartSpawner.h +24 -12
  343. data/ext/common/ApplicationPool2/Socket.h +2 -2
  344. data/ext/common/ApplicationPool2/Spawner.h +64 -14
  345. data/ext/common/ApplicationPool2/SpawnerFactory.h +7 -7
  346. data/ext/common/ApplicationPool2/SuperGroup.h +5 -5
  347. data/ext/common/BackgroundEventLoop.cpp +4 -4
  348. data/ext/common/BackgroundEventLoop.h +1 -1
  349. data/ext/common/Constants.h +13 -1
  350. data/ext/common/EventedBufferedInput.h +8 -8
  351. data/ext/common/Exceptions.cpp +71 -0
  352. data/ext/common/Exceptions.h +60 -7
  353. data/ext/common/FileDescriptor.h +4 -4
  354. data/ext/common/MessageClient.h +1 -1
  355. data/ext/common/MessageServer.h +5 -5
  356. data/ext/common/MultiLibeio.cpp +3 -3
  357. data/ext/common/MultiLibeio.h +2 -2
  358. data/ext/common/RandomGenerator.h +11 -11
  359. data/ext/common/ResourceLocator.h +8 -1
  360. data/ext/common/SafeLibev.h +12 -12
  361. data/ext/common/ServerInstanceDir.h +11 -3
  362. data/ext/common/UnionStation.h +10 -10
  363. data/ext/common/Utils.cpp +11 -13
  364. data/ext/common/Utils.h +9 -9
  365. data/ext/common/Utils/BlockingQueue.h +10 -10
  366. data/ext/common/Utils/BufferedIO.h +1 -1
  367. data/ext/common/Utils/CachedFileStat.hpp +2 -2
  368. data/ext/common/Utils/FileChangeChecker.h +1 -1
  369. data/ext/common/Utils/HashMap.h +13 -4
  370. data/ext/common/Utils/IOUtils.cpp +33 -10
  371. data/ext/common/Utils/IniFile.h +3 -3
  372. data/ext/common/Utils/Lock.h +2 -2
  373. data/ext/common/Utils/MessagePassing.h +10 -10
  374. data/ext/common/Utils/ProcessMetricsCollector.h +24 -6
  375. data/ext/common/Utils/ScopeGuard.h +5 -5
  376. data/ext/common/Utils/jsoncpp.cpp +2 -0
  377. data/ext/common/agents/HelperAgent/FileBackedPipe.h +26 -26
  378. data/ext/common/agents/HelperAgent/Main.cpp +18 -18
  379. data/ext/common/agents/HelperAgent/RequestHandler.cpp +4 -4
  380. data/ext/common/agents/HelperAgent/RequestHandler.h +30 -21
  381. data/ext/common/agents/LoggingAgent/AdminController.h +1 -1
  382. data/ext/common/agents/LoggingAgent/FilterSupport.h +13 -11
  383. data/ext/common/agents/LoggingAgent/LoggingServer.h +11 -11
  384. data/ext/common/agents/LoggingAgent/Main.cpp +9 -9
  385. data/ext/common/agents/LoggingAgent/RemoteSender.h +3 -3
  386. data/ext/common/agents/SpawnPreparer.cpp +1 -0
  387. data/ext/common/agents/Watchdog/AgentWatcher.cpp +8 -7
  388. data/ext/common/agents/Watchdog/Main.cpp +81 -73
  389. data/ext/common/agents/Watchdog/ServerInstanceDirToucher.cpp +1 -1
  390. data/ext/libev/Changes +57 -0
  391. data/ext/libev/LICENSE +2 -1
  392. data/ext/libev/Makefile.in +110 -50
  393. data/ext/libev/README +8 -8
  394. data/ext/libev/aclocal.m4 +1503 -861
  395. data/ext/libev/config.guess +290 -304
  396. data/ext/libev/config.sub +77 -198
  397. data/ext/libev/configure +1735 -890
  398. data/ext/libev/configure.ac +3 -2
  399. data/ext/libev/ev++.h +6 -6
  400. data/ext/libev/ev.c +541 -214
  401. data/ext/libev/ev.h +106 -100
  402. data/ext/libev/ev_epoll.c +1 -1
  403. data/ext/libev/ev_kqueue.c +20 -4
  404. data/ext/libev/ev_vars.h +15 -16
  405. data/ext/libev/ev_win32.c +12 -2
  406. data/ext/libev/ev_wrap.h +162 -160
  407. data/ext/libev/event.c +29 -6
  408. data/ext/libev/event.h +9 -2
  409. data/ext/libev/ltmain.sh +2632 -1384
  410. data/ext/nginx/ConfigurationCommands.c +1 -1
  411. data/ext/nginx/ConfigurationCommands.c.erb +3 -1
  412. data/ext/nginx/ContentHandler.c +25 -2
  413. data/ext/nginx/CreateLocationConfig.c +1 -0
  414. data/ext/nginx/CreateLocationConfig.c.erb +1 -1
  415. data/ext/nginx/MergeLocationConfig.c +1 -0
  416. data/ext/nginx/MergeLocationConfig.c.erb +1 -1
  417. data/ext/nginx/config +12 -0
  418. data/ext/oxt/dynamic_thread_group.hpp +7 -4
  419. data/ext/oxt/system_calls.cpp +5 -1
  420. data/ext/oxt/system_calls.hpp +3 -0
  421. data/helper-scripts/node-loader.js +117 -249
  422. data/lib/phusion_passenger.rb +27 -5
  423. data/lib/phusion_passenger/abstract_installer.rb +104 -9
  424. data/lib/phusion_passenger/admin_tools/memory_stats.rb +10 -9
  425. data/lib/phusion_passenger/apache2/config_options.rb +6 -3
  426. data/lib/phusion_passenger/common_library.rb +7 -1
  427. data/lib/phusion_passenger/constants.rb +6 -0
  428. data/lib/phusion_passenger/loader_shared_helpers.rb +7 -4
  429. data/lib/phusion_passenger/nginx/config_options.rb +2 -1
  430. data/lib/phusion_passenger/packaging.rb +3 -0
  431. data/lib/phusion_passenger/platform_info/apache.rb +43 -6
  432. data/lib/phusion_passenger/platform_info/apache_detector.rb +15 -5
  433. data/lib/phusion_passenger/platform_info/compiler.rb +167 -32
  434. data/lib/phusion_passenger/platform_info/cxx_portability.rb +133 -77
  435. data/lib/phusion_passenger/platform_info/depcheck.rb +17 -7
  436. data/lib/phusion_passenger/platform_info/depcheck_specs/apache2.rb +3 -3
  437. data/lib/phusion_passenger/platform_info/depcheck_specs/compiler_toolchain.rb +4 -4
  438. data/lib/phusion_passenger/platform_info/depcheck_specs/ruby.rb +5 -6
  439. data/lib/phusion_passenger/platform_info/linux.rb +2 -1
  440. data/lib/phusion_passenger/platform_info/operating_system.rb +1 -1
  441. data/lib/phusion_passenger/platform_info/ruby.rb +18 -3
  442. data/lib/phusion_passenger/standalone/runtime_installer.rb +6 -2
  443. data/lib/phusion_passenger/standalone/start_command.rb +8 -2
  444. data/lib/phusion_passenger/utils/ansi_colors.rb +9 -0
  445. data/lib/phusion_passenger/utils/hosts_file_parser.rb +4 -2
  446. data/node_lib/phusion_passenger/httplib_emulation.js +141 -0
  447. data/node_lib/phusion_passenger/line_reader.js +154 -0
  448. data/node_lib/phusion_passenger/request_handler.js +65 -0
  449. data/node_lib/phusion_passenger/session_protocol_parser.js +113 -0
  450. data/resources/templates/apache2/deployment_example.txt.erb +2 -1
  451. data/resources/templates/apache2/installing_against_a_different_apache.txt.erb +14 -0
  452. data/resources/templates/apache2/multiple_apache_installations_detected.txt.erb +15 -0
  453. data/resources/templates/apache2/possible_solutions_for_compilation_and_installation_problems.txt.erb +4 -5
  454. data/resources/templates/general_error_with_html.html.template +1 -1
  455. data/resources/templates/installer_common/gem_install_permission_problems.txt.erb +17 -0
  456. data/resources/templates/installer_common/low_amount_of_memory_warning.txt.erb +6 -4
  457. data/resources/templates/installer_common/world_inaccessible_directories.txt.erb +16 -0
  458. data/resources/templates/nginx/deployment_example.txt.erb +2 -1
  459. data/resources/templates/nginx/possible_solutions_for_compilation_and_installation_problems.txt.erb +4 -5
  460. data/resources/templates/standalone/config.erb +1 -0
  461. data/test/cxx/ApplicationPool2/DirectSpawnerTest.cpp +3 -3
  462. data/test/cxx/ApplicationPool2/PoolTest.cpp +4 -4
  463. data/test/cxx/ApplicationPool2/ProcessTest.cpp +5 -5
  464. data/test/cxx/ApplicationPool2/SmartSpawnerTest.cpp +5 -5
  465. data/test/cxx/ApplicationPool2/SpawnerTestCases.cpp +1 -1
  466. data/test/cxx/EventedBufferedInputTest.cpp +6 -6
  467. data/test/cxx/FileBackedPipeTest.cpp +1 -1
  468. data/test/cxx/MessagePassingTest.cpp +1 -1
  469. data/test/cxx/MessageServerTest.cpp +4 -4
  470. data/test/cxx/RequestHandlerTest.cpp +7 -7
  471. data/test/cxx/UnionStationTest.cpp +2 -2
  472. data/test/node/line_reader_spec.js +338 -0
  473. data/test/node/spec_helper.js +27 -0
  474. data/test/ruby/standalone/runtime_installer_spec.rb +2 -1
  475. metadata +131 -22
  476. metadata.gz.asc +7 -7
  477. data/ext/boost/functional/hash/detail/container_fwd_0x.hpp +0 -29
  478. data/ext/boost/lambda/core.hpp +0 -79
  479. data/ext/boost/lambda/detail/actions.hpp +0 -174
  480. data/ext/boost/lambda/detail/arity_code.hpp +0 -110
  481. data/ext/boost/lambda/detail/function_adaptors.hpp +0 -789
  482. data/ext/boost/lambda/detail/is_instance_of.hpp +0 -104
  483. data/ext/boost/lambda/detail/lambda_config.hpp +0 -48
  484. data/ext/boost/lambda/detail/lambda_functor_base.hpp +0 -615
  485. data/ext/boost/lambda/detail/lambda_functors.hpp +0 -324
  486. data/ext/boost/lambda/detail/lambda_fwd.hpp +0 -74
  487. data/ext/boost/lambda/detail/lambda_traits.hpp +0 -578
  488. data/ext/boost/lambda/detail/member_ptr.hpp +0 -737
  489. data/ext/boost/lambda/detail/operator_actions.hpp +0 -139
  490. data/ext/boost/lambda/detail/operator_lambda_func_base.hpp +0 -271
  491. data/ext/boost/lambda/detail/operator_return_type_traits.hpp +0 -917
  492. data/ext/boost/lambda/detail/operators.hpp +0 -370
  493. data/ext/boost/lambda/detail/ret.hpp +0 -325
  494. data/ext/boost/lambda/detail/return_type_traits.hpp +0 -282
  495. data/ext/boost/lambda/detail/select_functions.hpp +0 -74
  496. data/ext/boost/lambda/lambda.hpp +0 -34
@@ -1,324 +0,0 @@
1
- // Boost Lambda Library - lambda_functors.hpp -------------------------------
2
-
3
- // Copyright (C) 1999, 2000 Jaakko Jarvi (jaakko.jarvi@cs.utu.fi)
4
- //
5
- // Distributed under the Boost Software License, Version 1.0. (See
6
- // accompanying file LICENSE_1_0.txt or copy at
7
- // http://www.boost.org/LICENSE_1_0.txt)
8
- //
9
- // For more information, see http://www.boost.org
10
-
11
- // ------------------------------------------------
12
-
13
- #ifndef BOOST_LAMBDA_LAMBDA_FUNCTORS_HPP
14
- #define BOOST_LAMBDA_LAMBDA_FUNCTORS_HPP
15
-
16
- #include <boost/config.hpp>
17
- #include <boost/detail/workaround.hpp>
18
-
19
- #if BOOST_WORKAROUND(BOOST_MSVC, == 1310)
20
-
21
- #include <boost/mpl/or.hpp>
22
- #include <boost/utility/enable_if.hpp>
23
- #include <boost/type_traits/is_array.hpp>
24
-
25
- #define BOOST_LAMBDA_DISABLE_IF_ARRAY1(A1, R1)\
26
- typename lazy_disable_if<is_array<A1>, typename R1 >::type
27
- #define BOOST_LAMBDA_DISABLE_IF_ARRAY2(A1, A2, R1, R2) \
28
- typename lazy_disable_if<mpl::or_<is_array<A1>, is_array<A2> >, typename R1, R2 >::type
29
- #define BOOST_LAMBDA_DISABLE_IF_ARRAY3(A1, A2, A3, R1, R2, R3) \
30
- typename lazy_disable_if<mpl::or_<is_array<A1>, is_array<A2>, is_array<A3> >, typename R1, R2, R3 >::type
31
-
32
- #else
33
-
34
- #define BOOST_LAMBDA_DISABLE_IF_ARRAY1(A1, R1) typename R1::type
35
- #define BOOST_LAMBDA_DISABLE_IF_ARRAY2(A1, A2, R1, R2) typename R1, R2::type
36
- #define BOOST_LAMBDA_DISABLE_IF_ARRAY3(A1, A2, A3, R1, R2, R3) typename R1, R2, R3::type
37
-
38
- #endif
39
-
40
- namespace boost {
41
- namespace lambda {
42
-
43
- // -- lambda_functor --------------------------------------------
44
- // --------------------------------------------------------------
45
-
46
- //inline const null_type const_null_type() { return null_type(); }
47
-
48
- namespace detail {
49
- namespace {
50
-
51
- static const null_type constant_null_type = null_type();
52
-
53
- } // unnamed
54
- } // detail
55
-
56
- class unused {};
57
-
58
- #define cnull_type() detail::constant_null_type
59
-
60
- // -- free variables types --------------------------------------------------
61
-
62
- // helper to work around the case where the nullary return type deduction
63
- // is always performed, even though the functor is not nullary
64
- namespace detail {
65
- template<int N, class Tuple> struct get_element_or_null_type {
66
- typedef typename
67
- detail::tuple_element_as_reference<N, Tuple>::type type;
68
- };
69
- template<int N> struct get_element_or_null_type<N, null_type> {
70
- typedef null_type type;
71
- };
72
- }
73
-
74
- template <int I> struct placeholder;
75
-
76
- template<> struct placeholder<FIRST> {
77
-
78
- template<class SigArgs> struct sig {
79
- typedef typename detail::get_element_or_null_type<0, SigArgs>::type type;
80
- };
81
-
82
- template<class RET, CALL_TEMPLATE_ARGS>
83
- RET call(CALL_FORMAL_ARGS) const {
84
- BOOST_STATIC_ASSERT(boost::is_reference<RET>::value);
85
- CALL_USE_ARGS; // does nothing, prevents warnings for unused args
86
- return a;
87
- }
88
- };
89
-
90
- template<> struct placeholder<SECOND> {
91
-
92
- template<class SigArgs> struct sig {
93
- typedef typename detail::get_element_or_null_type<1, SigArgs>::type type;
94
- };
95
-
96
- template<class RET, CALL_TEMPLATE_ARGS>
97
- RET call(CALL_FORMAL_ARGS) const { CALL_USE_ARGS; return b; }
98
- };
99
-
100
- template<> struct placeholder<THIRD> {
101
-
102
- template<class SigArgs> struct sig {
103
- typedef typename detail::get_element_or_null_type<2, SigArgs>::type type;
104
- };
105
-
106
- template<class RET, CALL_TEMPLATE_ARGS>
107
- RET call(CALL_FORMAL_ARGS) const { CALL_USE_ARGS; return c; }
108
- };
109
-
110
- template<> struct placeholder<EXCEPTION> {
111
-
112
- template<class SigArgs> struct sig {
113
- typedef typename detail::get_element_or_null_type<3, SigArgs>::type type;
114
- };
115
-
116
- template<class RET, CALL_TEMPLATE_ARGS>
117
- RET call(CALL_FORMAL_ARGS) const { CALL_USE_ARGS; return env; }
118
- };
119
-
120
- typedef const lambda_functor<placeholder<FIRST> > placeholder1_type;
121
- typedef const lambda_functor<placeholder<SECOND> > placeholder2_type;
122
- typedef const lambda_functor<placeholder<THIRD> > placeholder3_type;
123
-
124
-
125
- ///////////////////////////////////////////////////////////////////////////////
126
-
127
-
128
- // free variables are lambda_functors. This is to allow uniform handling with
129
- // other lambda_functors.
130
- // -------------------------------------------------------------------
131
-
132
- #if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
133
- #pragma warning(push)
134
- #pragma warning(disable:4512) //assignment operator could not be generated
135
- #endif
136
-
137
- // -- lambda_functor NONE ------------------------------------------------
138
- template <class T>
139
- class lambda_functor : public T
140
- {
141
-
142
- BOOST_STATIC_CONSTANT(int, arity_bits = get_arity<T>::value);
143
-
144
- public:
145
- typedef T inherited;
146
-
147
- lambda_functor() {}
148
- lambda_functor(const lambda_functor& l) : inherited(l) {}
149
-
150
- lambda_functor(const T& t) : inherited(t) {}
151
-
152
- template <class SigArgs> struct sig {
153
- typedef typename inherited::template
154
- sig<typename SigArgs::tail_type>::type type;
155
- };
156
-
157
- // Note that this return type deduction template is instantiated, even
158
- // if the nullary
159
- // operator() is not called at all. One must make sure that it does not fail.
160
- typedef typename
161
- inherited::template sig<null_type>::type
162
- nullary_return_type;
163
-
164
- // Support for boost::result_of.
165
- template <class Sig> struct result;
166
- template <class F>
167
- struct result<F()> {
168
- typedef nullary_return_type type;
169
- };
170
- template <class F, class A>
171
- struct result<F(A)> {
172
- typedef typename sig<tuple<F, A> >::type type;
173
- };
174
- template <class F, class A, class B>
175
- struct result<F(A, B)> {
176
- typedef typename sig<tuple<F, A, B> >::type type;
177
- };
178
- template <class F, class A, class B, class C>
179
- struct result<F(A, B, C)> {
180
- typedef typename sig<tuple<F, A, B, C> >::type type;
181
- };
182
-
183
- nullary_return_type operator()() const {
184
- return inherited::template
185
- call<nullary_return_type>
186
- (cnull_type(), cnull_type(), cnull_type(), cnull_type());
187
- }
188
-
189
- template<class A>
190
- typename inherited::template sig<tuple<A&> >::type
191
- operator()(A& a) const {
192
- return inherited::template call<
193
- typename inherited::template sig<tuple<A&> >::type
194
- >(a, cnull_type(), cnull_type(), cnull_type());
195
- }
196
-
197
- template<class A>
198
- BOOST_LAMBDA_DISABLE_IF_ARRAY1(A, inherited::template sig<tuple<A const&> >)
199
- operator()(A const& a) const {
200
- return inherited::template call<
201
- typename inherited::template sig<tuple<A const&> >::type
202
- >(a, cnull_type(), cnull_type(), cnull_type());
203
- }
204
-
205
- template<class A, class B>
206
- typename inherited::template sig<tuple<A&, B&> >::type
207
- operator()(A& a, B& b) const {
208
- return inherited::template call<
209
- typename inherited::template sig<tuple<A&, B&> >::type
210
- >(a, b, cnull_type(), cnull_type());
211
- }
212
-
213
- template<class A, class B>
214
- BOOST_LAMBDA_DISABLE_IF_ARRAY2(A, B, inherited::template sig<tuple<A const&, B&> >)
215
- operator()(A const& a, B& b) const {
216
- return inherited::template call<
217
- typename inherited::template sig<tuple<A const&, B&> >::type
218
- >(a, b, cnull_type(), cnull_type());
219
- }
220
-
221
- template<class A, class B>
222
- BOOST_LAMBDA_DISABLE_IF_ARRAY2(A, B, inherited::template sig<tuple<A&, B const&> >)
223
- operator()(A& a, B const& b) const {
224
- return inherited::template call<
225
- typename inherited::template sig<tuple<A&, B const&> >::type
226
- >(a, b, cnull_type(), cnull_type());
227
- }
228
-
229
- template<class A, class B>
230
- BOOST_LAMBDA_DISABLE_IF_ARRAY2(A, B, inherited::template sig<tuple<A const&, B const&> >)
231
- operator()(A const& a, B const& b) const {
232
- return inherited::template call<
233
- typename inherited::template sig<tuple<A const&, B const&> >::type
234
- >(a, b, cnull_type(), cnull_type());
235
- }
236
-
237
- template<class A, class B, class C>
238
- typename inherited::template sig<tuple<A&, B&, C&> >::type
239
- operator()(A& a, B& b, C& c) const
240
- {
241
- return inherited::template call<
242
- typename inherited::template sig<tuple<A&, B&, C&> >::type
243
- >(a, b, c, cnull_type());
244
- }
245
-
246
- template<class A, class B, class C>
247
- BOOST_LAMBDA_DISABLE_IF_ARRAY3(A, B, C, inherited::template sig<tuple<A const&, B const&, C const&> >)
248
- operator()(A const& a, B const& b, C const& c) const
249
- {
250
- return inherited::template call<
251
- typename inherited::template sig<tuple<A const&, B const&, C const&> >::type
252
- >(a, b, c, cnull_type());
253
- }
254
-
255
- // for internal calls with env
256
- template<CALL_TEMPLATE_ARGS>
257
- typename inherited::template sig<tuple<CALL_REFERENCE_TYPES> >::type
258
- internal_call(CALL_FORMAL_ARGS) const {
259
- return inherited::template
260
- call<typename inherited::template
261
- sig<tuple<CALL_REFERENCE_TYPES> >::type>(CALL_ACTUAL_ARGS);
262
- }
263
-
264
- template<class A>
265
- const lambda_functor<lambda_functor_base<
266
- other_action<assignment_action>,
267
- boost::tuple<lambda_functor,
268
- typename const_copy_argument <const A>::type> > >
269
- operator=(const A& a) const {
270
- return lambda_functor_base<
271
- other_action<assignment_action>,
272
- boost::tuple<lambda_functor,
273
- typename const_copy_argument <const A>::type> >
274
- ( boost::tuple<lambda_functor,
275
- typename const_copy_argument <const A>::type>(*this, a) );
276
- }
277
-
278
- template<class A>
279
- const lambda_functor<lambda_functor_base<
280
- other_action<subscript_action>,
281
- boost::tuple<lambda_functor,
282
- typename const_copy_argument <const A>::type> > >
283
- operator[](const A& a) const {
284
- return lambda_functor_base<
285
- other_action<subscript_action>,
286
- boost::tuple<lambda_functor,
287
- typename const_copy_argument <const A>::type> >
288
- ( boost::tuple<lambda_functor,
289
- typename const_copy_argument <const A>::type>(*this, a ) );
290
- }
291
- };
292
-
293
- #if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
294
- #pragma warning(pop)
295
- #endif
296
-
297
- } // namespace lambda
298
- } // namespace boost
299
-
300
- // is_placeholder
301
-
302
- #include <boost/is_placeholder.hpp>
303
-
304
- namespace boost
305
- {
306
-
307
- template<> struct is_placeholder< lambda::lambda_functor< lambda::placeholder<lambda::FIRST> > >
308
- {
309
- enum _vt { value = 1 };
310
- };
311
-
312
- template<> struct is_placeholder< lambda::lambda_functor< lambda::placeholder<lambda::SECOND> > >
313
- {
314
- enum _vt { value = 2 };
315
- };
316
-
317
- template<> struct is_placeholder< lambda::lambda_functor< lambda::placeholder<lambda::THIRD> > >
318
- {
319
- enum _vt { value = 3 };
320
- };
321
-
322
- } // namespace boost
323
-
324
- #endif
@@ -1,74 +0,0 @@
1
- // lambda_fwd.hpp - Boost Lambda Library -------------------------------
2
-
3
- // Copyright (C) 1999, 2000 Jaakko Jarvi (jaakko.jarvi@cs.utu.fi)
4
- //
5
- // Distributed under the Boost Software License, Version 1.0. (See
6
- // accompanying file LICENSE_1_0.txt or copy at
7
- // http://www.boost.org/LICENSE_1_0.txt)
8
- //
9
- // For more information, see www.boost.org
10
-
11
- // -------------------------------------------------------
12
-
13
- #ifndef BOOST_LAMBDA_FWD_HPP
14
- #define BOOST_LAMBDA_FWD_HPP
15
-
16
- namespace boost {
17
- namespace lambda {
18
-
19
- namespace detail {
20
-
21
- template<class T> struct generate_error;
22
-
23
- }
24
- // -- placeholders --------------------------------------------
25
-
26
- template <int I> struct placeholder;
27
-
28
- // function_adaptors
29
- template <class Func>
30
- struct function_adaptor;
31
-
32
- template <int I, class Act> class action;
33
-
34
- template <class Base>
35
- class lambda_functor;
36
-
37
- template <class Act, class Args>
38
- class lambda_functor_base;
39
-
40
- } // namespace lambda
41
- } // namespace boost
42
-
43
-
44
- // #define CALL_TEMPLATE_ARGS class A, class Env
45
- // #define CALL_FORMAL_ARGS A& a, Env& env
46
- // #define CALL_ACTUAL_ARGS a, env
47
- // #define CALL_ACTUAL_ARGS_NO_ENV a
48
- // #define CALL_REFERENCE_TYPES A&, Env&
49
- // #define CALL_PLAIN_TYPES A, Env
50
- #define CALL_TEMPLATE_ARGS class A, class B, class C, class Env
51
- #define CALL_FORMAL_ARGS A& a, B& b, C& c, Env& env
52
- #define CALL_ACTUAL_ARGS a, b, c, env
53
- #define CALL_ACTUAL_ARGS_NO_ENV a, b, c
54
- #define CALL_REFERENCE_TYPES A&, B&, C&, Env&
55
- #define CALL_PLAIN_TYPES A, B, C, Env
56
-
57
- namespace boost {
58
- namespace lambda {
59
- namespace detail {
60
-
61
- template<class A1, class A2, class A3, class A4>
62
- void do_nothing(A1&, A2&, A3&, A4&) {}
63
-
64
- } // detail
65
- } // lambda
66
- } // boost
67
-
68
- // prevent the warnings from unused arguments
69
- #define CALL_USE_ARGS \
70
- ::boost::lambda::detail::do_nothing(a, b, c, env)
71
-
72
-
73
-
74
- #endif
@@ -1,578 +0,0 @@
1
- // - lambda_traits.hpp --- Boost Lambda Library ----------------------------
2
- //
3
- // Copyright (C) 1999, 2000 Jaakko Jarvi (jaakko.jarvi@cs.utu.fi)
4
- //
5
- // Distributed under the Boost Software License, Version 1.0. (See
6
- // accompanying file LICENSE_1_0.txt or copy at
7
- // http://www.boost.org/LICENSE_1_0.txt)
8
- //
9
- // For more information, see www.boost.org
10
- // -------------------------------------------------------------------------
11
-
12
- #ifndef BOOST_LAMBDA_LAMBDA_TRAITS_HPP
13
- #define BOOST_LAMBDA_LAMBDA_TRAITS_HPP
14
-
15
- #include "boost/type_traits/transform_traits.hpp"
16
- #include "boost/type_traits/cv_traits.hpp"
17
- #include "boost/type_traits/function_traits.hpp"
18
- #include "boost/type_traits/object_traits.hpp"
19
- #include "boost/tuple/tuple.hpp"
20
-
21
- namespace boost {
22
- namespace lambda {
23
-
24
- // -- if construct ------------------------------------------------
25
- // Proposed by Krzysztof Czarnecki and Ulrich Eisenecker
26
-
27
- namespace detail {
28
-
29
- template <bool If, class Then, class Else> struct IF { typedef Then RET; };
30
-
31
- template <class Then, class Else> struct IF<false, Then, Else> {
32
- typedef Else RET;
33
- };
34
-
35
-
36
- // An if construct that doesn't instantiate the non-matching template:
37
-
38
- // Called as:
39
- // IF_type<condition, A, B>::type
40
- // The matching template must define the typeded 'type'
41
- // I.e. A::type if condition is true, B::type if condition is false
42
- // Idea from Vesa Karvonen (from C&E as well I guess)
43
- template<class T>
44
- struct IF_type_
45
- {
46
- typedef typename T::type type;
47
- };
48
-
49
-
50
- template<bool C, class T, class E>
51
- struct IF_type
52
- {
53
- typedef typename
54
- IF_type_<typename IF<C, T, E>::RET >::type type;
55
- };
56
-
57
- // helper that can be used to give typedef T to some type
58
- template <class T> struct identity_mapping { typedef T type; };
59
-
60
- // An if construct for finding an integral constant 'value'
61
- // Does not instantiate the non-matching branch
62
- // Called as IF_value<condition, A, B>::value
63
- // If condition is true A::value must be defined, otherwise B::value
64
-
65
- template<class T>
66
- struct IF_value_
67
- {
68
- BOOST_STATIC_CONSTANT(int, value = T::value);
69
- };
70
-
71
-
72
- template<bool C, class T, class E>
73
- struct IF_value
74
- {
75
- BOOST_STATIC_CONSTANT(int, value = (IF_value_<typename IF<C, T, E>::RET>::value));
76
- };
77
-
78
-
79
- // --------------------------------------------------------------
80
-
81
- // removes reference from other than function types:
82
- template<class T> class remove_reference_if_valid
83
- {
84
-
85
- typedef typename boost::remove_reference<T>::type plainT;
86
- public:
87
- typedef typename IF<
88
- boost::is_function<plainT>::value,
89
- T,
90
- plainT
91
- >::RET type;
92
-
93
- };
94
-
95
-
96
- template<class T> struct remove_reference_and_cv {
97
- typedef typename boost::remove_cv<
98
- typename boost::remove_reference<T>::type
99
- >::type type;
100
- };
101
-
102
-
103
-
104
- // returns a reference to the element of tuple T
105
- template<int N, class T> struct tuple_element_as_reference {
106
- typedef typename
107
- boost::tuples::access_traits<
108
- typename boost::tuples::element<N, T>::type
109
- >::non_const_type type;
110
- };
111
-
112
- // returns the cv and reverence stripped type of a tuple element
113
- template<int N, class T> struct tuple_element_stripped {
114
- typedef typename
115
- remove_reference_and_cv<
116
- typename boost::tuples::element<N, T>::type
117
- >::type type;
118
- };
119
-
120
- // is_lambda_functor -------------------------------------------------
121
-
122
- template <class T> struct is_lambda_functor_ {
123
- BOOST_STATIC_CONSTANT(bool, value = false);
124
- };
125
-
126
- template <class Arg> struct is_lambda_functor_<lambda_functor<Arg> > {
127
- BOOST_STATIC_CONSTANT(bool, value = true);
128
- };
129
-
130
- } // end detail
131
-
132
-
133
- template <class T> struct is_lambda_functor {
134
- BOOST_STATIC_CONSTANT(bool,
135
- value =
136
- detail::is_lambda_functor_<
137
- typename detail::remove_reference_and_cv<T>::type
138
- >::value);
139
- };
140
-
141
-
142
- namespace detail {
143
-
144
- // -- parameter_traits_ ---------------------------------------------
145
-
146
- // An internal parameter type traits class that respects
147
- // the reference_wrapper class.
148
-
149
- // The conversions performed are:
150
- // references -> compile_time_error
151
- // T1 -> T2,
152
- // reference_wrapper<T> -> T&
153
- // const array -> ref to const array
154
- // array -> ref to array
155
- // function -> ref to function
156
-
157
- // ------------------------------------------------------------------------
158
-
159
- template<class T1, class T2>
160
- struct parameter_traits_ {
161
- typedef T2 type;
162
- };
163
-
164
- // Do not instantiate with reference types
165
- template<class T, class Any> struct parameter_traits_<T&, Any> {
166
- typedef typename
167
- generate_error<T&>::
168
- parameter_traits_class_instantiated_with_reference_type type;
169
- };
170
-
171
- // Arrays can't be stored as plain types; convert them to references
172
- template<class T, int n, class Any> struct parameter_traits_<T[n], Any> {
173
- typedef T (&type)[n];
174
- };
175
-
176
- template<class T, int n, class Any>
177
- struct parameter_traits_<const T[n], Any> {
178
- typedef const T (&type)[n];
179
- };
180
-
181
- template<class T, int n, class Any>
182
- struct parameter_traits_<volatile T[n], Any> {
183
- typedef volatile T (&type)[n];
184
- };
185
- template<class T, int n, class Any>
186
- struct parameter_traits_<const volatile T[n], Any> {
187
- typedef const volatile T (&type)[n];
188
- };
189
-
190
-
191
- template<class T, class Any>
192
- struct parameter_traits_<boost::reference_wrapper<T>, Any >{
193
- typedef T& type;
194
- };
195
-
196
- template<class T, class Any>
197
- struct parameter_traits_<const boost::reference_wrapper<T>, Any >{
198
- typedef T& type;
199
- };
200
-
201
- template<class T, class Any>
202
- struct parameter_traits_<volatile boost::reference_wrapper<T>, Any >{
203
- typedef T& type;
204
- };
205
-
206
- template<class T, class Any>
207
- struct parameter_traits_<const volatile boost::reference_wrapper<T>, Any >{
208
- typedef T& type;
209
- };
210
-
211
- template<class Any>
212
- struct parameter_traits_<void, Any> {
213
- typedef void type;
214
- };
215
-
216
- template<class Arg, class Any>
217
- struct parameter_traits_<lambda_functor<Arg>, Any > {
218
- typedef lambda_functor<Arg> type;
219
- };
220
-
221
- template<class Arg, class Any>
222
- struct parameter_traits_<const lambda_functor<Arg>, Any > {
223
- typedef lambda_functor<Arg> type;
224
- };
225
-
226
- // Are the volatile versions needed?
227
- template<class Arg, class Any>
228
- struct parameter_traits_<volatile lambda_functor<Arg>, Any > {
229
- typedef lambda_functor<Arg> type;
230
- };
231
-
232
- template<class Arg, class Any>
233
- struct parameter_traits_<const volatile lambda_functor<Arg>, Any > {
234
- typedef lambda_functor<Arg> type;
235
- };
236
-
237
- } // end namespace detail
238
-
239
-
240
- // ------------------------------------------------------------------------
241
- // traits classes for lambda expressions (bind functions, operators ...)
242
-
243
- // must be instantiated with non-reference types
244
-
245
- // The default is const plain type -------------------------
246
- // const T -> const T,
247
- // T -> const T,
248
- // references -> compile_time_error
249
- // reference_wrapper<T> -> T&
250
- // array -> const ref array
251
- template<class T>
252
- struct const_copy_argument {
253
- typedef typename
254
- detail::parameter_traits_<
255
- T,
256
- typename detail::IF<boost::is_function<T>::value, T&, const T>::RET
257
- >::type type;
258
- };
259
-
260
- // T may be a function type. Without the IF test, const would be added
261
- // to a function type, which is illegal.
262
-
263
- // all arrays are converted to const.
264
- // This traits template is used for 'const T&' parameter passing
265
- // and thus the knowledge of the potential
266
- // non-constness of an actual argument is lost.
267
- template<class T, int n> struct const_copy_argument <T[n]> {
268
- typedef const T (&type)[n];
269
- };
270
- template<class T, int n> struct const_copy_argument <volatile T[n]> {
271
- typedef const volatile T (&type)[n];
272
- };
273
-
274
- template<class T>
275
- struct const_copy_argument<T&> {};
276
- // do not instantiate with references
277
- // typedef typename detail::generate_error<T&>::references_not_allowed type;
278
-
279
-
280
- template<>
281
- struct const_copy_argument<void> {
282
- typedef void type;
283
- };
284
-
285
-
286
- // Does the same as const_copy_argument, but passes references through as such
287
- template<class T>
288
- struct bound_argument_conversion {
289
- typedef typename const_copy_argument<T>::type type;
290
- };
291
-
292
- template<class T>
293
- struct bound_argument_conversion<T&> {
294
- typedef T& type;
295
- };
296
-
297
- // The default is non-const reference -------------------------
298
- // const T -> const T&,
299
- // T -> T&,
300
- // references -> compile_time_error
301
- // reference_wrapper<T> -> T&
302
- template<class T>
303
- struct reference_argument {
304
- typedef typename detail::parameter_traits_<T, T&>::type type;
305
- };
306
-
307
- template<class T>
308
- struct reference_argument<T&> {
309
- typedef typename detail::generate_error<T&>::references_not_allowed type;
310
- };
311
-
312
- template<class Arg>
313
- struct reference_argument<lambda_functor<Arg> > {
314
- typedef lambda_functor<Arg> type;
315
- };
316
-
317
- template<class Arg>
318
- struct reference_argument<const lambda_functor<Arg> > {
319
- typedef lambda_functor<Arg> type;
320
- };
321
-
322
- // Are the volatile versions needed?
323
- template<class Arg>
324
- struct reference_argument<volatile lambda_functor<Arg> > {
325
- typedef lambda_functor<Arg> type;
326
- };
327
-
328
- template<class Arg>
329
- struct reference_argument<const volatile lambda_functor<Arg> > {
330
- typedef lambda_functor<Arg> type;
331
- };
332
-
333
- template<>
334
- struct reference_argument<void> {
335
- typedef void type;
336
- };
337
-
338
- namespace detail {
339
-
340
- // Array to pointer conversion
341
- template <class T>
342
- struct array_to_pointer {
343
- typedef T type;
344
- };
345
-
346
- template <class T, int N>
347
- struct array_to_pointer <const T[N]> {
348
- typedef const T* type;
349
- };
350
- template <class T, int N>
351
- struct array_to_pointer <T[N]> {
352
- typedef T* type;
353
- };
354
-
355
- template <class T, int N>
356
- struct array_to_pointer <const T (&) [N]> {
357
- typedef const T* type;
358
- };
359
- template <class T, int N>
360
- struct array_to_pointer <T (&) [N]> {
361
- typedef T* type;
362
- };
363
-
364
-
365
- // ---------------------------------------------------------------------------
366
- // The call_traits for bind
367
- // Respects the reference_wrapper class.
368
-
369
- // These templates are used outside of bind functions as well.
370
- // the bind_tuple_mapper provides a shorter notation for default
371
- // bound argument storing semantics, if all arguments are treated
372
- // uniformly.
373
-
374
- // from template<class T> foo(const T& t) : bind_traits<const T>::type
375
- // from template<class T> foo(T& t) : bind_traits<T>::type
376
-
377
- // Conversions:
378
- // T -> const T,
379
- // cv T -> cv T,
380
- // T& -> T&
381
- // reference_wrapper<T> -> T&
382
- // const reference_wrapper<T> -> T&
383
- // array -> const ref array
384
-
385
- // make bound arguments const, this is a deliberate design choice, the
386
- // purpose is to prevent side effects to bound arguments that are stored
387
- // as copies
388
- template<class T>
389
- struct bind_traits {
390
- typedef const T type;
391
- };
392
-
393
- template<class T>
394
- struct bind_traits<T&> {
395
- typedef T& type;
396
- };
397
-
398
- // null_types are an exception, we always want to store them as non const
399
- // so that other templates can assume that null_type is always without const
400
- template<>
401
- struct bind_traits<null_type> {
402
- typedef null_type type;
403
- };
404
-
405
- // the bind_tuple_mapper, bind_type_generators may
406
- // introduce const to null_type
407
- template<>
408
- struct bind_traits<const null_type> {
409
- typedef null_type type;
410
- };
411
-
412
- // Arrays can't be stored as plain types; convert them to references.
413
- // All arrays are converted to const. This is because bind takes its
414
- // parameters as const T& and thus the knowledge of the potential
415
- // non-constness of actual argument is lost.
416
- template<class T, int n> struct bind_traits <T[n]> {
417
- typedef const T (&type)[n];
418
- };
419
-
420
- template<class T, int n>
421
- struct bind_traits<const T[n]> {
422
- typedef const T (&type)[n];
423
- };
424
-
425
- template<class T, int n> struct bind_traits<volatile T[n]> {
426
- typedef const volatile T (&type)[n];
427
- };
428
-
429
- template<class T, int n>
430
- struct bind_traits<const volatile T[n]> {
431
- typedef const volatile T (&type)[n];
432
- };
433
-
434
- template<class R>
435
- struct bind_traits<R()> {
436
- typedef R(&type)();
437
- };
438
-
439
- template<class R, class Arg1>
440
- struct bind_traits<R(Arg1)> {
441
- typedef R(&type)(Arg1);
442
- };
443
-
444
- template<class R, class Arg1, class Arg2>
445
- struct bind_traits<R(Arg1, Arg2)> {
446
- typedef R(&type)(Arg1, Arg2);
447
- };
448
-
449
- template<class R, class Arg1, class Arg2, class Arg3>
450
- struct bind_traits<R(Arg1, Arg2, Arg3)> {
451
- typedef R(&type)(Arg1, Arg2, Arg3);
452
- };
453
-
454
- template<class R, class Arg1, class Arg2, class Arg3, class Arg4>
455
- struct bind_traits<R(Arg1, Arg2, Arg3, Arg4)> {
456
- typedef R(&type)(Arg1, Arg2, Arg3, Arg4);
457
- };
458
-
459
- template<class R, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5>
460
- struct bind_traits<R(Arg1, Arg2, Arg3, Arg4, Arg5)> {
461
- typedef R(&type)(Arg1, Arg2, Arg3, Arg4, Arg5);
462
- };
463
-
464
- template<class R, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6>
465
- struct bind_traits<R(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6)> {
466
- typedef R(&type)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6);
467
- };
468
-
469
- template<class R, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6, class Arg7>
470
- struct bind_traits<R(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7)> {
471
- typedef R(&type)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7);
472
- };
473
-
474
- template<class R, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6, class Arg7, class Arg8>
475
- struct bind_traits<R(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8)> {
476
- typedef R(&type)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8);
477
- };
478
-
479
- template<class R, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6, class Arg7, class Arg8, class Arg9>
480
- struct bind_traits<R(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, Arg9)> {
481
- typedef R(&type)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, Arg9);
482
- };
483
-
484
- template<class T>
485
- struct bind_traits<reference_wrapper<T> >{
486
- typedef T& type;
487
- };
488
-
489
- template<class T>
490
- struct bind_traits<const reference_wrapper<T> >{
491
- typedef T& type;
492
- };
493
-
494
- template<>
495
- struct bind_traits<void> {
496
- typedef void type;
497
- };
498
-
499
-
500
-
501
- template <
502
- class T0 = null_type, class T1 = null_type, class T2 = null_type,
503
- class T3 = null_type, class T4 = null_type, class T5 = null_type,
504
- class T6 = null_type, class T7 = null_type, class T8 = null_type,
505
- class T9 = null_type
506
- >
507
- struct bind_tuple_mapper {
508
- typedef
509
- tuple<typename bind_traits<T0>::type,
510
- typename bind_traits<T1>::type,
511
- typename bind_traits<T2>::type,
512
- typename bind_traits<T3>::type,
513
- typename bind_traits<T4>::type,
514
- typename bind_traits<T5>::type,
515
- typename bind_traits<T6>::type,
516
- typename bind_traits<T7>::type,
517
- typename bind_traits<T8>::type,
518
- typename bind_traits<T9>::type> type;
519
- };
520
-
521
- // bind_traits, except map const T& -> const T
522
- // this is needed e.g. in currying. Const reference arguments can
523
- // refer to temporaries, so it is not safe to store them as references.
524
- template <class T> struct remove_const_reference {
525
- typedef typename bind_traits<T>::type type;
526
- };
527
-
528
- template <class T> struct remove_const_reference<const T&> {
529
- typedef const T type;
530
- };
531
-
532
-
533
- // maps the bind argument types to the resulting lambda functor type
534
- template <
535
- class T0 = null_type, class T1 = null_type, class T2 = null_type,
536
- class T3 = null_type, class T4 = null_type, class T5 = null_type,
537
- class T6 = null_type, class T7 = null_type, class T8 = null_type,
538
- class T9 = null_type
539
- >
540
- class bind_type_generator {
541
-
542
- typedef typename
543
- detail::bind_tuple_mapper<
544
- T0, T1, T2, T3, T4, T5, T6, T7, T8, T9
545
- >::type args_t;
546
-
547
- BOOST_STATIC_CONSTANT(int, nof_elems = boost::tuples::length<args_t>::value);
548
-
549
- typedef
550
- action<
551
- nof_elems,
552
- function_action<nof_elems>
553
- > action_type;
554
-
555
- public:
556
- typedef
557
- lambda_functor<
558
- lambda_functor_base<
559
- action_type,
560
- args_t
561
- >
562
- > type;
563
-
564
- };
565
-
566
-
567
-
568
- } // detail
569
-
570
- template <class T> inline const T& make_const(const T& t) { return t; }
571
-
572
-
573
- } // end of namespace lambda
574
- } // end of namespace boost
575
-
576
-
577
-
578
- #endif // BOOST_LAMBDA_TRAITS_HPP