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,104 +0,0 @@
1
- // Boost Lambda Library - is_instance_of.hpp ---------------------
2
-
3
- // Copyright (C) 2001 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_IS_INSTANCE_OF
14
- #define BOOST_LAMBDA_IS_INSTANCE_OF
15
-
16
- #include "boost/config.hpp" // for BOOST_STATIC_CONSTANT
17
- #include "boost/type_traits/conversion_traits.hpp" // for is_convertible
18
- #include "boost/preprocessor/enum_shifted_params.hpp"
19
- #include "boost/preprocessor/repeat_2nd.hpp"
20
-
21
- // is_instance_of --------------------------------
22
- //
23
- // is_instance_of_n<A, B>::value is true, if type A is
24
- // an instantiation of a template B, or A derives from an instantiation
25
- // of template B
26
- //
27
- // n is the number of template arguments for B
28
- //
29
- // Example:
30
- // is_instance_of_2<std::istream, basic_stream>::value == true
31
-
32
- // The original implementation was somewhat different, with different versions
33
- // for different compilers. However, there was still a problem
34
- // with gcc.3.0.2 and 3.0.3 compilers, which didn't think regard
35
- // is_instance_of_N<...>::value was a constant.
36
- // John Maddock suggested the way around this problem by building
37
- // is_instance_of templates using boost::is_convertible.
38
- // Now we only have one version of is_instance_of templates, which delagate
39
- // all the nasty compiler tricks to is_convertible.
40
-
41
- #define BOOST_LAMBDA_CLASS(z, N,A) BOOST_PP_COMMA_IF(N) class
42
- #define BOOST_LAMBDA_CLASS_ARG(z, N,A) BOOST_PP_COMMA_IF(N) class A##N
43
- #define BOOST_LAMBDA_ARG(z, N,A) BOOST_PP_COMMA_IF(N) A##N
44
-
45
- #define BOOST_LAMBDA_CLASS_LIST(n, NAME) BOOST_PP_REPEAT(n, BOOST_LAMBDA_CLASS, NAME)
46
-
47
- #define BOOST_LAMBDA_CLASS_ARG_LIST(n, NAME) BOOST_PP_REPEAT(n, BOOST_LAMBDA_CLASS_ARG, NAME)
48
-
49
- #define BOOST_LAMBDA_ARG_LIST(n, NAME) BOOST_PP_REPEAT(n, BOOST_LAMBDA_ARG, NAME)
50
-
51
- namespace boost {
52
- namespace lambda {
53
-
54
- #define BOOST_LAMBDA_IS_INSTANCE_OF_TEMPLATE(INDEX) \
55
- \
56
- namespace detail { \
57
- \
58
- template <template<BOOST_LAMBDA_CLASS_LIST(INDEX,T)> class F> \
59
- struct BOOST_PP_CAT(conversion_tester_,INDEX) { \
60
- template<BOOST_LAMBDA_CLASS_ARG_LIST(INDEX,A)> \
61
- BOOST_PP_CAT(conversion_tester_,INDEX) \
62
- (const F<BOOST_LAMBDA_ARG_LIST(INDEX,A)>&); \
63
- }; \
64
- \
65
- } /* end detail */ \
66
- \
67
- template <class From, template <BOOST_LAMBDA_CLASS_LIST(INDEX,T)> class To> \
68
- struct BOOST_PP_CAT(is_instance_of_,INDEX) \
69
- { \
70
- private: \
71
- typedef ::boost::is_convertible< \
72
- From, \
73
- BOOST_PP_CAT(detail::conversion_tester_,INDEX)<To> \
74
- > helper_type; \
75
- \
76
- public: \
77
- BOOST_STATIC_CONSTANT(bool, value = helper_type::value); \
78
- };
79
-
80
-
81
- #define BOOST_LAMBDA_HELPER(z, N, A) BOOST_LAMBDA_IS_INSTANCE_OF_TEMPLATE( BOOST_PP_INC(N) )
82
-
83
- // Generate the traits for 1-4 argument templates
84
-
85
- BOOST_PP_REPEAT_2ND(4,BOOST_LAMBDA_HELPER,FOO)
86
-
87
- #undef BOOST_LAMBDA_HELPER
88
- #undef BOOST_LAMBDA_IS_INSTANCE_OF_TEMPLATE
89
- #undef BOOST_LAMBDA_CLASS
90
- #undef BOOST_LAMBDA_ARG
91
- #undef BOOST_LAMBDA_CLASS_ARG
92
- #undef BOOST_LAMBDA_CLASS_LIST
93
- #undef BOOST_LAMBDA_ARG_LIST
94
- #undef BOOST_LAMBDA_CLASS_ARG_LIST
95
-
96
- } // lambda
97
- } // boost
98
-
99
- #endif
100
-
101
-
102
-
103
-
104
-
@@ -1,48 +0,0 @@
1
- // Boost Lambda Library - lambda_config.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 www.boost.org
10
-
11
- // ---------------------------------------------------------------
12
-
13
- #ifndef BOOST_LAMBDA_LAMBDA_CONFIG_HPP
14
- #define BOOST_LAMBDA_LAMBDA_CONFIG_HPP
15
-
16
- // add to boost/config.hpp
17
- // for now
18
-
19
-
20
- # if defined __GNUC__
21
- # if (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
22
- # define BOOST_REF_TO_FUNC_CONFLICTS_WITH_REF_TO_T
23
- # define BOOST_LAMBDA_INCORRECT_BIND_OVERLOADING
24
- # endif
25
- # if (__GNUC__ == 2 && __GNUC_MINOR__ <= 97)
26
- # define BOOST_NO_TEMPLATED_STREAMS
27
- # define BOOST_LAMBDA_INCORRECT_BIND_OVERLOADING
28
- # endif
29
- # if (__GNUC__ == 2 && __GNUC_MINOR__ <= 95)
30
- # define BOOST_LAMBDA_FAILS_IN_TEMPLATE_KEYWORD_AFTER_SCOPE_OPER
31
- # endif
32
- # endif // __GNUC__
33
-
34
-
35
- #if defined __KCC
36
-
37
- #define BOOST_NO_FDECL_TEMPLATES_AS_TEMPLATE_TEMPLATE_PARAMS
38
-
39
- #endif // __KCC
40
-
41
- #endif
42
-
43
-
44
-
45
-
46
-
47
-
48
-
@@ -1,615 +0,0 @@
1
- // Boost Lambda Library lambda_functor_base.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 www.boost.org
10
-
11
- // ------------------------------------------------------------
12
-
13
- #ifndef BOOST_LAMBDA_LAMBDA_FUNCTOR_BASE_HPP
14
- #define BOOST_LAMBDA_LAMBDA_FUNCTOR_BASE_HPP
15
-
16
- #include "boost/type_traits/add_reference.hpp"
17
- #include "boost/type_traits/add_const.hpp"
18
- #include "boost/type_traits/remove_const.hpp"
19
- #include "boost/lambda/detail/lambda_fwd.hpp"
20
- #include "boost/lambda/detail/lambda_traits.hpp"
21
-
22
- namespace boost {
23
- namespace lambda {
24
-
25
- #if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
26
- #pragma warning(push)
27
- #pragma warning(disable:4512) //assignment operator could not be generated
28
- #endif
29
-
30
- // for return type deductions we wrap bound argument to this class,
31
- // which fulfils the base class contract for lambda_functors
32
- template <class T>
33
- class identity {
34
-
35
- T elem;
36
- public:
37
-
38
- typedef T element_t;
39
-
40
- // take all parameters as const references. Note that non-const references
41
- // stay as they are.
42
- typedef typename boost::add_reference<
43
- typename boost::add_const<T>::type
44
- >::type par_t;
45
-
46
- explicit identity(par_t t) : elem(t) {}
47
-
48
- template <typename SigArgs>
49
- struct sig { typedef typename boost::remove_const<element_t>::type type; };
50
-
51
- template<class RET, CALL_TEMPLATE_ARGS>
52
- RET call(CALL_FORMAL_ARGS) const { CALL_USE_ARGS; return elem; }
53
- };
54
-
55
- #if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
56
- #pragma warning(pop)
57
- #endif
58
-
59
- template <class T>
60
- inline lambda_functor<identity<T&> > var(T& t) { return identity<T&>(t); }
61
-
62
- // for lambda functors, var is an identity operator. It was forbidden
63
- // at some point, but we might want to var something that can be a
64
- // non-lambda functor or a lambda functor.
65
- template <class T>
66
- lambda_functor<T> var(const lambda_functor<T>& t) { return t; }
67
-
68
- template <class T> struct var_type {
69
- typedef lambda_functor<identity<T&> > type;
70
- };
71
-
72
-
73
- template <class T>
74
- inline
75
- lambda_functor<identity<typename bound_argument_conversion<const T>::type> >
76
- constant(const T& t) {
77
- return identity<typename bound_argument_conversion<const T>::type>(t);
78
- }
79
- template <class T>
80
- lambda_functor<T> constant(const lambda_functor<T>& t) { return t; }
81
-
82
- template <class T> struct constant_type {
83
- typedef
84
- lambda_functor<
85
- identity<typename bound_argument_conversion<const T>::type>
86
- > type;
87
- };
88
-
89
-
90
-
91
- template <class T>
92
- inline lambda_functor<identity<const T&> > constant_ref(const T& t) {
93
- return identity<const T&>(t);
94
- }
95
- template <class T>
96
- lambda_functor<T> constant_ref(const lambda_functor<T>& t) { return t; }
97
-
98
- template <class T> struct constant_ref_type {
99
- typedef
100
- lambda_functor<identity<const T&> > type;
101
- };
102
-
103
-
104
-
105
- // as_lambda_functor turns any types to lambda functors
106
- // non-lambda_functors will be bound argument types
107
- template <class T>
108
- struct as_lambda_functor {
109
- typedef typename
110
- detail::remove_reference_and_cv<T>::type plain_T;
111
- typedef typename
112
- detail::IF<is_lambda_functor<plain_T>::value,
113
- plain_T,
114
- lambda_functor<
115
- identity<typename bound_argument_conversion<T>::type>
116
- >
117
- >::RET type;
118
- };
119
-
120
- // turns arbitrary objects into lambda functors
121
- template <class T>
122
- inline
123
- lambda_functor<identity<typename bound_argument_conversion<const T>::type> >
124
- to_lambda_functor(const T& t) {
125
- return identity<typename bound_argument_conversion<const T>::type>(t);
126
- }
127
-
128
- template <class T>
129
- inline lambda_functor<T>
130
- to_lambda_functor(const lambda_functor<T>& t) {
131
- return t;
132
- }
133
-
134
- namespace detail {
135
-
136
-
137
-
138
- // In a call constify_rvals<T>::go(x)
139
- // x should be of type T. If T is a non-reference type, do
140
- // returns x as const reference.
141
- // Otherwise the type doesn't change.
142
- // The purpose of this class is to avoid
143
- // 'cannot bind temporaries to non-const references' errors.
144
- template <class T> struct constify_rvals {
145
- template<class U>
146
- static inline const U& go(const U& u) { return u; }
147
- };
148
-
149
- template <class T> struct constify_rvals<T&> {
150
- template<class U>
151
- static inline U& go(U& u) { return u; }
152
- };
153
-
154
- // check whether one of the elements of a tuple (cons list) is of type
155
- // null_type. Needed, because the compiler goes ahead and instantiates
156
- // sig template for nullary case even if the nullary operator() is not
157
- // called
158
- template <class T> struct is_null_type
159
- { BOOST_STATIC_CONSTANT(bool, value = false); };
160
-
161
- template <> struct is_null_type<null_type>
162
- { BOOST_STATIC_CONSTANT(bool, value = true); };
163
-
164
- template<class Tuple> struct has_null_type {
165
- BOOST_STATIC_CONSTANT(bool, value = (is_null_type<typename Tuple::head_type>::value || has_null_type<typename Tuple::tail_type>::value));
166
- };
167
- template<> struct has_null_type<null_type> {
168
- BOOST_STATIC_CONSTANT(bool, value = false);
169
- };
170
-
171
-
172
- // helpers -------------------
173
-
174
-
175
- template<class Args, class SigArgs>
176
- class deduce_argument_types_ {
177
- typedef typename as_lambda_functor<typename Args::head_type>::type lf_t;
178
- typedef typename lf_t::inherited::template sig<SigArgs>::type el_t;
179
- public:
180
- typedef
181
- boost::tuples::cons<
182
- el_t,
183
- typename deduce_argument_types_<typename Args::tail_type, SigArgs>::type
184
- > type;
185
- };
186
-
187
- template<class SigArgs>
188
- class deduce_argument_types_<null_type, SigArgs> {
189
- public:
190
- typedef null_type type;
191
- };
192
-
193
-
194
- // // note that tuples cannot have plain function types as elements.
195
- // // Hence, all other types will be non-const, except references to
196
- // // functions.
197
- // template <class T> struct remove_reference_except_from_functions {
198
- // typedef typename boost::remove_reference<T>::type t;
199
- // typedef typename detail::IF<boost::is_function<t>::value, T, t>::RET type;
200
- // };
201
-
202
- template<class Args, class SigArgs>
203
- class deduce_non_ref_argument_types_ {
204
- typedef typename as_lambda_functor<typename Args::head_type>::type lf_t;
205
- typedef typename lf_t::inherited::template sig<SigArgs>::type el_t;
206
- public:
207
- typedef
208
- boost::tuples::cons<
209
- // typename detail::remove_reference_except_from_functions<el_t>::type,
210
- typename boost::remove_reference<el_t>::type,
211
- typename deduce_non_ref_argument_types_<typename Args::tail_type, SigArgs>::type
212
- > type;
213
- };
214
-
215
- template<class SigArgs>
216
- class deduce_non_ref_argument_types_<null_type, SigArgs> {
217
- public:
218
- typedef null_type type;
219
- };
220
-
221
- // -------------
222
-
223
- // take stored Args and Open Args, and return a const list with
224
- // deduced elements (real return types)
225
- template<class Args, class SigArgs>
226
- class deduce_argument_types {
227
- typedef typename deduce_argument_types_<Args, SigArgs>::type t1;
228
- public:
229
- typedef typename detail::IF<
230
- has_null_type<t1>::value, null_type, t1
231
- >::RET type;
232
- };
233
-
234
- // take stored Args and Open Args, and return a const list with
235
- // deduced elements (references are stripped from the element types)
236
-
237
- template<class Args, class SigArgs>
238
- class deduce_non_ref_argument_types {
239
- typedef typename deduce_non_ref_argument_types_<Args, SigArgs>::type t1;
240
- public:
241
- typedef typename detail::IF<
242
- has_null_type<t1>::value, null_type, t1
243
- >::RET type;
244
- };
245
-
246
- template <int N, class Args, class SigArgs>
247
- struct nth_return_type_sig {
248
- typedef typename
249
- as_lambda_functor<
250
- typename boost::tuples::element<N, Args>::type
251
- // typename tuple_element_as_reference<N, Args>::type
252
- >::type lf_type;
253
-
254
- typedef typename lf_type::inherited::template sig<SigArgs>::type type;
255
- };
256
-
257
- template<int N, class Tuple> struct element_or_null {
258
- typedef typename boost::tuples::element<N, Tuple>::type type;
259
- };
260
-
261
- template<int N> struct element_or_null<N, null_type> {
262
- typedef null_type type;
263
- };
264
-
265
-
266
-
267
-
268
- } // end detail
269
-
270
- // -- lambda_functor base ---------------------
271
-
272
- // the explicit_return_type_action case -----------------------------------
273
- template<class RET, class Args>
274
- class lambda_functor_base<explicit_return_type_action<RET>, Args>
275
- {
276
- public:
277
- Args args;
278
-
279
- typedef RET result_type;
280
-
281
- explicit lambda_functor_base(const Args& a) : args(a) {}
282
-
283
- template <class SigArgs> struct sig { typedef RET type; };
284
-
285
- template<class RET_, CALL_TEMPLATE_ARGS>
286
- RET call(CALL_FORMAL_ARGS) const
287
- {
288
- return detail::constify_rvals<RET>::go(
289
- detail::r_select<RET>::go(boost::tuples::get<0>(args), CALL_ACTUAL_ARGS));
290
- }
291
- };
292
-
293
- // the protect_action case -----------------------------------
294
- template<class Args>
295
- class lambda_functor_base<protect_action, Args>
296
- {
297
- public:
298
- Args args;
299
- public:
300
-
301
- explicit lambda_functor_base(const Args& a) : args(a) {}
302
-
303
-
304
- template<class RET, CALL_TEMPLATE_ARGS>
305
- RET call(CALL_FORMAL_ARGS) const
306
- {
307
- CALL_USE_ARGS;
308
- return boost::tuples::get<0>(args);
309
- }
310
-
311
- template<class SigArgs> struct sig {
312
- // typedef typename detail::tuple_element_as_reference<0, SigArgs>::type type;
313
- typedef typename boost::tuples::element<0, Args>::type type;
314
- };
315
- };
316
-
317
- // Do nothing --------------------------------------------------------
318
- class do_nothing_action {};
319
-
320
- template<class Args>
321
- class lambda_functor_base<do_nothing_action, Args> {
322
- // Args args;
323
- public:
324
- // explicit lambda_functor_base(const Args& a) {}
325
- lambda_functor_base() {}
326
-
327
-
328
- template<class RET, CALL_TEMPLATE_ARGS> RET call(CALL_FORMAL_ARGS) const {
329
- return CALL_USE_ARGS;
330
- }
331
-
332
- template<class SigArgs> struct sig { typedef void type; };
333
- };
334
-
335
-
336
- // These specializations provide a shorter notation to define actions.
337
- // These lambda_functor_base instances take care of the recursive evaluation
338
- // of the arguments and pass the evaluated arguments to the apply function
339
- // of an action class. To make action X work with these classes, one must
340
- // instantiate the lambda_functor_base as:
341
- // lambda_functor_base<action<ARITY, X>, Args>
342
- // Where ARITY is the arity of the apply function in X
343
-
344
- // The return type is queried as:
345
- // return_type_N<X, EvaluatedArgumentTypes>::type
346
- // for which there must be a specialization.
347
-
348
- // Function actions, casts, throws,... all go via these classes.
349
-
350
-
351
- template<class Act, class Args>
352
- class lambda_functor_base<action<0, Act>, Args>
353
- {
354
- public:
355
- // Args args; not needed
356
- explicit lambda_functor_base(const Args& /*a*/) {}
357
-
358
- template<class SigArgs> struct sig {
359
- typedef typename return_type_N<Act, null_type>::type type;
360
- };
361
-
362
- template<class RET, CALL_TEMPLATE_ARGS>
363
- RET call(CALL_FORMAL_ARGS) const {
364
- CALL_USE_ARGS;
365
- return Act::template apply<RET>();
366
- }
367
- };
368
-
369
-
370
- #if defined BOOST_LAMBDA_LAMBDA_FUNCTOR_BASE_FIRST_PART
371
- #error "Multiple defines of BOOST_LAMBDA_LAMBDA_FUNCTOR_BASE_FIRST_PART"
372
- #endif
373
-
374
-
375
- #define BOOST_LAMBDA_LAMBDA_FUNCTOR_BASE_FIRST_PART(ARITY) \
376
- template<class Act, class Args> \
377
- class lambda_functor_base<action<ARITY, Act>, Args> \
378
- { \
379
- public: \
380
- Args args; \
381
- \
382
- explicit lambda_functor_base(const Args& a) : args(a) {} \
383
- \
384
- template<class SigArgs> struct sig { \
385
- typedef typename \
386
- detail::deduce_argument_types<Args, SigArgs>::type rets_t; \
387
- public: \
388
- typedef typename \
389
- return_type_N_prot<Act, rets_t>::type type; \
390
- }; \
391
- \
392
- \
393
- template<class RET, CALL_TEMPLATE_ARGS> \
394
- RET call(CALL_FORMAL_ARGS) const { \
395
- using boost::tuples::get; \
396
- using detail::constify_rvals; \
397
- using detail::r_select; \
398
- using detail::element_or_null; \
399
- using detail::deduce_argument_types;
400
-
401
- BOOST_LAMBDA_LAMBDA_FUNCTOR_BASE_FIRST_PART(1)
402
-
403
- typedef typename
404
- deduce_argument_types<Args, tuple<CALL_REFERENCE_TYPES> >::type rets_t;
405
- typedef typename element_or_null<0, rets_t>::type rt0;
406
-
407
- return Act::template apply<RET>(
408
- constify_rvals<rt0>::go(r_select<rt0>::go(get<0>(args), CALL_ACTUAL_ARGS))
409
- );
410
- }
411
- };
412
-
413
-
414
- BOOST_LAMBDA_LAMBDA_FUNCTOR_BASE_FIRST_PART(2)
415
-
416
- typedef typename
417
- deduce_argument_types<Args, tuple<CALL_REFERENCE_TYPES> >::type rets_t;
418
- typedef typename element_or_null<0, rets_t>::type rt0;
419
- typedef typename element_or_null<1, rets_t>::type rt1;
420
-
421
- return Act::template apply<RET>(
422
- constify_rvals<rt0>::go(r_select<rt0>::go(get<0>(args), CALL_ACTUAL_ARGS)),
423
- constify_rvals<rt1>::go(r_select<rt1>::go(get<1>(args), CALL_ACTUAL_ARGS))
424
- );
425
- }
426
- };
427
-
428
- BOOST_LAMBDA_LAMBDA_FUNCTOR_BASE_FIRST_PART(3)
429
-
430
- typedef typename
431
- deduce_argument_types<Args, tuple<CALL_REFERENCE_TYPES> >::type rets_t;
432
-
433
- typedef typename element_or_null<0, rets_t>::type rt0;
434
- typedef typename element_or_null<1, rets_t>::type rt1;
435
- typedef typename element_or_null<2, rets_t>::type rt2;
436
-
437
- return Act::template apply<RET>(
438
- constify_rvals<rt0>::go(r_select<rt0>::go(get<0>(args), CALL_ACTUAL_ARGS)),
439
- constify_rvals<rt1>::go(r_select<rt1>::go(get<1>(args), CALL_ACTUAL_ARGS)),
440
- constify_rvals<rt2>::go(r_select<rt2>::go(get<2>(args), CALL_ACTUAL_ARGS))
441
- );
442
- }
443
- };
444
-
445
- BOOST_LAMBDA_LAMBDA_FUNCTOR_BASE_FIRST_PART(4)
446
- typedef typename
447
- deduce_argument_types<Args, tuple<CALL_REFERENCE_TYPES> >::type rets_t;
448
- typedef typename element_or_null<0, rets_t>::type rt0;
449
- typedef typename element_or_null<1, rets_t>::type rt1;
450
- typedef typename element_or_null<2, rets_t>::type rt2;
451
- typedef typename element_or_null<3, rets_t>::type rt3;
452
-
453
- return Act::template apply<RET>(
454
- constify_rvals<rt0>::go(r_select<rt0>::go(get<0>(args), CALL_ACTUAL_ARGS)),
455
- constify_rvals<rt1>::go(r_select<rt1>::go(get<1>(args), CALL_ACTUAL_ARGS)),
456
- constify_rvals<rt2>::go(r_select<rt2>::go(get<2>(args), CALL_ACTUAL_ARGS)),
457
- constify_rvals<rt3>::go(r_select<rt3>::go(get<3>(args), CALL_ACTUAL_ARGS))
458
- );
459
- }
460
- };
461
-
462
- BOOST_LAMBDA_LAMBDA_FUNCTOR_BASE_FIRST_PART(5)
463
- typedef typename
464
- deduce_argument_types<Args, tuple<CALL_REFERENCE_TYPES> >::type rets_t;
465
- typedef typename element_or_null<0, rets_t>::type rt0;
466
- typedef typename element_or_null<1, rets_t>::type rt1;
467
- typedef typename element_or_null<2, rets_t>::type rt2;
468
- typedef typename element_or_null<3, rets_t>::type rt3;
469
- typedef typename element_or_null<4, rets_t>::type rt4;
470
-
471
- return Act::template apply<RET>(
472
- constify_rvals<rt0>::go(r_select<rt0>::go(get<0>(args), CALL_ACTUAL_ARGS)),
473
- constify_rvals<rt1>::go(r_select<rt1>::go(get<1>(args), CALL_ACTUAL_ARGS)),
474
- constify_rvals<rt2>::go(r_select<rt2>::go(get<2>(args), CALL_ACTUAL_ARGS)),
475
- constify_rvals<rt3>::go(r_select<rt3>::go(get<3>(args), CALL_ACTUAL_ARGS)),
476
- constify_rvals<rt4>::go(r_select<rt4>::go(get<4>(args), CALL_ACTUAL_ARGS))
477
- );
478
- }
479
- };
480
-
481
- BOOST_LAMBDA_LAMBDA_FUNCTOR_BASE_FIRST_PART(6)
482
-
483
- typedef typename
484
- deduce_argument_types<Args, tuple<CALL_REFERENCE_TYPES> >::type rets_t;
485
- typedef typename element_or_null<0, rets_t>::type rt0;
486
- typedef typename element_or_null<1, rets_t>::type rt1;
487
- typedef typename element_or_null<2, rets_t>::type rt2;
488
- typedef typename element_or_null<3, rets_t>::type rt3;
489
- typedef typename element_or_null<4, rets_t>::type rt4;
490
- typedef typename element_or_null<5, rets_t>::type rt5;
491
-
492
-
493
- return Act::template apply<RET>(
494
- constify_rvals<rt0>::go(r_select<rt0>::go(get<0>(args), CALL_ACTUAL_ARGS)),
495
- constify_rvals<rt1>::go(r_select<rt1>::go(get<1>(args), CALL_ACTUAL_ARGS)),
496
- constify_rvals<rt2>::go(r_select<rt2>::go(get<2>(args), CALL_ACTUAL_ARGS)),
497
- constify_rvals<rt3>::go(r_select<rt3>::go(get<3>(args), CALL_ACTUAL_ARGS)),
498
- constify_rvals<rt4>::go(r_select<rt4>::go(get<4>(args), CALL_ACTUAL_ARGS)),
499
- constify_rvals<rt5>::go(r_select<rt5>::go(get<5>(args), CALL_ACTUAL_ARGS))
500
- );
501
- }
502
- };
503
-
504
- BOOST_LAMBDA_LAMBDA_FUNCTOR_BASE_FIRST_PART(7)
505
- typedef typename
506
- deduce_argument_types<Args, tuple<CALL_REFERENCE_TYPES> >::type rets_t;
507
- typedef typename element_or_null<0, rets_t>::type rt0;
508
- typedef typename element_or_null<1, rets_t>::type rt1;
509
- typedef typename element_or_null<2, rets_t>::type rt2;
510
- typedef typename element_or_null<3, rets_t>::type rt3;
511
- typedef typename element_or_null<4, rets_t>::type rt4;
512
- typedef typename element_or_null<5, rets_t>::type rt5;
513
- typedef typename element_or_null<6, rets_t>::type rt6;
514
-
515
-
516
- return Act::template apply<RET>(
517
- constify_rvals<rt0>::go(r_select<rt0>::go(get<0>(args), CALL_ACTUAL_ARGS)),
518
- constify_rvals<rt1>::go(r_select<rt1>::go(get<1>(args), CALL_ACTUAL_ARGS)),
519
- constify_rvals<rt2>::go(r_select<rt2>::go(get<2>(args), CALL_ACTUAL_ARGS)),
520
- constify_rvals<rt3>::go(r_select<rt3>::go(get<3>(args), CALL_ACTUAL_ARGS)),
521
- constify_rvals<rt4>::go(r_select<rt4>::go(get<4>(args), CALL_ACTUAL_ARGS)),
522
- constify_rvals<rt5>::go(r_select<rt5>::go(get<5>(args), CALL_ACTUAL_ARGS)),
523
- constify_rvals<rt6>::go(r_select<rt6>::go(get<6>(args), CALL_ACTUAL_ARGS))
524
- );
525
- }
526
- };
527
-
528
- BOOST_LAMBDA_LAMBDA_FUNCTOR_BASE_FIRST_PART(8)
529
- typedef typename
530
- deduce_argument_types<Args, tuple<CALL_REFERENCE_TYPES> >::type rets_t;
531
- typedef typename element_or_null<0, rets_t>::type rt0;
532
- typedef typename element_or_null<1, rets_t>::type rt1;
533
- typedef typename element_or_null<2, rets_t>::type rt2;
534
- typedef typename element_or_null<3, rets_t>::type rt3;
535
- typedef typename element_or_null<4, rets_t>::type rt4;
536
- typedef typename element_or_null<5, rets_t>::type rt5;
537
- typedef typename element_or_null<6, rets_t>::type rt6;
538
- typedef typename element_or_null<7, rets_t>::type rt7;
539
-
540
- return Act::template apply<RET>(
541
- constify_rvals<rt0>::go(r_select<rt0>::go(get<0>(args), CALL_ACTUAL_ARGS)),
542
- constify_rvals<rt1>::go(r_select<rt1>::go(get<1>(args), CALL_ACTUAL_ARGS)),
543
- constify_rvals<rt2>::go(r_select<rt2>::go(get<2>(args), CALL_ACTUAL_ARGS)),
544
- constify_rvals<rt3>::go(r_select<rt3>::go(get<3>(args), CALL_ACTUAL_ARGS)),
545
- constify_rvals<rt4>::go(r_select<rt4>::go(get<4>(args), CALL_ACTUAL_ARGS)),
546
- constify_rvals<rt5>::go(r_select<rt5>::go(get<5>(args), CALL_ACTUAL_ARGS)),
547
- constify_rvals<rt6>::go(r_select<rt6>::go(get<6>(args), CALL_ACTUAL_ARGS)),
548
- constify_rvals<rt7>::go(r_select<rt7>::go(get<7>(args), CALL_ACTUAL_ARGS))
549
- );
550
- }
551
- };
552
-
553
- BOOST_LAMBDA_LAMBDA_FUNCTOR_BASE_FIRST_PART(9)
554
- typedef typename
555
- deduce_argument_types<Args, tuple<CALL_REFERENCE_TYPES> >::type rets_t;
556
- typedef typename element_or_null<0, rets_t>::type rt0;
557
- typedef typename element_or_null<1, rets_t>::type rt1;
558
- typedef typename element_or_null<2, rets_t>::type rt2;
559
- typedef typename element_or_null<3, rets_t>::type rt3;
560
- typedef typename element_or_null<4, rets_t>::type rt4;
561
- typedef typename element_or_null<5, rets_t>::type rt5;
562
- typedef typename element_or_null<6, rets_t>::type rt6;
563
- typedef typename element_or_null<7, rets_t>::type rt7;
564
- typedef typename element_or_null<8, rets_t>::type rt8;
565
-
566
- return Act::template apply<RET>(
567
- constify_rvals<rt0>::go(r_select<rt0>::go(get<0>(args), CALL_ACTUAL_ARGS)),
568
- constify_rvals<rt1>::go(r_select<rt1>::go(get<1>(args), CALL_ACTUAL_ARGS)),
569
- constify_rvals<rt2>::go(r_select<rt2>::go(get<2>(args), CALL_ACTUAL_ARGS)),
570
- constify_rvals<rt3>::go(r_select<rt3>::go(get<3>(args), CALL_ACTUAL_ARGS)),
571
- constify_rvals<rt4>::go(r_select<rt4>::go(get<4>(args), CALL_ACTUAL_ARGS)),
572
- constify_rvals<rt5>::go(r_select<rt5>::go(get<5>(args), CALL_ACTUAL_ARGS)),
573
- constify_rvals<rt6>::go(r_select<rt6>::go(get<6>(args), CALL_ACTUAL_ARGS)),
574
- constify_rvals<rt7>::go(r_select<rt7>::go(get<7>(args), CALL_ACTUAL_ARGS)),
575
- constify_rvals<rt8>::go(r_select<rt8>::go(get<8>(args), CALL_ACTUAL_ARGS))
576
- );
577
- }
578
- };
579
-
580
- BOOST_LAMBDA_LAMBDA_FUNCTOR_BASE_FIRST_PART(10)
581
- typedef typename
582
- deduce_argument_types<Args, tuple<CALL_REFERENCE_TYPES> >::type rets_t;
583
- typedef typename element_or_null<0, rets_t>::type rt0;
584
- typedef typename element_or_null<1, rets_t>::type rt1;
585
- typedef typename element_or_null<2, rets_t>::type rt2;
586
- typedef typename element_or_null<3, rets_t>::type rt3;
587
- typedef typename element_or_null<4, rets_t>::type rt4;
588
- typedef typename element_or_null<5, rets_t>::type rt5;
589
- typedef typename element_or_null<6, rets_t>::type rt6;
590
- typedef typename element_or_null<7, rets_t>::type rt7;
591
- typedef typename element_or_null<8, rets_t>::type rt8;
592
- typedef typename element_or_null<9, rets_t>::type rt9;
593
-
594
- return Act::template apply<RET>(
595
- constify_rvals<rt0>::go(r_select<rt0>::go(get<0>(args), CALL_ACTUAL_ARGS)),
596
- constify_rvals<rt1>::go(r_select<rt1>::go(get<1>(args), CALL_ACTUAL_ARGS)),
597
- constify_rvals<rt2>::go(r_select<rt2>::go(get<2>(args), CALL_ACTUAL_ARGS)),
598
- constify_rvals<rt3>::go(r_select<rt3>::go(get<3>(args), CALL_ACTUAL_ARGS)),
599
- constify_rvals<rt4>::go(r_select<rt4>::go(get<4>(args), CALL_ACTUAL_ARGS)),
600
- constify_rvals<rt5>::go(r_select<rt5>::go(get<5>(args), CALL_ACTUAL_ARGS)),
601
- constify_rvals<rt6>::go(r_select<rt6>::go(get<6>(args), CALL_ACTUAL_ARGS)),
602
- constify_rvals<rt7>::go(r_select<rt7>::go(get<7>(args), CALL_ACTUAL_ARGS)),
603
- constify_rvals<rt8>::go(r_select<rt8>::go(get<8>(args), CALL_ACTUAL_ARGS)),
604
- constify_rvals<rt9>::go(r_select<rt9>::go(get<9>(args), CALL_ACTUAL_ARGS))
605
- );
606
- }
607
- };
608
-
609
- #undef BOOST_LAMBDA_LAMBDA_FUNCTOR_BASE_FIRST_PART
610
-
611
-
612
- } // namespace lambda
613
- } // namespace boost
614
-
615
- #endif