passenger 2.0.6 → 2.1.2

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 (497) hide show
  1. data/DEVELOPERS.TXT +10 -4
  2. data/LICENSE +1 -1
  3. data/NEWS +0 -0
  4. data/Rakefile +183 -117
  5. data/benchmark/dispatcher.rb +5 -9
  6. data/bin/passenger-install-apache2-module +52 -18
  7. data/bin/passenger-memory-stats +67 -13
  8. data/bin/passenger-spawn-server +8 -4
  9. data/bin/passenger-status +21 -46
  10. data/bin/passenger-stress-test +5 -5
  11. data/debian/postinst +1 -1
  12. data/doc/ApplicationPool algorithm.txt +180 -128
  13. data/doc/Architectural overview.html +1 -778
  14. data/doc/Security of user switching support.html +1 -643
  15. data/doc/Users guide Apache.html +3127 -0
  16. data/doc/Users guide Nginx.html +1458 -0
  17. data/doc/Users guide.html +1404 -467
  18. data/doc/Users guide.txt +843 -105
  19. data/doc/cxxapi/ApplicationPoolServer_8h-source.html +751 -641
  20. data/doc/cxxapi/ApplicationPool_8h-source.html +168 -171
  21. data/doc/cxxapi/Application_8h-source.html +494 -394
  22. data/doc/cxxapi/Bucket_8h-source.html +21 -15
  23. data/doc/cxxapi/CachedFileStat_8h-source.html +191 -0
  24. data/doc/cxxapi/Configuration_8h-source.html +311 -149
  25. data/doc/cxxapi/DirectoryMapper_8h-source.html +309 -0
  26. data/doc/cxxapi/DummySpawnManager_8h-source.html +3 -4
  27. data/doc/cxxapi/Exceptions_8h-source.html +182 -165
  28. data/doc/cxxapi/FileChecker_8h-source.html +130 -0
  29. data/doc/cxxapi/Hooks_8h-source.html +2 -3
  30. data/doc/cxxapi/Logging_8h-source.html +92 -89
  31. data/doc/cxxapi/MessageChannel_8h-source.html +585 -477
  32. data/doc/cxxapi/PoolOptions_8h-source.html +305 -0
  33. data/doc/cxxapi/SpawnManager_8h-source.html +515 -540
  34. data/doc/cxxapi/StandardApplicationPool_8h-source.html +779 -679
  35. data/doc/cxxapi/SystemTime_8h-source.html +104 -0
  36. data/doc/cxxapi/Utils_8h-source.html +331 -227
  37. data/doc/cxxapi/annotated.html +6 -7
  38. data/doc/cxxapi/classClient-members.html +1 -2
  39. data/doc/cxxapi/classClient.html +1 -2
  40. data/doc/cxxapi/classHooks-members.html +5 -2
  41. data/doc/cxxapi/classHooks.html +112 -2
  42. data/doc/cxxapi/classPassenger_1_1Application-members.html +2 -3
  43. data/doc/cxxapi/classPassenger_1_1Application.html +8 -9
  44. data/doc/cxxapi/classPassenger_1_1ApplicationPool-members.html +4 -4
  45. data/doc/cxxapi/classPassenger_1_1ApplicationPool.html +42 -81
  46. data/doc/cxxapi/classPassenger_1_1ApplicationPoolServer-members.html +1 -2
  47. data/doc/cxxapi/classPassenger_1_1ApplicationPoolServer.html +3 -4
  48. data/doc/cxxapi/classPassenger_1_1ApplicationPool__inherit__graph.png +0 -0
  49. data/doc/cxxapi/classPassenger_1_1Application_1_1Session-members.html +3 -2
  50. data/doc/cxxapi/classPassenger_1_1Application_1_1Session.html +74 -3
  51. data/doc/cxxapi/classPassenger_1_1BusyException-members.html +1 -2
  52. data/doc/cxxapi/classPassenger_1_1BusyException.html +2 -3
  53. data/doc/cxxapi/classPassenger_1_1ConfigurationException-members.html +1 -2
  54. data/doc/cxxapi/classPassenger_1_1ConfigurationException.html +2 -3
  55. data/doc/cxxapi/classPassenger_1_1DirectoryMapper-members.html +38 -0
  56. data/doc/cxxapi/classPassenger_1_1DirectoryMapper.html +256 -0
  57. data/doc/cxxapi/classPassenger_1_1DummySpawnManager-members.html +1 -2
  58. data/doc/cxxapi/classPassenger_1_1DummySpawnManager.html +2 -3
  59. data/doc/cxxapi/{classPassenger_1_1Thread-members.html → classPassenger_1_1FileChecker-members.html} +4 -5
  60. data/doc/cxxapi/classPassenger_1_1FileChecker.html +121 -0
  61. data/doc/cxxapi/classPassenger_1_1FileNotFoundException-members.html +1 -2
  62. data/doc/cxxapi/classPassenger_1_1FileNotFoundException.html +2 -3
  63. data/doc/cxxapi/classPassenger_1_1FileNotFoundException__inherit__graph.png +0 -0
  64. data/doc/cxxapi/classPassenger_1_1FileSystemException-members.html +2 -3
  65. data/doc/cxxapi/classPassenger_1_1FileSystemException.html +2 -3
  66. data/doc/cxxapi/classPassenger_1_1FileSystemException__inherit__graph.png +0 -0
  67. data/doc/cxxapi/classPassenger_1_1IOException-members.html +1 -2
  68. data/doc/cxxapi/classPassenger_1_1IOException.html +2 -3
  69. data/doc/cxxapi/classPassenger_1_1IOException__inherit__graph.png +0 -0
  70. data/doc/cxxapi/classPassenger_1_1MessageChannel-members.html +5 -2
  71. data/doc/cxxapi/classPassenger_1_1MessageChannel.html +155 -5
  72. data/doc/cxxapi/{classboost_1_1this__thread_1_1enable__syscall__interruption-members.html → classPassenger_1_1RuntimeException-members.html} +2 -3
  73. data/doc/cxxapi/{classboost_1_1this__thread_1_1enable__syscall__interruption.html → classPassenger_1_1RuntimeException.html} +10 -8
  74. data/doc/cxxapi/classPassenger_1_1SpawnException-members.html +1 -2
  75. data/doc/cxxapi/classPassenger_1_1SpawnException.html +2 -3
  76. data/doc/cxxapi/classPassenger_1_1SpawnManager-members.html +2 -3
  77. data/doc/cxxapi/classPassenger_1_1SpawnManager.html +15 -56
  78. data/doc/cxxapi/classPassenger_1_1StandardApplicationPool-members.html +5 -4
  79. data/doc/cxxapi/classPassenger_1_1StandardApplicationPool.html +20 -81
  80. data/doc/cxxapi/classPassenger_1_1StandardApplicationPool__inherit__graph.png +0 -0
  81. data/doc/cxxapi/classPassenger_1_1SystemException-members.html +2 -3
  82. data/doc/cxxapi/classPassenger_1_1SystemException.html +9 -10
  83. data/doc/cxxapi/classPassenger_1_1SystemException__inherit__graph.png +0 -0
  84. data/doc/cxxapi/{classboost_1_1this__thread_1_1disable__syscall__interruption-members.html → classPassenger_1_1SystemTime-members.html} +5 -3
  85. data/doc/cxxapi/classPassenger_1_1SystemTime.html +86 -0
  86. data/doc/cxxapi/classPassenger_1_1TempFile-members.html +2 -3
  87. data/doc/cxxapi/classPassenger_1_1TempFile.html +17 -9
  88. data/doc/cxxapi/definitions_8h-source.html +1 -2
  89. data/doc/cxxapi/files.html +6 -3
  90. data/doc/cxxapi/functions.html +98 -35
  91. data/doc/cxxapi/functions_func.html +60 -32
  92. data/doc/cxxapi/functions_type.html +1 -2
  93. data/doc/cxxapi/functions_vars.html +27 -2
  94. data/doc/cxxapi/graph_legend.html +1 -2
  95. data/doc/cxxapi/graph_legend.png +0 -0
  96. data/doc/cxxapi/group__Configuration.html +3 -4
  97. data/doc/cxxapi/group__Configuration.png +0 -0
  98. data/doc/cxxapi/group__Core.html +3 -4
  99. data/doc/cxxapi/group__Core.png +0 -0
  100. data/doc/cxxapi/group__Exceptions.html +4 -2
  101. data/doc/cxxapi/group__Hooks.html +1 -6
  102. data/doc/cxxapi/group__Hooks.png +0 -0
  103. data/doc/cxxapi/group__Support.html +259 -36
  104. data/doc/cxxapi/hierarchy.html +6 -7
  105. data/doc/cxxapi/inherit__graph__0.map +1 -1
  106. data/doc/cxxapi/inherit__graph__0.md5 +1 -1
  107. data/doc/cxxapi/inherit__graph__0.png +0 -0
  108. data/doc/cxxapi/inherit__graph__1.map +1 -1
  109. data/doc/cxxapi/inherit__graph__1.md5 +1 -1
  110. data/doc/cxxapi/inherit__graph__1.png +0 -0
  111. data/doc/cxxapi/inherit__graph__10.map +1 -1
  112. data/doc/cxxapi/inherit__graph__10.md5 +1 -1
  113. data/doc/cxxapi/inherit__graph__10.png +0 -0
  114. data/doc/cxxapi/inherit__graph__11.map +1 -1
  115. data/doc/cxxapi/inherit__graph__11.md5 +1 -1
  116. data/doc/cxxapi/inherit__graph__11.png +0 -0
  117. data/doc/cxxapi/inherit__graph__12.map +2 -1
  118. data/doc/cxxapi/inherit__graph__12.md5 +1 -1
  119. data/doc/cxxapi/inherit__graph__12.png +0 -0
  120. data/doc/cxxapi/inherit__graph__13.map +1 -1
  121. data/doc/cxxapi/inherit__graph__13.md5 +1 -1
  122. data/doc/cxxapi/inherit__graph__13.png +0 -0
  123. data/doc/cxxapi/inherit__graph__14.map +1 -2
  124. data/doc/cxxapi/inherit__graph__14.md5 +1 -1
  125. data/doc/cxxapi/inherit__graph__14.png +0 -0
  126. data/doc/cxxapi/inherit__graph__15.map +1 -1
  127. data/doc/cxxapi/inherit__graph__15.md5 +1 -1
  128. data/doc/cxxapi/inherit__graph__15.png +0 -0
  129. data/doc/cxxapi/inherit__graph__16.map +1 -1
  130. data/doc/cxxapi/inherit__graph__16.md5 +1 -1
  131. data/doc/cxxapi/inherit__graph__16.png +0 -0
  132. data/doc/cxxapi/inherit__graph__17.png +0 -0
  133. data/doc/cxxapi/inherit__graph__18.png +0 -0
  134. data/doc/cxxapi/inherit__graph__19.png +0 -0
  135. data/doc/cxxapi/inherit__graph__2.map +1 -1
  136. data/doc/cxxapi/inherit__graph__2.md5 +1 -1
  137. data/doc/cxxapi/inherit__graph__2.png +0 -0
  138. data/doc/cxxapi/inherit__graph__20.map +1 -1
  139. data/doc/cxxapi/inherit__graph__20.md5 +1 -1
  140. data/doc/cxxapi/inherit__graph__20.png +0 -0
  141. data/doc/cxxapi/inherit__graph__21.map +1 -1
  142. data/doc/cxxapi/inherit__graph__21.md5 +1 -1
  143. data/doc/cxxapi/inherit__graph__21.png +0 -0
  144. data/doc/cxxapi/inherit__graph__3.map +1 -1
  145. data/doc/cxxapi/inherit__graph__3.md5 +1 -1
  146. data/doc/cxxapi/inherit__graph__3.png +0 -0
  147. data/doc/cxxapi/inherit__graph__4.map +1 -1
  148. data/doc/cxxapi/inherit__graph__4.md5 +1 -1
  149. data/doc/cxxapi/inherit__graph__4.png +0 -0
  150. data/doc/cxxapi/inherit__graph__5.map +2 -1
  151. data/doc/cxxapi/inherit__graph__5.md5 +1 -1
  152. data/doc/cxxapi/inherit__graph__5.png +0 -0
  153. data/doc/cxxapi/inherit__graph__6.map +1 -1
  154. data/doc/cxxapi/inherit__graph__6.md5 +1 -1
  155. data/doc/cxxapi/inherit__graph__6.png +0 -0
  156. data/doc/cxxapi/inherit__graph__7.map +1 -1
  157. data/doc/cxxapi/inherit__graph__7.md5 +1 -1
  158. data/doc/cxxapi/inherit__graph__7.png +0 -0
  159. data/doc/cxxapi/inherit__graph__8.map +1 -1
  160. data/doc/cxxapi/inherit__graph__8.md5 +1 -1
  161. data/doc/cxxapi/inherit__graph__8.png +0 -0
  162. data/doc/cxxapi/inherit__graph__9.map +1 -2
  163. data/doc/cxxapi/inherit__graph__9.md5 +1 -1
  164. data/doc/cxxapi/inherit__graph__9.png +0 -0
  165. data/doc/cxxapi/inherits.html +30 -31
  166. data/doc/cxxapi/main.html +1 -2
  167. data/doc/cxxapi/modules.html +1 -2
  168. data/doc/cxxapi/structPassenger_1_1AnythingToString-members.html +1 -2
  169. data/doc/cxxapi/structPassenger_1_1AnythingToString.html +2 -3
  170. data/doc/cxxapi/structPassenger_1_1AnythingToString_3_01vector_3_01string_01_4_01_4-members.html +1 -2
  171. data/doc/cxxapi/structPassenger_1_1AnythingToString_3_01vector_3_01string_01_4_01_4.html +2 -3
  172. data/doc/cxxapi/structPassenger_1_1PoolOptions-members.html +49 -0
  173. data/doc/cxxapi/structPassenger_1_1PoolOptions.html +404 -0
  174. data/doc/cxxapi/tree.html +18 -20
  175. data/doc/images/conservative_spawning.png +0 -0
  176. data/doc/images/conservative_spawning.svg +248 -0
  177. data/doc/images/smart-lv2.png +0 -0
  178. data/doc/images/smart-lv2.svg +320 -0
  179. data/doc/rdoc/classes/ConditionVariable.html +68 -34
  180. data/doc/rdoc/classes/Exception.html +16 -16
  181. data/doc/rdoc/classes/GC.html +9 -9
  182. data/doc/rdoc/classes/IO.html +36 -17
  183. data/doc/rdoc/classes/PhusionPassenger.html +183 -0
  184. data/doc/rdoc/classes/PhusionPassenger/AbstractRequestHandler.html +511 -0
  185. data/doc/rdoc/classes/{Passenger → PhusionPassenger}/AbstractServer.html +285 -242
  186. data/doc/rdoc/classes/{Passenger → PhusionPassenger}/AbstractServer/ServerAlreadyStarted.html +3 -3
  187. data/doc/rdoc/classes/{Passenger → PhusionPassenger}/AbstractServer/ServerError.html +3 -3
  188. data/doc/rdoc/classes/{Passenger → PhusionPassenger}/AbstractServer/ServerNotStarted.html +3 -3
  189. data/doc/rdoc/classes/{Passenger → PhusionPassenger}/AbstractServer/UnknownMessage.html +3 -3
  190. data/doc/rdoc/classes/PhusionPassenger/AbstractServerCollection.html +598 -0
  191. data/doc/rdoc/classes/PhusionPassenger/AdminTools.html +140 -0
  192. data/doc/rdoc/classes/PhusionPassenger/AdminTools/ControlProcess.html +247 -0
  193. data/doc/rdoc/classes/PhusionPassenger/AdminTools/ControlProcess/Instance.html +138 -0
  194. data/doc/rdoc/classes/{Passenger → PhusionPassenger}/AppInitError.html +36 -19
  195. data/doc/rdoc/classes/{Passenger → PhusionPassenger}/Application.html +81 -96
  196. data/doc/rdoc/classes/{Passenger → PhusionPassenger}/ConsoleTextTemplate.html +18 -18
  197. data/doc/rdoc/classes/{Passenger → PhusionPassenger}/FrameworkInitError.html +20 -18
  198. data/doc/rdoc/classes/{Passenger → PhusionPassenger}/HTMLTemplate.html +18 -18
  199. data/doc/rdoc/classes/{Passenger → PhusionPassenger}/InitializationError.html +9 -9
  200. data/doc/rdoc/classes/PhusionPassenger/InvalidPath.html +92 -0
  201. data/doc/rdoc/classes/{Passenger → PhusionPassenger}/MessageChannel.html +93 -92
  202. data/doc/rdoc/classes/{Passenger → PhusionPassenger}/NativeSupport.html +55 -25
  203. data/doc/rdoc/classes/PhusionPassenger/Rack.html +91 -0
  204. data/doc/rdoc/classes/PhusionPassenger/Rack/ApplicationSpawner.html +185 -0
  205. data/doc/rdoc/classes/PhusionPassenger/Rack/RequestHandler.html +182 -0
  206. data/doc/rdoc/classes/PhusionPassenger/Railz.html +95 -0
  207. data/doc/rdoc/classes/PhusionPassenger/Railz/ApplicationSpawner.html +424 -0
  208. data/doc/rdoc/classes/PhusionPassenger/Railz/ApplicationSpawner/Error.html +98 -0
  209. data/doc/rdoc/classes/PhusionPassenger/Railz/CGIFixed.html +200 -0
  210. data/doc/rdoc/classes/PhusionPassenger/Railz/FrameworkSpawner.html +444 -0
  211. data/doc/rdoc/classes/PhusionPassenger/Railz/FrameworkSpawner/Error.html +98 -0
  212. data/doc/rdoc/classes/PhusionPassenger/Railz/RequestHandler.html +154 -0
  213. data/doc/rdoc/classes/PhusionPassenger/SpawnManager.html +408 -0
  214. data/doc/rdoc/classes/{Passenger → PhusionPassenger}/UnknownError.html +13 -13
  215. data/doc/rdoc/classes/PhusionPassenger/Utils.html +687 -0
  216. data/doc/rdoc/classes/{Passenger → PhusionPassenger}/VersionNotFound.html +8 -8
  217. data/doc/rdoc/classes/PhusionPassenger/WSGI.html +89 -0
  218. data/doc/rdoc/classes/PhusionPassenger/WSGI/ApplicationSpawner.html +188 -0
  219. data/doc/rdoc/classes/PlatformInfo.html +663 -159
  220. data/doc/rdoc/classes/RakeExtensions.html +4 -4
  221. data/doc/rdoc/classes/Signal.html +134 -0
  222. data/doc/rdoc/created.rid +1 -1
  223. data/doc/rdoc/files/DEVELOPERS_TXT.html +15 -10
  224. data/doc/rdoc/files/README.html +5 -7
  225. data/doc/rdoc/files/ext/{passenger → phusion_passenger}/native_support_c.html +2 -2
  226. data/doc/rdoc/files/lib/{passenger → phusion_passenger}/abstract_request_handler_rb.html +7 -9
  227. data/doc/rdoc/files/lib/phusion_passenger/abstract_server_collection_rb.html +120 -0
  228. data/doc/rdoc/files/lib/{passenger → phusion_passenger}/abstract_server_rb.html +7 -10
  229. data/doc/rdoc/files/lib/phusion_passenger/admin_tools/control_process_rb.html +99 -0
  230. data/doc/rdoc/files/lib/phusion_passenger/admin_tools_rb.html +92 -0
  231. data/doc/rdoc/files/lib/{passenger → phusion_passenger}/application_rb.html +6 -8
  232. data/doc/rdoc/files/lib/{passenger → phusion_passenger}/console_text_template_rb.html +5 -7
  233. data/doc/rdoc/files/lib/{passenger → phusion_passenger}/constants_rb.html +4 -5
  234. data/doc/rdoc/files/lib/{passenger → phusion_passenger}/dependencies_rb.html +6 -8
  235. data/doc/rdoc/files/lib/phusion_passenger/events_rb.html +116 -0
  236. data/doc/rdoc/files/lib/{passenger → phusion_passenger}/exceptions_rb.html +5 -7
  237. data/doc/rdoc/files/lib/{passenger → phusion_passenger}/html_template_rb.html +5 -7
  238. data/doc/rdoc/files/lib/{passenger → phusion_passenger}/message_channel_rb.html +5 -7
  239. data/doc/rdoc/files/lib/{passenger → phusion_passenger}/platform_info_rb.html +6 -7
  240. data/doc/rdoc/files/lib/phusion_passenger/rack/application_spawner_rb.html +123 -0
  241. data/doc/rdoc/files/lib/phusion_passenger/rack/request_handler_rb.html +117 -0
  242. data/doc/rdoc/files/lib/{passenger/utils_rb.html → phusion_passenger/railz/application_spawner_rb.html} +24 -17
  243. data/doc/rdoc/files/lib/phusion_passenger/railz/cgi_fixed_rb.html +126 -0
  244. data/doc/rdoc/files/lib/phusion_passenger/railz/framework_spawner_rb.html +139 -0
  245. data/doc/rdoc/files/lib/phusion_passenger/railz/request_handler_rb.html +118 -0
  246. data/doc/rdoc/files/lib/{passenger → phusion_passenger}/simple_benchmarking_rb.html +5 -7
  247. data/doc/rdoc/files/lib/{passenger → phusion_passenger}/spawn_manager_rb.html +40 -24
  248. data/doc/rdoc/files/lib/phusion_passenger/utils_rb.html +169 -0
  249. data/doc/rdoc/files/lib/phusion_passenger/wsgi/application_spawner_rb.html +120 -0
  250. data/doc/rdoc/files/lib/rake/extensions_rb.html +3 -4
  251. data/doc/rdoc/fr_class_index.html +37 -19
  252. data/doc/rdoc/fr_file_index.html +25 -14
  253. data/doc/rdoc/fr_method_index.html +145 -74
  254. data/ext/apache2/Application.h +145 -44
  255. data/ext/apache2/ApplicationPool.h +27 -29
  256. data/ext/apache2/ApplicationPoolServer.h +183 -72
  257. data/ext/apache2/ApplicationPoolServerExecutable.cpp +249 -42
  258. data/ext/apache2/Bucket.cpp +61 -9
  259. data/ext/apache2/Bucket.h +15 -8
  260. data/ext/apache2/CachedFileStat.cpp +114 -0
  261. data/ext/apache2/CachedFileStat.h +169 -0
  262. data/ext/apache2/Configuration.cpp +213 -22
  263. data/ext/apache2/Configuration.h +176 -13
  264. data/ext/apache2/DirectoryMapper.h +287 -0
  265. data/ext/apache2/Exceptions.h +30 -12
  266. data/ext/apache2/FileChecker.h +108 -0
  267. data/ext/apache2/Hooks.cpp +709 -493
  268. data/ext/apache2/LICENSE-CNRI.TXT +15 -0
  269. data/ext/apache2/Logging.h +26 -22
  270. data/ext/apache2/MessageChannel.h +124 -15
  271. data/ext/apache2/PoolOptions.h +283 -0
  272. data/ext/apache2/SpawnManager.h +75 -99
  273. data/ext/apache2/StandardApplicationPool.h +296 -195
  274. data/ext/apache2/SystemTime.cpp +28 -0
  275. data/ext/apache2/SystemTime.h +82 -0
  276. data/ext/apache2/Utils.cpp +172 -18
  277. data/ext/apache2/Utils.h +124 -19
  278. data/ext/boost/cstdint.hpp +4 -2
  279. data/ext/boost/current_function.hpp +67 -0
  280. data/ext/boost/detail/sp_counted_base.hpp +4 -4
  281. data/ext/boost/thread/exceptions.hpp +2 -1
  282. data/ext/boost/thread/pthread/thread.hpp +11 -3
  283. data/ext/boost/thread/pthread/thread_data.hpp +2 -1
  284. data/ext/oxt/backtrace.cpp +172 -0
  285. data/ext/oxt/backtrace.hpp +135 -0
  286. data/ext/oxt/detail/backtrace_disabled.hpp +39 -0
  287. data/ext/oxt/detail/backtrace_enabled.hpp +155 -0
  288. data/ext/oxt/detail/spin_lock_gcc_x86.hpp +82 -0
  289. data/ext/oxt/detail/spin_lock_portable.hpp +38 -0
  290. data/ext/oxt/detail/spin_lock_pthreads.hpp +97 -0
  291. data/ext/oxt/detail/tracable_exception_disabled.hpp +46 -0
  292. data/ext/oxt/detail/tracable_exception_enabled.hpp +48 -0
  293. data/ext/oxt/macros.hpp +58 -0
  294. data/ext/oxt/spin_lock.hpp +55 -0
  295. data/ext/{apache2/System.cpp → oxt/system_calls.cpp} +87 -52
  296. data/ext/oxt/system_calls.hpp +234 -0
  297. data/ext/oxt/thread.cpp +32 -0
  298. data/ext/oxt/thread.hpp +223 -0
  299. data/ext/oxt/tracable_exception.cpp +87 -0
  300. data/ext/oxt/tracable_exception.hpp +35 -0
  301. data/{lib/passenger/constants.rb → ext/phusion_passenger/extconf.rb} +14 -9
  302. data/ext/{passenger → phusion_passenger}/native_support.c +33 -6
  303. data/lib/{passenger → phusion_passenger}/abstract_request_handler.rb +209 -93
  304. data/lib/{passenger → phusion_passenger}/abstract_server.rb +23 -8
  305. data/lib/phusion_passenger/abstract_server_collection.rb +301 -0
  306. data/lib/phusion_passenger/admin_tools.rb +25 -0
  307. data/lib/phusion_passenger/admin_tools/control_process.rb +107 -0
  308. data/lib/{passenger → phusion_passenger}/application.rb +13 -16
  309. data/lib/{passenger → phusion_passenger}/console_text_template.rb +2 -2
  310. data/{ext/passenger/extconf.rb → lib/phusion_passenger/constants.rb} +5 -5
  311. data/lib/{passenger → phusion_passenger}/dependencies.rb +38 -32
  312. data/lib/phusion_passenger/events.rb +45 -0
  313. data/lib/{passenger → phusion_passenger}/exceptions.rb +12 -5
  314. data/lib/{passenger → phusion_passenger}/html_template.rb +2 -2
  315. data/lib/{passenger → phusion_passenger}/message_channel.rb +3 -2
  316. data/lib/phusion_passenger/platform_info.rb +500 -0
  317. data/lib/{passenger → phusion_passenger}/rack/application_spawner.rb +29 -22
  318. data/lib/{passenger → phusion_passenger}/rack/request_handler.rb +14 -9
  319. data/lib/{passenger → phusion_passenger}/railz/application_spawner.rb +94 -74
  320. data/lib/{passenger → phusion_passenger}/railz/cgi_fixed.rb +2 -2
  321. data/lib/{passenger → phusion_passenger}/railz/framework_spawner.rb +86 -98
  322. data/lib/{passenger → phusion_passenger}/railz/request_handler.rb +6 -6
  323. data/lib/{passenger → phusion_passenger}/simple_benchmarking.rb +0 -0
  324. data/lib/{passenger → phusion_passenger}/spawn_manager.rb +136 -128
  325. data/lib/{passenger → phusion_passenger}/templates/apache2_config_snippets.txt.erb +0 -0
  326. data/lib/{passenger → phusion_passenger}/templates/apache_must_be_compiled_with_compatible_mpm.txt.erb +0 -0
  327. data/lib/phusion_passenger/templates/app_exited_during_initialization.html.erb +38 -0
  328. data/lib/{passenger → phusion_passenger}/templates/app_init_error.html.erb +0 -0
  329. data/lib/{passenger → phusion_passenger}/templates/database_error.html.erb +0 -0
  330. data/lib/{passenger → phusion_passenger}/templates/deployment_example.txt.erb +1 -1
  331. data/lib/{passenger → phusion_passenger}/templates/error_layout.css +0 -0
  332. data/lib/{passenger → phusion_passenger}/templates/error_layout.html.erb +0 -0
  333. data/lib/{passenger → phusion_passenger}/templates/framework_init_error.html.erb +0 -0
  334. data/lib/{passenger → phusion_passenger}/templates/general_error.html.erb +0 -0
  335. data/lib/{passenger → phusion_passenger}/templates/invalid_app_root.html.erb +1 -1
  336. data/lib/{passenger → phusion_passenger}/templates/load_error.html.erb +0 -0
  337. data/lib/{passenger → phusion_passenger}/templates/no_write_permission_to_passenger_root.txt.erb +0 -0
  338. data/lib/{passenger → phusion_passenger}/templates/possible_solutions_for_compilation_and_installation_problems.txt.erb +0 -0
  339. data/lib/{passenger → phusion_passenger}/templates/run_installer_as_root.txt.erb +0 -0
  340. data/lib/{passenger → phusion_passenger}/templates/version_not_found.html.erb +0 -0
  341. data/lib/{passenger → phusion_passenger}/templates/welcome.txt.erb +0 -0
  342. data/lib/{passenger → phusion_passenger}/utils.rb +210 -44
  343. data/lib/{passenger → phusion_passenger}/wsgi/application_spawner.rb +18 -15
  344. data/lib/{passenger → phusion_passenger}/wsgi/request_handler.py +7 -1
  345. data/man/passenger-memory-stats.8 +1 -1
  346. data/misc/render_error_pages.rb +1 -1
  347. data/test/ApplicationPoolServerTest.cpp +0 -28
  348. data/test/ApplicationPoolServer_ApplicationPoolTest.cpp +4 -0
  349. data/test/ApplicationPoolTest.cpp +307 -69
  350. data/test/CachedFileStatTest.cpp +262 -0
  351. data/test/FileCheckerTest.cpp +79 -0
  352. data/test/MessageChannelTest.cpp +3 -3
  353. data/test/PoolOptionsTest.cpp +37 -0
  354. data/test/SpawnManagerTest.cpp +4 -4
  355. data/test/StandardApplicationPoolTest.cpp +4 -0
  356. data/test/SystemTimeTest.cpp +37 -0
  357. data/test/UtilsTest.cpp +137 -0
  358. data/test/integration_tests.rb +270 -23
  359. data/test/oxt/backtrace_test.cpp +128 -0
  360. data/test/oxt/oxt_test_main.cpp +25 -0
  361. data/test/oxt/syscall_interruption_test.cpp +50 -0
  362. data/test/ruby/abstract_request_handler_spec.rb +83 -0
  363. data/test/ruby/abstract_server_collection_spec.rb +246 -0
  364. data/test/ruby/application_spec.rb +3 -3
  365. data/test/ruby/message_channel_spec.rb +2 -2
  366. data/test/ruby/rack/application_spawner_spec.rb +3 -5
  367. data/test/ruby/rails/application_spawner_spec.rb +54 -15
  368. data/test/ruby/rails/framework_spawner_spec.rb +6 -8
  369. data/test/ruby/rails/minimal_spawner_spec.rb +29 -0
  370. data/test/ruby/rails/spawner_error_handling_spec.rb +1 -1
  371. data/test/ruby/rails/spawner_privilege_lowering_spec.rb +3 -3
  372. data/test/ruby/spawn_manager_spec.rb +23 -12
  373. data/test/ruby/utils_spec.rb +36 -2
  374. data/test/ruby/wsgi/application_spawner_spec.rb +47 -0
  375. data/test/stub/apache2/httpd.conf.erb +3 -5
  376. data/test/stub/message_channel.rb +2 -2
  377. data/test/stub/message_channel_2.rb +2 -2
  378. data/test/stub/message_channel_3.rb +3 -3
  379. data/test/stub/minimal-railsapp/README +0 -0
  380. data/test/stub/minimal-railsapp/config/application.rb +0 -0
  381. data/test/stub/minimal-railsapp/config/environment.rb +0 -0
  382. data/test/stub/minimal-railsapp/vendor/rails/actionmailer/lib/action_mailer.rb +0 -0
  383. data/test/stub/minimal-railsapp/vendor/rails/actionpack/lib/action_controller.rb +0 -0
  384. data/test/stub/minimal-railsapp/vendor/rails/actionpack/lib/action_pack.rb +0 -0
  385. data/test/stub/minimal-railsapp/vendor/rails/actionpack/lib/action_view.rb +0 -0
  386. data/test/stub/minimal-railsapp/vendor/rails/activerecord/lib/active_record.rb +0 -0
  387. data/test/stub/minimal-railsapp/vendor/rails/activeresource/lib/active_resource.rb +0 -0
  388. data/test/stub/minimal-railsapp/vendor/rails/activesupport/lib/active_support.rb +0 -0
  389. data/test/stub/minimal-railsapp/vendor/rails/activesupport/lib/active_support/whiny_nil.rb +0 -0
  390. data/test/stub/minimal-railsapp/vendor/rails/railties/lib/dispatcher.rb +0 -0
  391. data/test/stub/minimal-railsapp/vendor/rails/railties/lib/initializer.rb +0 -0
  392. data/test/stub/minimal-railsapp/vendor/rails/railties/lib/ruby_version_check.rb +0 -0
  393. data/test/stub/rails_apps/foobar/app/controllers/foo_controller.rb +8 -0
  394. data/test/stub/rails_apps/foobar/config/environments/development.rb +1 -2
  395. data/test/stub/rails_apps/mycook/app/controllers/welcome_controller.rb +21 -1
  396. data/test/stub/rails_apps/mycook/sites/some.site/public/uploads.html +26 -0
  397. data/test/stub/rails_apps/mycook/sites/some.site/public/welcome/cached.html +26 -0
  398. data/test/stub/railsapp/app/controllers/application.rb +0 -0
  399. data/test/stub/railsapp/app/controllers/bar_controller_1.rb +0 -0
  400. data/test/stub/railsapp/app/controllers/bar_controller_2.rb +1 -1
  401. data/test/stub/railsapp/app/controllers/foo_controller.rb +4 -0
  402. data/test/stub/railsapp/app/helpers/application_helper.rb +0 -0
  403. data/test/stub/railsapp/config/boot.rb +0 -0
  404. data/test/stub/railsapp/config/database.yml +0 -0
  405. data/test/stub/railsapp/config/environment.rb +0 -0
  406. data/test/stub/railsapp/config/environments/development.rb +0 -0
  407. data/test/stub/railsapp/config/environments/production.rb +0 -0
  408. data/test/stub/railsapp/config/initializers/inflections.rb +0 -0
  409. data/test/stub/railsapp/config/initializers/mime_types.rb +0 -0
  410. data/test/stub/railsapp/config/routes.rb +0 -0
  411. data/test/stub/railsapp/public/useless.txt +0 -0
  412. data/test/stub/spawn_server.rb +3 -4
  413. data/test/stub/wsgi/passenger_wsgi.pyc +0 -0
  414. data/test/support/apache2_controller.rb +57 -7
  415. data/test/support/tut.h +15 -0
  416. data/vendor/README +12 -0
  417. data/vendor/README_FOR_PACKAGERS +1 -0
  418. data/vendor/rack-0.9.1/AUTHORS +8 -0
  419. data/vendor/rack-0.9.1/COPYING +18 -0
  420. data/vendor/rack-0.9.1/ChangeLog +1423 -0
  421. data/vendor/rack-0.9.1/KNOWN-ISSUES +18 -0
  422. data/vendor/rack-0.9.1/README +306 -0
  423. data/vendor/rack-0.9.1/Rakefile +188 -0
  424. data/vendor/rack-0.9.1/SPEC +129 -0
  425. data/vendor/rack-0.9.1/lib/rack.rb +86 -0
  426. data/vendor/rack-0.9.1/lib/rack/adapter/camping.rb +22 -0
  427. data/vendor/rack-0.9.1/lib/rack/auth/abstract/handler.rb +28 -0
  428. data/vendor/rack-0.9.1/lib/rack/auth/abstract/request.rb +37 -0
  429. data/vendor/rack-0.9.1/lib/rack/auth/basic.rb +58 -0
  430. data/vendor/rack-0.9.1/lib/rack/auth/digest/md5.rb +124 -0
  431. data/vendor/rack-0.9.1/lib/rack/auth/digest/nonce.rb +51 -0
  432. data/vendor/rack-0.9.1/lib/rack/auth/digest/params.rb +55 -0
  433. data/vendor/rack-0.9.1/lib/rack/auth/digest/request.rb +40 -0
  434. data/vendor/rack-0.9.1/lib/rack/auth/openid.rb +438 -0
  435. data/vendor/rack-0.9.1/lib/rack/builder.rb +67 -0
  436. data/vendor/rack-0.9.1/lib/rack/cascade.rb +36 -0
  437. data/vendor/rack-0.9.1/lib/rack/commonlogger.rb +61 -0
  438. data/vendor/rack-0.9.1/lib/rack/conditionalget.rb +43 -0
  439. data/vendor/rack-0.9.1/lib/rack/content_length.rb +25 -0
  440. data/vendor/rack-0.9.1/lib/rack/deflater.rb +87 -0
  441. data/vendor/rack-0.9.1/lib/rack/directory.rb +150 -0
  442. data/vendor/rack-0.9.1/lib/rack/file.rb +85 -0
  443. data/vendor/rack-0.9.1/lib/rack/handler.rb +48 -0
  444. data/vendor/rack-0.9.1/lib/rack/handler/cgi.rb +57 -0
  445. data/vendor/rack-0.9.1/lib/rack/handler/evented_mongrel.rb +8 -0
  446. data/vendor/rack-0.9.1/lib/rack/handler/fastcgi.rb +86 -0
  447. data/vendor/rack-0.9.1/lib/rack/handler/lsws.rb +52 -0
  448. data/vendor/rack-0.9.1/lib/rack/handler/mongrel.rb +82 -0
  449. data/vendor/rack-0.9.1/lib/rack/handler/scgi.rb +57 -0
  450. data/vendor/rack-0.9.1/lib/rack/handler/swiftiplied_mongrel.rb +8 -0
  451. data/vendor/rack-0.9.1/lib/rack/handler/thin.rb +15 -0
  452. data/vendor/rack-0.9.1/lib/rack/handler/webrick.rb +61 -0
  453. data/vendor/rack-0.9.1/lib/rack/head.rb +19 -0
  454. data/vendor/rack-0.9.1/lib/rack/lint.rb +465 -0
  455. data/vendor/rack-0.9.1/lib/rack/lobster.rb +65 -0
  456. data/vendor/rack-0.9.1/lib/rack/methodoverride.rb +27 -0
  457. data/vendor/rack-0.9.1/lib/rack/mime.rb +204 -0
  458. data/vendor/rack-0.9.1/lib/rack/mock.rb +160 -0
  459. data/vendor/rack-0.9.1/lib/rack/recursive.rb +57 -0
  460. data/vendor/rack-0.9.1/lib/rack/reloader.rb +64 -0
  461. data/vendor/rack-0.9.1/lib/rack/request.rb +218 -0
  462. data/vendor/rack-0.9.1/lib/rack/response.rb +171 -0
  463. data/vendor/rack-0.9.1/lib/rack/session/abstract/id.rb +153 -0
  464. data/vendor/rack-0.9.1/lib/rack/session/cookie.rb +89 -0
  465. data/vendor/rack-0.9.1/lib/rack/session/memcache.rb +97 -0
  466. data/vendor/rack-0.9.1/lib/rack/session/pool.rb +73 -0
  467. data/vendor/rack-0.9.1/lib/rack/showexceptions.rb +348 -0
  468. data/vendor/rack-0.9.1/lib/rack/showstatus.rb +106 -0
  469. data/vendor/rack-0.9.1/lib/rack/static.rb +38 -0
  470. data/vendor/rack-0.9.1/lib/rack/urlmap.rb +48 -0
  471. data/vendor/rack-0.9.1/lib/rack/utils.rb +347 -0
  472. metadata +1197 -1055
  473. data/doc/cxxapi/System_8h-source.html +0 -251
  474. data/doc/cxxapi/classDirectoryMapper-members.html +0 -38
  475. data/doc/cxxapi/classDirectoryMapper.html +0 -203
  476. data/doc/cxxapi/classPassenger_1_1Thread.html +0 -100
  477. data/doc/cxxapi/classboost_1_1this__thread_1_1disable__syscall__interruption.html +0 -46
  478. data/doc/cxxapi/classboost_1_1this__thread_1_1restore__syscall__interruption-members.html +0 -33
  479. data/doc/cxxapi/classboost_1_1this__thread_1_1restore__syscall__interruption.html +0 -44
  480. data/doc/cxxapi/namespacePassenger.html +0 -208
  481. data/doc/cxxapi/namespacePassenger_1_1InterruptableCalls.html +0 -43
  482. data/doc/cxxapi/namespacemembers.html +0 -70
  483. data/doc/cxxapi/namespacemembers_func.html +0 -66
  484. data/doc/cxxapi/namespacemembers_type.html +0 -46
  485. data/doc/cxxapi/namespaces.html +0 -35
  486. data/doc/rdoc/classes/Passenger.html +0 -136
  487. data/doc/rdoc/classes/Passenger/AbstractRequestHandler.html +0 -402
  488. data/doc/rdoc/classes/Passenger/SpawnManager.html +0 -379
  489. data/doc/rdoc/classes/Passenger/Utils.html +0 -578
  490. data/ext/apache2/System.h +0 -228
  491. data/lib/passenger/platform_info.rb +0 -302
  492. data/lib/passenger/templates/app_exited_during_initialization.html.erb +0 -19
  493. data/test/stub/apache2/httpd.conf +0 -75
  494. data/test/stub/rails_apps/foobar/config/environments/test.rb +0 -22
  495. data/test/stub/rails_apps/mycook/config/environments/test.rb +0 -22
  496. data/test/stub/railsapp/config/environments/test.rb +0 -22
  497. data/test/stub/railsapp2/config/environments/test.rb +0 -22
