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
@@ -190,6 +190,7 @@
190
190
  #define BOOST_NO_CXX11_VARIADIC_TEMPLATES
191
191
  #define BOOST_NO_CXX11_NOEXCEPT
192
192
  #define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX
193
+ #define BOOST_NO_CXX11_USER_DEFINED_LITERALS
193
194
 
194
195
  #if __BORLANDC__ >= 0x590
195
196
  # define BOOST_HAS_TR1_HASH
@@ -20,7 +20,7 @@
20
20
  # define BOOST_NO_TYPEID
21
21
  #endif
22
22
 
23
- #if defined(__int64)
23
+ #if defined(__int64) && !defined(__GNUC__)
24
24
  # define BOOST_HAS_MS_INT64
25
25
  #endif
26
26
 
@@ -29,6 +29,25 @@
29
29
  // Clang supports "long long" in all compilation modes.
30
30
  #define BOOST_HAS_LONG_LONG
31
31
 
32
+ //
33
+ // Dynamic shared object (DSO) and dynamic-link library (DLL) support
34
+ //
35
+ #if !defined(_WIN32) && !defined(__WIN32__) && !defined(WIN32)
36
+ # define BOOST_SYMBOL_EXPORT __attribute__((__visibility__("default")))
37
+ # define BOOST_SYMBOL_IMPORT
38
+ # define BOOST_SYMBOL_VISIBLE __attribute__((__visibility__("default")))
39
+ #endif
40
+
41
+ //
42
+ // The BOOST_FALLTHROUGH macro can be used to annotate implicit fall-through
43
+ // between switch labels.
44
+ //
45
+ #if __cplusplus >= 201103L && defined(__has_warning)
46
+ # if __has_feature(cxx_attributes) && __has_warning("-Wimplicit-fallthrough")
47
+ # define BOOST_FALLTHROUGH [[clang::fallthrough]]
48
+ # endif
49
+ #endif
50
+
32
51
  #if !__has_feature(cxx_auto_type)
33
52
  # define BOOST_NO_CXX11_AUTO_DECLARATIONS
34
53
  # define BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS
@@ -123,6 +142,10 @@
123
142
  # define BOOST_NO_CXX11_VARIADIC_TEMPLATES
124
143
  #endif
125
144
 
145
+ #if !__has_feature(cxx_user_literals)
146
+ # define BOOST_NO_CXX11_USER_DEFINED_LITERALS
147
+ #endif
148
+
126
149
  // Clang always supports variadic macros
127
150
  // Clang always supports extern templates
128
151
 
@@ -110,6 +110,7 @@
110
110
  #define BOOST_NO_CXX11_UNICODE_LITERALS
111
111
  #define BOOST_NO_CXX11_VARIADIC_TEMPLATES
112
112
  #define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX
113
+ #define BOOST_NO_CXX11_USER_DEFINED_LITERALS
113
114
 
114
115
  //
115
116
  // TR1 macros:
@@ -95,6 +95,7 @@
95
95
  #define BOOST_NO_CXX11_UNICODE_LITERALS
96
96
  #define BOOST_NO_CXX11_VARIADIC_TEMPLATES
97
97
  #define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX
98
+ #define BOOST_NO_CXX11_USER_DEFINED_LITERALS
98
99
 
99
100
  #ifdef c_plusplus
100
101
  // EDG has "long long" in non-strict mode
@@ -51,6 +51,7 @@
51
51
  #define BOOST_NO_CXX11_DECLTYPE_N3276
52
52
  #define BOOST_NO_CXX11_DECLTYPE
53
53
  #define BOOST_NO_CXX11_CONSTEXPR
54
+ #define BOOST_NO_CXX11_USER_DEFINED_LITERALS
54
55
  #define BOOST_NO_COMPLETE_VALUE_INITIALIZATION
55
56
  #define BOOST_NO_CXX11_CHAR32_T
56
57
  #define BOOST_NO_CXX11_CHAR16_T
@@ -86,6 +86,7 @@
86
86
  #define BOOST_NO_CXX11_UNICODE_LITERALS
87
87
  #define BOOST_NO_CXX11_VARIADIC_TEMPLATES
88
88
  #define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX
89
+ #define BOOST_NO_CXX11_USER_DEFINED_LITERALS
89
90
 
90
91
  #if (__DMC__ < 0x812)
91
92
  #define BOOST_NO_CXX11_VARIADIC_MACROS
