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
@@ -255,7 +255,7 @@ private:
255
255
  }
256
256
  };
257
257
 
258
- typedef shared_ptr<Server> ServerPtr;
258
+ typedef boost::shared_ptr<Server> ServerPtr;
259
259
 
260
260
  string gatewayAddress;
261
261
  unsigned short gatewayPort;
@@ -316,7 +316,7 @@ private:
316
316
  P_INFO(ips.size() << " Union Station gateway servers found");
317
317
 
318
318
  for (it = ips.begin(); it != ips.end(); it++) {
319
- ServerPtr server = make_shared<Server>(*it, gatewayAddress, gatewayPort,
319
+ ServerPtr server = boost::make_shared<Server>(*it, gatewayAddress, gatewayPort,
320
320
  certificate, &proxyInfo);
321
321
  if (server->ping()) {
322
322
  servers.push_back(server);
@@ -372,7 +372,7 @@ private:
372
372
  }
373
373
 
374
374
  void sendOut(const Item &item) {
375
- unique_lock<boost::mutex> l(syncher);
375
+ boost::unique_lock<boost::mutex> l(syncher);
376
376
  bool sent = false;
377
377
  bool someServersWentDown = false;
378
378
 
@@ -39,6 +39,7 @@
39
39
  #include <sys/types.h>
40
40
  #include <sys/wait.h>
41
41
  #include <unistd.h>
42
+ #include <stdlib.h>
42
43
  #include <string>
43
44
  #include <Utils/Base64.h>
44
45
 
@@ -26,12 +26,12 @@
26
26
  /**
27
27
  * Abstract base class for watching agent processes.
28
28
  */
29
- class AgentWatcher: public enable_shared_from_this<AgentWatcher> {
29
+ class AgentWatcher: public boost::enable_shared_from_this<AgentWatcher> {
30
30
  private:
31
31
  /** The watcher thread. */
32
32
  oxt::thread *thr;
33
33
 
34
- void threadMain(shared_ptr<AgentWatcher> self) {
34
+ void threadMain(boost::shared_ptr<AgentWatcher> self) {
35
35
  try {
36
36
  pid_t pid, ret;
37
37
  int status, e;
@@ -448,16 +448,17 @@ public:
448
448
  name(), 256 * 1024);
449
449
  }
450
450
 
451
- static void stopWatching(vector< shared_ptr<AgentWatcher> > &watchers) {
452
- vector< shared_ptr<AgentWatcher> >::const_iterator it;
453
- oxt::thread *threads[watchers.size()];
451
+ static void stopWatching(vector< boost::shared_ptr<AgentWatcher> > &watchers) {
452
+ vector< boost::shared_ptr<AgentWatcher> >::const_iterator it;
453
+ vector<oxt::thread *> threads;
454
454
  unsigned int i = 0;
455
455
 
456
456
  for (it = watchers.begin(); it != watchers.end(); it++, i++) {
457
+ threads.push_back((*it)->thr);
457
458
  threads[i] = (*it)->thr;
458
459
  }
459
460
 
460
- oxt::thread::interrupt_and_join_multiple(threads, watchers.size());
461
+ oxt::thread::interrupt_and_join_multiple(&threads[0], threads.size());
461
462
  for (it = watchers.begin(); it != watchers.end(); it++, i++) {
462
463
  delete (*it)->thr;
463
464
  (*it)->thr = NULL;
@@ -508,4 +509,4 @@ public:
508
509
  }
509
510
  };
510
511
 
511
- typedef shared_ptr<AgentWatcher> AgentWatcherPtr;
512
+ typedef boost::shared_ptr<AgentWatcher> AgentWatcherPtr;
@@ -106,7 +106,7 @@ struct WorkingObjects {
106
106
  string adminToolManipulationPassword;
107
107
  };
108
108
 
109
- typedef shared_ptr<WorkingObjects> WorkingObjectsPtr;
109
+ typedef boost::shared_ptr<WorkingObjects> WorkingObjectsPtr;
110
110
 
111
111
  static string oldOomScore;
112
112
 
@@ -310,79 +310,87 @@ cleanupAgentsInBackground(const WorkingObjectsPtr &wo, vector<AgentWatcherPtr> &
310
310
  pid = fork();
311
311
  if (pid == 0) {
312
312
  // Child
313
- vector<AgentWatcherPtr>::const_iterator it;
314
- Timer timer(false);
315
- fd_set fds, fds2;
316
- int max, agentProcessesDone;
317
- unsigned long long deadline = 30000; // miliseconds
318
-
319
- #if defined(__linux__) || defined(__APPLE__) || defined(__FreeBSD__) || defined(sun)
320
- // Change process title.
321
- strcpy(argv[0], "PassengerWatchdog (cleaning up...)");
322
- #endif
323
-
324
- // Wait until all agent processes have exited. The starter
325
- // process is responsible for telling the individual agents
326
- // to exit.
327
-
328
- max = 0;
329
- FD_ZERO(&fds);
330
- for (it = watchers.begin(); it != watchers.end(); it++) {
331
- FD_SET((*it)->getFeedbackFd(), &fds);
332
- if ((*it)->getFeedbackFd() > max) {
333
- max = (*it)->getFeedbackFd();
334
- }
335
- }
336
-
337
- timer.start();
338
- agentProcessesDone = 0;
339
- while (agentProcessesDone != -1
340
- && agentProcessesDone < (int) watchers.size()
341
- && timer.elapsed() < deadline)
342
- {
343
- struct timeval timeout;
344
-
345
- #ifdef FD_COPY
346
- FD_COPY(&fds, &fds2);
347
- #else
348
- FD_ZERO(&fds2);
349
- for (it = watchers.begin(); it != watchers.end(); it++) {
350
- FD_SET((*it)->getFeedbackFd(), &fds2);
351
- }
313
+ try {
314
+ vector<AgentWatcherPtr>::const_iterator it;
315
+ Timer timer(false);
316
+ fd_set fds, fds2;
317
+ int max, agentProcessesDone;
318
+ unsigned long long deadline = 30000; // miliseconds
319
+
320
+ #if defined(__linux__) || defined(__APPLE__) || defined(__FreeBSD__) || defined(sun)
321
+ // Change process title.
322
+ strcpy(argv[0], "PassengerWatchdog (cleaning up...)");
352
323
  #endif
353
324
 
354
- timeout.tv_sec = 0;
355
- timeout.tv_usec = 10000;
356
- agentProcessesDone = syscalls::select(max + 1, &fds2, NULL, NULL, &timeout);
357
- if (agentProcessesDone > 0 && timer.elapsed() < deadline) {
358
- usleep(10000);
325
+ // Wait until all agent processes have exited. The starter
326
+ // process is responsible for telling the individual agents
327
+ // to exit.
328
+
329
+ max = 0;
330
+ FD_ZERO(&fds);
331
+ for (it = watchers.begin(); it != watchers.end(); it++) {
332
+ FD_SET((*it)->getFeedbackFd(), &fds);
333
+ if ((*it)->getFeedbackFd() > max) {
334
+ max = (*it)->getFeedbackFd();
335
+ }
359
336
  }
337
+
338
+ timer.start();
339
+ agentProcessesDone = 0;
340
+ while (agentProcessesDone != -1
341
+ && agentProcessesDone < (int) watchers.size()
342
+ && timer.elapsed() < deadline)
343
+ {
344
+ struct timeval timeout;
345
+
346
+ #ifdef FD_COPY
347
+ FD_COPY(&fds, &fds2);
348
+ #else
349
+ FD_ZERO(&fds2);
350
+ for (it = watchers.begin(); it != watchers.end(); it++) {
351
+ FD_SET((*it)->getFeedbackFd(), &fds2);
352
+ }
353
+ #endif
354
+
355
+ timeout.tv_sec = 0;
356
+ timeout.tv_usec = 10000;
357
+ agentProcessesDone = syscalls::select(max + 1, &fds2, NULL, NULL, &timeout);
358
+ if (agentProcessesDone > 0 && timer.elapsed() < deadline) {
359
+ usleep(10000);
360
+ }
361
+ }
362
+
363
+ if (agentProcessesDone == -1 || timer.elapsed() >= deadline) {
364
+ // An error occurred or we've waited long enough. Kill all the
365
+ // processes.
366
+ P_WARN("Some Phusion Passenger agent processes did not exit " <<
367
+ "in time, forcefully shutting down all.");
368
+ } else {
369
+ P_DEBUG("All Phusion Passenger agent processes have exited. Forcing all subprocesses to shut down.");
370
+ }
371
+ for (it = watchers.begin(); it != watchers.end(); it++) {
372
+ (*it)->forceShutdown();
373
+ }
374
+
375
+ // Now clean up the server instance directory.
376
+ wo->generation->destroy();
377
+ wo->serverInstanceDir->destroy();
378
+
379
+ // Notify given PIDs about our shutdown.
380
+ foreach (pid_t pid, cleanupPids) {
381
+ P_DEBUG("Sending SIGTERM to cleanup PID " << pid);
382
+ kill(pid, SIGTERM);
383
+ }
384
+ strcpy(argv[0], "PassengerWatchdog (cleaning up 6...)");
385
+ _exit(0);
386
+ } catch (const std::exception &e) {
387
+ P_CRITICAL("An exception occurred during cleaning up: " << e.what());
388
+ _exit(1);
389
+ } catch (...) {
390
+ P_CRITICAL("An unknown exception occurred during cleaning up");
391
+ _exit(1);
360
392
  }
361
393
 
362
- if (agentProcessesDone == -1 || timer.elapsed() >= deadline) {
363
- // An error occurred or we've waited long enough. Kill all the
364
- // processes.
365
- P_WARN("Some Phusion Passenger agent processes did not exit " <<
366
- "in time, forcefully shutting down all.");
367
- } else {
368
- P_DEBUG("All Phusion Passenger agent processes have exited. Forcing all subprocesses to shut down.");
369
- }
370
- for (it = watchers.begin(); it != watchers.end(); it++) {
371
- (*it)->forceShutdown();
372
- }
373
-
374
- // Now clean up the server instance directory.
375
- delete wo->generation.get();
376
- delete wo->serverInstanceDir.get();
377
-
378
- // Notify given PIDs about our shutdown.
379
- foreach (pid_t pid, cleanupPids) {
380
- P_DEBUG("Sending SIGTERM to cleanup PID " << pid);
381
- kill(pid, SIGTERM);
382
- }
383
-
384
- _exit(0);
385
-
386
394
  } else if (pid == -1) {
387
395
  // Error
388
396
  e = errno;
@@ -521,11 +529,11 @@ lookupDefaultUidGid(uid_t &uid, gid_t &gid) {
521
529
  static void
522
530
  initializeWorkingObjects(WorkingObjectsPtr &wo, ServerInstanceDirToucherPtr &serverInstanceDirToucher) {
523
531
  TRACE_POINT();
524
- wo = make_shared<WorkingObjects>();
525
- wo->resourceLocator = make_shared<ResourceLocator>(agentsOptions.get("passenger_root"));
532
+ wo = boost::make_shared<WorkingObjects>();
533
+ wo->resourceLocator = boost::make_shared<ResourceLocator>(agentsOptions.get("passenger_root"));
526
534
 
527
535
  UPDATE_TRACE_POINT();
528
- // Must not used make_shared() here because Watchdog.cpp
536
+ // Must not used boost::make_shared() here because Watchdog.cpp
529
537
  // deletes the raw pointer in cleanupAgentsInBackground().
530
538
  if (agentsOptions.get("server_instance_dir", false).empty()) {
531
539
  /* We embed the super structure version in the server instance directory name
@@ -549,7 +557,7 @@ initializeWorkingObjects(WorkingObjectsPtr &wo, ServerInstanceDirToucherPtr &ser
549
557
  agentsOptions.setInt("generation_number", wo->generation->getNumber());
550
558
 
551
559
  UPDATE_TRACE_POINT();
552
- serverInstanceDirToucher = make_shared<ServerInstanceDirToucher>(wo);
560
+ serverInstanceDirToucher = boost::make_shared<ServerInstanceDirToucher>(wo);
553
561
 
554
562
  UPDATE_TRACE_POINT();
555
563
  lookupDefaultUidGid(wo->defaultUid, wo->defaultGid);
@@ -113,4 +113,4 @@ public:
113
113
  }
114
114
  };
115
115
 
116
- typedef shared_ptr<ServerInstanceDirToucher> ServerInstanceDirToucherPtr;
116
+ typedef boost::shared_ptr<ServerInstanceDirToucher> ServerInstanceDirToucherPtr;
@@ -2,6 +2,63 @@ Revision history for libev, a high-performance and full-featured event loop.
2
2
 
3
3
  TODO: ev_loop_wakeup
4
4
  TODO: EV_STANDALONE == NO_HASSEL (do not use clock_gettime in ev_standalone)
5
+ TODO: faq, process a thing in each iteration
6
+ TODO: dbeugging tips, ev_verify, ev_init twice
7
+ TODO: ev_break for immediate exit (EVBREAK_NOW?)
8
+ TODO: ev_feed_child_event
9
+ TODO: document the special problem of signals around fork.
10
+ TODO: store pid for each signal
11
+ TODO: document file descriptor usage per loop
12
+ TODO: store loop pid_t and compare isndie signal handler,store 1 for same, 2 for differign pid, clean up in loop_fork
13
+ TODO: embed watchers need updating when fd changes
14
+ TODO: document portbaility requirements for atomic pointer access
15
+
16
+ 4.15 Fri Mar 1 12:04:50 CET 2013
17
+ - destroying a non-default loop would stop the global waitpid
18
+ watcher (Denis Bilenko).
19
+ - queueing pending watchers of higher priority from a watcher now invokes
20
+ them in a timely fashion (reported by Denis Bilenko).
21
+ - add throw() to all libev functions that cannot throw exceptions, for
22
+ further code size decrease when compiling for C++.
23
+ - add throw () to callbacks that must not throw exceptions (allocator,
24
+ syserr, loop acquire/release, periodic reschedule cbs).
25
+ - fix event_base_loop return code, add event_get_callback, event_base_new,
26
+ event_base_get_method calls to improve libevent 1.x emulation and add
27
+ some libevent 2.x functionality (based on a patch by Jeff Davey).
28
+ - add more memory fences to fix a bug reported by Jeff Davey. Better
29
+ be overfenced than underprotected.
30
+ - ev_run now returns a boolean status (true meaning watchers are
31
+ still active).
32
+ - ev_once: undef EV_ERROR in ev_kqueue.c, to avoid clashing with
33
+ libev's EV_ERROR (reported by 191919).
34
+ - (ecb) add memory fence support for xlC (Darin McBride).
35
+ - (ecb) add memory fence support for gcc-mips (Anton Kirilov).
36
+ - (ecb) add memory fence support for gcc-alpha (Christian Weisgerber).
37
+ - work around some kernels losing file descriptors by leaking
38
+ the kqueue descriptor in the child.
39
+ - work around linux inotify not reporting IN_ATTRIB changes for directories
40
+ in many cases.
41
+ - include sys/syscall.h instead of plain syscall.h.
42
+ - check for io watcher loops in ev_verify, check for the most
43
+ common reported usage bug in ev_io_start.
44
+ - chose socket vs. WSASocket at compiletime using EV_USE_WSASOCKET.
45
+ - always use WSASend/WSARecv directly on windows, hoping that this
46
+ works in all cases (unlike read/write/send/recv...).
47
+ - try to detect signals around a fork faster (test program by
48
+ Denis Bilenko).
49
+ - work around recent glibc versions that leak memory in realloc.
50
+ - rename ev::embed::set to ev::embed::set_embed to avoid clashing
51
+ the watcher base set (loop) method.
52
+ - rewrite the async/signal pipe logic to always keep a valid fd, which
53
+ simplifies (and hopefuly correctifies :) the race checking
54
+ on fork, at the cost of one extra fd.
55
+ - add fat, msdos, jffs2, ramfs, ntfs and btrfs to the list of
56
+ inotify-supporting filesystems.
57
+ - move orig_CFLAGS assignment to after AC_INIT, as newer autoconf
58
+ versions ignore it before
59
+ (https://bugzilla.redhat.com/show_bug.cgi?id=908096).
60
+ - add some untested android support.
61
+ - enum expressions must be of type int (reported by Juan Pablo L).
5
62
 
6
63
  4.11 Sat Feb 4 19:52:39 CET 2012
7
64
  - INCOMPATIBLE CHANGE: ev_timer_again now clears the pending status, as
@@ -1,4 +1,5 @@
1
- All files in libev are Copyright (C)2007,2008,2009 Marc Alexander Lehmann.
1
+ All files in libev are
2
+ Copyright (c)2007,2008,2009,2010,2011,2012 Marc Alexander Lehmann.
2
3
 
3
4
  Redistribution and use in source and binary forms, with or without
4
5
  modification, are permitted provided that the following conditions are
@@ -1,9 +1,9 @@
1
- # Makefile.in generated by automake 1.11.1 from Makefile.am.
1
+ # Makefile.in generated by automake 1.11.6 from Makefile.am.
2
2
  # @configure_input@
3
3
 
4
4
  # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
5
- # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
6
- # Inc.
5
+ # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
6
+ # Foundation, Inc.
7
7
  # This Makefile.in is free software; the Free Software Foundation
8
8
  # gives unlimited permission to copy and/or distribute it,
9
9
  # with or without modifications, as long as this notice is preserved.
@@ -17,6 +17,23 @@
17
17
 
18
18
 
19
19
  VPATH = @srcdir@
20
+ am__make_dryrun = \
21
+ { \
22
+ am__dry=no; \
23
+ case $$MAKEFLAGS in \
24
+ *\\[\ \ ]*) \
25
+ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \
26
+ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
27
+ *) \
28
+ for am__flg in $$MAKEFLAGS; do \
29
+ case $$am__flg in \
30
+ *=*|--*) ;; \
31
+ *n*) am__dry=yes; break;; \
32
+ esac; \
33
+ done;; \
34
+ esac; \
35
+ test $$am__dry = yes; \
36
+ }
20
37
  pkgdatadir = $(datadir)/@PACKAGE@
21
38
  pkgincludedir = $(includedir)/@PACKAGE@
22
39
  pkglibdir = $(libdir)/@PACKAGE@
@@ -72,6 +89,12 @@ am__nobase_list = $(am__nobase_strip_setup); \
72
89
  am__base_list = \
73
90
  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
74
91
  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
92
+ am__uninstall_files_from_dir = { \
93
+ test -z "$$files" \
94
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
95
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
96
+ $(am__cd) "$$dir" && rm -f $$files; }; \
97
+ }
75
98
  am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(man3dir)" \
76
99
  "$(DESTDIR)$(includedir)"
77
100
  LTLIBRARIES = $(lib_LTLIBRARIES)
@@ -96,6 +119,11 @@ LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
96
119
  $(LDFLAGS) -o $@
97
120
  SOURCES = $(libev_la_SOURCES)
98
121
  DIST_SOURCES = $(libev_la_SOURCES)
122
+ am__can_run_installinfo = \
123
+ case $$AM_UPDATE_INFO_DIR in \
124
+ n|no|NO) false;; \
125
+ *) (install-info --version) >/dev/null 2>&1;; \
126
+ esac
99
127
  man3dir = $(mandir)/man3
100
128
  NROFF = nroff
101
129
  MANS = $(man_MANS)
@@ -106,12 +134,16 @@ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
106
134
  distdir = $(PACKAGE)-$(VERSION)
107
135
  top_distdir = $(distdir)
108
136
  am__remove_distdir = \
109
- { test ! -d "$(distdir)" \
110
- || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
111
- && rm -fr "$(distdir)"; }; }
137
+ if test -d "$(distdir)"; then \
138
+ find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
139
+ && rm -rf "$(distdir)" \
140
+ || { sleep 5 && rm -rf "$(distdir)"; }; \
141
+ else :; fi
112
142
  DIST_ARCHIVES = $(distdir).tar.gz
113
143
  GZIP_ENV = --best
114
144
  distuninstallcheck_listfiles = find . -type f -print
145
+ am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \
146
+ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$'
115
147
  distcleancheck_listfiles = find . -type f -print
116
148
  ACLOCAL = @ACLOCAL@
117
149
  AMTAR = @AMTAR@
@@ -128,6 +160,7 @@ CPPFLAGS = @CPPFLAGS@
128
160
  CYGPATH_W = @CYGPATH_W@
129
161
  DEFS = @DEFS@
130
162
  DEPDIR = @DEPDIR@
163
+ DLLTOOL = @DLLTOOL@
131
164
  DSYMUTIL = @DSYMUTIL@
132
165
  DUMPBIN = @DUMPBIN@
133
166
  ECHO_C = @ECHO_C@
@@ -152,6 +185,7 @@ LN_S = @LN_S@
152
185
  LTLIBOBJS = @LTLIBOBJS@
153
186
  MAINT = @MAINT@
154
187
  MAKEINFO = @MAKEINFO@
188
+ MANIFEST_TOOL = @MANIFEST_TOOL@
155
189
  MKDIR_P = @MKDIR_P@
156
190
  NM = @NM@
157
191
  NMEDIT = @NMEDIT@
@@ -177,6 +211,7 @@ abs_builddir = @abs_builddir@
177
211
  abs_srcdir = @abs_srcdir@
178
212
  abs_top_builddir = @abs_top_builddir@
179
213
  abs_top_srcdir = @abs_top_srcdir@
214
+ ac_ct_AR = @ac_ct_AR@
180
215
  ac_ct_CC = @ac_ct_CC@
181
216
  ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
182
217
  am__include = @am__include@
@@ -209,7 +244,6 @@ libdir = @libdir@
209
244
  libexecdir = @libexecdir@
210
245
  localedir = @localedir@
211
246
  localstatedir = @localstatedir@
212
- lt_ECHO = @lt_ECHO@
213
247
  mandir = @mandir@
214
248
  mkdir_p = @mkdir_p@
215
249
  oldincludedir = @oldincludedir@
@@ -242,7 +276,7 @@ all: config.h
242
276
 
243
277
  .SUFFIXES:
244
278
  .SUFFIXES: .c .lo .o .obj
245
- am--refresh:
279
+ am--refresh: Makefile
246
280
  @:
247
281
  $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
248
282
  @for dep in $?; do \
@@ -278,10 +312,8 @@ $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
278
312
  $(am__aclocal_m4_deps):
279
313
 
280
314
  config.h: stamp-h1
281
- @if test ! -f $@; then \
282
- rm -f stamp-h1; \
283
- $(MAKE) $(AM_MAKEFLAGS) stamp-h1; \
284
- else :; fi
315
+ @if test ! -f $@; then rm -f stamp-h1; else :; fi
316
+ @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) stamp-h1; else :; fi
285
317
 
286
318
  stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
287
319
  @rm -f stamp-h1
@@ -295,7 +327,6 @@ distclean-hdr:
295
327
  -rm -f config.h stamp-h1
296
328
  install-libLTLIBRARIES: $(lib_LTLIBRARIES)
297
329
  @$(NORMAL_INSTALL)
298
- test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)"
299
330
  @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
300
331
  list2=; for p in $$list; do \
301
332
  if test -f $$p; then \
@@ -303,6 +334,8 @@ install-libLTLIBRARIES: $(lib_LTLIBRARIES)
303
334
  else :; fi; \
304
335
  done; \
305
336
  test -z "$$list2" || { \
337
+ echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \
338
+ $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \
306
339
  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \
307
340
  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \
308
341
  }
@@ -324,7 +357,7 @@ clean-libLTLIBRARIES:
324
357
  echo "rm -f \"$${dir}/so_locations\""; \
325
358
  rm -f "$${dir}/so_locations"; \
326
359
  done
327
- libev.la: $(libev_la_OBJECTS) $(libev_la_DEPENDENCIES)
360
+ libev.la: $(libev_la_OBJECTS) $(libev_la_DEPENDENCIES) $(EXTRA_libev_la_DEPENDENCIES)
328
361
  $(libev_la_LINK) -rpath $(libdir) $(libev_la_OBJECTS) $(libev_la_LIBADD) $(LIBS)
329
362
 
330
363
  mostlyclean-compile:
@@ -367,11 +400,18 @@ distclean-libtool:
367
400
  -rm -f libtool config.lt
368
401
  install-man3: $(man_MANS)
369
402
  @$(NORMAL_INSTALL)
370
- test -z "$(man3dir)" || $(MKDIR_P) "$(DESTDIR)$(man3dir)"
371
- @list=''; test -n "$(man3dir)" || exit 0; \
372
- { for i in $$list; do echo "$$i"; done; \
373
- l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
374
- sed -n '/\.3[a-z]*$$/p'; \
403
+ @list1=''; \
404
+ list2='$(man_MANS)'; \
405
+ test -n "$(man3dir)" \
406
+ && test -n "`echo $$list1$$list2`" \
407
+ || exit 0; \
408
+ echo " $(MKDIR_P) '$(DESTDIR)$(man3dir)'"; \
409
+ $(MKDIR_P) "$(DESTDIR)$(man3dir)" || exit 1; \
410
+ { for i in $$list1; do echo "$$i"; done; \
411
+ if test -n "$$list2"; then \
412
+ for i in $$list2; do echo "$$i"; done \
413
+ | sed -n '/\.3[a-z]*$$/p'; \
414
+ fi; \
375
415
  } | while read p; do \
376
416
  if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
377
417
  echo "$$d$$p"; echo "$$p"; \
@@ -400,13 +440,14 @@ uninstall-man3:
400
440
  sed -n '/\.3[a-z]*$$/p'; \
401
441
  } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^3][0-9a-z]*$$,3,;x' \
402
442
  -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
403
- test -z "$$files" || { \
404
- echo " ( cd '$(DESTDIR)$(man3dir)' && rm -f" $$files ")"; \
405
- cd "$(DESTDIR)$(man3dir)" && rm -f $$files; }
443
+ dir='$(DESTDIR)$(man3dir)'; $(am__uninstall_files_from_dir)
406
444
  install-includeHEADERS: $(include_HEADERS)
407
445
  @$(NORMAL_INSTALL)
408
- test -z "$(includedir)" || $(MKDIR_P) "$(DESTDIR)$(includedir)"
409
446
  @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \
447
+ if test -n "$$list"; then \
448
+ echo " $(MKDIR_P) '$(DESTDIR)$(includedir)'"; \
449
+ $(MKDIR_P) "$(DESTDIR)$(includedir)" || exit 1; \
450
+ fi; \
410
451
  for p in $$list; do \
411
452
  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
412
453
  echo "$$d$$p"; \
@@ -420,9 +461,7 @@ uninstall-includeHEADERS:
420
461
  @$(NORMAL_UNINSTALL)
421
462
  @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \
422
463
  files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
423
- test -n "$$files" || exit 0; \
424
- echo " ( cd '$(DESTDIR)$(includedir)' && rm -f" $$files ")"; \
425
- cd "$(DESTDIR)$(includedir)" && rm -f $$files
464
+ dir='$(DESTDIR)$(includedir)'; $(am__uninstall_files_from_dir)
426
465
 
427
466
  ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
428
467
  list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
@@ -533,7 +572,11 @@ dist-gzip: distdir
533
572
  $(am__remove_distdir)
534
573
 
535
574
  dist-bzip2: distdir
536
- tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
575
+ tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2
576
+ $(am__remove_distdir)
577
+
578
+ dist-lzip: distdir
579
+ tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz
537
580
  $(am__remove_distdir)
538
581
 
539
582
  dist-lzma: distdir
@@ -541,7 +584,7 @@ dist-lzma: distdir
541
584
  $(am__remove_distdir)
542
585
 
543
586
  dist-xz: distdir
544
- tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz
587
+ tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz
545
588
  $(am__remove_distdir)
546
589
 
547
590
  dist-tarZ: distdir
@@ -572,6 +615,8 @@ distcheck: dist
572
615
  bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
573
616
  *.tar.lzma*) \
574
617
  lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\
618
+ *.tar.lz*) \
619
+ lzip -dc $(distdir).tar.lz | $(am__untar) ;;\
575
620
  *.tar.xz*) \
576
621
  xz -dc $(distdir).tar.xz | $(am__untar) ;;\
577
622
  *.tar.Z*) \
@@ -581,7 +626,7 @@ distcheck: dist
581
626
  *.zip*) \
582
627
  unzip $(distdir).zip ;;\
583
628
  esac
584
- chmod -R a-w $(distdir); chmod a+w $(distdir)
629
+ chmod -R a-w $(distdir); chmod u+w $(distdir)
585
630
  mkdir $(distdir)/_build
586
631
  mkdir $(distdir)/_inst
587
632
  chmod a-w $(distdir)
@@ -591,6 +636,7 @@ distcheck: dist
591
636
  && am__cwd=`pwd` \
592
637
  && $(am__cd) $(distdir)/_build \
593
638
  && ../configure --srcdir=.. --prefix="$$dc_install_base" \
639
+ $(AM_DISTCHECK_CONFIGURE_FLAGS) \
594
640
  $(DISTCHECK_CONFIGURE_FLAGS) \
595
641
  && $(MAKE) $(AM_MAKEFLAGS) \
596
642
  && $(MAKE) $(AM_MAKEFLAGS) dvi \
@@ -619,8 +665,16 @@ distcheck: dist
619
665
  list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
620
666
  sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
621
667
  distuninstallcheck:
622
- @$(am__cd) '$(distuninstallcheck_dir)' \
623
- && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
668
+ @test -n '$(distuninstallcheck_dir)' || { \
669
+ echo 'ERROR: trying to run $@ with an empty' \
670
+ '$$(distuninstallcheck_dir)' >&2; \
671
+ exit 1; \
672
+ }; \
673
+ $(am__cd) '$(distuninstallcheck_dir)' || { \
674
+ echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \
675
+ exit 1; \
676
+ }; \
677
+ test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \
624
678
  || { echo "ERROR: files left after uninstall:" ; \
625
679
  if test -n "$(DESTDIR)"; then \
626
680
  echo " (check DESTDIR support)"; \
@@ -653,10 +707,15 @@ install-am: all-am
653
707
 
654
708
  installcheck: installcheck-am
655
709
  install-strip:
656
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
657
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
658
- `test -z '$(STRIP)' || \
659
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
710
+ if test -z '$(STRIP)'; then \
711
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
712
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
713
+ install; \
714
+ else \
715
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
716
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
717
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
718
+ fi
660
719
  mostlyclean-generic:
661
720
 
662
721
  clean-generic:
@@ -749,21 +808,22 @@ uninstall-man: uninstall-man3
749
808
 
750
809
  .PHONY: CTAGS GTAGS all all-am am--refresh check check-am clean \
751
810
  clean-generic clean-libLTLIBRARIES clean-libtool ctags dist \
752
- dist-all dist-bzip2 dist-gzip dist-lzma dist-shar dist-tarZ \
753
- dist-xz dist-zip distcheck distclean distclean-compile \
754
- distclean-generic distclean-hdr distclean-libtool \
755
- distclean-tags distcleancheck distdir distuninstallcheck dvi \
756
- dvi-am html html-am info info-am install install-am \
757
- install-data install-data-am install-dvi install-dvi-am \
758
- install-exec install-exec-am install-html install-html-am \
759
- install-includeHEADERS install-info install-info-am \
760
- install-libLTLIBRARIES install-man install-man3 install-pdf \
761
- install-pdf-am install-ps install-ps-am install-strip \
762
- installcheck installcheck-am installdirs maintainer-clean \
763
- maintainer-clean-generic mostlyclean mostlyclean-compile \
764
- mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
765
- tags uninstall uninstall-am uninstall-includeHEADERS \
766
- uninstall-libLTLIBRARIES uninstall-man uninstall-man3
811
+ dist-all dist-bzip2 dist-gzip dist-lzip dist-lzma dist-shar \
812
+ dist-tarZ dist-xz dist-zip distcheck distclean \
813
+ distclean-compile distclean-generic distclean-hdr \
814
+ distclean-libtool distclean-tags distcleancheck distdir \
815
+ distuninstallcheck dvi dvi-am html html-am info info-am \
816
+ install install-am install-data install-data-am install-dvi \
817
+ install-dvi-am install-exec install-exec-am install-html \
818
+ install-html-am install-includeHEADERS install-info \
819
+ install-info-am install-libLTLIBRARIES install-man \
820
+ install-man3 install-pdf install-pdf-am install-ps \
821
+ install-ps-am install-strip installcheck installcheck-am \
822
+ installdirs maintainer-clean maintainer-clean-generic \
823
+ mostlyclean mostlyclean-compile mostlyclean-generic \
824
+ mostlyclean-libtool pdf pdf-am ps ps-am tags uninstall \
825
+ uninstall-am uninstall-includeHEADERS uninstall-libLTLIBRARIES \
826
+ uninstall-man uninstall-man3
767
827
 
768
828
 
769
829
  ev.3: ev.pod