data/DEVELOPERS.TXT CHANGED
@@ -5,7 +5,7 @@
5
5
  The tests need the following software installed:
6
6
 
7
7
  * All the usual Phusion Passenger dependencies.
8
- * Ruby on Rails >= 2.0.1
8
+ * Ruby on Rails 2.0.1 (*exactly* 2.0.1)
9
9
  * rspec >= 1.1.2
10
10
  * mime-types >= 1.15
11
11
 
@@ -27,9 +27,9 @@ Run the following command to compile everything:
27
27
  == Directory structure
28
28
 
29
29
  The most important directories are:
30
- [ lib/passenger ]
30
+ [ lib/phusion_passenger ]
31
31
  The source code for the spawn server, which is written in Ruby.
32
- [ ext/passenger ]
32
+ [ ext/phusion_passenger ]
33
33
  Native extensions for Ruby, used by the spawn server.
34
34
  [ ext/apache2 ]
35
35
  The Phusion Passenger Apache 2 module (mod_passenger).
@@ -48,7 +48,13 @@ Less important directories:
48
48
  [ lib/rake ]
49
49
  Rake tasks.
50
50
  [ ext/boost ]
51
- A vendor copy of the Boost C++ library (www.boost.org).
51
+ A stripped-down and customized version of the Boost C++ library
52
+ (www.boost.org).
53
+ [ ext/oxt ]
54
+ The "OS eXtensions for boosT" library, which provides various important
55
+ functionality necessary for writing robust server software. It provides
56
+ things like support for interruptable system calls and portable backtraces
57
+ for C++. Boost was modified to make use of the functionality provided by OXT.
52
58
  [ benchmark ]
