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
@@ -110,8 +110,9 @@ template<class T> int (signbit)(T x)
110
110
  {
111
111
  typedef typename detail::fp_traits<T>::type traits;
112
112
  typedef typename traits::method method;
113
- typedef typename boost::is_floating_point<T>::type fp_tag;
114
- return detail::signbit_impl(x, method());
113
+ // typedef typename boost::is_floating_point<T>::type fp_tag;
114
+ typedef typename tools::promote_args<T>::type result_type;
115
+ return detail::signbit_impl(static_cast<result_type>(x), method());
115
116
  }
116
117
 
117
118
  template <class T>
@@ -120,20 +121,24 @@ inline int sign BOOST_NO_MACRO_EXPAND(const T& z)
120
121
  return (z == 0) ? 0 : (boost::math::signbit)(z) ? -1 : 1;
121
122
  }
122
123
 
123
- template<class T> T (changesign)(const T& x)
124
+ template <class T> typename tools::promote_args<T>::type (changesign)(const T& x)
124
125
  { //!< \brief return unchanged binary pattern of x, except for change of sign bit.
125
126
  typedef typename detail::fp_traits<T>::sign_change_type traits;
126
127
  typedef typename traits::method method;
127
- typedef typename boost::is_floating_point<T>::type fp_tag;
128
+ // typedef typename boost::is_floating_point<T>::type fp_tag;
129
+ typedef typename tools::promote_args<T>::type result_type;
128
130
 
129
- return detail::changesign_impl(x, method());
131
+ return detail::changesign_impl(static_cast<result_type>(x), method());
130
132
  }
131
133
 
132
- template <class T>
133
- inline T copysign BOOST_NO_MACRO_EXPAND(const T& x, const T& y)
134
+ template <class T, class U>
135
+ inline typename tools::promote_args<T, U>::type
136
+ copysign BOOST_NO_MACRO_EXPAND(const T& x, const U& y)
134
137
  {
135
138
  BOOST_MATH_STD_USING
136
- return (boost::math::signbit)(x) != (boost::math::signbit)(y) ? (boost::math::changesign)(x) : x;
139
+ typedef typename tools::promote_args<T, U>::type result_type;
140
+ return (boost::math::signbit)(static_cast<result_type>(x)) != (boost::math::signbit)(static_cast<result_type>(y))
141
+ ? (boost::math::changesign)(static_cast<result_type>(x)) : static_cast<result_type>(x);
137
142
  }
138
143
 
139
144
  } // namespace math
@@ -22,7 +22,6 @@
22
22
  #endif
23
23
 
24
24
  #include <boost/math/tools/user.hpp>
25
- #include <boost/math/special_functions/detail/round_fwd.hpp>
26
25
 
27
26
  #if (defined(__CYGWIN__) || defined(__FreeBSD__) || defined(__NetBSD__) \
28
27
  || (defined(__hppa) && !defined(__OpenBSD__)) || (defined(__NO_LONG_DOUBLE_MATH) && (DBL_MANT_DIG != LDBL_MANT_DIG))) \
@@ -99,9 +98,14 @@
99
98
  # define BOOST_MATH_USE_C99
100
99
  #endif
101
100
 
101
+ #if defined(_LIBCPP_VERSION) && !defined(_MSC_VER)
102
+ # define BOOST_MATH_USE_C99
103
+ #endif
104
+
102
105
  #if defined(__CYGWIN__) || defined(__HP_aCC) || defined(BOOST_INTEL) \
103
106
  || defined(BOOST_NO_NATIVE_LONG_DOUBLE_FP_CLASSIFY) \
104
- || (defined(__GNUC__) && !defined(BOOST_MATH_USE_C99))
107
+ || (defined(__GNUC__) && !defined(BOOST_MATH_USE_C99))\
108
+ || defined(BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS)
105
109
  # define BOOST_MATH_NO_NATIVE_LONG_DOUBLE_FP_CLASSIFY
106
110
  #endif
107
111
 
@@ -203,6 +207,22 @@
203
207
  #ifndef BOOST_MATH_INT_VALUE_SUFFIX
204
208
  # define BOOST_MATH_INT_VALUE_SUFFIX(RV, SUF) RV##SUF
205
209
  #endif