@@ -11,7 +11,14 @@
11
11
 
12
12
  // See http://www.boost.org for most recent version.
13
13
 
14
- // GNU C++ compiler setup:
14
+ // GNU C++ compiler setup.
15
+
16
+ //
17
+ // Define BOOST_GCC so we know this is "real" GCC and not some pretender:
18
+ //
19
+ #if !defined(__CUDACC__)
20
+ #define BOOST_GCC (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__)
21
+ #endif
15
22
 
16
23
  #if __GNUC__ < 3
17
24
  # if __GNUC_MINOR__ == 91
@@ -146,6 +153,19 @@
146
153
  # endif
147
154
  #endif
148
155
 
156
+ //
157
+ // Recent GCC versions have __int128 when in 64-bit mode.
158
+ //
159
+ // We disable this if the compiler is really nvcc as it
160
+ // doesn't actually support __int128 as of CUDA_VERSION=5000
161
+ // even though it defines __SIZEOF_INT128__.
162
+ // See https://svn.boost.org/trac/boost/ticket/8048
163
+ // Only re-enable this for nvcc if you're absolutely sure
164
+ // of the circumstances under which it's supported:
165
+ //
166
+ #if defined(__SIZEOF_INT128__) && !defined(__CUDACC__)
167
+ # define BOOST_HAS_INT128
168
+ #endif
149
169
 
150
170
  // C++0x features in 4.3.n and later
151
171
  //
@@ -216,12 +236,18 @@
216
236
  #define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX
217
237
  #endif
218
238
 
239
+ // C++0x features in 4.7.n and later
240
+ //
219
241
  #if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 7) || !defined(__GXX_EXPERIMENTAL_CXX0X__)
220
242
  # define BOOST_NO_CXX11_TEMPLATE_ALIASES
243
+ # define BOOST_NO_CXX11_USER_DEFINED_LITERALS
221
244
  #endif
222
- // C++0x features not supported at all yet
245
+
246
+ // C++0x features in 4.8.1 and later
223
247
  //
224
- #define BOOST_NO_CXX11_DECLTYPE_N3276
248
+ #if (__GNUC__*10000 + __GNUC_MINOR__*100 + __GNUC_PATCHLEVEL__ < 40801) || !defined(__GXX_EXPERIMENTAL_CXX0X__)
249
+ # define BOOST_NO_CXX11_DECLTYPE_N3276
250
+ #endif
225
251
 
226
252
  #ifndef BOOST_COMPILER
227
253
  # define BOOST_COMPILER "GNU C++ version " __VERSION__
@@ -53,7 +53,8 @@
53
53
  # define BOOST_NO_CXX11_RAW_LITERALS
54
54
  # define BOOST_NO_CXX11_UNICODE_LITERALS
55
55
  # define BOOST_NO_CXX11_NOEXCEPT
56
- #define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX
56
+ # define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX
57
+ # define BOOST_NO_CXX11_USER_DEFINED_LITERALS
57
58
 
58
59
  #define BOOST_COMPILER "GCC-XML C++ version " __GCCXML__
59
60
 
@@ -118,6 +118,7 @@
118
118
  #define BOOST_NO_CXX11_TEMPLATE_ALIASES
119
119
  #define BOOST_NO_CXX11_UNICODE_LITERALS
120
120
  #define BOOST_NO_CXX11_VARIADIC_TEMPLATES
121
+ #define BOOST_NO_CXX11_USER_DEFINED_LITERALS
121
122
 