53
59
  Benchmark tools.
54
60
  [ misc ]
data/LICENSE CHANGED
@@ -2,7 +2,7 @@ Phusion Passenger is licensed under the GNU General Public License (GPL)
2
2
  version 2, and *only* version 2 (i.e. not version 3 or any later versions).
3
3
 
4
4
  In addition to the GNU General Public License v2 licensing terms, we explicitly
5
- grand you the permission to run any application on top of Phusion Passenger,
5
+ grant you the permission to run any application on top of Phusion Passenger,
6
6
  regardless of the application's own licensing terms. The application will not
7
7
  be bound to the terms of the GPL in any way. That is, the GPL only applies to
8
8
  Phusion Passenger itself, and not to applications that are run through Phusion
data/NEWS ADDED
File without changes
data/Rakefile CHANGED
@@ -1,7 +1,7 @@
1
1
  # kate: syntax ruby
2
2
 
3
3
  # Phusion Passenger - http://www.modrails.com/
4
- # Copyright (C) 2008 Phusion
4
+ # Copyright (C) 2008, 2009 Phusion
5
5
  #
6
6
  # This program is free software; you can redistribute it and/or modify
7
7
  # it under the terms of the GNU General Public License as published by
@@ -22,33 +22,30 @@ require 'rake/rdoctask'
22
22
  require 'rake/gempackagetask'