210
+ //
211
+ // Test whether to support __float128:
212
+ //
213
+ #if defined(_GLIBCXX_USE_FLOAT128) && defined(BOOST_GCC) && !defined(__STRICT_ANSI__)
214
+ //
215
+ // Only enable this when the compiler really is GCC as clang and probably
216
+ // intel too don't support __float128 yet :-(
217
+ //
218
+ # define BOOST_MATH_USE_FLOAT128
219
+ #endif
220
+ //
221
+ // Check for WinCE with no iostream support:
222
+ //
223
+ #if defined(_WIN32_WCE) && !defined(__SGI_STL_PORT)
224
+ # define BOOST_MATH_NO_LEXICAL_CAST
225
+ #endif
206
226
 
207
227
  //
208
228
  // Helper macro for controlling the FP behaviour:
@@ -213,7 +233,7 @@
213
233
  //
214
234
  // Helper macro for using statements:
215
235
  //
216
- #define BOOST_MATH_STD_USING \
236
+ #define BOOST_MATH_STD_USING_CORE \
217
237
  using std::abs;\
218
238
  using std::acos;\
219
239
  using std::cos;\
@@ -236,15 +256,9 @@
236
256
  using std::ceil;\
237
257
  using std::floor;\
238
258
  using std::log10;\
239
- using std::sqrt;\
240
- using boost::math::round;\
241
- using boost::math::iround;\
242
- using boost::math::lround;\
243
- using boost::math::trunc;\
244
- using boost::math::itrunc;\
245
- using boost::math::ltrunc;\
246
- using boost::math::modf;
259
+ using std::sqrt;
247
260
 
261
+ #define BOOST_MATH_STD_USING BOOST_MATH_STD_USING_CORE
248
262
 
