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
@@ -17,6 +17,7 @@ const int NANOSECONDS_PER_MILLISECOND = 1000000;
17
17
  const int MICROSECONDS_PER_SECOND = 1000000;
18
18
  const int NANOSECONDS_PER_MICROSECOND = 1000;
19
19
 
20
+ #if defined BOOST_THREAD_USES_DATETIME
20
21
  inline void to_time(int milliseconds, boost::xtime& xt)
21
22
  {
22
23
  int res = 0;
@@ -33,7 +34,9 @@ inline void to_time(int milliseconds, boost::xtime& xt)
33
34
  xt.nsec -= NANOSECONDS_PER_SECOND;
34
35
  }
35
36
  }
37
+ #endif
36
38
  #if defined(BOOST_HAS_PTHREADS)
39
+ #if defined BOOST_THREAD_USES_DATETIME
37
40
  inline void to_timespec(const boost::xtime& xt, timespec& ts)
38
41
  {
39
42
  ts.tv_sec = static_cast<int>(xt.sec);
@@ -44,14 +47,27 @@ inline void to_timespec(const boost::xtime& xt, timespec& ts)
44
47
  ts.tv_nsec %= NANOSECONDS_PER_SECOND;
45
48
  }
46
49
  }
47
-
50
+ #endif
48
51
  inline void to_time(int milliseconds, timespec& ts)
49
52
  {
53
+ #if defined BOOST_THREAD_USES_DATETIME
50
54
  boost::xtime xt;
51
55
  to_time(milliseconds, xt);
52
56
  to_timespec(xt, ts);
57
+ #else
58
+ ts.tv_sec += (milliseconds / MILLISECONDS_PER_SECOND);
59
+ ts.tv_nsec += ((milliseconds % MILLISECONDS_PER_SECOND) *
60
+ NANOSECONDS_PER_MILLISECOND);
61
+
62
+ if (ts.tv_nsec >= NANOSECONDS_PER_SECOND)
63
+ {
64
+ ++ts.tv_sec;
65
+ ts.tv_nsec -= NANOSECONDS_PER_SECOND;
66
+ }
67
+ #endif
53
68
  }
54
69
 
70
+ #if defined BOOST_THREAD_USES_DATETIME
55
71
  inline void to_timespec_duration(const boost::xtime& xt, timespec& ts)
56
72
  {
57
73
  boost::xtime cur;
@@ -82,7 +98,9 @@ inline void to_timespec_duration(const boost::xtime& xt, timespec& ts)
82
98
  }
83
99
  }
84
100
  #endif
101
+ #endif
85
102
 
103
+ #if defined BOOST_THREAD_USES_DATETIME
86
104
  inline void to_duration(boost::xtime xt, int& milliseconds)
87
105
  {
88
106
  boost::xtime cur;
@@ -126,6 +144,7 @@ inline void to_microduration(boost::xtime xt, int& microseconds)
126
144
  NANOSECONDS_PER_MICROSECOND);
127
145
  }
128
146
  }
147
+ #endif
129
148
  }
130
149
 
131
150
  // Change Log:
@@ -14,7 +14,7 @@
14
14
  #include <boost/config.hpp>
15
15
 
16
16
  #ifdef BOOST_NO_LIMITS
17
- # include <boost/detail/limits.hpp>
17
+ # error "There is no std::numeric_limits suppport available."
18
18
  #else
19
19
  # include <limits>
20
20
  #endif
@@ -813,6 +813,16 @@ struct precision
813
813
 
814
814
  #endif
815
815
 