23
23
  require 'rake/extensions'
24
24
  require 'rake/cplusplus'
25
- require 'passenger/platform_info'
25
+ require 'phusion_passenger/platform_info'
26
26
 
27
27
  verbose true
28
28
 
29
29
  ##### Configuration
30
30
 
31
31
  # Don't forget to edit Configuration.h too
32
- PACKAGE_VERSION = "2.0.6"
32
+ PACKAGE_VERSION = "2.1.2"
33
33
  OPTIMIZE = ["yes", "on", "true"].include?(ENV['OPTIMIZE'])
34
34
 
35
- include PlatformInfo
36
- APXS2.nil? and raise "Could not find 'apxs' or 'apxs2'."
37
- APACHE2CTL.nil? and raise "Could not find 'apachectl' or 'apache2ctl'."
38
- HTTPD.nil? and raise "Could not find the Apache web server binary."
39
- APR_FLAGS.nil? and raise "Could not find Apache Portable Runtime (APR)."
40
- APU_FLAGS.nil? and raise "Could not find Apache Portable Runtime Utility (APU)."
35
+ PlatformInfo.apxs2.nil? and raise "Could not find 'apxs' or 'apxs2'."
36
+ PlatformInfo.apache2ctl.nil? and raise "Could not find 'apachectl' or 'apache2ctl'."
37
+ PlatformInfo.httpd.nil? and raise "Could not find the Apache web server binary."
41
38
 