122
123
  /*
123
124
  See https://forums13.itrc.hp.com/service/forums/questionanswer.do?threadId=1443331 and
@@ -181,7 +181,7 @@ template<> struct assert_intrinsic_wchar_t<unsigned short> {};
181
181
  // (Niels Dekker, LKEB, May 2010)
182
182
  // Apparently Intel 12.1 (compiler version number 9999 !!) has the same issue (compiler regression).
183
183
  #if defined(__INTEL_COMPILER)
184
- # if (__INTEL_COMPILER <= 1110) || (__INTEL_COMPILER == 9999)
184
+ # if (__INTEL_COMPILER <= 1110) || (__INTEL_COMPILER == 9999) || (defined(_WIN32) && (__INTEL_COMPILER < 1500))
185
185
  # define BOOST_NO_COMPLETE_VALUE_INITIALIZATION
186
186
  # endif
187
187
  #endif
@@ -119,6 +119,7 @@
119
119
  #define BOOST_NO_CXX11_VARIADIC_TEMPLATES
120
120
  #define BOOST_NO_CXX11_VARIADIC_MACROS
121
121
  #define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX
122
+ #define BOOST_NO_CXX11_USER_DEFINED_LITERALS
122
123
 
123
124
  #define BOOST_COMPILER "Metrowerks CodeWarrior C++ version " BOOST_STRINGIZE(BOOST_COMPILER_VERSION)
124
125
 
@@ -68,6 +68,7 @@
68
68
  #define BOOST_NO_CXX11_VARIADIC_TEMPLATES
69
69
  #define BOOST_NO_CXX11_VARIADIC_MACROS
70
70
  #define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX
71
+ #define BOOST_NO_CXX11_USER_DEFINED_LITERALS
71
72
 
72
73
  //
73
74
  // versions check:
@@ -76,5 +76,6 @@
76
76
  # define BOOST_NO_CXX11_HDR_CONDITION_VARIABLE
77
77
  # define BOOST_NO_CXX11_HDR_CODECVT
78
78
  # define BOOST_NO_CXX11_HDR_CHRONO
79
+ # define BOOST_NO_CXX11_USER_DEFINED_LITERALS
79
80
  #endif
80
81
 
@@ -111,6 +111,7 @@
111
111
  #define BOOST_NO_CXX11_HDR_CODECVT
112
112
  #define BOOST_NO_CXX11_HDR_CHRONO
113
113
  #define BOOST_NO_CXX11_HDR_ARRAY
114
+ #define BOOST_NO_CXX11_USER_DEFINED_LITERALS
114
115
 
115
116
  //
116
117
  // version check:
@@ -127,6 +127,7 @@
127
127
  #define BOOST_NO_CXX11_VARIADIC_TEMPLATES
128
128
  #define BOOST_NO_CXX11_VARIADIC_MACROS
129
129
  #define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX
130
+ #define BOOST_NO_CXX11_USER_DEFINED_LITERALS
130
131
 
131
132
  //
132
133
  // Version
@@ -53,8 +53,8 @@
53
53
  #error "Compiler not supported or configured - please reconfigure"
54
54
  #endif
55
55
  //
56
- // last known and checked version is 1110:
57
- #if (__IBMCPP__ > 1110)
56
+ // last known and checked version is 1210:
57
+ #if (__IBMCPP__ > 1210)
58
58
  # if defined(BOOST_ASSERT_CONFIG)
59
59
  # error "Unknown compiler version - please run the configure tests and report the results"
60
60
  # endif
@@ -106,6 +106,7 @@
106
106
  #define BOOST_NO_CXX11_NULLPTR
107
107
  #define BOOST_NO_CXX11_RANGE_BASED_FOR
108
108
  #define BOOST_NO_CXX11_RAW_LITERALS
109
+ #define BOOST_NO_CXX11_USER_DEFINED_LITERALS
109
110
  #if ! __IBMCPP_RVALUE_REFERENCES
110
111
  # define BOOST_NO_CXX11_RVALUE_REFERENCES
111
112
  #endif
@@ -134,10 +134,6 @@
134
134
  // (Niels Dekker, LKEB, May 2010)
135
135
  # define BOOST_NO_COMPLETE_VALUE_INITIALIZATION
136
136
 
137
- #if _MSC_VER < 1600 || !defined(BOOST_STRICT_CONFIG) // 150X == VC++ 9.0
138
- # define BOOST_NO_CXX11_HDR_INITIALIZER_LIST
139
- #endif
140
-
141
137
  #ifndef _NATIVE_WCHAR_T_DEFINED
142
138
  # define BOOST_NO_INTRINSIC_WCHAR_T
143
139
  #endif
@@ -183,6 +179,16 @@
183
179
  # define BOOST_NO_RTTI
184
180
  #endif
185
181
 
182
+ //
183
+ // TR1 features:
184
+ //
185
+ #if _MSC_VER >= 1700
186
+ // # define BOOST_HAS_TR1_HASH // don't know if this is true yet.
187
+ // # define BOOST_HAS_TR1_TYPE_TRAITS // don't know if this is true yet.
188
+ # define BOOST_HAS_TR1_UNORDERED_MAP
189
+ # define BOOST_HAS_TR1_UNORDERED_SET
190
+ #endif
191
+
186
192
  //
187
193
  // C++0x features
188
194
  //
@@ -211,24 +217,32 @@
211
217
  # define BOOST_NO_CXX11_SCOPED_ENUMS
212
218
  #endif // _MSC_VER < 1700
213
219
 
214
- // C++0x features not supported by any versions
220
+ // C++11 features supported by VC++ 11 (aka 2012) November 2012 CTP
221
+ // Because the CTP is unsupported, unrelease, and only alpha quality,
222
+ // it is only supported if BOOST_MSVC_ENABLE_2012_NOV_CTP is defined.
223
+ //
224
+ #if _MSC_FULL_VER < 170051025 || !defined(BOOST_MSVC_ENABLE_2012_NOV_CTP)
225
+ # define BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS
226
+ # define BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS
227
+ # define BOOST_NO_CXX11_RAW_LITERALS
228
+ # define BOOST_NO_CXX11_VARIADIC_TEMPLATES
229
+ # define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX
230
+ #endif
231
+
232
+ // C++11 features not supported by any versions
215
233
  #define BOOST_NO_CXX11_CHAR16_T
216
234
  #define BOOST_NO_CXX11_CHAR32_T
217
235
  #define BOOST_NO_CXX11_CONSTEXPR
218
236
  #define BOOST_NO_CXX11_DECLTYPE_N3276
219
237
  #define BOOST_NO_CXX11_DEFAULTED_FUNCTIONS
220
238
  #define BOOST_NO_CXX11_DELETED_FUNCTIONS
221
- #define BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS
222
- #define BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS
223
- #define BOOST_NO_CXX11_HDR_INITIALIZER_LIST
224
239
  #define BOOST_NO_CXX11_NOEXCEPT
225
- #define BOOST_NO_CXX11_RAW_LITERALS
226
240
  #define BOOST_NO_CXX11_TEMPLATE_ALIASES
227
241
  #define BOOST_NO_CXX11_UNICODE_LITERALS
228
- #define BOOST_NO_CXX11_VARIADIC_TEMPLATES
229
242
  #define BOOST_NO_SFINAE_EXPR
230
243
  #define BOOST_NO_TWO_PHASE_NAME_LOOKUP
231
- #define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX
244
+ #define BOOST_NO_CXX11_USER_DEFINED_LITERALS
245
+
232
246
  //
233
247
  // prefix and suffix headers:
234
248
  //
@@ -1,31 +1,369 @@
1
- // (C) Copyright Dustin Spicuzza 2009.
2
- // Use, modification and distribution are subject to the
3
- // Boost Software License, Version 1.0. (See accompanying file
1
+ // (C) Copyright Dustin Spicuzza 2009.
2
+ // Adapted to vxWorks 6.9 by Peter Brockamp 2012.
3
+ // Use, modification and distribution are subject to the
4
+ // Boost Software License, Version 1.0. (See accompanying file
4
5
  // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
5
6
 
6
7
  // See http://www.boost.org for most recent version.
7
8
 
8
- // vxWorks specific config options:
9
+ // Since WRS does not yet properly support boost under vxWorks
10
+ // and this file was badly outdated, but I was keen on using it,
11
+ // I patched boost myself to make things work. This has been tested
12
+ // and adapted by me for vxWorks 6.9 *only*, as I'm lacking access
13
+ // to earlier 6.X versions! The only thing I know for sure is that
14
+ // very old versions of vxWorks (namely everything below 6.x) are
15
+ // absolutely unable to use boost. This is mainly due to the completely
16
+ // outdated libraries and ancient compiler (GCC 2.96 or worse). Do
17
+ // not even think of getting this to work, a miserable failure will
18
+ // be guaranteed!
19
+ // Equally, this file has been tested for RTPs (Real Time Processes)
20
+ // only, not for DKMs (Downloadable Kernel Modules). These two types
21
+ // of executables differ largely in the available functionality of
22
+ // the C-library, STL, and so on. A DKM uses a library similar to those
23
+ // of vxWorks 5.X - with all its limitations and incompatibilities
24
+ // with respect to ANSI C++ and STL. So probably there might be problems
25
+ // with the usage of boost from DKMs. WRS or any voluteers are free to
26
+ // prove the opposite!
9
27
 
28
+ // ====================================================================
29
+ //
30
+ // Some important information regarding the usage of POSIX semaphores:
31
+ // -------------------------------------------------------------------
32
+ //
33
+ // VxWorks as a real time operating system handles threads somewhat
34
+ // different from what "normal" OSes do, regarding their scheduling!
35
+ // This could lead to a scenario called "priority inversion" when using
36
+ // semaphores, see http://en.wikipedia.org/wiki/Priority_inversion.
37
+ //
38
+ // Now, VxWorks POSIX-semaphores for DKM's default to the usage of
39
+ // priority inverting semaphores, which is fine. On the other hand,
40
+ // for RTP's it defaults to using non priority inverting semaphores,
41
+ // which could easily pose a serious problem for a real time process,
42
+ // i.e. deadlocks! To overcome this two possibilities do exist:
43
+ //
44
+ // a) Patch every piece of boost that uses semaphores to instanciate
45
+ // the proper type of semaphores. This is non-intrusive with respect
46
+ // to the OS and could relatively easy been done by giving all
47
+ // semaphores attributes deviating from the default (for in-depth
48
+ // information see the POSIX functions pthread_mutexattr_init()
49
+ // and pthread_mutexattr_setprotocol()). However this breaks all
50
+ // too easily, as with every new version some boost library could
51
+ // all in a sudden start using semaphores, resurrecting the very
52
+ // same, hard to locate problem over and over again!
53
+ //
54
+ // b) We could change the default properties for POSIX-semaphores
55
+ // that VxWorks uses for RTP's and this is being suggested here,
56
+ // as it will more or less seamlessly integrate with boost. I got
57
+ // the following information from WRS how to do this, compare
58
+ // Wind River TSR# 1209768:
59
+ //
60
+ // Instructions for changing the default properties of POSIX-
61
+ // semaphores for RTP's in VxWorks 6.9:
62
+ // - Edit the file /vxworks-6.9/target/usr/src/posix/pthreadLib.c
63
+ // in the root of your Workbench-installation.
64
+ // - Around line 917 there should be the definition of the default
65
+ // mutex attributes:
66
+ //
67
+ // LOCAL pthread_mutexattr_t defaultMutexAttr =
68
+ // {
69
+ // PTHREAD_INITIALIZED_OBJ, PTHREAD_PRIO_NONE, 0,
70
+ // PTHREAD_MUTEX_DEFAULT
71
+ // };
72
+ //
73
+ // Here, replace PTHREAD_PRIO_NONE by PTHREAD_PRIO_INHERIT.
74
+ // - Around line 1236 there should be a definition for the function
75
+ // pthread_mutexattr_init(). A couple of lines below you should
76
+ // find a block of code like this:
77
+ //
78
+ // pAttr->mutexAttrStatus = PTHREAD_INITIALIZED_OBJ;
79
+ // pAttr->mutexAttrProtocol = PTHREAD_PRIO_NONE;
80
+ // pAttr->mutexAttrPrioceiling = 0;
81
+ // pAttr->mutexAttrType = PTHREAD_MUTEX_DEFAULT;
82
+ //
83
+ // Here again, replace PTHREAD_PRIO_NONE by PTHREAD_PRIO_INHERIT.
84
+ // - Finally, rebuild your VSB. This will create a new VxWorks kernel
85
+ // with the changed properties. That's it! Now, using boost should
86
+ // no longer cause any problems with task deadlocks!
87
+ //
88
+ // And here's another useful piece of information concerning VxWorks'
89
+ // POSIX-functionality in general:
90
+ // VxWorks is not a genuine POSIX-OS in itself, rather it is using a
91
+ // kind of compatibility layer (sort of a wrapper) to emulate the
92
+ // POSIX-functionality by using its own resources and functions.
93
+ // At the time a task (thread) calls it's first POSIX-function during
94
+ // runtime it is being transformed by the OS into a POSIX-thread.
95
+ // This transformation does include a call to malloc() to allocate the
96
+ // memory required for the housekeeping of POSIX-threads. In a high
97
+ // priority RTP this malloc() call may be highly undesirable, as its
98
+ // timing is more or less unpredictable (depending on what your actual
99
+ // heap looks like). You can circumvent this problem by calling the
100
+ // function thread_self() at a well defined point in the code of the
101
+ // task, e.g. shortly after the task spawns up. Thereby you are able
102
+ // to define the time when the task-transformation will take place and
103
+ // you could shift it to an uncritical point where a malloc() call is
104
+ // tolerable. So, if this could pose a problem for your code, remember
105
+ // to call thread_self() from the affected task at an early stage.
106
+ //
107
+ // ====================================================================
108
+
109
+ // Block out all versions before vxWorks 6.x, as these don't work:
110
+ // Include header with the vxWorks version information and query them
111
+ #include <version.h>
112
+ #if !defined(_WRS_VXWORKS_MAJOR) || (_WRS_VXWORKS_MAJOR < 6)
113
+ # error "The vxWorks version you're using is so badly outdated,\
114
+ it doesn't work at all with boost, sorry, no chance!"
115
+ #endif
116
+
117
+ // Handle versions above 5.X but below 6.9
118
+ #if (_WRS_VXWORKS_MAJOR == 6) && (_WRS_VXWORKS_MINOR < 9)
119
+ // TODO: Starting from what version does vxWorks work with boost?
120
+ // We can't reasonably insert a #warning "" as a user hint here,
121
+ // as this will show up with every file including some boost header,
122
+ // badly bugging the user... So for the time being we just leave it.
123
+ #endif
124
+
125
+ // vxWorks specific config options:
126
+ // --------------------------------
10
127
  #define BOOST_PLATFORM "vxWorks"
11
128
 
12
- #define BOOST_NO_CWCHAR
13
- #define BOOST_NO_INTRINSIC_WCHAR_T
129
+ // Special behaviour for DKMs:
130
+ #ifdef _WRS_KERNEL
131
+ // DKMs do not have the <cwchar>-header,
132
+ // but apparently they do have an intrinsic wchar_t meanwhile!
133
+ # define BOOST_NO_CWCHAR
14
134
 
15
- #if defined(__GNUC__) && defined(__STRICT_ANSI__)
16
- #define BOOST_NO_INT64_T
135
+ // Lots of wide-functions and -headers are unavailable for DKMs as well:
136
+ # define BOOST_NO_CWCTYPE
137
+ # define BOOST_NO_SWPRINTF
138
+ # define BOOST_NO_STD_WSTRING
139
+ # define BOOST_NO_STD_WSTREAMBUF
17
140
  #endif
18
141
 
142
+ // Generally available headers:
19
143
  #define BOOST_HAS_UNISTD_H
144
+ #define BOOST_HAS_STDINT_H
145
+ #define BOOST_HAS_DIRENT_H
146
+ #define BOOST_HAS_SLIST
147
+
148
+ // vxWorks does not have installed an iconv-library by default,
149
+ // so unfortunately no Unicode support from scratch is available!
150
+ // Thus, instead it is suggested to switch to ICU, as this seems
151
+ // to be the most complete and portable option...
152
+ #define BOOST_LOCALE_WITH_ICU
153
+
154
+ // Generally available functionality:
155
+ #define BOOST_HAS_THREADS
156
+ #define BOOST_HAS_NANOSLEEP
157
+ #define BOOST_HAS_GETTIMEOFDAY
158
+ #define BOOST_HAS_CLOCK_GETTIME
159
+ #define BOOST_HAS_MACRO_USE_FACET
160
+
161
+ // Generally unavailable functionality, delivered by boost's test function:
162
+ //#define BOOST_NO_DEDUCED_TYPENAME // Commented this out, boost's test gives an errorneous result!
163
+ #define BOOST_NO_CXX11_EXTERN_TEMPLATE
164
+ #define BOOST_NO_CXX11_VARIADIC_MACROS
165
+
166
+ // Generally available threading API's:
167
+ #define BOOST_HAS_PTHREADS
168
+ #define BOOST_HAS_SCHED_YIELD
169
+ #define BOOST_HAS_SIGACTION
170
+
171
+ // Functionality available for RTPs only:
172
+ #ifdef __RTP__
173
+ # define BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE
174
+ # define BOOST_HAS_LOG1P
175
+ # define BOOST_HAS_EXPM1
176
+ #endif
20
177
 
21
- // these allow posix_features to work, since vxWorks doesn't
22
- // define them itself
23
- #define _POSIX_TIMERS 1
24
- #define _POSIX_THREADS 1
178
+ // Functionality available for DKMs only:
179
+ #ifdef _WRS_KERNEL
180
+ // Luckily, at the moment there seems to be none!
181
+ #endif
25
182
 
26
- // vxworks doesn't work with asio serial ports
183
+ // These #defines allow posix_features to work, since vxWorks doesn't
184
+ // #define them itself for DKMs (for RTPs on the contrary it does):
185
+ #ifdef _WRS_KERNEL
186
+ # ifndef _POSIX_TIMERS
187
+ # define _POSIX_TIMERS 1
188
+ # endif
189
+ # ifndef _POSIX_THREADS
190
+ # define _POSIX_THREADS 1
191
+ # endif
192
+ #endif
193
+
194
+ // vxWorks doesn't work with asio serial ports:
27
195
  #define BOOST_ASIO_DISABLE_SERIAL_PORT
196
+ // TODO: The problem here seems to bee that vxWorks uses its own, very specific
197
+ // ways to handle serial ports, incompatible with POSIX or anything...
198
+ // Maybe a specific implementation would be possible, but until the
199
+ // straight need arises... This implementation would presumably consist
200
+ // of some vxWorks specific ioctl-calls, etc. Any voluteers?
201
+
202
+ // vxWorks-around: <time.h> #defines CLOCKS_PER_SEC as sysClkRateGet() but
203
+ // miserably fails to #include the required <sysLib.h> to make
204
+ // sysClkRateGet() available! So we manually include it here.
205
+ #ifdef __RTP__
206
+ # include <time.h>
207
+ # include <sysLib.h>
208
+ #endif
209
+
210
+ // vxWorks-around: In <stdint.h> the macros INT32_C(), UINT32_C(), INT64_C() and
211
+ // UINT64_C() are defined errorneously, yielding not a signed/
212
+ // unsigned long/long long type, but a signed/unsigned int/long
213
+ // type. Eventually this leads to compile errors in ratio_fwd.hpp,
214
+ // when trying to define several constants which do not fit into a
215
+ // long type! We correct them here by redefining.
216
+ #include <cstdint>
217
+
218
+ // Some macro-magic to do the job
219
+ #define VX_JOIN(X, Y) VX_DO_JOIN(X, Y)
220
+ #define VX_DO_JOIN(X, Y) VX_DO_JOIN2(X, Y)
221
+ #define VX_DO_JOIN2(X, Y) X##Y
222
+
223
+ // Correctly setup the macros
224
+ #undef INT32_C
225
+ #undef UINT32_C
226
+ #undef INT64_C
227
+ #undef UINT64_C
228
+ #define INT32_C(x) VX_JOIN(x, L)
229
+ #define UINT32_C(x) VX_JOIN(x, UL)
230
+ #define INT64_C(x) VX_JOIN(x, LL)
231
+ #define UINT64_C(x) VX_JOIN(x, ULL)
232
+
233
+ // #include Libraries required for the following function adaption
234
+ #include <ioLib.h>
235
+ #include <tickLib.h>
236
+ #include <sys/time.h>
28
237
 
29
- // boilerplate code:
238
+ // Use C-linkage for the following helper functions
239
+ extern "C" {
240
+
241
+ // vxWorks-around: The required functions getrlimit() and getrlimit() are missing.
242
+ // But we have the similar functions getprlimit() and setprlimit(),
243
+ // which may serve the purpose.
244
+ // Problem: The vxWorks-documentation regarding these functions
245
+ // doesn't deserve its name! It isn't documented what the first two
246
+ // parameters idtype and id mean, so we must fall back to an educated
247
+ // guess - null, argh... :-/
248
+
249
+ // TODO: getprlimit() and setprlimit() do exist for RTPs only, for whatever reason.
250
+ // Thus for DKMs there would have to be another implementation.
251
+ #ifdef __RTP__
252
+ inline int getrlimit(int resource, struct rlimit *rlp){
253
+ return getprlimit(0, 0, resource, rlp);
254
+ }
255
+
256
+ inline int setrlimit(int resource, const struct rlimit *rlp){
257
+ return setprlimit(0, 0, resource, const_cast<struct rlimit*>(rlp));
258
+ }
259
+ #endif
260
+
261
+ // vxWorks has ftruncate() only, so we do simulate truncate():
262
+ inline int truncate(const char *p, off_t l){
263
+ int fd = open(p, O_WRONLY);
264
+ if (fd == -1){
265
+ errno = EACCES;
266
+ return -1;
267
+ }
268
+ if (ftruncate(fd, l) == -1){
269
+ close(fd);
270
+ errno = EACCES;
271
+ return -1;
272
+ }
273
+ return close(fd);
274
+ }
275
+
276
+ // Fake symlink handling by dummy functions:
277
+ inline int symlink(const char*, const char*){
278
+ // vxWorks has no symlinks -> always return an error!
279
+ errno = EACCES;
280
+ return -1;
281
+ }
282
+
283
+ inline ssize_t readlink(const char*, char*, size_t){
284
+ // vxWorks has no symlinks -> always return an error!
285
+ errno = EACCES;
286
+ return -1;
287
+ }
288
+
289
+ // vxWorks claims to implement gettimeofday in sys/time.h
290
+ // but nevertheless does not provide it! See
291
+ // https://support.windriver.com/olsPortal/faces/maintenance/techtipDetail_noHeader.jspx?docId=16442&contentId=WR_TECHTIP_006256
292
+ // We implement a surrogate version here via clock_gettime:
293
+ inline int gettimeofday(struct timeval *tv, void * /*tzv*/) {
294
+ struct timespec ts;
295
+ clock_gettime(CLOCK_MONOTONIC, &ts);
296
+ tv->tv_sec = ts.tv_sec;
297
+ tv->tv_usec = ts.tv_nsec / 1000;
298
+ return 0;
299
+ }
300
+
301
+ // vxWorks does provide neither struct tms nor function times()!
302
+ // We implement an empty dummy-function, simply setting the user
303
+ // and system time to the half of thew actual system ticks-value
304
+ // and the child user and system time to 0.
305
+ // Rather ugly but at least it suppresses compiler errors...
306
+ // Unfortunately, this of course *does* have an severe impact on
307
+ // dependant libraries, actually this is chrono only! Here it will
308
+ // not be possible to correctly use user and system times! But
309
+ // as vxWorks is lacking the ability to calculate user and system
310
+ // process times there seems to be no other possible solution.
311
+ struct tms{
312
+ clock_t tms_utime; // User CPU time
313
+ clock_t tms_stime; // System CPU time
314
+ clock_t tms_cutime; // User CPU time of terminated child processes
315
+ clock_t tms_cstime; // System CPU time of terminated child processes
316
+ };
317
+
318
+ inline clock_t times(struct tms *t){
319
+ struct timespec ts;
320
+ clock_gettime(CLOCK_THREAD_CPUTIME_ID, &ts);
321
+ clock_t ticks(static_cast<clock_t>(static_cast<double>(ts.tv_sec) * CLOCKS_PER_SEC +
322
+ static_cast<double>(ts.tv_nsec) * CLOCKS_PER_SEC / 1000000.0));
323
+ t->tms_utime = ticks/2U;
324
+ t->tms_stime = ticks/2U;
325
+ t->tms_cutime = 0; // vxWorks is lacking the concept of a child process!
326
+ t->tms_cstime = 0; // -> Set the wait times for childs to 0
327
+ return ticks;
328
+ }
329
+
330
+ } // extern "C"
331
+
332
+ // Put the selfmade functions into the std-namespace, just in case
333
+ namespace std {
334
+ # ifdef __RTP__
335
+ using ::getrlimit;
336
+ using ::setrlimit;
337
+ # endif
338
+ using ::truncate;
339
+ using ::symlink;
340
+ using ::readlink;
341
+ using ::times;
342
+ using ::gettimeofday;
343
+ }
344
+
345
+ // Some more macro-magic:
346
+ // vxWorks-around: Some functions are not present or broken in vxWorks
347
+ // but may be patched to life via helper macros...
348
+
349
+ // Include signal.h which might contain a typo to be corrected here
350
+ #include <signal.h>
351
+
352
+ #define getpagesize() sysconf(_SC_PAGESIZE) // getpagesize is deprecated anyway!
353
+ #ifndef S_ISSOCK
354
+ # define S_ISSOCK(mode) ((mode & S_IFMT) == S_IFSOCK) // Is file a socket?
355
+ #endif
356
+ #define lstat(p, b) stat(p, b) // lstat() == stat(), as vxWorks has no symlinks!
357
+ #ifndef FPE_FLTINV
358
+ # define FPE_FLTINV (FPE_FLTSUB+1) // vxWorks has no FPE_FLTINV, so define one as a dummy
359
+ #endif
360
+ #if !defined(BUS_ADRALN) && defined(BUS_ADRALNR)
361
+ # define BUS_ADRALN BUS_ADRALNR // Correct a supposed typo in vxWorks' <signal.h>
362
+ #endif
363
+ //typedef int locale_t; // locale_t is a POSIX-extension, currently unpresent in vxWorks!
364
+
365
+ // #include boilerplate code:
30
366
  #include <boost/config/posix_features.hpp>
31
-
367
+
368
+ // vxWorks lies about XSI conformance, there is no nl_types.h:
369
+ #undef BOOST_HAS_NL_TYPES_H