816
+ #ifdef BOOST_MATH_USE_FLOAT128
817
+
818
+ template <class Policy>
819
+ struct precision<__float128, Policy>
820
+ {
821
+ typedef mpl::int_<113> type;
822
+ };
823
+
824
+ #endif
825
+
816
826
  namespace detail{
817
827
 
818
828
  template <class T, class Policy>
@@ -9,6 +9,7 @@
9
9
  #define BOOST_MATH_SPECIAL_ROUND_FWD_HPP
10
10
 
11
11
  #include <boost/config.hpp>
12
+ #include <boost/math/tools/promotion.hpp>
12
13
 
13
14
  #ifdef _MSC_VER
14
15
  #pragma once
@@ -20,9 +21,9 @@ namespace boost
20
21
  {
21
22
 
22
23
  template <class T, class Policy>
23
- T trunc(const T& v, const Policy& pol);
24
+ typename tools::promote_args<T>::type trunc(const T& v, const Policy& pol);
24
25
  template <class T>
25
- T trunc(const T& v);
26
+ typename tools::promote_args<T>::type trunc(const T& v);
26
27
  template <class T, class Policy>
27
28
  int itrunc(const T& v, const Policy& pol);
28
29
  template <class T>
@@ -38,9 +39,9 @@ namespace boost
38
39
  boost::long_long_type lltrunc(const T& v);
39
40
  #endif
40
41
  template <class T, class Policy>
41
- T round(const T& v, const Policy& pol);
42
+ typename tools::promote_args<T>::type round(const T& v, const Policy& pol);
42
43
  template <class T>
43
- T round(const T& v);
44
+ typename tools::promote_args<T>::type round(const T& v);
44
45
  template <class T, class Policy>
45
46
  int iround(const T& v, const Policy& pol);
46
47
  template <class T>
@@ -76,5 +77,17 @@ namespace boost
76
77
 
77
78
  }
78
79
  }
80
+
81
+ #undef BOOST_MATH_STD_USING
82
+ #define BOOST_MATH_STD_USING BOOST_MATH_STD_USING_CORE\
83
+ using boost::math::round;\
84
+ using boost::math::iround;\
85
+ using boost::math::lround;\
86
+ using boost::math::trunc;\
87
+ using boost::math::itrunc;\
88
+ using boost::math::ltrunc;\
89
+ using boost::math::modf;
90
+
91
+
79
92
  #endif // BOOST_MATH_SPECIAL_ROUND_FWD_HPP
80
93
 
@@ -37,13 +37,13 @@ the template is never instantiated.
37
37
  a floating point type (float, double or long double) can be determined
38
38
  at compile time, then the following algorithm is used:
39
39
 
40
- If all exponent bits, the flag bit (if there is one),
40
+ If all exponent bits, the flag bit (if there is one),
41
41
  and all significand bits are 0, then the number is zero.
42
42
 
43
- If all exponent bits and the flag bit (if there is one) are 0,
43
+ If all exponent bits and the flag bit (if there is one) are 0,
44
44
  and at least one significand bit is 1, then the number is subnormal.
45
45
 
46
- If all exponent bits are 1 and all significand bits are 0,
46
+ If all exponent bits are 1 and all significand bits are 0,
47
47
  then the number is infinity.
48
48
 
49
49
  If all exponent bits are 1 and at least one significand bit is 1,
@@ -56,7 +56,7 @@ at compile time, then the following algorithm is used:
56
56
 
57
57
  Most formats have the structure
58
58
  sign bit + exponent bits + significand bits.
59
-
59
+
60
60
  A few have the structure
61
61
  sign bit + exponent bits + flag bit + significand bits.
62
62
  The flag bit is 0 for zero and subnormal numbers,
@@ -85,7 +85,7 @@ is used.
85
85
  namespace std{ using ::abs; using ::fabs; }
86
86
  #endif
87
87
 