42
39
  CXX = "g++"
43
- THREADING_FLAGS = "-D_REENTRANT"
40
+ LIBEXT = PlatformInfo.library_extension
41
+ # _GLIBCPP__PTHREADS is for fixing Boost compilation on OpenBSD.
44
42
  if OPTIMIZE
45
- OPTIMIZATION_FLAGS = "-O2 -DNDEBUG"
43
+ OPTIMIZATION_FLAGS = "#{PlatformInfo.debugging_cflags} -O2 -DBOOST_DISABLE_ASSERTS"
46
44
  else
47
- OPTIMIZATION_FLAGS = "-g -DPASSENGER_DEBUG"
45
+ OPTIMIZATION_FLAGS = "#{PlatformInfo.debugging_cflags} -DPASSENGER_DEBUG -DBOOST_DISABLE_ASSERTS"
48
46
  end
49
- CXXFLAGS = "#{THREADING_FLAGS} #{OPTIMIZATION_FLAGS} -Wall -I/usr/local/include #{MULTI_ARCH_FLAGS}"
50
- LDFLAGS = ""
51
-
47
+ CXXFLAGS = "-Wall #{OPTIMIZATION_FLAGS}"
48
+ EXTRA_LDFLAGS = ""
52
49
 
53
50
  #### Default tasks