249
263
  namespace boost{ namespace math{
250
264
  namespace tools
@@ -314,12 +328,20 @@ namespace boost{ namespace math{
314
328
  #endif
315
329
 
316
330
  #ifdef BOOST_MATH_INSTRUMENT
317
- #define BOOST_MATH_INSTRUMENT_CODE(x) \
318
- std::cout << std::setprecision(35) << __FILE__ << ":" << __LINE__ << " " << x << std::endl;
319
- #define BOOST_MATH_INSTRUMENT_VARIABLE(name) BOOST_MATH_INSTRUMENT_CODE(BOOST_STRINGIZE(name) << " = " << name)
331
+
332
+ # include <iostream>
333
+ # include <iomanip>
334
+ # include <typeinfo>
335
+
336
+ # define BOOST_MATH_INSTRUMENT_CODE(x) \
337
+ std::cout << std::setprecision(35) << __FILE__ << ":" << __LINE__ << " " << x << std::endl;
338
+ # define BOOST_MATH_INSTRUMENT_VARIABLE(name) BOOST_MATH_INSTRUMENT_CODE(BOOST_STRINGIZE(name) << " = " << name)
339
+
320
340
  #else
321
- #define BOOST_MATH_INSTRUMENT_CODE(x)
322
- #define BOOST_MATH_INSTRUMENT_VARIABLE(name)
341
+
342
+ # define BOOST_MATH_INSTRUMENT_CODE(x)
343
+ # define BOOST_MATH_INSTRUMENT_VARIABLE(name)
344
+
323
345
  #endif
324
346
 
325
347
  #endif // BOOST_MATH_TOOLS_CONFIG_HPP
@@ -0,0 +1,275 @@
1
+ //////////////////////////////////////////////////////////////////////////////
2
+ //
3
+ // (C) Copyright Ion Gaztanaga 2012-2012.
4
+ // Distributed under the Boost Software License, Version 1.0.
5
+ // (See accompanying file LICENSE_1_0.txt or copy at
6
+ // http://www.boost.org/LICENSE_1_0.txt)
7
+ //
8
+ // See http://www.boost.org/libs/move for documentation.
9
+ //
10
+ //////////////////////////////////////////////////////////////////////////////
11
+
12
+ //! \file
13
+
14
+ #ifndef BOOST_MOVE_ALGORITHM_HPP
15
+ #define BOOST_MOVE_ALGORITHM_HPP
16
+
17
+ #include <boost/move/detail/config_begin.hpp>
18
+
19
+ #include <boost/move/utility.hpp>
20
+ #include <boost/move/iterator.hpp>
21
+ #include <boost/move/algorithm.hpp>
22
+ #include <boost/detail/no_exceptions_support.hpp>
23
+
24
+ #include <algorithm> //copy, copy_backward
25
+ #include <memory> //uninitialized_copy
26
+
27
+ namespace boost {
28
+
29
+ //////////////////////////////////////////////////////////////////////////////
30
+ //
31
+ // move
32
+ //
33
+ //////////////////////////////////////////////////////////////////////////////
34
+
35
+ #if !defined(BOOST_MOVE_USE_STANDARD_LIBRARY_MOVE)
36
+
37
+ //! <b>Effects</b>: Moves elements in the range [first,last) into the range [result,result + (last -
38
+ //! first)) starting from first and proceeding to last. For each non-negative integer n < (last-first),
39
+ //! performs *(result + n) = ::boost::move (*(first + n)).
40
+ //!
41
+ //! <b>Effects</b>: result + (last - first).
42
+ //!
43
+ //! <b>Requires</b>: result shall not be in the range [first,last).
44
+ //!
45
+ //! <b>Complexity</b>: Exactly last - first move assignments.
46
+ template <typename I, // I models InputIterator
47
+ typename O> // O models OutputIterator
48
+ O move(I f, I l, O result)
49
+ {
50
+ while (f != l) {
51
+ *result = ::boost::move(*f);
52
+ ++f; ++result;
53
+ }
54
+ return result;
55
+ }
56
+
57
+ //////////////////////////////////////////////////////////////////////////////
58
+ //
59
+ // move_backward
60
+ //
61
+ //////////////////////////////////////////////////////////////////////////////
62
+
63
+ //! <b>Effects</b>: Moves elements in the range [first,last) into the range
64
+ //! [result - (last-first),result) starting from last - 1 and proceeding to
65
+ //! first. For each positive integer n <= (last - first),
66
+ //! performs *(result - n) = ::boost::move(*(last - n)).
67
+ //!
68
+ //! <b>Requires</b>: result shall not be in the range [first,last).
69
+ //!
70
+ //! <b>Returns</b>: result - (last - first).
71
+ //!
72
+ //! <b>Complexity</b>: Exactly last - first assignments.
73
+ template <typename I, // I models BidirectionalIterator
74
+ typename O> // O models BidirectionalIterator
75
+ O move_backward(I f, I l, O result)
76
+ {
77
+ while (f != l) {
78
+ --l; --result;
79
+ *result = ::boost::move(*l);
80
+ }
81
+ return result;
82
+ }
83
+
84
+ #else
85
+
86
+ using ::std::move_backward;
87
+
88
+ #endif //!defined(BOOST_MOVE_USE_STANDARD_LIBRARY_MOVE)
89
+
90
+ //////////////////////////////////////////////////////////////////////////////
91
+ //
92
+ // uninitialized_move
93
+ //
94
+ //////////////////////////////////////////////////////////////////////////////
95
+
96
+ //! <b>Effects</b>:
97
+ //! \code
98
+ //! for (; first != last; ++result, ++first)
99
+ //! new (static_cast<void*>(&*result))
100
+ //! typename iterator_traits<ForwardIterator>::value_type(boost::move(*first));
101
+ //! \endcode
102
+ //!
103
+ //! <b>Returns</b>: result
104
+ template
105
+ <typename I, // I models InputIterator
106
+ typename F> // F models ForwardIterator
107
+ F uninitialized_move(I f, I l, F r
108
+ /// @cond
109
+ // ,typename ::boost::move_detail::enable_if<has_move_emulation_enabled<typename std::iterator_traits<I>::value_type> >::type* = 0
110
+ /// @endcond
111
+ )
112
+ {
113
+ typedef typename std::iterator_traits<I>::value_type input_value_type;
114
+
115
+ F back = r;
116
+ BOOST_TRY{
117
+ while (f != l) {
118
+ void * const addr = static_cast<void*>(::boost::move_detail::addressof(*r));
119
+ ::new(addr) input_value_type(::boost::move(*f));
120
+ ++f; ++r;
121
+ }
122
+ }
123
+ BOOST_CATCH(...){
124
+ for (; back != r; ++back){
125
+ back->~input_value_type();
126
+ }
127
+ BOOST_RETHROW;
128
+ }
129
+ BOOST_CATCH_END
130
+ return r;
131
+ }
132
+
133
+ /// @cond
134
+ /*
135
+ template
136
+ <typename I, // I models InputIterator
137
+ typename F> // F models ForwardIterator
138
+ F uninitialized_move(I f, I l, F r,
139
+ typename ::boost::move_detail::disable_if<has_move_emulation_enabled<typename std::iterator_traits<I>::value_type> >::type* = 0)
140
+ {
141
+ return std::uninitialized_copy(f, l, r);
142
+ }
143
+ */
144
+
145
+ //////////////////////////////////////////////////////////////////////////////
146
+ //
147
+ // uninitialized_copy_or_move
148
+ //
149
+ //////////////////////////////////////////////////////////////////////////////
150
+
151
+ namespace move_detail {
152
+
153
+ template
154
+ <typename I, // I models InputIterator
155
+ typename F> // F models ForwardIterator
156
+ inline F uninitialized_move_move_iterator(I f, I l, F r
157
+ // ,typename ::boost::move_detail::enable_if< has_move_emulation_enabled<typename I::value_type> >::type* = 0
158
+ )
159
+ {
160
+ return ::boost::uninitialized_move(f, l, r);
161
+ }
162
+ /*
163
+ template
164
+ <typename I, // I models InputIterator
165
+ typename F> // F models ForwardIterator
166
+ F uninitialized_move_move_iterator(I f, I l, F r,
167
+ typename ::boost::move_detail::disable_if< has_move_emulation_enabled<typename I::value_type> >::type* = 0)
168
+ {
169
+ return std::uninitialized_copy(f.base(), l.base(), r);
170
+ }
171
+ */
172
+ } //namespace move_detail {
173
+
174
+ template
175
+ <typename I, // I models InputIterator
176
+ typename F> // F models ForwardIterator
177
+ inline F uninitialized_copy_or_move(I f, I l, F r,
178
+ typename ::boost::move_detail::enable_if< move_detail::is_move_iterator<I> >::type* = 0)
179
+ {
180
+ return ::boost::move_detail::uninitialized_move_move_iterator(f, l, r);
181
+ }
182
+
183
+ //////////////////////////////////////////////////////////////////////////////
184
+ //
185
+ // copy_or_move
186
+ //
187
+ //////////////////////////////////////////////////////////////////////////////
188
+
189
+ namespace move_detail {
190
+
191
+ template
192
+ <typename I, // I models InputIterator
193
+ typename F> // F models ForwardIterator
194
+ inline F move_move_iterator(I f, I l, F r
195
+ // ,typename ::boost::move_detail::enable_if< has_move_emulation_enabled<typename I::value_type> >::type* = 0
196
+ )
197
+ {
198
+ return ::boost::move(f, l, r);
199
+ }
200
+ /*
201
+ template
202
+ <typename I, // I models InputIterator
203
+ typename F> // F models ForwardIterator
204
+ F move_move_iterator(I f, I l, F r,
205
+ typename ::boost::move_detail::disable_if< has_move_emulation_enabled<typename I::value_type> >::type* = 0)
206
+ {
207
+ return std::copy(f.base(), l.base(), r);
208
+ }
209
+ */
210
+
211
+ } //namespace move_detail {
212
+
213
+ template
214
+ <typename I, // I models InputIterator
215
+ typename F> // F models ForwardIterator
216
+ inline F copy_or_move(I f, I l, F r,
217
+ typename ::boost::move_detail::enable_if< move_detail::is_move_iterator<I> >::type* = 0)
218
+ {
219
+ return ::boost::move_detail::move_move_iterator(f, l, r);
220
+ }
221
+
222
+ /// @endcond
223
+
224
+ //! <b>Effects</b>:
225
+ //! \code
226
+ //! for (; first != last; ++result, ++first)
227
+ //! new (static_cast<void*>(&*result))
228
+ //! typename iterator_traits<ForwardIterator>::value_type(*first);
229
+ //! \endcode
230
+ //!
231
+ //! <b>Returns</b>: result
232
+ //!
233
+ //! <b>Note</b>: This function is provided because
234
+ //! <i>std::uninitialized_copy</i> from some STL implementations
235
+ //! is not compatible with <i>move_iterator</i>
236
+ template
237
+ <typename I, // I models InputIterator
238
+ typename F> // F models ForwardIterator
239
+ inline F uninitialized_copy_or_move(I f, I l, F r
240
+ /// @cond
241
+ ,typename ::boost::move_detail::disable_if< move_detail::is_move_iterator<I> >::type* = 0
242
+ /// @endcond
243
+ )
244
+ {
245
+ return std::uninitialized_copy(f, l, r);
246
+ }
247
+
248
+ //! <b>Effects</b>:
249
+ //! \code
250
+ //! for (; first != last; ++result, ++first)
251
+ //! *result = *first;
252
+ //! \endcode
253
+ //!
254
+ //! <b>Returns</b>: result
255
+ //!
256
+ //! <b>Note</b>: This function is provided because
257
+ //! <i>std::uninitialized_copy</i> from some STL implementations
258
+ //! is not compatible with <i>move_iterator</i>
259
+ template
260
+ <typename I, // I models InputIterator
261
+ typename F> // F models ForwardIterator
262
+ inline F copy_or_move(I f, I l, F r
263
+ /// @cond
264
+ ,typename ::boost::move_detail::disable_if< move_detail::is_move_iterator<I> >::type* = 0
265
+ /// @endcond
266
+ )
267
+ {
268
+ return std::copy(f, l, r);
269
+ }
270
+
271
+ } //namespace boost {
272
+
273
+ #include <boost/move/detail/config_end.hpp>
274
+
275
+ #endif //#ifndef BOOST_MOVE_MOVE_HPP
@@ -0,0 +1,332 @@
1
+ //////////////////////////////////////////////////////////////////////////////
2
+ //
3
+ // (C) Copyright Ion Gaztanaga 2012-2012.
4
+ // Distributed under the Boost Software License, Version 1.0.
5
+ // (See accompanying file LICENSE_1_0.txt or copy at
6
+ // http://www.boost.org/LICENSE_1_0.txt)
7
+ //
8
+ // See http://www.boost.org/libs/move for documentation.
9
+ //
10
+ //////////////////////////////////////////////////////////////////////////////
11
+
12
+ //! \file core.hpp
13
+ //! This header implements macros to define movable classes and
14
+ //! move-aware functions
15
+
16
+ #ifndef BOOST_MOVE_CORE_HPP
17
+ #define BOOST_MOVE_CORE_HPP
18
+
19
+ #include <boost/move/detail/config_begin.hpp>
20
+
21
+ #ifdef BOOST_NO_CXX11_DELETED_FUNCTIONS
22
+ #define BOOST_MOVE_IMPL_NO_COPY_CTOR_OR_ASSIGN(TYPE) \
23
+ private:\
24
+ TYPE(TYPE &);\
25
+ TYPE& operator=(TYPE &);\
26
+ //
27
+ #else
28
+ #define BOOST_MOVE_IMPL_NO_COPY_CTOR_OR_ASSIGN(TYPE) \
29
+ public:\
30
+ TYPE(TYPE const &) = delete;\
31
+ TYPE& operator=(TYPE const &) = delete;\
32
+ private:\
33
+ //
34
+ #endif //BOOST_NO_CXX11_DELETED_FUNCTIONS
35
+
36
+ #if defined(BOOST_NO_CXX11_RVALUE_REFERENCES) && !defined(BOOST_MOVE_DOXYGEN_INVOKED)
37
+
38
+ #include <boost/move/detail/meta_utils.hpp>
39
+
40
+ //Move emulation rv breaks standard aliasing rules so add workarounds for some compilers
41
+ #if defined(__GNUC__) && (__GNUC__ >= 4)
42
+ #define BOOST_MOVE_ATTRIBUTE_MAY_ALIAS __attribute__((__may_alias__))
43
+ #else
44
+ #define BOOST_MOVE_ATTRIBUTE_MAY_ALIAS
45
+ #endif
46
+
47
+ namespace boost {
48
+
49
+ //////////////////////////////////////////////////////////////////////////////
50
+ //
51
+ // struct rv
52
+ //
53
+ //////////////////////////////////////////////////////////////////////////////
54
+ template <class T>
55
+ class rv
56
+ : public ::boost::move_detail::if_c
57
+ < ::boost::move_detail::is_class_or_union<T>::value
58
+ , T
59
+ , ::boost::move_detail::empty
60
+ >::type
61
+ {
62
+ rv();
63
+ ~rv();
64
+ rv(rv const&);
65
+ void operator=(rv const&);
66
+ } BOOST_MOVE_ATTRIBUTE_MAY_ALIAS;
67
+
68
+
69
+ //////////////////////////////////////////////////////////////////////////////
70
+ //
71
+ // move_detail::is_rv
72
+ //
73
+ //////////////////////////////////////////////////////////////////////////////
74
+
75
+ namespace move_detail {
76
+
77
+ template <class T>
78
+ struct is_rv
79
+ : ::boost::move_detail::integral_constant<bool, false>
80
+ {};
81
+
82
+ template <class T>
83
+ struct is_rv< rv<T> >
84
+ : ::boost::move_detail::integral_constant<bool, true>
85
+ {};
86
+
87
+ template <class T>
88
+ struct is_rv< const rv<T> >
89
+ : ::boost::move_detail::integral_constant<bool, true>
90
+ {};
91
+
92
+ } //namespace move_detail {
93
+
94
+ //////////////////////////////////////////////////////////////////////////////
95
+ //
96
+ // has_move_emulation_enabled
97
+ //
98
+ //////////////////////////////////////////////////////////////////////////////
99
+ template<class T>
100
+ struct has_move_emulation_enabled
101
+ : ::boost::move_detail::is_convertible< T, ::boost::rv<T>& >
102
+ {};
103
+
104
+ template<class T>
105
+ struct has_move_emulation_enabled<T&>
106
+ : ::boost::move_detail::integral_constant<bool, false>
107
+ {};
108
+
109
+ template<class T>
110
+ struct has_move_emulation_enabled< ::boost::rv<T> >
111
+ : ::boost::move_detail::integral_constant<bool, false>
112
+ {};
113
+
114
+ } //namespace boost {
115
+
116
+ #define BOOST_RV_REF(TYPE)\
117
+ ::boost::rv< TYPE >& \
118
+ //
119
+
120
+ #define BOOST_RV_REF_2_TEMPL_ARGS(TYPE, ARG1, ARG2)\
121
+ ::boost::rv< TYPE<ARG1, ARG2> >& \
122
+ //
123
+
124
+ #define BOOST_RV_REF_3_TEMPL_ARGS(TYPE, ARG1, ARG2, ARG3)\
125
+ ::boost::rv< TYPE<ARG1, ARG2, ARG3> >& \
126
+ //
127
+
128
+ #define BOOST_RV_REF_BEG\
129
+ ::boost::rv< \
130
+ //
131
+
132
+ #define BOOST_RV_REF_END\
133
+ >& \
134
+ //
135
+
136
+ #define BOOST_FWD_REF(TYPE)\
137
+ const TYPE & \
138
+ //
139
+
140
+ #define BOOST_COPY_ASSIGN_REF(TYPE)\
141
+ const ::boost::rv< TYPE >& \
142
+ //
143
+
144
+ #define BOOST_COPY_ASSIGN_REF_BEG \
145
+ const ::boost::rv< \
146
+ //
147
+
148
+ #define BOOST_COPY_ASSIGN_REF_END \
149
+ >& \
150
+ //
151
+
152
+ #define BOOST_COPY_ASSIGN_REF_2_TEMPL_ARGS(TYPE, ARG1, ARG2)\
153
+ const ::boost::rv< TYPE<ARG1, ARG2> >& \
154
+ //
155
+
156
+ #define BOOST_COPY_ASSIGN_REF_3_TEMPL_ARGS(TYPE, ARG1, ARG2, ARG3)\
157
+ const ::boost::rv< TYPE<ARG1, ARG2, ARG3> >& \
158
+ //
159
+
160
+ #define BOOST_CATCH_CONST_RLVALUE(TYPE)\
161
+ const ::boost::rv< TYPE >& \
162
+ //
163
+
164
+ //////////////////////////////////////////////////////////////////////////////
165
+ //
166
+ // BOOST_MOVABLE_BUT_NOT_COPYABLE
167
+ //
168
+ //////////////////////////////////////////////////////////////////////////////
169
+ #define BOOST_MOVABLE_BUT_NOT_COPYABLE(TYPE)\
170
+ BOOST_MOVE_IMPL_NO_COPY_CTOR_OR_ASSIGN(TYPE)\
171
+ public:\
172
+ operator ::boost::rv<TYPE>&() \
173
+ { return *static_cast< ::boost::rv<TYPE>* >(this); }\
174
+ operator const ::boost::rv<TYPE>&() const \
175
+ { return *static_cast<const ::boost::rv<TYPE>* >(this); }\
176
+ private:\
177
+ //
178
+
179
+ //////////////////////////////////////////////////////////////////////////////
180
+ //
181
+ // BOOST_COPYABLE_AND_MOVABLE
182
+ //
183
+ //////////////////////////////////////////////////////////////////////////////
184
+
185
+ #define BOOST_COPYABLE_AND_MOVABLE(TYPE)\
186
+ public:\
187
+ TYPE& operator=(TYPE &t)\
188
+ { this->operator=(static_cast<const ::boost::rv<TYPE> &>(const_cast<const TYPE &>(t))); return *this;}\
189
+ public:\
190
+ operator ::boost::rv<TYPE>&() \
191
+ { return *static_cast< ::boost::rv<TYPE>* >(this); }\
192
+ operator const ::boost::rv<TYPE>&() const \
193
+ { return *static_cast<const ::boost::rv<TYPE>* >(this); }\
194
+ private:\
195
+ //
196
+
197
+ #define BOOST_COPYABLE_AND_MOVABLE_ALT(TYPE)\
198
+ public:\
199
+ operator ::boost::rv<TYPE>&() \
200
+ { return *static_cast< ::boost::rv<TYPE>* >(this); }\
201
+ operator const ::boost::rv<TYPE>&() const \
202
+ { return *static_cast<const ::boost::rv<TYPE>* >(this); }\
203
+ private:\
204
+ //
205
+
206
+ #else //BOOST_NO_CXX11_RVALUE_REFERENCES
207
+
208
+ //Compiler workaround detection
209
+ #if !defined(BOOST_MOVE_DOXYGEN_INVOKED)
210
+ #if defined(__GNUC__) && (__GNUC__ == 4) && (__GNUC_MINOR__ < 5) && !defined(__clang__)
211
+ //Pre-standard rvalue binding rules
212
+ #define BOOST_MOVE_OLD_RVALUE_REF_BINDING_RULES
213
+ #elif defined(_MSC_VER) && (_MSC_VER == 1600)
214
+ //Standard rvalue binding rules but with some bugs
215
+ #define BOOST_MOVE_MSVC_10_MEMBER_RVALUE_REF_BUG
216
+ //Use standard library for MSVC to avoid namespace issues as
217
+ //some move calls in the STL are not fully qualified.
218
+ //#define BOOST_MOVE_USE_STANDARD_LIBRARY_MOVE
219
+ #endif
220
+ #endif
221
+
222
+ //! This macro marks a type as movable but not copyable, disabling copy construction
223
+ //! and assignment. The user will need to write a move constructor/assignment as explained
224
+ //! in the documentation to fully write a movable but not copyable class.
225
+ #define BOOST_MOVABLE_BUT_NOT_COPYABLE(TYPE)\
226
+ BOOST_MOVE_IMPL_NO_COPY_CTOR_OR_ASSIGN(TYPE)\
227
+ public:\
228
+ typedef int boost_move_emulation_t;\
229
+ //
230
+
231
+ //! This macro marks a type as copyable and movable.
232
+ //! The user will need to write a move constructor/assignment and a copy assignment
233
+ //! as explained in the documentation to fully write a copyable and movable class.
234
+ #define BOOST_COPYABLE_AND_MOVABLE(TYPE)\
235
+ //
236
+
237
+ #if !defined(BOOST_MOVE_DOXYGEN_INVOKED)
238
+ #define BOOST_COPYABLE_AND_MOVABLE_ALT(TYPE)\
239
+ //
240
+ #endif //#if !defined(BOOST_MOVE_DOXYGEN_INVOKED)
241
+
242
+ namespace boost {
243
+
244
+ //!This trait yields to a compile-time true boolean if T was marked as
245
+ //!BOOST_MOVABLE_BUT_NOT_COPYABLE or BOOST_COPYABLE_AND_MOVABLE and
246
+ //!rvalue references are not available on the platform. False otherwise.
247
+ template<class T>
248
+ struct has_move_emulation_enabled
249
+ {
250
+ static const bool value = false;
251
+ };
252
+
253
+ } //namespace boost{
254
+
255
+ //!This macro is used to achieve portable syntax in move
256
+ //!constructors and assignments for classes marked as
257
+ //!BOOST_COPYABLE_AND_MOVABLE or BOOST_MOVABLE_BUT_NOT_COPYABLE
258
+ #define BOOST_RV_REF(TYPE)\
259
+ TYPE && \
260
+ //
261
+
262
+ //!This macro is used to achieve portable syntax in move
263
+ //!constructors and assignments for template classes marked as
264
+ //!BOOST_COPYABLE_AND_MOVABLE or BOOST_MOVABLE_BUT_NOT_COPYABLE.
265
+ //!As macros have problems with comma-separatd template arguments,
266
+ //!the template argument must be preceded with BOOST_RV_REF_START
267
+ //!and ended with BOOST_RV_REF_END
268
+ #define BOOST_RV_REF_BEG\
269
+ \
270
+ //
271
+
272
+ //!This macro is used to achieve portable syntax in move
273
+ //!constructors and assignments for template classes marked as
274
+ //!BOOST_COPYABLE_AND_MOVABLE or BOOST_MOVABLE_BUT_NOT_COPYABLE.
275
+ //!As macros have problems with comma-separatd template arguments,
276
+ //!the template argument must be preceded with BOOST_RV_REF_START
277
+ //!and ended with BOOST_RV_REF_END
278
+ #define BOOST_RV_REF_END\
279
+ && \
280
+
281
+ //!This macro is used to achieve portable syntax in copy
282
+ //!assignment for classes marked as BOOST_COPYABLE_AND_MOVABLE.
283
+ #define BOOST_COPY_ASSIGN_REF(TYPE)\
284
+ const TYPE & \
285
+ //
286
+
287
+ //! This macro is used to implement portable perfect forwarding
288
+ //! as explained in the documentation.
289
+ #define BOOST_FWD_REF(TYPE)\
290
+ TYPE && \
291
+ //
292
+
293
+ #if !defined(BOOST_MOVE_DOXYGEN_INVOKED)
294
+ /// @cond
295
+
296
+ #define BOOST_RV_REF_2_TEMPL_ARGS(TYPE, ARG1, ARG2)\
297
+ TYPE<ARG1, ARG2> && \
298
+ //
299
+
300
+ #define BOOST_RV_REF_3_TEMPL_ARGS(TYPE, ARG1, ARG2, ARG3)\
301
+ TYPE<ARG1, ARG2, ARG3> && \
302
+ //
303
+
304
+ #define BOOST_COPY_ASSIGN_REF_BEG \
305
+ const \
306
+ //
307
+
308
+ #define BOOST_COPY_ASSIGN_REF_END \
309
+ & \
310
+ //
311
+
312
+ #define BOOST_COPY_ASSIGN_REF_2_TEMPL_ARGS(TYPE, ARG1, ARG2)\
313
+ const TYPE<ARG1, ARG2> & \
314
+ //
315
+
316
+ #define BOOST_COPY_ASSIGN_REF_3_TEMPL_ARGS(TYPE, ARG1, ARG2, ARG3)\
317
+ const TYPE<ARG1, ARG2, ARG3>& \
318
+ //
319
+
320
+ #define BOOST_CATCH_CONST_RLVALUE(TYPE)\
321
+ const TYPE & \
322
+ //
323
+
324
+ /// @endcond
325
+
326
+ #endif //#if !defined(BOOST_MOVE_DOXYGEN_INVOKED)
327
+
328
+ #endif //BOOST_NO_CXX11_RVALUE_REFERENCES
329
+
330
+ #include <boost/move/detail/config_end.hpp>
331
+
332
+ #endif //#ifndef BOOST_MOVE_CORE_HPP