88
- namespace boost{
88
+ namespace boost{
89
89
 
90
90
  //
91
91
  // This must not be located in any namespace under boost::math
@@ -94,18 +94,28 @@ namespace boost{
94
94
  //
95
95
  namespace math_detail{
96
96
 
97
+ #ifdef BOOST_MSVC
98
+ #pragma warning(push)
99
+ #pragma warning(disable:4800)
100
+ #endif
101
+
97
102
  template <class T>
98
103
  inline bool is_nan_helper(T t, const boost::true_type&)
99
104
  {
100
105
  #ifdef isnan
101
106
  return isnan(t);
102
107
  #elif defined(BOOST_MATH_DISABLE_STD_FPCLASSIFY) || !defined(BOOST_HAS_FPCLASSIFY)
108
+ (void)t;
103
109
  return false;
104
110
  #else // BOOST_HAS_FPCLASSIFY
105
111
  return (BOOST_FPCLASSIFY_PREFIX fpclassify(t) == (int)FP_NAN);
106
112
  #endif
107
113
  }
108
114
 
115
+ #ifdef BOOST_MSVC
116
+ #pragma warning(pop)
117
+ #endif
118
+
109
119
  template <class T>
110
120
  inline bool is_nan_helper(T, const boost::false_type&)
111
121
  {
@@ -169,7 +179,7 @@ inline int fpclassify_imp BOOST_NO_MACRO_EXPAND(T t, const generic_tag<false>&)
169
179
  if(std::numeric_limits<T>::is_specialized)
170
180
  return fpclassify_imp(t, generic_tag<true>());
171
181
  #endif
172
- //
182
+ //
173
183
  // An unknown type with no numeric_limits support,
174
184
  // so what are we supposed to do we do here?
175
185
  //
@@ -178,7 +188,7 @@ inline int fpclassify_imp BOOST_NO_MACRO_EXPAND(T t, const generic_tag<false>&)
178
188
  return t == 0 ? FP_ZERO : FP_NORMAL;
179
189
  }
180
190
 
181
- template<class T>
191
+ template<class T>
182
192
  int fpclassify_imp BOOST_NO_MACRO_EXPAND(T x, ieee_copy_all_bits_tag)
183
193
  {
184
194
  typedef BOOST_DEDUCED_TYPENAME fp_traits<T>::type traits;
@@ -207,7 +217,7 @@ int fpclassify_imp BOOST_NO_MACRO_EXPAND(T x, ieee_copy_all_bits_tag)
207
217
  return FP_NAN;
208
218
  }
209
219
 
210
- template<class T>
220
+ template<class T>
211
221
  int fpclassify_imp BOOST_NO_MACRO_EXPAND(T x, ieee_copy_leading_bits_tag)
212
222
  {
213
223
  typedef BOOST_DEDUCED_TYPENAME fp_traits<T>::type traits;
@@ -215,7 +225,7 @@ int fpclassify_imp BOOST_NO_MACRO_EXPAND(T x, ieee_copy_leading_bits_tag)
215
225
  BOOST_MATH_INSTRUMENT_VARIABLE(x);
216
226
 
217
227
  BOOST_DEDUCED_TYPENAME traits::bits a;
218
- traits::get_bits(x,a);
228
+ traits::get_bits(x,a);
219
229
  a &= traits::exponent | traits::flag | traits::significand;
220
230
 
221
231
  if(a <= traits::significand) {
@@ -234,9 +244,8 @@ int fpclassify_imp BOOST_NO_MACRO_EXPAND(T x, ieee_copy_leading_bits_tag)
234
244
  return FP_NAN;
235
245
  }
236
246
 
237
- #if defined(BOOST_MATH_USE_STD_FPCLASSIFY) && defined(BOOST_MATH_NO_NATIVE_LONG_DOUBLE_FP_CLASSIFY)
238
- template <>
239
- inline int fpclassify_imp<long double> BOOST_NO_MACRO_EXPAND(long double t, const native_tag&)
247
+ #if defined(BOOST_MATH_USE_STD_FPCLASSIFY) && (defined(BOOST_MATH_NO_NATIVE_LONG_DOUBLE_FP_CLASSIFY) || defined(BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS))
248
+ inline int fpclassify_imp BOOST_NO_MACRO_EXPAND(long double t, const native_tag&)
240
249
  {
241
250
  return boost::math::detail::fpclassify_imp(t, generic_tag<true>());
242
251
  }
@@ -259,24 +268,41 @@ inline int fpclassify BOOST_NO_MACRO_EXPAND(T t)
259
268
  #endif
260
269
  }
261
270
 
271
+ #ifdef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS
272
+ template <>
273
+ inline int fpclassify<long double> BOOST_NO_MACRO_EXPAND(long double t)
274
+ {
275
+ typedef detail::fp_traits<long double>::type traits;
276
+ typedef traits::method method;
277
+ typedef long double value_type;
278
+ #ifdef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
279
+ if(std::numeric_limits<long double>::is_specialized && detail::is_generic_tag_false(static_cast<method*>(0)))
280
+ return detail::fpclassify_imp(static_cast<value_type>(t), detail::generic_tag<true>());
281
+ return detail::fpclassify_imp(static_cast<value_type>(t), method());
282
+ #else
283
+ return detail::fpclassify_imp(static_cast<value_type>(t), method());
284
+ #endif
285
+ }
286
+ #endif
287
+
262
288
  namespace detail {
263
289
 
264
290
  #ifdef BOOST_MATH_USE_STD_FPCLASSIFY
265
- template<class T>
291
+ template<class T>
266
292
  inline bool isfinite_impl(T x, native_tag const&)
267
293
  {
268
294
  return (std::isfinite)(x);
269
295
  }
270
296
  #endif
271
297
 
272
- template<class T>
298
+ template<class T>
273
299
  inline bool isfinite_impl(T x, generic_tag<true> const&)
274
300
  {
275
301
  return x >= -(std::numeric_limits<T>::max)()
276
302
  && x <= (std::numeric_limits<T>::max)();
277
303
  }
278
304
 
279
- template<class T>
305
+ template<class T>
280
306
  inline bool isfinite_impl(T x, generic_tag<false> const&)
281
307
  {
282
308
  #ifdef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
@@ -287,7 +313,7 @@ namespace detail {
287
313
  return true;
288
314
  }
289
315
 
290
- template<class T>
316
+ template<class T>
291
317
  inline bool isfinite_impl(T x, ieee_tag const&)
292
318
  {
293
319
  typedef BOOST_DEDUCED_TYPENAME detail::fp_traits<T>::type traits;
@@ -298,8 +324,7 @@ namespace detail {
298
324
  }
299
325
 
300
326
  #if defined(BOOST_MATH_USE_STD_FPCLASSIFY) && defined(BOOST_MATH_NO_NATIVE_LONG_DOUBLE_FP_CLASSIFY)
301
- template <>
302
- inline bool isfinite_impl<long double> BOOST_NO_MACRO_EXPAND(long double t, const native_tag&)
327
+ inline bool isfinite_impl BOOST_NO_MACRO_EXPAND(long double t, const native_tag&)
303
328
  {
304
329
  return boost::math::detail::isfinite_impl(t, generic_tag<true>());
305
330
  }
@@ -307,29 +332,41 @@ inline bool isfinite_impl<long double> BOOST_NO_MACRO_EXPAND(long double t, cons
307
332
 
308
333
  }
309
334
 
310
- template<class T>
335
+ template<class T>
311
336
  inline bool (isfinite)(T x)
312
337
  { //!< \brief return true if floating-point type t is finite.
313
338
  typedef typename detail::fp_traits<T>::type traits;
314
339
  typedef typename traits::method method;
315
- typedef typename boost::is_floating_point<T>::type fp_tag;
340
+ // typedef typename boost::is_floating_point<T>::type fp_tag;
316
341
  typedef typename tools::promote_args<T>::type value_type;
317
342
  return detail::isfinite_impl(static_cast<value_type>(x), method());
318
343
  }
319
344
 
345
+ #ifdef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS
346
+ template<>
347
+ inline bool (isfinite)(long double x)
348
+ { //!< \brief return true if floating-point type t is finite.
349
+ typedef detail::fp_traits<long double>::type traits;
350
+ typedef traits::method method;
351
+ typedef boost::is_floating_point<long double>::type fp_tag;
352
+ typedef long double value_type;
353
+ return detail::isfinite_impl(static_cast<value_type>(x), method());
354
+ }
355
+ #endif
356
+
320
357
  //------------------------------------------------------------------------------
321
358
 
322
359
  namespace detail {
323
360
 
324
361
  #ifdef BOOST_MATH_USE_STD_FPCLASSIFY
325
- template<class T>
362
+ template<class T>
326
363
  inline bool isnormal_impl(T x, native_tag const&)
327
364
  {
328
365
  return (std::isnormal)(x);
329
366
  }
330
367
  #endif
331
368
 
332
- template<class T>
369
+ template<class T>
333
370
  inline bool isnormal_impl(T x, generic_tag<true> const&)
334
371
  {
335
372
  if(x < 0) x = -x;
@@ -337,7 +374,7 @@ namespace detail {
337
374
  && x <= (std::numeric_limits<T>::max)();
338
375
  }
339
376
 
340
- template<class T>
377
+ template<class T>
341
378
  inline bool isnormal_impl(T x, generic_tag<false> const&)
342
379
  {
343
380
  #ifdef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
@@ -347,7 +384,7 @@ namespace detail {
347
384
  return !(x == 0);
348
385
  }
349
386
 
350
- template<class T>
387
+ template<class T>
351
388
  inline bool isnormal_impl(T x, ieee_tag const&)
352
389
  {
353
390
  typedef BOOST_DEDUCED_TYPENAME detail::fp_traits<T>::type traits;
@@ -358,8 +395,7 @@ namespace detail {
358
395
  }
359
396
 
360
397
  #if defined(BOOST_MATH_USE_STD_FPCLASSIFY) && defined(BOOST_MATH_NO_NATIVE_LONG_DOUBLE_FP_CLASSIFY)
361
- template <>
362
- inline bool isnormal_impl<long double> BOOST_NO_MACRO_EXPAND(long double t, const native_tag&)
398
+ inline bool isnormal_impl BOOST_NO_MACRO_EXPAND(long double t, const native_tag&)
363
399
  {
364
400
  return boost::math::detail::isnormal_impl(t, generic_tag<true>());
365
401
  }
@@ -367,38 +403,50 @@ inline bool isnormal_impl<long double> BOOST_NO_MACRO_EXPAND(long double t, cons
367
403
 
368
404
  }
369
405
 
370
- template<class T>
406
+ template<class T>
371
407
  inline bool (isnormal)(T x)
372
408
  {
373
409
  typedef typename detail::fp_traits<T>::type traits;
374
410
  typedef typename traits::method method;
375
- typedef typename boost::is_floating_point<T>::type fp_tag;
411
+ //typedef typename boost::is_floating_point<T>::type fp_tag;
376
412
  typedef typename tools::promote_args<T>::type value_type;
377
413
  return detail::isnormal_impl(static_cast<value_type>(x), method());
378
414
  }
379
415
 
416
+ #ifdef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS
417
+ template<>
418
+ inline bool (isnormal)(long double x)
419
+ {
420
+ typedef detail::fp_traits<long double>::type traits;
421
+ typedef traits::method method;
422
+ typedef boost::is_floating_point<long double>::type fp_tag;
423
+ typedef long double value_type;
424
+ return detail::isnormal_impl(static_cast<value_type>(x), method());
425
+ }
426
+ #endif
427
+
380
428
  //------------------------------------------------------------------------------
381
429
 
382
430
  namespace detail {
383
431
 
384
432
  #ifdef BOOST_MATH_USE_STD_FPCLASSIFY
385
- template<class T>
433
+ template<class T>
386
434
  inline bool isinf_impl(T x, native_tag const&)
387
435
  {
388
436
  return (std::isinf)(x);
389
437
  }
390
438
  #endif
391
439
 
392
- template<class T>
440
+ template<class T>
393
441
  inline bool isinf_impl(T x, generic_tag<true> const&)
394
442
  {
395
443
  (void)x; // in case the compiler thinks that x is unused because std::numeric_limits<T>::has_infinity is false
396
- return std::numeric_limits<T>::has_infinity
444
+ return std::numeric_limits<T>::has_infinity
397
445
  && ( x == std::numeric_limits<T>::infinity()
398
446
  || x == -std::numeric_limits<T>::infinity());
399
447
  }
400
448
 
401
- template<class T>
449
+ template<class T>
402
450
  inline bool isinf_impl(T x, generic_tag<false> const&)
403
451
  {
404
452
  #ifdef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
@@ -409,7 +457,7 @@ namespace detail {
409
457
  return false;
410
458
  }
411
459
 
412
- template<class T>
460
+ template<class T>
413
461
  inline bool isinf_impl(T x, ieee_copy_all_bits_tag const&)
414
462
  {
415
463
  typedef BOOST_DEDUCED_TYPENAME fp_traits<T>::type traits;
@@ -420,7 +468,7 @@ namespace detail {
420
468
  return a == traits::exponent;
421
469
  }
422
470
 
423
- template<class T>
471
+ template<class T>
424
472
  inline bool isinf_impl(T x, ieee_copy_leading_bits_tag const&)
425
473
  {
426
474
  typedef BOOST_DEDUCED_TYPENAME fp_traits<T>::type traits;
@@ -436,8 +484,7 @@ namespace detail {
436
484
  }
437
485
 
438
486
  #if defined(BOOST_MATH_USE_STD_FPCLASSIFY) && defined(BOOST_MATH_NO_NATIVE_LONG_DOUBLE_FP_CLASSIFY)
439
- template <>
440
- inline bool isinf_impl<long double> BOOST_NO_MACRO_EXPAND(long double t, const native_tag&)
487
+ inline bool isinf_impl BOOST_NO_MACRO_EXPAND(long double t, const native_tag&)
441
488
  {
442
489
  return boost::math::detail::isinf_impl(t, generic_tag<true>());
443
490
  }
@@ -445,29 +492,41 @@ inline bool isinf_impl<long double> BOOST_NO_MACRO_EXPAND(long double t, const n
445
492
 
446
493
  } // namespace detail
447
494
 
448
- template<class T>
495
+ template<class T>
449
496
  inline bool (isinf)(T x)
450
497
  {
451
498
  typedef typename detail::fp_traits<T>::type traits;
452
499
  typedef typename traits::method method;
453
- typedef typename boost::is_floating_point<T>::type fp_tag;
500
+ // typedef typename boost::is_floating_point<T>::type fp_tag;
454
501
  typedef typename tools::promote_args<T>::type value_type;
455
502
  return detail::isinf_impl(static_cast<value_type>(x), method());
456
503
  }
457
504
 
505
+ #ifdef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS
506
+ template<>
507
+ inline bool (isinf)(long double x)
508
+ {
509
+ typedef detail::fp_traits<long double>::type traits;
510
+ typedef traits::method method;
511
+ typedef boost::is_floating_point<long double>::type fp_tag;
512
+ typedef long double value_type;
513
+ return detail::isinf_impl(static_cast<value_type>(x), method());
514
+ }
515
+ #endif
516
+
458
517
  //------------------------------------------------------------------------------
459
518
 
460
519
  namespace detail {
461
520
 
462
521
  #ifdef BOOST_MATH_USE_STD_FPCLASSIFY
463
- template<class T>
522
+ template<class T>
464
523
  inline bool isnan_impl(T x, native_tag const&)
465
524
  {
466
525
  return (std::isnan)(x);
467
526
  }
468
527
  #endif
469
528
 
470
- template<class T>
529
+ template<class T>
471
530
  inline bool isnan_impl(T x, generic_tag<true> const&)
472
531
  {
473
532
  return std::numeric_limits<T>::has_infinity
@@ -475,7 +534,7 @@ namespace detail {
475
534
  : x != x;
476
535
  }
477
536
 
478
- template<class T>
537
+ template<class T>
479
538
  inline bool isnan_impl(T x, generic_tag<false> const&)
480
539
  {
481
540
  #ifdef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
@@ -486,7 +545,7 @@ namespace detail {
486
545
  return false;
487
546
  }
488
547
 
489
- template<class T>
548
+ template<class T>
490
549
  inline bool isnan_impl(T x, ieee_copy_all_bits_tag const&)
491
550
  {
492
551
  typedef BOOST_DEDUCED_TYPENAME fp_traits<T>::type traits;
@@ -497,7 +556,7 @@ namespace detail {
497
556
  return a > traits::exponent;
498
557
  }
499
558
 
500
- template<class T>
559
+ template<class T>
501
560
  inline bool isnan_impl(T x, ieee_copy_leading_bits_tag const&)
502
561
  {
503
562
  typedef BOOST_DEDUCED_TYPENAME fp_traits<T>::type traits;
@@ -516,11 +575,12 @@ namespace detail {
516
575
 
517
576
  } // namespace detail
518
577
 
519
- template<class T> bool (isnan)(T x)
578
+ template<class T>
579
+ inline bool (isnan)(T x)
520
580
  { //!< \brief return true if floating-point type t is NaN (Not A Number).
521
581
  typedef typename detail::fp_traits<T>::type traits;
522
582
  typedef typename traits::method method;
523
- typedef typename boost::is_floating_point<T>::type fp_tag;
583
+ // typedef typename boost::is_floating_point<T>::type fp_tag;
524
584
  return detail::isnan_impl(x, method());
525
585
  }
526
586
 
@@ -528,6 +588,15 @@ template<class T> bool (isnan)(T x)
528
588
  template <> inline bool isnan BOOST_NO_MACRO_EXPAND<float>(float t){ return ::boost::math_detail::is_nan_helper(t, boost::true_type()); }
529
589
  template <> inline bool isnan BOOST_NO_MACRO_EXPAND<double>(double t){ return ::boost::math_detail::is_nan_helper(t, boost::true_type()); }
530
590
  template <> inline bool isnan BOOST_NO_MACRO_EXPAND<long double>(long double t){ return ::boost::math_detail::is_nan_helper(t, boost::true_type()); }
591
+ #elif defined(BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS)
592
+ template<>
593
+ inline bool (isnan)(long double x)
594
+ { //!< \brief return true if floating-point type t is NaN (Not A Number).
595
+ typedef detail::fp_traits<long double>::type traits;
596
+ typedef traits::method method;
597
+ typedef boost::is_floating_point<long double>::type fp_tag;
598
+ return detail::isnan_impl(x, method());
599
+ }
531
600
  #endif
532
601
 
533
602
  } // namespace math