54
51
 
@@ -56,6 +53,7 @@ desc "Build everything"
56
53
  task :default => [
57
54
  :native_support,
58
55
  :apache2,
56
+ 'test/oxt/oxt_test_main',
59
57
  'test/Apache2ModuleTests',
60
58
  'benchmark/DummyRequestHandler'
61
59
  ]
@@ -69,7 +67,7 @@ task :clobber
69
67
 
70
68
  ##### Ruby C extension
71
69
 
72
- subdir 'ext/passenger' do
70
+ subdir 'ext/phusion_passenger' do
73
71
  task :native_support => ["native_support.#{LIBEXT}"]
74
72
 
75
73
  file 'Makefile' => 'extconf.rb' do
@@ -87,40 +85,53 @@ subdir 'ext/passenger' do
87
85
  end
88
86
 
89
87
 
90
- ##### boost::thread static library
88
+ ##### boost::thread and OXT static library
91
89
 
92
- subdir 'ext/boost/src' do
93
- file 'libboost_thread.a' => Dir['*.cpp'] + Dir['pthread/*.cpp'] do
94
- flags = "#{OPTIMIZATION_FLAGS} -fPIC -I../.. #{THREADING_FLAGS} -DNDEBUG #{MULTI_ARCH_FLAGS}"
90
+ file 'ext/libboost_oxt.a' =>
91
+ Dir['ext/boost/src/*.cpp'] +
92
+ Dir['ext/boost/src/pthread/*.cpp'] +
93
+ Dir['ext/oxt/*.cpp'] +
94
+ Dir['ext/oxt/*.hpp'] +
95
+ Dir['ext/oxt/detail/*.hpp'] do
96
+ Dir.chdir('ext/boost/src') do
97
+ puts "### In ext/boost/src:"
98
+ flags = "-I../.. #{CXXFLAGS} #{PlatformInfo.apache2_module_cflags}"
95
99
  compile_cxx "*.cpp", flags
96
100
  # NOTE: 'compile_cxx "pthread/*.cpp", flags' doesn't work on some systems,
97
101
  # so we do this instead.
98
102
  Dir['pthread/*.cpp'].each do |file|
99
103
  compile_cxx file, flags
100
104
  end
101
- create_static_library "libboost_thread.a", "*.o"
102
105
  end
103
-
104
- task :clean do
105
- sh "rm -f libboost_thread.a *.o"
106
+ Dir.chdir('ext/oxt') do
107
+ puts "### In ext/oxt:"
108
+ Dir['*.cpp'].each do |file|
109
+ compile_cxx file, "-I.. #{CXXFLAGS} #{PlatformInfo.apache2_module_cflags}"
110
+ end
106
111
  end
112
+ create_static_library "ext/libboost_oxt.a", "ext/boost/src/*.o ext/oxt/*.o"
113
+ end
114
+
115
+ task :clean do
116
+ sh "rm -f ext/libboost_oxt.a ext/boost/src/*.o ext/oxt/*.o"
107
117
  end
108
118
 
109
119
 
110
120
  ##### Apache module
111
121
 
112
122
  class APACHE2
113
- CXXFLAGS = "-I.. -fPIC #{OPTIMIZATION_FLAGS} #{APR_FLAGS} #{APU_FLAGS} #{APXS2_FLAGS} #{::CXXFLAGS}"
123
+ CXXFLAGS = "-I.. #{CXXFLAGS} #{PlatformInfo.apache2_module_cflags}"
114
124
  OBJECTS = {
115
125
  'Configuration.o' => %w(Configuration.cpp Configuration.h),
116
126
  'Bucket.o' => %w(Bucket.cpp Bucket.h),
117
127
  'Hooks.o' => %w(Hooks.cpp Hooks.h
118
128
  Configuration.h ApplicationPool.h ApplicationPoolServer.h
119
129
  SpawnManager.h Exceptions.h Application.h MessageChannel.h
120
- System.h Utils.h),
121
- 'System.o' => %w(System.cpp System.h),
130
+ PoolOptions.h Utils.h DirectoryMapper.h FileChecker.h),
122
131
  'Utils.o' => %w(Utils.cpp Utils.h),
123
- 'Logging.o' => %w(Logging.cpp Logging.h)
132
+ 'Logging.o' => %w(Logging.cpp Logging.h),
133
+ 'SystemTime.o' => %w(SystemTime.cpp SystemTime.h),
134
+ 'CachedFileStat.o' => %w(CachedFileStat.cpp CachedFileStat.h)
124
135
  }
125
136
  end
126
137
 
@@ -131,7 +142,7 @@ subdir 'ext/apache2' do
131
142
  task :apache2 => ['mod_passenger.so', 'ApplicationPoolServerExecutable', :native_support]
132
143
 
133
144
  file 'mod_passenger.so' => [
134
- '../boost/src/libboost_thread.a',
145
+ '../libboost_oxt.a',
135
146
  'mod_passenger.o'
136
147
  ] + APACHE2::OBJECTS.keys do
137
148
  # apxs totally sucks. We couldn't get it working correctly
@@ -140,27 +151,35 @@ subdir 'ext/apache2' do
140
151
  # Apache module ourselves.
141
152
  #
142
153
  # Oh, and libtool sucks too. Do we even need it anymore in 2008?
143
- linkflags = "#{LDFLAGS} #{MULTI_ARCH_FLAGS}"
144
- linkflags << " -lstdc++ -lpthread ../boost/src/libboost_thread.a #{APR_LIBS}"
154
+ linkflags = "../libboost_oxt.a "
155
+ linkflags << "#{PlatformInfo.apache2_module_cflags} "
156
+ linkflags << "#{PlatformInfo.apache2_module_ldflags} #{EXTRA_LDFLAGS} -lstdc++"
145
157
  create_shared_library 'mod_passenger.so',
146
158
  APACHE2::OBJECTS.keys.join(' ') << ' mod_passenger.o',
147
159
  linkflags
148
160
  end
149
161
 
150
162
  file 'ApplicationPoolServerExecutable' => [
151
- '../boost/src/libboost_thread.a',
163
+ '../libboost_oxt.a',
152
164
  'ApplicationPoolServerExecutable.cpp',
153
165
  'ApplicationPool.h',
166
+ 'Application.h',
154
167
  'StandardApplicationPool.h',
168
+ 'FileChecker.h',
155
169
  'MessageChannel.h',
156
170
  'SpawnManager.h',
157
- 'System.o',
171
+ 'PoolOptions.h',
158
172
  'Utils.o',
159
- 'Logging.o'
173
+ 'Logging.o',
174
+ 'SystemTime.o',
175
+ 'CachedFileStat.o'
160
176
  ] do
161
177
  create_executable "ApplicationPoolServerExecutable",
162
- 'ApplicationPoolServerExecutable.cpp System.o Utils.o Logging.o',
163
- "-I.. #{CXXFLAGS} #{LDFLAGS} -DPASSENGER_DEBUG ../boost/src/libboost_thread.a -lpthread"
178
+ 'ApplicationPoolServerExecutable.cpp Utils.o Logging.o ' <<
179
+ 'SystemTime.o CachedFileStat.o',
180
+ "-I.. #{CXXFLAGS} #{PlatformInfo.portability_cflags} " <<
181
+ "../libboost_oxt.a " <<
182
+ "#{PlatformInfo.portability_ldflags} #{EXTRA_LDFLAGS}"
164
183
  end
165
184
 
166
185
  file 'mod_passenger.o' => ['mod_passenger.c'] do
@@ -187,44 +206,65 @@ end
187
206
  ##### Unit tests
188
207
 
189
208
  class TEST
190
- CXXFLAGS = "#{::CXXFLAGS} -Isupport -DTESTING_SPAWN_MANAGER -DTESTING_APPLICATION_POOL "
191
- AP2_FLAGS = "-I../ext/apache2 -I../ext #{APR_FLAGS} #{APU_FLAGS}"
192
-
209
+ CXXFLAGS = "#{::CXXFLAGS} -DTESTING_SPAWN_MANAGER -DTESTING_APPLICATION_POOL #{PlatformInfo.portability_cflags}"
210
+
211
+ AP2_FLAGS = "-I../ext/apache2 -I../ext -Isupport #{PlatformInfo.apr_flags} #{PlatformInfo.apu_flags}"
193
212
  AP2_OBJECTS = {
194
213
  'CxxTestMain.o' => %w(CxxTestMain.cpp),
195
214
  'MessageChannelTest.o' => %w(MessageChannelTest.cpp
196
- ../ext/apache2/MessageChannel.h
197
- ../ext/apache2/System.h),
215
+ ../ext/apache2/MessageChannel.h),
198
216
  'SpawnManagerTest.o' => %w(SpawnManagerTest.cpp
199
217
  ../ext/apache2/SpawnManager.h
218
+ ../ext/apache2/PoolOptions.h
200
219
  ../ext/apache2/Application.h
201
- ../ext/apache2/MessageChannel.h
202
- ../ext/apache2/System.h),
220
+ ../ext/apache2/MessageChannel.h),
203
221
  'ApplicationPoolServerTest.o' => %w(ApplicationPoolServerTest.cpp
204
222
  ../ext/apache2/ApplicationPoolServer.h
205
- ../ext/apache2/MessageChannel.h
206
- ../ext/apache2/System.h),
223
+ ../ext/apache2/PoolOptions.h
224
+ ../ext/apache2/MessageChannel.h),
207
225
  'ApplicationPoolServer_ApplicationPoolTest.o' => %w(ApplicationPoolServer_ApplicationPoolTest.cpp
208
226
  ApplicationPoolTest.cpp
209
227
  ../ext/apache2/ApplicationPoolServer.h
210
228
  ../ext/apache2/ApplicationPool.h
211
229
  ../ext/apache2/SpawnManager.h
230
+ ../ext/apache2/PoolOptions.h
212
231
  ../ext/apache2/Application.h
213
- ../ext/apache2/MessageChannel.h
214
- ../ext/apache2/System.h),
232
+ ../ext/apache2/MessageChannel.h),
215
233
  'StandardApplicationPoolTest.o' => %w(StandardApplicationPoolTest.cpp
216
234
  ApplicationPoolTest.cpp
217
235
  ../ext/apache2/ApplicationPool.h
218
236
  ../ext/apache2/StandardApplicationPool.h
219
237
  ../ext/apache2/SpawnManager.h
220
- ../ext/apache2/Application.h),
238
+ ../ext/apache2/PoolOptions.h
239
+ ../ext/apache2/Application.h
240
+ ../ext/apache2/FileChecker.h),
241
+ 'PoolOptionsTest.o' => %w(PoolOptionsTest.cpp ../ext/apache2/PoolOptions.h),
242
+ 'FileCheckerTest.o' => %w(FileCheckerTest.cpp ../ext/apache2/FileChecker.h),
243
+ 'SystemTimeTest.o' => %w(SystemTimeTest.cpp
244
+ ../ext/apache2/SystemTime.h
245
+ ../ext/apache2/SystemTime.cpp),
246
+ 'CachedFileStatTest.o' => %w(CachedFileStatTest.cpp
247
+ ../ext/apache2/CachedFileStat.h
248
+ ../ext/apache2/CachedFileStat.cpp),
221
249
  'UtilsTest.o' => %w(UtilsTest.cpp ../ext/apache2/Utils.h)
222
250
  }
251
+
252
+ OXT_FLAGS = "-I../../ext -I../support"
253
+ OXT_OBJECTS = {
254
+ 'oxt_test_main.o' => %w(oxt_test_main.cpp),
255
+ 'backtrace_test.o' => %w(backtrace_test.cpp),
256
+ 'syscall_interruption_test.o' => %w(syscall_interruption_test.cpp)
257
+ }
223
258
  end
224
259
 
225
260
  subdir 'test' do
226
261
  desc "Run all unit tests (but not integration tests)"
227
- task :test => [:'test:apache2', :'test:ruby', :'test:integration']
262
+ task :test => [:'test:oxt', :'test:apache2', :'test:ruby', :'test:integration']
263
+
264
+ desc "Run unit tests for the OXT library"
265
+ task 'test:oxt' => 'oxt/oxt_test_main' do
266
+ sh "./oxt/oxt_test_main"
267
+ end
228
268
 
229
269
  desc "Run unit tests for the Apache 2 module"
230
270
  task 'test:apache2' => [
@@ -246,34 +286,67 @@ subdir 'test' do
246
286
 
247
287
  desc "Run unit tests for the Ruby libraries"
248
288
  task 'test:ruby' => [:native_support] do
249
- sh "spec -c -f s ruby/*.rb ruby/*/*.rb"
289
+ if PlatformInfo.rspec.nil?
290
+ abort "RSpec is not installed for Ruby interpreter '#{PlatformInfo::RUBY}'. Please install it."
291
+ else
292
+ ruby "#{PlatformInfo.rspec} -c -f s ruby/*.rb ruby/*/*.rb"
293
+ end
250
294
  end
251
295
 
252
296
  task 'test:rcov' => [:native_support] do
253
- rspec = PlatformInfo.find_command('spec')
254
- sh "rcov", "--exclude",
255
- "lib\/spec,\/spec$,_spec\.rb$,support\/,platform_info,integration_tests",
256
- rspec, "--", "-c", "-f", "s",
257
- *Dir["ruby/*.rb", "ruby/*/*.rb", "integration_tests.rb"]
297
+ if PlatformInfo.rspec.nil?
298
+ abort "RSpec is not installed for Ruby interpreter '#{PlatformInfo::RUBY}'. Please install it."
299
+ else
300
+ sh "rcov", "--exclude",
301
+ "lib\/spec,\/spec$,_spec\.rb$,support\/,platform_info,integration_tests",
302
+ PlatformInfo.rspec, "--", "-c", "-f", "s",
303
+ *Dir["ruby/*.rb", "ruby/*/*.rb", "integration_tests.rb"]
304
+ end
258
305
  end
259
306
 
260
307
  desc "Run integration tests"
261
308
  task 'test:integration' => [:apache2, :native_support] do
262
- sh "spec -c -f s integration_tests.rb"
309
+ if PlatformInfo.rspec.nil?
310
+ abort "RSpec is not installed for Ruby interpreter '#{PlatformInfo::RUBY}'. Please install it."
311
+ else
312
+ ruby "#{PlatformInfo.rspec} -c -f s integration_tests.rb"
313
+ end
314
+ end
315
+
316
+ file 'oxt/oxt_test_main' => TEST::OXT_OBJECTS.keys.map{ |x| "oxt/#{x}" } +
317
+ ['../ext/libboost_oxt.a'] do
318
+ Dir.chdir('oxt') do
319
+ objects = TEST::OXT_OBJECTS.keys.join(' ')
320
+ create_executable "oxt_test_main", objects,
321
+ "../../ext/libboost_oxt.a " <<
322
+ "#{PlatformInfo.portability_ldflags} #{EXTRA_LDFLAGS}"
323
+ end
324
+ end
325
+
326
+ TEST::OXT_OBJECTS.each_pair do |target, sources|
327
+ file "oxt/#{target}" => sources.map{ |x| "oxt/#{x}" } do
328
+ Dir.chdir('oxt') do
329
+ puts "### In test/oxt:"
330
+ compile_cxx sources[0], "#{TEST::OXT_FLAGS} #{TEST::CXXFLAGS}"
331
+ end
332
+ end
263
333
  end
264
334
 
265
335
  file 'Apache2ModuleTests' => TEST::AP2_OBJECTS.keys +
266
- ['../ext/boost/src/libboost_thread.a',
267
- '../ext/apache2/System.o',
336
+ ['../ext/libboost_oxt.a',
268
337
  '../ext/apache2/Utils.o',
269
- '../ext/apache2/Logging.o'] do
338
+ '../ext/apache2/Logging.o',
339
+ '../ext/apache2/SystemTime.o',
340
+ '../ext/apache2/CachedFileStat.o'] do
270
341
  objects = TEST::AP2_OBJECTS.keys.join(' ') <<
271
- " ../ext/apache2/System.o" <<
272
342
  " ../ext/apache2/Utils.o" <<
273
- " ../ext/apache2/Logging.o"
343
+ " ../ext/apache2/Logging.o" <<
344
+ " ../ext/apache2/SystemTime.o " <<
345
+ " ../ext/apache2/CachedFileStat.o"
274
346
  create_executable "Apache2ModuleTests", objects,
275
- "#{LDFLAGS} #{APR_LIBS} #{MULTI_ARCH_FLAGS} " <<
276
- "../ext/boost/src/libboost_thread.a -lpthread"
347
+ "#{PlatformInfo.apache2_module_ldflags} #{EXTRA_LDFLAGS} " <<
348
+ "../ext/libboost_oxt.a " <<
349
+ "-lpthread"
277
350
  end
278
351
 
279
352
  TEST::AP2_OBJECTS.each_pair do |target, sources|
@@ -295,41 +368,7 @@ subdir 'test' do
295
368
  end
296
369
 
297
370
  task :clean do
298
- sh "rm -f Apache2ModuleTests *.o"
299
- end
300
- end
301
-
302
-
303
- ##### Benchmarks
304
-
305
- subdir 'benchmark' do
306
- file 'DummyRequestHandler' => ['DummyRequestHandler.cpp',
307
- '../ext/apache2/MessageChannel.h',
308
- '../ext/apache2/System.o',
309
- '../ext/boost/src/libboost_thread.a'] do
310
- create_executable "DummyRequestHandler", "DummyRequestHandler.cpp",
311
- "-I../ext -I../ext/apache2 #{CXXFLAGS} #{LDFLAGS} " <<
312
- "../ext/apache2/System.o " <<
313
- "../ext/boost/src/libboost_thread.a -lpthread"
314
- end
315
-
316
- file 'ApplicationPool' => ['ApplicationPool.cpp',
317
- '../ext/apache2/StandardApplicationPool.h',
318
- '../ext/apache2/ApplicationPoolServerExecutable',
319
- '../ext/apache2/System.o',
320
- '../ext/apache2/Logging.o',
321
- '../ext/apache2/Utils.o',
322
- '../ext/boost/src/libboost_thread.a',
323
- :native_support] do
324
- create_executable "ApplicationPool", "ApplicationPool.cpp",
325
- "-I../ext -I../ext/apache2 #{CXXFLAGS} #{LDFLAGS} " <<
326
- "../ext/apache2/System.o ../ext/apache2/Logging.o " <<
327
- "../ext/apache2/Utils.o " <<
328
- "../ext/boost/src/libboost_thread.a -lpthread"
329
- end
330
-
331
- task :clean do
332
- sh "rm -f DummyRequestHandler ApplicationPool"
371
+ sh "rm -f oxt/oxt_test_main oxt/*.o Apache2ModuleTests *.o"
333
372
  end
334
373
  end
335
374
 
@@ -337,16 +376,29 @@ end
337
376
  ##### Documentation
338
377
 
339
378
  subdir 'doc' do
340
- ASCIIDOC = "asciidoc -a toc -a numbered -a toclevels=3 -a icons"
379
+ ASCIIDOC = 'asciidoc'
380
+ ASCIIDOC_FLAGS = "-a toc -a numbered -a toclevels=3 -a icons"
341
381
  ASCII_DOCS = ['Security of user switching support', 'Users guide',
342
382
  'Architectural overview']
343
383
 
384
+ DOXYGEN = 'doxygen'
385
+
344
386
  desc "Generate all documentation"
345
- task :doc => [:rdoc, :doxygen] + ASCII_DOCS.map{ |x| "#{x}.html" }
387
+ task :doc => [:rdoc]
346
388
 
389
+ if PlatformInfo.find_command(DOXYGEN)
390
+ task :doc => :doxygen
391
+ end
392
+
393
+ task :doc => ASCII_DOCS.map{ |x| "#{x}.html" }
394
+
347
395
  ASCII_DOCS.each do |name|
348
396
  file "#{name}.html" => ["#{name}.txt"] do
349
- sh "#{ASCIIDOC} '#{name}.txt'"
397
+ if PlatformInfo.find_command(ASCIIDOC)
398
+ sh "#{ASCIIDOC} #{ASCIIDOC_FLAGS} '#{name}.txt'"
399
+ else
400
+ sh "echo 'asciidoc required to build docs' > '#{name}.html'"
401
+ end
350
402
  end
351
403
  end
352
404
 
@@ -375,7 +427,10 @@ Rake::RDocTask.new(:clobber_rdoc => "rdoc:clobber", :rerdoc => "rdoc:force") do
375
427
  rd.main = "README"
376
428
  rd.rdoc_dir = "doc/rdoc"
377
429
  rd.rdoc_files.include("README", "DEVELOPERS.TXT",
378
- "lib/passenger/*.rb", "lib/rake/extensions.rb", "ext/passenger/*.c")
430
+ "lib/phusion_passenger/*.rb",
431
+ "lib/phusion_passenger/*/*.rb",
432
+ "lib/rake/extensions.rb",
433
+ "ext/phusion_passenger/*.c")
379
434
  rd.template = "./doc/template/horo"
380
435
  rd.title = "Passenger Ruby API"
381
436
  rd.options << "-S" << "-N" << "-p" << "-H"
@@ -394,20 +449,20 @@ spec = Gem::Specification.new do |s|
394
449
  s.author = "Phusion - http://www.phusion.nl/"
395
450
  s.email = "info@phusion.nl"
396
451
  s.requirements << "fastthread" << "Apache 2 with development headers"
397
- s.require_path = ["lib", "ext"]
452
+ s.require_paths = ["lib", "ext"]
398
453
  s.add_dependency 'rake', '>= 0.8.1'
399
454
  s.add_dependency 'fastthread', '>= 1.0.1'
400
- s.add_dependency 'rack', '>= 0.1.0'
401
- s.extensions << 'ext/passenger/extconf.rb'
455
+ s.extensions << 'ext/phusion_passenger/extconf.rb'
402
456
  s.files = FileList[
403
457
  'Rakefile',
404
458
  'README',
405
459
  'DEVELOPERS.TXT',
406
460
  'LICENSE',
407
461
  'INSTALL',
462
+ 'NEWS',
408
463
  'lib/**/*.rb',
409
464
  'lib/**/*.py',
410
- 'lib/passenger/templates/*',
465
+ 'lib/phusion_passenger/templates/*',
411
466
  'bin/*',
412
467
  'doc/*',
413
468
 
@@ -427,11 +482,16 @@ spec = Gem::Specification.new do |s|
427
482
  'ext/apache2/*.{cpp,h,c,TXT}',
428
483
  'ext/boost/*.{hpp,TXT}',
429
484
  'ext/boost/**/*.{hpp,cpp,pl,inl,ipp}',
430
- 'ext/passenger/*.{c,rb}',
485
+ 'ext/oxt/*.hpp',
486
+ 'ext/oxt/*.cpp',
487
+ 'ext/oxt/detail/*.hpp',
488
+ 'ext/phusion_passenger/*.{c,rb}',
431
489
  'benchmark/*.{cpp,rb}',
432
490
  'misc/*',
491
+ 'vendor/**/*',
433
492
  'test/*.{rb,cpp,example}',
434
493
  'test/support/*',
494
+ 'test/oxt/*.cpp',
435
495
  'test/ruby/*',
436
496
  'test/ruby/*/*',
437
497
  'test/stub/*',
@@ -488,20 +548,20 @@ task :fakeroot => [:apache2, :native_support, :doc] do
488
548
  libdir = "#{fakeroot}/usr/lib/ruby/#{CONFIG['ruby_version']}"
489
549
  extdir = "#{libdir}/#{CONFIG['arch']}"
490
550
  bindir = "#{fakeroot}/usr/bin"
491
- docdir = "#{fakeroot}/usr/share/doc/passenger"
492
- libexecdir = "#{fakeroot}/usr/lib/passenger"
551
+ docdir = "#{fakeroot}/usr/share/doc/phusion_passenger"
552
+ libexecdir = "#{fakeroot}/usr/lib/phusion_passenger"
493
553
 
494
554
  sh "rm -rf #{fakeroot}"
495
555
  sh "mkdir -p #{fakeroot}"
496
556
 
497
557
  sh "mkdir -p #{libdir}"
498
- sh "cp -R lib/passenger #{libdir}/"
558
+ sh "cp -R lib/phusion_passenger #{libdir}/"
499
559
 
500
560
  sh "mkdir -p #{fakeroot}/etc"
501
561
  sh "echo -n '#{PACKAGE_VERSION}' > #{fakeroot}/etc/passenger_version.txt"
502
562
 
503
- sh "mkdir -p #{extdir}/passenger"
504
- sh "cp -R ext/passenger/*.#{LIBEXT} #{extdir}/passenger/"
563
+ sh "mkdir -p #{extdir}/phusion_passenger"
564
+ sh "cp -R ext/phusion_passenger/*.#{LIBEXT} #{extdir}/phusion_passenger/"
505
565
 
506
566
  sh "mkdir -p #{bindir}"
507
567
  sh "cp bin/* #{bindir}/"
@@ -526,9 +586,14 @@ task 'package:debian' => :fakeroot do
526
586
  end
527
587
 
528
588
  fakeroot = "pkg/fakeroot"
529
- arch = `uname -m`.strip
530
- if arch =~ /^i.86$/
531
- arch = "i386"
589
+ raw_arch = `uname -m`.strip
590
+ arch = case raw_arch
591
+ when /^i.86$/
592
+ "i386"
593
+ when /^x86_64/
594
+ "amd64"
595
+ else
596
+ raw_arch
532
597
  end
533
598
 
534
599
  sh "sed -i 's/Version: .*/Version: #{PACKAGE_VERSION}/' debian/control"
@@ -556,10 +621,11 @@ task :sloccount do
556
621
  end
557
622
  sh "sloccount", *Dir[
558
623
  "#{tmpdir}/*",
559
- "lib/passenger/*",
624
+ "lib/phusion_passenger/*",
560
625
  "lib/rake/{cplusplus,extensions}.rb",
561
626
  "ext/apache2",
562
- "ext/passenger/*.c",
627
+ "ext/oxt",
628
+ "ext/phusion_passenger/*.c",
563
629
  "test/*.{cpp,rb}",
564
630
  "test/support/*.rb",
565
631
  "test/stub/*.rb",