passenger 1.0.1

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 (1960) hide show
  1. data/DEVELOPERS.TXT +52 -0
  2. data/INSTALL +2 -0
  3. data/LICENSE +352 -0
  4. data/README +19 -0
  5. data/Rakefile +435 -0
  6. data/benchmark/DummyRequestHandler.cpp +101 -0
  7. data/benchmark/accept_vs_socketpair_vs_named_pipes.rb +126 -0
  8. data/benchmark/dispatcher.rb +46 -0
  9. data/benchmark/overhead_of_password_checking.rb +81 -0
  10. data/benchmark/socket_connections_vs_persistent_pipe.rb +99 -0
  11. data/benchmark/unix_sockets_vs_pipes.rb +83 -0
  12. data/bin/passenger-install-apache2-module +274 -0
  13. data/bin/passenger-spawn-server +38 -0
  14. data/doc/ApplicationPool algorithm.txt +290 -0
  15. data/doc/Architectural overview.html +740 -0
  16. data/doc/Architectural overview.txt +339 -0
  17. data/doc/Doxyfile +241 -0
  18. data/doc/Security of user switching support.html +605 -0
  19. data/doc/Security of user switching support.txt +197 -0
  20. data/doc/Users guide.html +1356 -0
  21. data/doc/Users guide.txt +707 -0
  22. data/doc/cxxapi/ApplicationPoolClientServer_8h-source.html +673 -0
  23. data/doc/cxxapi/ApplicationPool_8h-source.html +189 -0
  24. data/doc/cxxapi/Application_8h-source.html +402 -0
  25. data/doc/cxxapi/Configuration_8h-source.html +145 -0
  26. data/doc/cxxapi/DummySpawnManager_8h-source.html +121 -0
  27. data/doc/cxxapi/Exceptions_8h-source.html +188 -0
  28. data/doc/cxxapi/Hooks_8h-source.html +58 -0
  29. data/doc/cxxapi/Logging_8h-source.html +103 -0
  30. data/doc/cxxapi/MessageChannel_8h-source.html +483 -0
  31. data/doc/cxxapi/SpawnManager_8h-source.html +552 -0
  32. data/doc/cxxapi/StandardApplicationPool_8h-source.html +554 -0
  33. data/doc/cxxapi/Utils_8h-source.html +176 -0
  34. data/doc/cxxapi/annotated.html +43 -0
  35. data/doc/cxxapi/classPassenger_1_1Application-members.html +33 -0
  36. data/doc/cxxapi/classPassenger_1_1Application.html +224 -0
  37. data/doc/cxxapi/classPassenger_1_1ApplicationPool-members.html +34 -0
  38. data/doc/cxxapi/classPassenger_1_1ApplicationPool.html +272 -0
  39. data/doc/cxxapi/classPassenger_1_1ApplicationPoolServer-members.html +31 -0
  40. data/doc/cxxapi/classPassenger_1_1ApplicationPoolServer.html +216 -0
  41. data/doc/cxxapi/classPassenger_1_1ApplicationPool__inherit__graph.map +1 -0
  42. data/doc/cxxapi/classPassenger_1_1ApplicationPool__inherit__graph.md5 +1 -0
  43. data/doc/cxxapi/classPassenger_1_1ApplicationPool__inherit__graph.png +0 -0
  44. data/doc/cxxapi/classPassenger_1_1Application_1_1Session-members.html +36 -0
  45. data/doc/cxxapi/classPassenger_1_1Application_1_1Session.html +294 -0
  46. data/doc/cxxapi/classPassenger_1_1DummySpawnManager-members.html +28 -0
  47. data/doc/cxxapi/classPassenger_1_1DummySpawnManager.html +46 -0
  48. data/doc/cxxapi/classPassenger_1_1FileNotFoundException-members.html +28 -0
  49. data/doc/cxxapi/classPassenger_1_1FileNotFoundException.html +46 -0
  50. data/doc/cxxapi/classPassenger_1_1FileNotFoundException__inherit__graph.map +1 -0
  51. data/doc/cxxapi/classPassenger_1_1FileNotFoundException__inherit__graph.md5 +1 -0
  52. data/doc/cxxapi/classPassenger_1_1FileNotFoundException__inherit__graph.png +0 -0
  53. data/doc/cxxapi/classPassenger_1_1IOException-members.html +28 -0
  54. data/doc/cxxapi/classPassenger_1_1IOException.html +49 -0
  55. data/doc/cxxapi/classPassenger_1_1IOException__inherit__graph.map +1 -0
  56. data/doc/cxxapi/classPassenger_1_1IOException__inherit__graph.md5 +1 -0
  57. data/doc/cxxapi/classPassenger_1_1IOException__inherit__graph.png +0 -0
  58. data/doc/cxxapi/classPassenger_1_1MessageChannel-members.html +42 -0
  59. data/doc/cxxapi/classPassenger_1_1MessageChannel.html +568 -0
  60. data/doc/cxxapi/classPassenger_1_1SpawnException-members.html +30 -0
  61. data/doc/cxxapi/classPassenger_1_1SpawnException.html +74 -0
  62. data/doc/cxxapi/classPassenger_1_1SpawnManager-members.html +32 -0
  63. data/doc/cxxapi/classPassenger_1_1SpawnManager.html +234 -0
  64. data/doc/cxxapi/classPassenger_1_1StandardApplicationPool-members.html +35 -0
  65. data/doc/cxxapi/classPassenger_1_1StandardApplicationPool.html +320 -0
  66. data/doc/cxxapi/classPassenger_1_1StandardApplicationPool__inherit__graph.map +1 -0
  67. data/doc/cxxapi/classPassenger_1_1StandardApplicationPool__inherit__graph.md5 +1 -0
  68. data/doc/cxxapi/classPassenger_1_1StandardApplicationPool__inherit__graph.png +0 -0
  69. data/doc/cxxapi/classPassenger_1_1SystemException-members.html +32 -0
  70. data/doc/cxxapi/classPassenger_1_1SystemException.html +144 -0
  71. data/doc/cxxapi/definitions_8h-source.html +25 -0
  72. data/doc/cxxapi/doxygen.css +358 -0
  73. data/doc/cxxapi/doxygen.png +0 -0
  74. data/doc/cxxapi/files.html +35 -0
  75. data/doc/cxxapi/ftv2blank.png +0 -0
  76. data/doc/cxxapi/ftv2doc.png +0 -0
  77. data/doc/cxxapi/ftv2folderclosed.png +0 -0
  78. data/doc/cxxapi/ftv2folderopen.png +0 -0
  79. data/doc/cxxapi/ftv2lastnode.png +0 -0
  80. data/doc/cxxapi/ftv2link.png +0 -0
  81. data/doc/cxxapi/ftv2mlastnode.png +0 -0
  82. data/doc/cxxapi/ftv2mnode.png +0 -0
  83. data/doc/cxxapi/ftv2node.png +0 -0
  84. data/doc/cxxapi/ftv2plastnode.png +0 -0
  85. data/doc/cxxapi/ftv2pnode.png +0 -0
  86. data/doc/cxxapi/ftv2vertline.png +0 -0
  87. data/doc/cxxapi/functions.html +160 -0
  88. data/doc/cxxapi/functions_func.html +158 -0
  89. data/doc/cxxapi/functions_type.html +40 -0
  90. data/doc/cxxapi/graph_legend.dot +22 -0
  91. data/doc/cxxapi/graph_legend.html +82 -0
  92. data/doc/cxxapi/graph_legend.png +0 -0
  93. data/doc/cxxapi/group__Configuration.html +231 -0
  94. data/doc/cxxapi/group__Configuration.png +0 -0
  95. data/doc/cxxapi/group__Core.html +39 -0
  96. data/doc/cxxapi/group__Core.png +0 -0
  97. data/doc/cxxapi/group__Exceptions.html +32 -0
  98. data/doc/cxxapi/group__Hooks.html +41 -0
  99. data/doc/cxxapi/group__Hooks.png +0 -0
  100. data/doc/cxxapi/group__Support.html +258 -0
  101. data/doc/cxxapi/hierarchy.html +51 -0
  102. data/doc/cxxapi/index.html +11 -0
  103. data/doc/cxxapi/inherit__graph__0.map +1 -0
  104. data/doc/cxxapi/inherit__graph__0.md5 +1 -0
  105. data/doc/cxxapi/inherit__graph__0.png +0 -0
  106. data/doc/cxxapi/inherit__graph__1.map +1 -0
  107. data/doc/cxxapi/inherit__graph__1.md5 +1 -0
  108. data/doc/cxxapi/inherit__graph__1.png +0 -0
  109. data/doc/cxxapi/inherit__graph__2.map +1 -0
  110. data/doc/cxxapi/inherit__graph__2.md5 +1 -0
  111. data/doc/cxxapi/inherit__graph__2.png +0 -0
  112. data/doc/cxxapi/inherit__graph__3.map +1 -0
  113. data/doc/cxxapi/inherit__graph__3.md5 +1 -0
  114. data/doc/cxxapi/inherit__graph__3.png +0 -0
  115. data/doc/cxxapi/inherit__graph__4.map +2 -0
  116. data/doc/cxxapi/inherit__graph__4.md5 +1 -0
  117. data/doc/cxxapi/inherit__graph__4.png +0 -0
  118. data/doc/cxxapi/inherit__graph__5.map +1 -0
  119. data/doc/cxxapi/inherit__graph__5.md5 +1 -0
  120. data/doc/cxxapi/inherit__graph__5.png +0 -0
  121. data/doc/cxxapi/inherit__graph__6.map +1 -0
  122. data/doc/cxxapi/inherit__graph__6.md5 +1 -0
  123. data/doc/cxxapi/inherit__graph__6.png +0 -0
  124. data/doc/cxxapi/inherit__graph__7.map +5 -0
  125. data/doc/cxxapi/inherit__graph__7.md5 +1 -0
  126. data/doc/cxxapi/inherit__graph__7.png +0 -0
  127. data/doc/cxxapi/inherit__graph__8.map +1 -0
  128. data/doc/cxxapi/inherit__graph__8.md5 +1 -0
  129. data/doc/cxxapi/inherit__graph__8.png +0 -0
  130. data/doc/cxxapi/inherit__graph__9.map +1 -0
  131. data/doc/cxxapi/inherit__graph__9.md5 +1 -0
  132. data/doc/cxxapi/inherit__graph__9.png +0 -0
  133. data/doc/cxxapi/inherits.html +61 -0
  134. data/doc/cxxapi/main.html +22 -0
  135. data/doc/cxxapi/modules.html +29 -0
  136. data/doc/cxxapi/structPassenger_1_1AnythingToString-members.html +28 -0
  137. data/doc/cxxapi/structPassenger_1_1AnythingToString.html +44 -0
  138. data/doc/cxxapi/structPassenger_1_1AnythingToString_3_01vector_3_01string_01_4_01_4-members.html +28 -0
  139. data/doc/cxxapi/structPassenger_1_1AnythingToString_3_01vector_3_01string_01_4_01_4.html +44 -0
  140. data/doc/cxxapi/tab_b.gif +0 -0
  141. data/doc/cxxapi/tab_l.gif +0 -0
  142. data/doc/cxxapi/tab_r.gif +0 -0
  143. data/doc/cxxapi/tabs.css +102 -0
  144. data/doc/cxxapi/tree.html +138 -0
  145. data/doc/definitions.h +5 -0
  146. data/doc/images/by_sa.png +0 -0
  147. data/doc/images/icons/README +5 -0
  148. data/doc/images/icons/callouts/1.png +0 -0
  149. data/doc/images/icons/callouts/10.png +0 -0
  150. data/doc/images/icons/callouts/11.png +0 -0
  151. data/doc/images/icons/callouts/12.png +0 -0
  152. data/doc/images/icons/callouts/13.png +0 -0
  153. data/doc/images/icons/callouts/14.png +0 -0
  154. data/doc/images/icons/callouts/15.png +0 -0
  155. data/doc/images/icons/callouts/2.png +0 -0
  156. data/doc/images/icons/callouts/3.png +0 -0
  157. data/doc/images/icons/callouts/4.png +0 -0
  158. data/doc/images/icons/callouts/5.png +0 -0
  159. data/doc/images/icons/callouts/6.png +0 -0
  160. data/doc/images/icons/callouts/7.png +0 -0
  161. data/doc/images/icons/callouts/8.png +0 -0
  162. data/doc/images/icons/callouts/9.png +0 -0
  163. data/doc/images/icons/caution.png +0 -0
  164. data/doc/images/icons/example.png +0 -0
  165. data/doc/images/icons/home.png +0 -0
  166. data/doc/images/icons/important.png +0 -0
  167. data/doc/images/icons/next.png +0 -0
  168. data/doc/images/icons/note.png +0 -0
  169. data/doc/images/icons/prev.png +0 -0
  170. data/doc/images/icons/tip.png +0 -0
  171. data/doc/images/icons/up.png +0 -0
  172. data/doc/images/icons/warning.png +0 -0
  173. data/doc/images/passenger_architecture.png +0 -0
  174. data/doc/images/passenger_architecture.svg +401 -0
  175. data/doc/images/phusion_banner.png +0 -0
  176. data/doc/images/spawn_server_architecture.png +0 -0
  177. data/doc/images/spawn_server_architecture.svg +655 -0
  178. data/doc/images/typical_isolated_web_application.png +0 -0
  179. data/doc/images/typical_isolated_web_application.svg +213 -0
  180. data/doc/rdoc/classes/ConditionVariable.html +158 -0
  181. data/doc/rdoc/classes/Exception.html +120 -0
  182. data/doc/rdoc/classes/GC.html +113 -0
  183. data/doc/rdoc/classes/IO.html +150 -0
  184. data/doc/rdoc/classes/Passenger.html +117 -0
  185. data/doc/rdoc/classes/Passenger/AbstractServer.html +609 -0
  186. data/doc/rdoc/classes/Passenger/AbstractServer/ServerAlreadyStarted.html +97 -0
  187. data/doc/rdoc/classes/Passenger/AbstractServer/ServerError.html +96 -0
  188. data/doc/rdoc/classes/Passenger/AbstractServer/ServerNotStarted.html +97 -0
  189. data/doc/rdoc/classes/Passenger/AbstractServer/UnknownMessage.html +96 -0
  190. data/doc/rdoc/classes/Passenger/AppInitError.html +106 -0
  191. data/doc/rdoc/classes/Passenger/Application.html +297 -0
  192. data/doc/rdoc/classes/Passenger/ApplicationSpawner.html +334 -0
  193. data/doc/rdoc/classes/Passenger/ApplicationSpawner/Error.html +98 -0
  194. data/doc/rdoc/classes/Passenger/CGIFixed.html +200 -0
  195. data/doc/rdoc/classes/Passenger/ConsoleTextTemplate.html +172 -0
  196. data/doc/rdoc/classes/Passenger/FrameworkInitError.html +144 -0
  197. data/doc/rdoc/classes/Passenger/FrameworkSpawner.html +429 -0
  198. data/doc/rdoc/classes/Passenger/FrameworkSpawner/Error.html +98 -0
  199. data/doc/rdoc/classes/Passenger/HTMLTemplate.html +175 -0
  200. data/doc/rdoc/classes/Passenger/InitializationError.html +141 -0
  201. data/doc/rdoc/classes/Passenger/MessageChannel.html +488 -0
  202. data/doc/rdoc/classes/Passenger/NativeSupport.html +320 -0
  203. data/doc/rdoc/classes/Passenger/RequestHandler.html +415 -0
  204. data/doc/rdoc/classes/Passenger/SpawnManager.html +373 -0
  205. data/doc/rdoc/classes/Passenger/UnknownError.html +125 -0
  206. data/doc/rdoc/classes/Passenger/Utils.html +352 -0
  207. data/doc/rdoc/classes/Passenger/VersionNotFound.html +140 -0
  208. data/doc/rdoc/classes/PlatformInfo.html +279 -0
  209. data/doc/rdoc/classes/RakeExtensions.html +197 -0
  210. data/doc/rdoc/created.rid +1 -0
  211. data/doc/rdoc/files/DEVELOPERS_TXT.html +178 -0
  212. data/doc/rdoc/files/README.html +120 -0
  213. data/doc/rdoc/files/ext/passenger/native_support_c.html +92 -0
  214. data/doc/rdoc/files/lib/passenger/abstract_server_rb.html +121 -0
  215. data/doc/rdoc/files/lib/passenger/application_rb.html +119 -0
  216. data/doc/rdoc/files/lib/passenger/application_spawner_rb.html +128 -0
  217. data/doc/rdoc/files/lib/passenger/cgi_fixed_rb.html +127 -0
  218. data/doc/rdoc/files/lib/passenger/console_text_template_rb.html +118 -0
  219. data/doc/rdoc/files/lib/passenger/dependencies_rb.html +124 -0
  220. data/doc/rdoc/files/lib/passenger/framework_spawner_rb.html +135 -0
  221. data/doc/rdoc/files/lib/passenger/html_template_rb.html +118 -0
  222. data/doc/rdoc/files/lib/passenger/message_channel_rb.html +118 -0
  223. data/doc/rdoc/files/lib/passenger/platform_info_rb.html +118 -0
  224. data/doc/rdoc/files/lib/passenger/request_handler_rb.html +122 -0
  225. data/doc/rdoc/files/lib/passenger/simple_benchmarking_rb.html +114 -0
  226. data/doc/rdoc/files/lib/passenger/spawn_manager_rb.html +124 -0
  227. data/doc/rdoc/files/lib/passenger/utils_rb.html +123 -0
  228. data/doc/rdoc/files/lib/rake/extensions_rb.html +122 -0
  229. data/doc/rdoc/fr_class_index.html +76 -0
  230. data/doc/rdoc/fr_file_index.html +64 -0
  231. data/doc/rdoc/fr_method_index.html +125 -0
  232. data/doc/rdoc/index.html +26 -0
  233. data/doc/rdoc/rdoc-style.css +187 -0
  234. data/doc/template/horo.rb +613 -0
  235. data/ext/apache2/Application.h +382 -0
  236. data/ext/apache2/ApplicationPool.h +169 -0
  237. data/ext/apache2/ApplicationPoolClientServer.h +653 -0
  238. data/ext/apache2/Configuration.cpp +294 -0
  239. data/ext/apache2/Configuration.h +125 -0
  240. data/ext/apache2/DummySpawnManager.h +101 -0
  241. data/ext/apache2/Exceptions.h +168 -0
  242. data/ext/apache2/Hooks.cpp +630 -0
  243. data/ext/apache2/Hooks.h +38 -0
  244. data/ext/apache2/LICENSE-CNRI.TXT +64 -0
  245. data/ext/apache2/Logging.cpp +48 -0
  246. data/ext/apache2/Logging.h +83 -0
  247. data/ext/apache2/MessageChannel.h +463 -0
  248. data/ext/apache2/SpawnManager.h +532 -0
  249. data/ext/apache2/StandardApplicationPool.h +534 -0
  250. data/ext/apache2/Utils.cpp +108 -0
  251. data/ext/apache2/Utils.h +156 -0
  252. data/ext/apache2/mod_passenger.c +31 -0
  253. data/ext/boost/LICENSE.TXT +23 -0
  254. data/ext/boost/VERSION.TXT +1 -0
  255. data/ext/boost/assert.hpp +37 -0
  256. data/ext/boost/bind.hpp +1651 -0
  257. data/ext/boost/bind/apply.hpp +74 -0
  258. data/ext/boost/bind/arg.hpp +36 -0
  259. data/ext/boost/bind/bind_cc.hpp +117 -0
  260. data/ext/boost/bind/bind_mf_cc.hpp +227 -0
  261. data/ext/boost/bind/bind_template.hpp +226 -0
  262. data/ext/boost/bind/make_adaptable.hpp +187 -0
  263. data/ext/boost/bind/mem_fn_cc.hpp +103 -0
  264. data/ext/boost/bind/mem_fn_template.hpp +1020 -0
  265. data/ext/boost/bind/mem_fn_vw.hpp +130 -0
  266. data/ext/boost/bind/placeholders.hpp +68 -0
  267. data/ext/boost/bind/protect.hpp +144 -0
  268. data/ext/boost/bind/storage.hpp +475 -0
  269. data/ext/boost/checked_delete.hpp +69 -0
  270. data/ext/boost/config.hpp +70 -0
  271. data/ext/boost/config/abi/borland_prefix.hpp +27 -0
  272. data/ext/boost/config/abi/borland_suffix.hpp +12 -0
  273. data/ext/boost/config/abi/msvc_prefix.hpp +8 -0
  274. data/ext/boost/config/abi/msvc_suffix.hpp +8 -0
  275. data/ext/boost/config/abi_prefix.hpp +20 -0
  276. data/ext/boost/config/abi_suffix.hpp +23 -0
  277. data/ext/boost/config/auto_link.hpp +363 -0
  278. data/ext/boost/config/compiler/borland.hpp +190 -0
  279. data/ext/boost/config/compiler/comeau.hpp +59 -0
  280. data/ext/boost/config/compiler/common_edg.hpp +62 -0
  281. data/ext/boost/config/compiler/compaq_cxx.hpp +19 -0
  282. data/ext/boost/config/compiler/digitalmars.hpp +49 -0
  283. data/ext/boost/config/compiler/gcc.hpp +105 -0
  284. data/ext/boost/config/compiler/gcc_xml.hpp +30 -0
  285. data/ext/boost/config/compiler/greenhills.hpp +28 -0
  286. data/ext/boost/config/compiler/hp_acc.hpp +72 -0
  287. data/ext/boost/config/compiler/intel.hpp +158 -0
  288. data/ext/boost/config/compiler/kai.hpp +35 -0
  289. data/ext/boost/config/compiler/metrowerks.hpp +104 -0
  290. data/ext/boost/config/compiler/mpw.hpp +51 -0
  291. data/ext/boost/config/compiler/sgi_mipspro.hpp +24 -0
  292. data/ext/boost/config/compiler/sunpro_cc.hpp +92 -0
  293. data/ext/boost/config/compiler/vacpp.hpp +57 -0
  294. data/ext/boost/config/compiler/visualc.hpp +178 -0
  295. data/ext/boost/config/no_tr1/complex.hpp +28 -0
  296. data/ext/boost/config/no_tr1/functional.hpp +28 -0
  297. data/ext/boost/config/no_tr1/memory.hpp +28 -0
  298. data/ext/boost/config/no_tr1/utility.hpp +28 -0
  299. data/ext/boost/config/platform/aix.hpp +33 -0
  300. data/ext/boost/config/platform/amigaos.hpp +15 -0
  301. data/ext/boost/config/platform/beos.hpp +26 -0
  302. data/ext/boost/config/platform/bsd.hpp +73 -0
  303. data/ext/boost/config/platform/cygwin.hpp +48 -0
  304. data/ext/boost/config/platform/hpux.hpp +85 -0
  305. data/ext/boost/config/platform/irix.hpp +31 -0
  306. data/ext/boost/config/platform/linux.hpp +98 -0
  307. data/ext/boost/config/platform/macos.hpp +78 -0
  308. data/ext/boost/config/platform/qnxnto.hpp +31 -0
  309. data/ext/boost/config/platform/solaris.hpp +21 -0
  310. data/ext/boost/config/platform/win32.hpp +58 -0
  311. data/ext/boost/config/posix_features.hpp +95 -0
  312. data/ext/boost/config/requires_threads.hpp +92 -0
  313. data/ext/boost/config/select_compiler_config.hpp +87 -0
  314. data/ext/boost/config/select_platform_config.hpp +90 -0
  315. data/ext/boost/config/select_stdlib_config.hpp +68 -0
  316. data/ext/boost/config/stdlib/dinkumware.hpp +106 -0
  317. data/ext/boost/config/stdlib/libcomo.hpp +46 -0
  318. data/ext/boost/config/stdlib/libstdcpp3.hpp +73 -0
  319. data/ext/boost/config/stdlib/modena.hpp +30 -0
  320. data/ext/boost/config/stdlib/msl.hpp +59 -0
  321. data/ext/boost/config/stdlib/roguewave.hpp +127 -0
  322. data/ext/boost/config/stdlib/sgi.hpp +111 -0
  323. data/ext/boost/config/stdlib/stlport.hpp +201 -0
  324. data/ext/boost/config/stdlib/vacpp.hpp +18 -0
  325. data/ext/boost/config/suffix.hpp +569 -0
  326. data/ext/boost/config/user.hpp +124 -0
  327. data/ext/boost/cstdint.hpp +446 -0
  328. data/ext/boost/detail/bad_weak_ptr.hpp +59 -0
  329. data/ext/boost/detail/reference_content.hpp +141 -0
  330. data/ext/boost/detail/shared_count.hpp +376 -0
  331. data/ext/boost/detail/sp_counted_base.hpp +69 -0
  332. data/ext/boost/detail/sp_counted_base_cw_ppc.hpp +170 -0
  333. data/ext/boost/detail/sp_counted_base_cw_x86.hpp +158 -0
  334. data/ext/boost/detail/sp_counted_base_gcc_ia64.hpp +157 -0
  335. data/ext/boost/detail/sp_counted_base_gcc_ppc.hpp +181 -0
  336. data/ext/boost/detail/sp_counted_base_gcc_x86.hpp +173 -0
  337. data/ext/boost/detail/sp_counted_base_nt.hpp +107 -0
  338. data/ext/boost/detail/sp_counted_base_pt.hpp +135 -0
  339. data/ext/boost/detail/sp_counted_base_w32.hpp +130 -0
  340. data/ext/boost/detail/sp_counted_impl.hpp +232 -0
  341. data/ext/boost/detail/workaround.hpp +74 -0
  342. data/ext/boost/format.hpp +59 -0
  343. data/ext/boost/format/alt_sstream.hpp +176 -0
  344. data/ext/boost/format/alt_sstream_impl.hpp +296 -0
  345. data/ext/boost/format/detail/compat_workarounds.hpp +86 -0
  346. data/ext/boost/format/detail/config_macros.hpp +97 -0
  347. data/ext/boost/format/detail/msvc_disambiguater.hpp +56 -0
  348. data/ext/boost/format/detail/unset_macros.hpp +34 -0
  349. data/ext/boost/format/detail/workarounds_gcc-2_95.hpp +162 -0
  350. data/ext/boost/format/detail/workarounds_stlport.hpp +42 -0
  351. data/ext/boost/format/exceptions.hpp +103 -0
  352. data/ext/boost/format/feed_args.hpp +267 -0
  353. data/ext/boost/format/format_class.hpp +143 -0
  354. data/ext/boost/format/format_fwd.hpp +49 -0
  355. data/ext/boost/format/format_implementation.hpp +277 -0
  356. data/ext/boost/format/free_funcs.hpp +70 -0
  357. data/ext/boost/format/group.hpp +676 -0
  358. data/ext/boost/format/internals.hpp +199 -0
  359. data/ext/boost/format/internals_fwd.hpp +60 -0
  360. data/ext/boost/format/parsing.hpp +491 -0
  361. data/ext/boost/function.hpp +64 -0
  362. data/ext/boost/function/detail/function_iterate.hpp +16 -0
  363. data/ext/boost/function/detail/gen_maybe_include.pl +37 -0
  364. data/ext/boost/function/detail/maybe_include.hpp +267 -0
  365. data/ext/boost/function/detail/prologue.hpp +24 -0
  366. data/ext/boost/function/function0.hpp +12 -0
  367. data/ext/boost/function/function1.hpp +12 -0
  368. data/ext/boost/function/function10.hpp +12 -0
  369. data/ext/boost/function/function2.hpp +12 -0
  370. data/ext/boost/function/function3.hpp +12 -0
  371. data/ext/boost/function/function4.hpp +12 -0
  372. data/ext/boost/function/function5.hpp +12 -0
  373. data/ext/boost/function/function6.hpp +12 -0
  374. data/ext/boost/function/function7.hpp +12 -0
  375. data/ext/boost/function/function8.hpp +12 -0
  376. data/ext/boost/function/function9.hpp +12 -0
  377. data/ext/boost/function/function_base.hpp +736 -0
  378. data/ext/boost/function/function_template.hpp +837 -0
  379. data/ext/boost/function/gen_function_N.pl +26 -0
  380. data/ext/boost/function_equal.hpp +28 -0
  381. data/ext/boost/get_pointer.hpp +29 -0
  382. data/ext/boost/limits.hpp +144 -0
  383. data/ext/boost/mem_fn.hpp +389 -0
  384. data/ext/boost/mpl/O1_size.hpp +40 -0
  385. data/ext/boost/mpl/O1_size_fwd.hpp +24 -0
  386. data/ext/boost/mpl/accumulate.hpp +39 -0
  387. data/ext/boost/mpl/advance.hpp +76 -0
  388. data/ext/boost/mpl/advance_fwd.hpp +28 -0
  389. data/ext/boost/mpl/alias.hpp +21 -0
  390. data/ext/boost/mpl/always.hpp +39 -0
  391. data/ext/boost/mpl/and.hpp +56 -0
  392. data/ext/boost/mpl/apply.hpp +225 -0
  393. data/ext/boost/mpl/apply_fwd.hpp +107 -0
  394. data/ext/boost/mpl/apply_wrap.hpp +200 -0
  395. data/ext/boost/mpl/arg.hpp +131 -0
  396. data/ext/boost/mpl/arg_fwd.hpp +28 -0
  397. data/ext/boost/mpl/arithmetic.hpp +25 -0
  398. data/ext/boost/mpl/as_sequence.hpp +38 -0
  399. data/ext/boost/mpl/assert.hpp +361 -0
  400. data/ext/boost/mpl/at.hpp +52 -0
  401. data/ext/boost/mpl/at_fwd.hpp +24 -0
  402. data/ext/boost/mpl/aux_/O1_size_impl.hpp +87 -0
  403. data/ext/boost/mpl/aux_/adl_barrier.hpp +48 -0
  404. data/ext/boost/mpl/aux_/advance_backward.hpp +124 -0
  405. data/ext/boost/mpl/aux_/advance_forward.hpp +123 -0
  406. data/ext/boost/mpl/aux_/apply_1st.hpp +35 -0
  407. data/ext/boost/mpl/aux_/arg_typedef.hpp +31 -0
  408. data/ext/boost/mpl/aux_/arithmetic_op.hpp +92 -0
  409. data/ext/boost/mpl/aux_/arity.hpp +39 -0
  410. data/ext/boost/mpl/aux_/arity_spec.hpp +67 -0
  411. data/ext/boost/mpl/aux_/at_impl.hpp +45 -0
  412. data/ext/boost/mpl/aux_/back_impl.hpp +43 -0
  413. data/ext/boost/mpl/aux_/basic_bind.hpp +21 -0
  414. data/ext/boost/mpl/aux_/begin_end_impl.hpp +100 -0
  415. data/ext/boost/mpl/aux_/clear_impl.hpp +35 -0
  416. data/ext/boost/mpl/aux_/common_name_wknd.hpp +34 -0
  417. data/ext/boost/mpl/aux_/comparison_op.hpp +83 -0
  418. data/ext/boost/mpl/aux_/config/adl.hpp +40 -0
  419. data/ext/boost/mpl/aux_/config/arrays.hpp +30 -0
  420. data/ext/boost/mpl/aux_/config/bind.hpp +33 -0
  421. data/ext/boost/mpl/aux_/config/compiler.hpp +64 -0
  422. data/ext/boost/mpl/aux_/config/ctps.hpp +30 -0
  423. data/ext/boost/mpl/aux_/config/dependent_nttp.hpp +35 -0
  424. data/ext/boost/mpl/aux_/config/dmc_ambiguous_ctps.hpp +27 -0
  425. data/ext/boost/mpl/aux_/config/dtp.hpp +46 -0
  426. data/ext/boost/mpl/aux_/config/eti.hpp +47 -0
  427. data/ext/boost/mpl/aux_/config/forwarding.hpp +27 -0
  428. data/ext/boost/mpl/aux_/config/gcc.hpp +23 -0
  429. data/ext/boost/mpl/aux_/config/has_apply.hpp +32 -0
  430. data/ext/boost/mpl/aux_/config/has_xxx.hpp +33 -0
  431. data/ext/boost/mpl/aux_/config/integral.hpp +38 -0
  432. data/ext/boost/mpl/aux_/config/intel.hpp +21 -0
  433. data/ext/boost/mpl/aux_/config/lambda.hpp +32 -0
  434. data/ext/boost/mpl/aux_/config/msvc.hpp +21 -0
  435. data/ext/boost/mpl/aux_/config/msvc_typename.hpp +26 -0
  436. data/ext/boost/mpl/aux_/config/nttp.hpp +41 -0
  437. data/ext/boost/mpl/aux_/config/operators.hpp +33 -0
  438. data/ext/boost/mpl/aux_/config/overload_resolution.hpp +29 -0
  439. data/ext/boost/mpl/aux_/config/preprocessor.hpp +39 -0
  440. data/ext/boost/mpl/aux_/config/static_constant.hpp +25 -0
  441. data/ext/boost/mpl/aux_/config/ttp.hpp +39 -0
  442. data/ext/boost/mpl/aux_/config/typeof.hpp +38 -0
  443. data/ext/boost/mpl/aux_/config/use_preprocessed.hpp +19 -0
  444. data/ext/boost/mpl/aux_/config/workaround.hpp +19 -0
  445. data/ext/boost/mpl/aux_/contains_impl.hpp +61 -0
  446. data/ext/boost/mpl/aux_/count_args.hpp +105 -0
  447. data/ext/boost/mpl/aux_/count_impl.hpp +44 -0
  448. data/ext/boost/mpl/aux_/empty_impl.hpp +43 -0
  449. data/ext/boost/mpl/aux_/erase_impl.hpp +69 -0
  450. data/ext/boost/mpl/aux_/erase_key_impl.hpp +32 -0
  451. data/ext/boost/mpl/aux_/filter_iter.hpp +140 -0
  452. data/ext/boost/mpl/aux_/find_if_pred.hpp +31 -0
  453. data/ext/boost/mpl/aux_/fold_impl.hpp +43 -0
  454. data/ext/boost/mpl/aux_/fold_impl_body.hpp +365 -0
  455. data/ext/boost/mpl/aux_/fold_op.hpp +37 -0
  456. data/ext/boost/mpl/aux_/fold_pred.hpp +37 -0
  457. data/ext/boost/mpl/aux_/front_impl.hpp +41 -0
  458. data/ext/boost/mpl/aux_/full_lambda.hpp +350 -0
  459. data/ext/boost/mpl/aux_/has_apply.hpp +32 -0
  460. data/ext/boost/mpl/aux_/has_begin.hpp +23 -0
  461. data/ext/boost/mpl/aux_/has_key_impl.hpp +34 -0
  462. data/ext/boost/mpl/aux_/has_rebind.hpp +99 -0
  463. data/ext/boost/mpl/aux_/has_size.hpp +23 -0
  464. data/ext/boost/mpl/aux_/has_tag.hpp +23 -0
  465. data/ext/boost/mpl/aux_/has_type.hpp +23 -0
  466. data/ext/boost/mpl/aux_/include_preprocessed.hpp +42 -0
  467. data/ext/boost/mpl/aux_/insert_impl.hpp +68 -0
  468. data/ext/boost/mpl/aux_/insert_range_impl.hpp +77 -0
  469. data/ext/boost/mpl/aux_/inserter_algorithm.hpp +159 -0
  470. data/ext/boost/mpl/aux_/integral_wrapper.hpp +93 -0
  471. data/ext/boost/mpl/aux_/is_msvc_eti_arg.hpp +64 -0
  472. data/ext/boost/mpl/aux_/iter_apply.hpp +47 -0
  473. data/ext/boost/mpl/aux_/iter_fold_if_impl.hpp +210 -0
  474. data/ext/boost/mpl/aux_/iter_fold_impl.hpp +42 -0
  475. data/ext/boost/mpl/aux_/iter_push_front.hpp +36 -0
  476. data/ext/boost/mpl/aux_/joint_iter.hpp +120 -0
  477. data/ext/boost/mpl/aux_/lambda_arity_param.hpp +25 -0
  478. data/ext/boost/mpl/aux_/lambda_no_ctps.hpp +193 -0
  479. data/ext/boost/mpl/aux_/lambda_spec.hpp +49 -0
  480. data/ext/boost/mpl/aux_/lambda_support.hpp +169 -0
  481. data/ext/boost/mpl/aux_/largest_int.hpp +63 -0
  482. data/ext/boost/mpl/aux_/logical_op.hpp +165 -0
  483. data/ext/boost/mpl/aux_/msvc_dtw.hpp +68 -0
  484. data/ext/boost/mpl/aux_/msvc_eti_base.hpp +77 -0
  485. data/ext/boost/mpl/aux_/msvc_is_class.hpp +58 -0
  486. data/ext/boost/mpl/aux_/msvc_never_true.hpp +34 -0
  487. data/ext/boost/mpl/aux_/msvc_type.hpp +62 -0
  488. data/ext/boost/mpl/aux_/na.hpp +95 -0
  489. data/ext/boost/mpl/aux_/na_assert.hpp +34 -0
  490. data/ext/boost/mpl/aux_/na_fwd.hpp +31 -0
  491. data/ext/boost/mpl/aux_/na_spec.hpp +175 -0
  492. data/ext/boost/mpl/aux_/nested_type_wknd.hpp +48 -0
  493. data/ext/boost/mpl/aux_/nttp_decl.hpp +35 -0
  494. data/ext/boost/mpl/aux_/numeric_cast_utils.hpp +77 -0
  495. data/ext/boost/mpl/aux_/numeric_op.hpp +311 -0
  496. data/ext/boost/mpl/aux_/order_impl.hpp +76 -0
  497. data/ext/boost/mpl/aux_/overload_names.hpp +48 -0
  498. data/ext/boost/mpl/aux_/partition_op.hpp +58 -0
  499. data/ext/boost/mpl/aux_/pop_back_impl.hpp +34 -0
  500. data/ext/boost/mpl/aux_/pop_front_impl.hpp +44 -0
  501. data/ext/boost/mpl/aux_/preprocessed/bcc/advance_backward.hpp +97 -0
  502. data/ext/boost/mpl/aux_/preprocessed/bcc/advance_forward.hpp +97 -0
  503. data/ext/boost/mpl/aux_/preprocessed/bcc/and.hpp +69 -0
  504. data/ext/boost/mpl/aux_/preprocessed/bcc/apply.hpp +169 -0
  505. data/ext/boost/mpl/aux_/preprocessed/bcc/apply_fwd.hpp +52 -0
  506. data/ext/boost/mpl/aux_/preprocessed/bcc/apply_wrap.hpp +456 -0
  507. data/ext/boost/mpl/aux_/preprocessed/bcc/arg.hpp +117 -0
  508. data/ext/boost/mpl/aux_/preprocessed/bcc/basic_bind.hpp +300 -0
  509. data/ext/boost/mpl/aux_/preprocessed/bcc/bind.hpp +397 -0
  510. data/ext/boost/mpl/aux_/preprocessed/bcc/bind_fwd.hpp +46 -0
  511. data/ext/boost/mpl/aux_/preprocessed/bcc/bitand.hpp +147 -0
  512. data/ext/boost/mpl/aux_/preprocessed/bcc/bitor.hpp +147 -0
  513. data/ext/boost/mpl/aux_/preprocessed/bcc/bitxor.hpp +147 -0
  514. data/ext/boost/mpl/aux_/preprocessed/bcc/deque.hpp +323 -0
  515. data/ext/boost/mpl/aux_/preprocessed/bcc/divides.hpp +146 -0
  516. data/ext/boost/mpl/aux_/preprocessed/bcc/equal_to.hpp +94 -0
  517. data/ext/boost/mpl/aux_/preprocessed/bcc/fold_impl.hpp +180 -0
  518. data/ext/boost/mpl/aux_/preprocessed/bcc/full_lambda.hpp +558 -0
  519. data/ext/boost/mpl/aux_/preprocessed/bcc/greater.hpp +94 -0
  520. data/ext/boost/mpl/aux_/preprocessed/bcc/greater_equal.hpp +94 -0
  521. data/ext/boost/mpl/aux_/preprocessed/bcc/inherit.hpp +139 -0
  522. data/ext/boost/mpl/aux_/preprocessed/bcc/iter_fold_if_impl.hpp +133 -0
  523. data/ext/boost/mpl/aux_/preprocessed/bcc/iter_fold_impl.hpp +180 -0
  524. data/ext/boost/mpl/aux_/preprocessed/bcc/lambda_no_ctps.hpp +229 -0
  525. data/ext/boost/mpl/aux_/preprocessed/bcc/less.hpp +94 -0
  526. data/ext/boost/mpl/aux_/preprocessed/bcc/less_equal.hpp +94 -0
  527. data/ext/boost/mpl/aux_/preprocessed/bcc/list.hpp +323 -0
  528. data/ext/boost/mpl/aux_/preprocessed/bcc/list_c.hpp +328 -0
  529. data/ext/boost/mpl/aux_/preprocessed/bcc/map.hpp +323 -0
  530. data/ext/boost/mpl/aux_/preprocessed/bcc/minus.hpp +146 -0
  531. data/ext/boost/mpl/aux_/preprocessed/bcc/modulus.hpp +101 -0
  532. data/ext/boost/mpl/aux_/preprocessed/bcc/not_equal_to.hpp +94 -0
  533. data/ext/boost/mpl/aux_/preprocessed/bcc/or.hpp +69 -0
  534. data/ext/boost/mpl/aux_/preprocessed/bcc/placeholders.hpp +105 -0
  535. data/ext/boost/mpl/aux_/preprocessed/bcc/plus.hpp +146 -0
  536. data/ext/boost/mpl/aux_/preprocessed/bcc/quote.hpp +11 -0
  537. data/ext/boost/mpl/aux_/preprocessed/bcc/reverse_fold_impl.hpp +295 -0
  538. data/ext/boost/mpl/aux_/preprocessed/bcc/reverse_iter_fold_impl.hpp +295 -0
  539. data/ext/boost/mpl/aux_/preprocessed/bcc/set.hpp +323 -0
  540. data/ext/boost/mpl/aux_/preprocessed/bcc/set_c.hpp +328 -0
  541. data/ext/boost/mpl/aux_/preprocessed/bcc/shift_left.hpp +99 -0
  542. data/ext/boost/mpl/aux_/preprocessed/bcc/shift_right.hpp +99 -0
  543. data/ext/boost/mpl/aux_/preprocessed/bcc/template_arity.hpp +40 -0
  544. data/ext/boost/mpl/aux_/preprocessed/bcc/times.hpp +146 -0
  545. data/ext/boost/mpl/aux_/preprocessed/bcc/unpack_args.hpp +97 -0
  546. data/ext/boost/mpl/aux_/preprocessed/bcc/vector.hpp +323 -0
  547. data/ext/boost/mpl/aux_/preprocessed/bcc/vector_c.hpp +309 -0
  548. data/ext/boost/mpl/aux_/preprocessed/bcc551/advance_backward.hpp +97 -0
  549. data/ext/boost/mpl/aux_/preprocessed/bcc551/advance_forward.hpp +97 -0
  550. data/ext/boost/mpl/aux_/preprocessed/bcc551/and.hpp +69 -0
  551. data/ext/boost/mpl/aux_/preprocessed/bcc551/apply.hpp +169 -0
  552. data/ext/boost/mpl/aux_/preprocessed/bcc551/apply_fwd.hpp +52 -0
  553. data/ext/boost/mpl/aux_/preprocessed/bcc551/apply_wrap.hpp +456 -0
  554. data/ext/boost/mpl/aux_/preprocessed/bcc551/arg.hpp +123 -0
  555. data/ext/boost/mpl/aux_/preprocessed/bcc551/basic_bind.hpp +306 -0
  556. data/ext/boost/mpl/aux_/preprocessed/bcc551/bind.hpp +403 -0
  557. data/ext/boost/mpl/aux_/preprocessed/bcc551/bind_fwd.hpp +46 -0
  558. data/ext/boost/mpl/aux_/preprocessed/bcc551/bitand.hpp +147 -0
  559. data/ext/boost/mpl/aux_/preprocessed/bcc551/bitor.hpp +147 -0
  560. data/ext/boost/mpl/aux_/preprocessed/bcc551/bitxor.hpp +147 -0
  561. data/ext/boost/mpl/aux_/preprocessed/bcc551/deque.hpp +323 -0
  562. data/ext/boost/mpl/aux_/preprocessed/bcc551/divides.hpp +146 -0
  563. data/ext/boost/mpl/aux_/preprocessed/bcc551/equal_to.hpp +94 -0
  564. data/ext/boost/mpl/aux_/preprocessed/bcc551/fold_impl.hpp +180 -0
  565. data/ext/boost/mpl/aux_/preprocessed/bcc551/full_lambda.hpp +558 -0
  566. data/ext/boost/mpl/aux_/preprocessed/bcc551/greater.hpp +94 -0
  567. data/ext/boost/mpl/aux_/preprocessed/bcc551/greater_equal.hpp +94 -0
  568. data/ext/boost/mpl/aux_/preprocessed/bcc551/inherit.hpp +141 -0
  569. data/ext/boost/mpl/aux_/preprocessed/bcc551/iter_fold_if_impl.hpp +133 -0
  570. data/ext/boost/mpl/aux_/preprocessed/bcc551/iter_fold_impl.hpp +180 -0
  571. data/ext/boost/mpl/aux_/preprocessed/bcc551/lambda_no_ctps.hpp +229 -0
  572. data/ext/boost/mpl/aux_/preprocessed/bcc551/less.hpp +94 -0
  573. data/ext/boost/mpl/aux_/preprocessed/bcc551/less_equal.hpp +94 -0
  574. data/ext/boost/mpl/aux_/preprocessed/bcc551/list.hpp +323 -0
  575. data/ext/boost/mpl/aux_/preprocessed/bcc551/list_c.hpp +328 -0
  576. data/ext/boost/mpl/aux_/preprocessed/bcc551/map.hpp +323 -0
  577. data/ext/boost/mpl/aux_/preprocessed/bcc551/minus.hpp +146 -0
  578. data/ext/boost/mpl/aux_/preprocessed/bcc551/modulus.hpp +101 -0
  579. data/ext/boost/mpl/aux_/preprocessed/bcc551/not_equal_to.hpp +94 -0
  580. data/ext/boost/mpl/aux_/preprocessed/bcc551/or.hpp +69 -0
  581. data/ext/boost/mpl/aux_/preprocessed/bcc551/placeholders.hpp +105 -0
  582. data/ext/boost/mpl/aux_/preprocessed/bcc551/plus.hpp +146 -0
  583. data/ext/boost/mpl/aux_/preprocessed/bcc551/quote.hpp +11 -0
  584. data/ext/boost/mpl/aux_/preprocessed/bcc551/reverse_fold_impl.hpp +295 -0
  585. data/ext/boost/mpl/aux_/preprocessed/bcc551/reverse_iter_fold_impl.hpp +295 -0
  586. data/ext/boost/mpl/aux_/preprocessed/bcc551/set.hpp +323 -0
  587. data/ext/boost/mpl/aux_/preprocessed/bcc551/set_c.hpp +328 -0
  588. data/ext/boost/mpl/aux_/preprocessed/bcc551/shift_left.hpp +99 -0
  589. data/ext/boost/mpl/aux_/preprocessed/bcc551/shift_right.hpp +99 -0
  590. data/ext/boost/mpl/aux_/preprocessed/bcc551/template_arity.hpp +40 -0
  591. data/ext/boost/mpl/aux_/preprocessed/bcc551/times.hpp +146 -0
  592. data/ext/boost/mpl/aux_/preprocessed/bcc551/unpack_args.hpp +97 -0
  593. data/ext/boost/mpl/aux_/preprocessed/bcc551/vector.hpp +323 -0
  594. data/ext/boost/mpl/aux_/preprocessed/bcc551/vector_c.hpp +309 -0
  595. data/ext/boost/mpl/aux_/preprocessed/dmc/advance_backward.hpp +97 -0
  596. data/ext/boost/mpl/aux_/preprocessed/dmc/advance_forward.hpp +97 -0
  597. data/ext/boost/mpl/aux_/preprocessed/dmc/and.hpp +69 -0
  598. data/ext/boost/mpl/aux_/preprocessed/dmc/apply.hpp +169 -0
  599. data/ext/boost/mpl/aux_/preprocessed/dmc/apply_fwd.hpp +52 -0
  600. data/ext/boost/mpl/aux_/preprocessed/dmc/apply_wrap.hpp +84 -0
  601. data/ext/boost/mpl/aux_/preprocessed/dmc/arg.hpp +123 -0
  602. data/ext/boost/mpl/aux_/preprocessed/dmc/basic_bind.hpp +406 -0
  603. data/ext/boost/mpl/aux_/preprocessed/dmc/bind.hpp +515 -0
  604. data/ext/boost/mpl/aux_/preprocessed/dmc/bind_fwd.hpp +53 -0
  605. data/ext/boost/mpl/aux_/preprocessed/dmc/bitand.hpp +147 -0
  606. data/ext/boost/mpl/aux_/preprocessed/dmc/bitor.hpp +147 -0
  607. data/ext/boost/mpl/aux_/preprocessed/dmc/bitxor.hpp +147 -0
  608. data/ext/boost/mpl/aux_/preprocessed/dmc/deque.hpp +323 -0
  609. data/ext/boost/mpl/aux_/preprocessed/dmc/divides.hpp +146 -0
  610. data/ext/boost/mpl/aux_/preprocessed/dmc/equal_to.hpp +94 -0
  611. data/ext/boost/mpl/aux_/preprocessed/dmc/fold_impl.hpp +180 -0
  612. data/ext/boost/mpl/aux_/preprocessed/dmc/full_lambda.hpp +536 -0
  613. data/ext/boost/mpl/aux_/preprocessed/dmc/greater.hpp +94 -0
  614. data/ext/boost/mpl/aux_/preprocessed/dmc/greater_equal.hpp +94 -0
  615. data/ext/boost/mpl/aux_/preprocessed/dmc/inherit.hpp +141 -0
  616. data/ext/boost/mpl/aux_/preprocessed/dmc/iter_fold_if_impl.hpp +133 -0
  617. data/ext/boost/mpl/aux_/preprocessed/dmc/iter_fold_impl.hpp +180 -0
  618. data/ext/boost/mpl/aux_/preprocessed/dmc/lambda_no_ctps.hpp +229 -0
  619. data/ext/boost/mpl/aux_/preprocessed/dmc/less.hpp +94 -0
  620. data/ext/boost/mpl/aux_/preprocessed/dmc/less_equal.hpp +94 -0
  621. data/ext/boost/mpl/aux_/preprocessed/dmc/list.hpp +323 -0
  622. data/ext/boost/mpl/aux_/preprocessed/dmc/list_c.hpp +328 -0
  623. data/ext/boost/mpl/aux_/preprocessed/dmc/map.hpp +323 -0
  624. data/ext/boost/mpl/aux_/preprocessed/dmc/minus.hpp +146 -0
  625. data/ext/boost/mpl/aux_/preprocessed/dmc/modulus.hpp +101 -0
  626. data/ext/boost/mpl/aux_/preprocessed/dmc/not_equal_to.hpp +94 -0
  627. data/ext/boost/mpl/aux_/preprocessed/dmc/or.hpp +69 -0
  628. data/ext/boost/mpl/aux_/preprocessed/dmc/placeholders.hpp +105 -0
  629. data/ext/boost/mpl/aux_/preprocessed/dmc/plus.hpp +146 -0
  630. data/ext/boost/mpl/aux_/preprocessed/dmc/quote.hpp +123 -0
  631. data/ext/boost/mpl/aux_/preprocessed/dmc/reverse_fold_impl.hpp +231 -0
  632. data/ext/boost/mpl/aux_/preprocessed/dmc/reverse_iter_fold_impl.hpp +231 -0
  633. data/ext/boost/mpl/aux_/preprocessed/dmc/set.hpp +323 -0
  634. data/ext/boost/mpl/aux_/preprocessed/dmc/set_c.hpp +328 -0
  635. data/ext/boost/mpl/aux_/preprocessed/dmc/shift_left.hpp +99 -0
  636. data/ext/boost/mpl/aux_/preprocessed/dmc/shift_right.hpp +99 -0
  637. data/ext/boost/mpl/aux_/preprocessed/dmc/template_arity.hpp +11 -0
  638. data/ext/boost/mpl/aux_/preprocessed/dmc/times.hpp +146 -0
  639. data/ext/boost/mpl/aux_/preprocessed/dmc/unpack_args.hpp +94 -0
  640. data/ext/boost/mpl/aux_/preprocessed/dmc/vector.hpp +323 -0
  641. data/ext/boost/mpl/aux_/preprocessed/dmc/vector_c.hpp +309 -0
  642. data/ext/boost/mpl/aux_/preprocessed/gcc/advance_backward.hpp +97 -0
  643. data/ext/boost/mpl/aux_/preprocessed/gcc/advance_forward.hpp +97 -0
  644. data/ext/boost/mpl/aux_/preprocessed/gcc/and.hpp +69 -0
  645. data/ext/boost/mpl/aux_/preprocessed/gcc/apply.hpp +169 -0
  646. data/ext/boost/mpl/aux_/preprocessed/gcc/apply_fwd.hpp +52 -0
  647. data/ext/boost/mpl/aux_/preprocessed/gcc/apply_wrap.hpp +84 -0
  648. data/ext/boost/mpl/aux_/preprocessed/gcc/arg.hpp +123 -0
  649. data/ext/boost/mpl/aux_/preprocessed/gcc/basic_bind.hpp +440 -0
  650. data/ext/boost/mpl/aux_/preprocessed/gcc/bind.hpp +561 -0
  651. data/ext/boost/mpl/aux_/preprocessed/gcc/bind_fwd.hpp +52 -0
  652. data/ext/boost/mpl/aux_/preprocessed/gcc/bitand.hpp +147 -0
  653. data/ext/boost/mpl/aux_/preprocessed/gcc/bitor.hpp +147 -0
  654. data/ext/boost/mpl/aux_/preprocessed/gcc/bitxor.hpp +147 -0
  655. data/ext/boost/mpl/aux_/preprocessed/gcc/deque.hpp +323 -0
  656. data/ext/boost/mpl/aux_/preprocessed/gcc/divides.hpp +146 -0
  657. data/ext/boost/mpl/aux_/preprocessed/gcc/equal_to.hpp +94 -0
  658. data/ext/boost/mpl/aux_/preprocessed/gcc/fold_impl.hpp +180 -0
  659. data/ext/boost/mpl/aux_/preprocessed/gcc/full_lambda.hpp +558 -0
  660. data/ext/boost/mpl/aux_/preprocessed/gcc/greater.hpp +94 -0
  661. data/ext/boost/mpl/aux_/preprocessed/gcc/greater_equal.hpp +94 -0
  662. data/ext/boost/mpl/aux_/preprocessed/gcc/inherit.hpp +141 -0
  663. data/ext/boost/mpl/aux_/preprocessed/gcc/iter_fold_if_impl.hpp +133 -0
  664. data/ext/boost/mpl/aux_/preprocessed/gcc/iter_fold_impl.hpp +180 -0
  665. data/ext/boost/mpl/aux_/preprocessed/gcc/lambda_no_ctps.hpp +229 -0
  666. data/ext/boost/mpl/aux_/preprocessed/gcc/less.hpp +94 -0
  667. data/ext/boost/mpl/aux_/preprocessed/gcc/less_equal.hpp +94 -0
  668. data/ext/boost/mpl/aux_/preprocessed/gcc/list.hpp +323 -0
  669. data/ext/boost/mpl/aux_/preprocessed/gcc/list_c.hpp +328 -0
  670. data/ext/boost/mpl/aux_/preprocessed/gcc/map.hpp +323 -0
  671. data/ext/boost/mpl/aux_/preprocessed/gcc/minus.hpp +146 -0
  672. data/ext/boost/mpl/aux_/preprocessed/gcc/modulus.hpp +101 -0
  673. data/ext/boost/mpl/aux_/preprocessed/gcc/not_equal_to.hpp +94 -0
  674. data/ext/boost/mpl/aux_/preprocessed/gcc/or.hpp +69 -0
  675. data/ext/boost/mpl/aux_/preprocessed/gcc/placeholders.hpp +105 -0
  676. data/ext/boost/mpl/aux_/preprocessed/gcc/plus.hpp +146 -0
  677. data/ext/boost/mpl/aux_/preprocessed/gcc/quote.hpp +123 -0
  678. data/ext/boost/mpl/aux_/preprocessed/gcc/reverse_fold_impl.hpp +231 -0
  679. data/ext/boost/mpl/aux_/preprocessed/gcc/reverse_iter_fold_impl.hpp +231 -0
  680. data/ext/boost/mpl/aux_/preprocessed/gcc/set.hpp +323 -0
  681. data/ext/boost/mpl/aux_/preprocessed/gcc/set_c.hpp +328 -0
  682. data/ext/boost/mpl/aux_/preprocessed/gcc/shift_left.hpp +99 -0
  683. data/ext/boost/mpl/aux_/preprocessed/gcc/shift_right.hpp +99 -0
  684. data/ext/boost/mpl/aux_/preprocessed/gcc/template_arity.hpp +101 -0
  685. data/ext/boost/mpl/aux_/preprocessed/gcc/times.hpp +146 -0
  686. data/ext/boost/mpl/aux_/preprocessed/gcc/unpack_args.hpp +94 -0
  687. data/ext/boost/mpl/aux_/preprocessed/gcc/vector.hpp +323 -0
  688. data/ext/boost/mpl/aux_/preprocessed/gcc/vector_c.hpp +309 -0
  689. data/ext/boost/mpl/aux_/preprocessed/msvc60/advance_backward.hpp +132 -0
  690. data/ext/boost/mpl/aux_/preprocessed/msvc60/advance_forward.hpp +132 -0
  691. data/ext/boost/mpl/aux_/preprocessed/msvc60/and.hpp +73 -0
  692. data/ext/boost/mpl/aux_/preprocessed/msvc60/apply.hpp +166 -0
  693. data/ext/boost/mpl/aux_/preprocessed/msvc60/apply_fwd.hpp +46 -0
  694. data/ext/boost/mpl/aux_/preprocessed/msvc60/apply_wrap.hpp +247 -0
  695. data/ext/boost/mpl/aux_/preprocessed/msvc60/arg.hpp +123 -0
  696. data/ext/boost/mpl/aux_/preprocessed/msvc60/basic_bind.hpp +328 -0
  697. data/ext/boost/mpl/aux_/preprocessed/msvc60/bind.hpp +432 -0
  698. data/ext/boost/mpl/aux_/preprocessed/msvc60/bind_fwd.hpp +46 -0
  699. data/ext/boost/mpl/aux_/preprocessed/msvc60/bitand.hpp +149 -0
  700. data/ext/boost/mpl/aux_/preprocessed/msvc60/bitor.hpp +149 -0
  701. data/ext/boost/mpl/aux_/preprocessed/msvc60/bitxor.hpp +149 -0
  702. data/ext/boost/mpl/aux_/preprocessed/msvc60/deque.hpp +556 -0
  703. data/ext/boost/mpl/aux_/preprocessed/msvc60/divides.hpp +148 -0
  704. data/ext/boost/mpl/aux_/preprocessed/msvc60/equal_to.hpp +102 -0
  705. data/ext/boost/mpl/aux_/preprocessed/msvc60/fold_impl.hpp +293 -0
  706. data/ext/boost/mpl/aux_/preprocessed/msvc60/full_lambda.hpp +554 -0
  707. data/ext/boost/mpl/aux_/preprocessed/msvc60/greater.hpp +102 -0
  708. data/ext/boost/mpl/aux_/preprocessed/msvc60/greater_equal.hpp +102 -0
  709. data/ext/boost/mpl/aux_/preprocessed/msvc60/inherit.hpp +166 -0
  710. data/ext/boost/mpl/aux_/preprocessed/msvc60/iter_fold_if_impl.hpp +133 -0
  711. data/ext/boost/mpl/aux_/preprocessed/msvc60/iter_fold_impl.hpp +293 -0
  712. data/ext/boost/mpl/aux_/preprocessed/msvc60/lambda_no_ctps.hpp +229 -0
  713. data/ext/boost/mpl/aux_/preprocessed/msvc60/less.hpp +102 -0
  714. data/ext/boost/mpl/aux_/preprocessed/msvc60/less_equal.hpp +102 -0
  715. data/ext/boost/mpl/aux_/preprocessed/msvc60/list.hpp +556 -0
  716. data/ext/boost/mpl/aux_/preprocessed/msvc60/list_c.hpp +534 -0
  717. data/ext/boost/mpl/aux_/preprocessed/msvc60/map.hpp +556 -0
  718. data/ext/boost/mpl/aux_/preprocessed/msvc60/minus.hpp +148 -0
  719. data/ext/boost/mpl/aux_/preprocessed/msvc60/modulus.hpp +115 -0
  720. data/ext/boost/mpl/aux_/preprocessed/msvc60/not_equal_to.hpp +102 -0
  721. data/ext/boost/mpl/aux_/preprocessed/msvc60/or.hpp +73 -0
  722. data/ext/boost/mpl/aux_/preprocessed/msvc60/placeholders.hpp +105 -0
  723. data/ext/boost/mpl/aux_/preprocessed/msvc60/plus.hpp +148 -0
  724. data/ext/boost/mpl/aux_/preprocessed/msvc60/quote.hpp +11 -0
  725. data/ext/boost/mpl/aux_/preprocessed/msvc60/reverse_fold_impl.hpp +343 -0
  726. data/ext/boost/mpl/aux_/preprocessed/msvc60/reverse_iter_fold_impl.hpp +343 -0
  727. data/ext/boost/mpl/aux_/preprocessed/msvc60/set.hpp +556 -0
  728. data/ext/boost/mpl/aux_/preprocessed/msvc60/set_c.hpp +534 -0
  729. data/ext/boost/mpl/aux_/preprocessed/msvc60/shift_left.hpp +114 -0
  730. data/ext/boost/mpl/aux_/preprocessed/msvc60/shift_right.hpp +114 -0
  731. data/ext/boost/mpl/aux_/preprocessed/msvc60/template_arity.hpp +46 -0
  732. data/ext/boost/mpl/aux_/preprocessed/msvc60/times.hpp +148 -0
  733. data/ext/boost/mpl/aux_/preprocessed/msvc60/unpack_args.hpp +109 -0
  734. data/ext/boost/mpl/aux_/preprocessed/msvc60/vector.hpp +556 -0
  735. data/ext/boost/mpl/aux_/preprocessed/msvc60/vector_c.hpp +534 -0
  736. data/ext/boost/mpl/aux_/preprocessed/msvc70/advance_backward.hpp +97 -0
  737. data/ext/boost/mpl/aux_/preprocessed/msvc70/advance_forward.hpp +97 -0
  738. data/ext/boost/mpl/aux_/preprocessed/msvc70/and.hpp +71 -0
  739. data/ext/boost/mpl/aux_/preprocessed/msvc70/apply.hpp +160 -0
  740. data/ext/boost/mpl/aux_/preprocessed/msvc70/apply_fwd.hpp +46 -0
  741. data/ext/boost/mpl/aux_/preprocessed/msvc70/apply_wrap.hpp +138 -0
  742. data/ext/boost/mpl/aux_/preprocessed/msvc70/arg.hpp +123 -0
  743. data/ext/boost/mpl/aux_/preprocessed/msvc70/basic_bind.hpp +328 -0
  744. data/ext/boost/mpl/aux_/preprocessed/msvc70/bind.hpp +432 -0
  745. data/ext/boost/mpl/aux_/preprocessed/msvc70/bind_fwd.hpp +46 -0
  746. data/ext/boost/mpl/aux_/preprocessed/msvc70/bitand.hpp +151 -0
  747. data/ext/boost/mpl/aux_/preprocessed/msvc70/bitor.hpp +151 -0
  748. data/ext/boost/mpl/aux_/preprocessed/msvc70/bitxor.hpp +151 -0
  749. data/ext/boost/mpl/aux_/preprocessed/msvc70/deque.hpp +556 -0
  750. data/ext/boost/mpl/aux_/preprocessed/msvc70/divides.hpp +150 -0
  751. data/ext/boost/mpl/aux_/preprocessed/msvc70/equal_to.hpp +102 -0
  752. data/ext/boost/mpl/aux_/preprocessed/msvc70/fold_impl.hpp +245 -0
  753. data/ext/boost/mpl/aux_/preprocessed/msvc70/full_lambda.hpp +554 -0
  754. data/ext/boost/mpl/aux_/preprocessed/msvc70/greater.hpp +102 -0
  755. data/ext/boost/mpl/aux_/preprocessed/msvc70/greater_equal.hpp +102 -0
  756. data/ext/boost/mpl/aux_/preprocessed/msvc70/inherit.hpp +166 -0
  757. data/ext/boost/mpl/aux_/preprocessed/msvc70/iter_fold_if_impl.hpp +133 -0
  758. data/ext/boost/mpl/aux_/preprocessed/msvc70/iter_fold_impl.hpp +245 -0
  759. data/ext/boost/mpl/aux_/preprocessed/msvc70/lambda_no_ctps.hpp +229 -0
  760. data/ext/boost/mpl/aux_/preprocessed/msvc70/less.hpp +102 -0
  761. data/ext/boost/mpl/aux_/preprocessed/msvc70/less_equal.hpp +102 -0
  762. data/ext/boost/mpl/aux_/preprocessed/msvc70/list.hpp +556 -0
  763. data/ext/boost/mpl/aux_/preprocessed/msvc70/list_c.hpp +534 -0
  764. data/ext/boost/mpl/aux_/preprocessed/msvc70/map.hpp +556 -0
  765. data/ext/boost/mpl/aux_/preprocessed/msvc70/minus.hpp +150 -0
  766. data/ext/boost/mpl/aux_/preprocessed/msvc70/modulus.hpp +115 -0
  767. data/ext/boost/mpl/aux_/preprocessed/msvc70/not_equal_to.hpp +102 -0
  768. data/ext/boost/mpl/aux_/preprocessed/msvc70/or.hpp +71 -0
  769. data/ext/boost/mpl/aux_/preprocessed/msvc70/placeholders.hpp +105 -0
  770. data/ext/boost/mpl/aux_/preprocessed/msvc70/plus.hpp +150 -0
  771. data/ext/boost/mpl/aux_/preprocessed/msvc70/quote.hpp +116 -0
  772. data/ext/boost/mpl/aux_/preprocessed/msvc70/reverse_fold_impl.hpp +295 -0
  773. data/ext/boost/mpl/aux_/preprocessed/msvc70/reverse_iter_fold_impl.hpp +295 -0
  774. data/ext/boost/mpl/aux_/preprocessed/msvc70/set.hpp +556 -0
  775. data/ext/boost/mpl/aux_/preprocessed/msvc70/set_c.hpp +534 -0
  776. data/ext/boost/mpl/aux_/preprocessed/msvc70/shift_left.hpp +114 -0
  777. data/ext/boost/mpl/aux_/preprocessed/msvc70/shift_right.hpp +114 -0
  778. data/ext/boost/mpl/aux_/preprocessed/msvc70/template_arity.hpp +46 -0
  779. data/ext/boost/mpl/aux_/preprocessed/msvc70/times.hpp +150 -0
  780. data/ext/boost/mpl/aux_/preprocessed/msvc70/unpack_args.hpp +109 -0
  781. data/ext/boost/mpl/aux_/preprocessed/msvc70/vector.hpp +556 -0
  782. data/ext/boost/mpl/aux_/preprocessed/msvc70/vector_c.hpp +534 -0
  783. data/ext/boost/mpl/aux_/preprocessed/mwcw/advance_backward.hpp +97 -0
  784. data/ext/boost/mpl/aux_/preprocessed/mwcw/advance_forward.hpp +97 -0
  785. data/ext/boost/mpl/aux_/preprocessed/mwcw/and.hpp +69 -0
  786. data/ext/boost/mpl/aux_/preprocessed/mwcw/apply.hpp +169 -0
  787. data/ext/boost/mpl/aux_/preprocessed/mwcw/apply_fwd.hpp +52 -0
  788. data/ext/boost/mpl/aux_/preprocessed/mwcw/apply_wrap.hpp +456 -0
  789. data/ext/boost/mpl/aux_/preprocessed/mwcw/arg.hpp +123 -0
  790. data/ext/boost/mpl/aux_/preprocessed/mwcw/basic_bind.hpp +440 -0
  791. data/ext/boost/mpl/aux_/preprocessed/mwcw/bind.hpp +561 -0
  792. data/ext/boost/mpl/aux_/preprocessed/mwcw/bind_fwd.hpp +52 -0
  793. data/ext/boost/mpl/aux_/preprocessed/mwcw/bitand.hpp +147 -0
  794. data/ext/boost/mpl/aux_/preprocessed/mwcw/bitor.hpp +147 -0
  795. data/ext/boost/mpl/aux_/preprocessed/mwcw/bitxor.hpp +147 -0
  796. data/ext/boost/mpl/aux_/preprocessed/mwcw/deque.hpp +323 -0
  797. data/ext/boost/mpl/aux_/preprocessed/mwcw/divides.hpp +146 -0
  798. data/ext/boost/mpl/aux_/preprocessed/mwcw/equal_to.hpp +94 -0
  799. data/ext/boost/mpl/aux_/preprocessed/mwcw/fold_impl.hpp +180 -0
  800. data/ext/boost/mpl/aux_/preprocessed/mwcw/full_lambda.hpp +554 -0
  801. data/ext/boost/mpl/aux_/preprocessed/mwcw/greater.hpp +94 -0
  802. data/ext/boost/mpl/aux_/preprocessed/mwcw/greater_equal.hpp +94 -0
  803. data/ext/boost/mpl/aux_/preprocessed/mwcw/inherit.hpp +141 -0
  804. data/ext/boost/mpl/aux_/preprocessed/mwcw/iter_fold_if_impl.hpp +133 -0
  805. data/ext/boost/mpl/aux_/preprocessed/mwcw/iter_fold_impl.hpp +180 -0
  806. data/ext/boost/mpl/aux_/preprocessed/mwcw/lambda_no_ctps.hpp +229 -0
  807. data/ext/boost/mpl/aux_/preprocessed/mwcw/less.hpp +94 -0
  808. data/ext/boost/mpl/aux_/preprocessed/mwcw/less_equal.hpp +94 -0
  809. data/ext/boost/mpl/aux_/preprocessed/mwcw/list.hpp +323 -0
  810. data/ext/boost/mpl/aux_/preprocessed/mwcw/list_c.hpp +328 -0
  811. data/ext/boost/mpl/aux_/preprocessed/mwcw/map.hpp +323 -0
  812. data/ext/boost/mpl/aux_/preprocessed/mwcw/minus.hpp +146 -0
  813. data/ext/boost/mpl/aux_/preprocessed/mwcw/modulus.hpp +101 -0
  814. data/ext/boost/mpl/aux_/preprocessed/mwcw/not_equal_to.hpp +94 -0
  815. data/ext/boost/mpl/aux_/preprocessed/mwcw/or.hpp +69 -0
  816. data/ext/boost/mpl/aux_/preprocessed/mwcw/placeholders.hpp +105 -0
  817. data/ext/boost/mpl/aux_/preprocessed/mwcw/plus.hpp +146 -0
  818. data/ext/boost/mpl/aux_/preprocessed/mwcw/quote.hpp +123 -0
  819. data/ext/boost/mpl/aux_/preprocessed/mwcw/reverse_fold_impl.hpp +231 -0
  820. data/ext/boost/mpl/aux_/preprocessed/mwcw/reverse_iter_fold_impl.hpp +231 -0
  821. data/ext/boost/mpl/aux_/preprocessed/mwcw/set.hpp +323 -0
  822. data/ext/boost/mpl/aux_/preprocessed/mwcw/set_c.hpp +328 -0
  823. data/ext/boost/mpl/aux_/preprocessed/mwcw/shift_left.hpp +99 -0
  824. data/ext/boost/mpl/aux_/preprocessed/mwcw/shift_right.hpp +99 -0
  825. data/ext/boost/mpl/aux_/preprocessed/mwcw/template_arity.hpp +11 -0
  826. data/ext/boost/mpl/aux_/preprocessed/mwcw/times.hpp +146 -0
  827. data/ext/boost/mpl/aux_/preprocessed/mwcw/unpack_args.hpp +94 -0
  828. data/ext/boost/mpl/aux_/preprocessed/mwcw/vector.hpp +323 -0
  829. data/ext/boost/mpl/aux_/preprocessed/mwcw/vector_c.hpp +309 -0
  830. data/ext/boost/mpl/aux_/preprocessed/no_ctps/advance_backward.hpp +97 -0
  831. data/ext/boost/mpl/aux_/preprocessed/no_ctps/advance_forward.hpp +97 -0
  832. data/ext/boost/mpl/aux_/preprocessed/no_ctps/and.hpp +73 -0
  833. data/ext/boost/mpl/aux_/preprocessed/no_ctps/apply.hpp +268 -0
  834. data/ext/boost/mpl/aux_/preprocessed/no_ctps/apply_fwd.hpp +50 -0
  835. data/ext/boost/mpl/aux_/preprocessed/no_ctps/apply_wrap.hpp +78 -0
  836. data/ext/boost/mpl/aux_/preprocessed/no_ctps/arg.hpp +123 -0
  837. data/ext/boost/mpl/aux_/preprocessed/no_ctps/basic_bind.hpp +486 -0
  838. data/ext/boost/mpl/aux_/preprocessed/no_ctps/bind.hpp +590 -0
  839. data/ext/boost/mpl/aux_/preprocessed/no_ctps/bind_fwd.hpp +52 -0
  840. data/ext/boost/mpl/aux_/preprocessed/no_ctps/bitand.hpp +134 -0
  841. data/ext/boost/mpl/aux_/preprocessed/no_ctps/bitor.hpp +134 -0
  842. data/ext/boost/mpl/aux_/preprocessed/no_ctps/bitxor.hpp +134 -0
  843. data/ext/boost/mpl/aux_/preprocessed/no_ctps/deque.hpp +556 -0
  844. data/ext/boost/mpl/aux_/preprocessed/no_ctps/divides.hpp +133 -0
  845. data/ext/boost/mpl/aux_/preprocessed/no_ctps/equal_to.hpp +94 -0
  846. data/ext/boost/mpl/aux_/preprocessed/no_ctps/fold_impl.hpp +245 -0
  847. data/ext/boost/mpl/aux_/preprocessed/no_ctps/full_lambda.hpp +554 -0
  848. data/ext/boost/mpl/aux_/preprocessed/no_ctps/greater.hpp +94 -0
  849. data/ext/boost/mpl/aux_/preprocessed/no_ctps/greater_equal.hpp +94 -0
  850. data/ext/boost/mpl/aux_/preprocessed/no_ctps/inherit.hpp +166 -0
  851. data/ext/boost/mpl/aux_/preprocessed/no_ctps/iter_fold_if_impl.hpp +133 -0
  852. data/ext/boost/mpl/aux_/preprocessed/no_ctps/iter_fold_impl.hpp +245 -0
  853. data/ext/boost/mpl/aux_/preprocessed/no_ctps/lambda_no_ctps.hpp +229 -0
  854. data/ext/boost/mpl/aux_/preprocessed/no_ctps/less.hpp +94 -0
  855. data/ext/boost/mpl/aux_/preprocessed/no_ctps/less_equal.hpp +94 -0
  856. data/ext/boost/mpl/aux_/preprocessed/no_ctps/list.hpp +556 -0
  857. data/ext/boost/mpl/aux_/preprocessed/no_ctps/list_c.hpp +534 -0
  858. data/ext/boost/mpl/aux_/preprocessed/no_ctps/map.hpp +556 -0
  859. data/ext/boost/mpl/aux_/preprocessed/no_ctps/minus.hpp +133 -0
  860. data/ext/boost/mpl/aux_/preprocessed/no_ctps/modulus.hpp +101 -0
  861. data/ext/boost/mpl/aux_/preprocessed/no_ctps/not_equal_to.hpp +94 -0
  862. data/ext/boost/mpl/aux_/preprocessed/no_ctps/or.hpp +73 -0
  863. data/ext/boost/mpl/aux_/preprocessed/no_ctps/placeholders.hpp +105 -0
  864. data/ext/boost/mpl/aux_/preprocessed/no_ctps/plus.hpp +133 -0
  865. data/ext/boost/mpl/aux_/preprocessed/no_ctps/quote.hpp +116 -0
  866. data/ext/boost/mpl/aux_/preprocessed/no_ctps/reverse_fold_impl.hpp +295 -0
  867. data/ext/boost/mpl/aux_/preprocessed/no_ctps/reverse_iter_fold_impl.hpp +295 -0
  868. data/ext/boost/mpl/aux_/preprocessed/no_ctps/set.hpp +556 -0
  869. data/ext/boost/mpl/aux_/preprocessed/no_ctps/set_c.hpp +534 -0
  870. data/ext/boost/mpl/aux_/preprocessed/no_ctps/shift_left.hpp +99 -0
  871. data/ext/boost/mpl/aux_/preprocessed/no_ctps/shift_right.hpp +99 -0
  872. data/ext/boost/mpl/aux_/preprocessed/no_ctps/template_arity.hpp +40 -0
  873. data/ext/boost/mpl/aux_/preprocessed/no_ctps/times.hpp +133 -0
  874. data/ext/boost/mpl/aux_/preprocessed/no_ctps/unpack_args.hpp +109 -0
  875. data/ext/boost/mpl/aux_/preprocessed/no_ctps/vector.hpp +556 -0
  876. data/ext/boost/mpl/aux_/preprocessed/no_ctps/vector_c.hpp +534 -0
  877. data/ext/boost/mpl/aux_/preprocessed/no_ttp/advance_backward.hpp +97 -0
  878. data/ext/boost/mpl/aux_/preprocessed/no_ttp/advance_forward.hpp +97 -0
  879. data/ext/boost/mpl/aux_/preprocessed/no_ttp/and.hpp +69 -0
  880. data/ext/boost/mpl/aux_/preprocessed/no_ttp/apply.hpp +169 -0
  881. data/ext/boost/mpl/aux_/preprocessed/no_ttp/apply_fwd.hpp +52 -0
  882. data/ext/boost/mpl/aux_/preprocessed/no_ttp/apply_wrap.hpp +84 -0
  883. data/ext/boost/mpl/aux_/preprocessed/no_ttp/arg.hpp +123 -0
  884. data/ext/boost/mpl/aux_/preprocessed/no_ttp/basic_bind.hpp +369 -0
  885. data/ext/boost/mpl/aux_/preprocessed/no_ttp/bind.hpp +466 -0
  886. data/ext/boost/mpl/aux_/preprocessed/no_ttp/bind_fwd.hpp +52 -0
  887. data/ext/boost/mpl/aux_/preprocessed/no_ttp/bitand.hpp +157 -0
  888. data/ext/boost/mpl/aux_/preprocessed/no_ttp/bitor.hpp +157 -0
  889. data/ext/boost/mpl/aux_/preprocessed/no_ttp/bitxor.hpp +157 -0
  890. data/ext/boost/mpl/aux_/preprocessed/no_ttp/deque.hpp +323 -0
  891. data/ext/boost/mpl/aux_/preprocessed/no_ttp/divides.hpp +156 -0
  892. data/ext/boost/mpl/aux_/preprocessed/no_ttp/equal_to.hpp +98 -0
  893. data/ext/boost/mpl/aux_/preprocessed/no_ttp/fold_impl.hpp +180 -0
  894. data/ext/boost/mpl/aux_/preprocessed/no_ttp/full_lambda.hpp +554 -0
  895. data/ext/boost/mpl/aux_/preprocessed/no_ttp/greater.hpp +98 -0
  896. data/ext/boost/mpl/aux_/preprocessed/no_ttp/greater_equal.hpp +98 -0
  897. data/ext/boost/mpl/aux_/preprocessed/no_ttp/inherit.hpp +141 -0
  898. data/ext/boost/mpl/aux_/preprocessed/no_ttp/iter_fold_if_impl.hpp +133 -0
  899. data/ext/boost/mpl/aux_/preprocessed/no_ttp/iter_fold_impl.hpp +180 -0
  900. data/ext/boost/mpl/aux_/preprocessed/no_ttp/lambda_no_ctps.hpp +229 -0
  901. data/ext/boost/mpl/aux_/preprocessed/no_ttp/less.hpp +98 -0
  902. data/ext/boost/mpl/aux_/preprocessed/no_ttp/less_equal.hpp +98 -0
  903. data/ext/boost/mpl/aux_/preprocessed/no_ttp/list.hpp +323 -0
  904. data/ext/boost/mpl/aux_/preprocessed/no_ttp/list_c.hpp +328 -0
  905. data/ext/boost/mpl/aux_/preprocessed/no_ttp/map.hpp +323 -0
  906. data/ext/boost/mpl/aux_/preprocessed/no_ttp/minus.hpp +156 -0
  907. data/ext/boost/mpl/aux_/preprocessed/no_ttp/modulus.hpp +111 -0
  908. data/ext/boost/mpl/aux_/preprocessed/no_ttp/not_equal_to.hpp +98 -0
  909. data/ext/boost/mpl/aux_/preprocessed/no_ttp/or.hpp +69 -0
  910. data/ext/boost/mpl/aux_/preprocessed/no_ttp/placeholders.hpp +105 -0
  911. data/ext/boost/mpl/aux_/preprocessed/no_ttp/plus.hpp +156 -0
  912. data/ext/boost/mpl/aux_/preprocessed/no_ttp/quote.hpp +11 -0
  913. data/ext/boost/mpl/aux_/preprocessed/no_ttp/reverse_fold_impl.hpp +231 -0
  914. data/ext/boost/mpl/aux_/preprocessed/no_ttp/reverse_iter_fold_impl.hpp +231 -0
  915. data/ext/boost/mpl/aux_/preprocessed/no_ttp/set.hpp +323 -0
  916. data/ext/boost/mpl/aux_/preprocessed/no_ttp/set_c.hpp +328 -0
  917. data/ext/boost/mpl/aux_/preprocessed/no_ttp/shift_left.hpp +110 -0
  918. data/ext/boost/mpl/aux_/preprocessed/no_ttp/shift_right.hpp +110 -0
  919. data/ext/boost/mpl/aux_/preprocessed/no_ttp/template_arity.hpp +40 -0
  920. data/ext/boost/mpl/aux_/preprocessed/no_ttp/times.hpp +156 -0
  921. data/ext/boost/mpl/aux_/preprocessed/no_ttp/unpack_args.hpp +94 -0
  922. data/ext/boost/mpl/aux_/preprocessed/no_ttp/vector.hpp +323 -0
  923. data/ext/boost/mpl/aux_/preprocessed/no_ttp/vector_c.hpp +309 -0
  924. data/ext/boost/mpl/aux_/preprocessed/plain/advance_backward.hpp +97 -0
  925. data/ext/boost/mpl/aux_/preprocessed/plain/advance_forward.hpp +97 -0
  926. data/ext/boost/mpl/aux_/preprocessed/plain/and.hpp +64 -0
  927. data/ext/boost/mpl/aux_/preprocessed/plain/apply.hpp +139 -0
  928. data/ext/boost/mpl/aux_/preprocessed/plain/apply_fwd.hpp +52 -0
  929. data/ext/boost/mpl/aux_/preprocessed/plain/apply_wrap.hpp +84 -0
  930. data/ext/boost/mpl/aux_/preprocessed/plain/arg.hpp +123 -0
  931. data/ext/boost/mpl/aux_/preprocessed/plain/basic_bind.hpp +440 -0
  932. data/ext/boost/mpl/aux_/preprocessed/plain/bind.hpp +561 -0
  933. data/ext/boost/mpl/aux_/preprocessed/plain/bind_fwd.hpp +52 -0
  934. data/ext/boost/mpl/aux_/preprocessed/plain/bitand.hpp +142 -0
  935. data/ext/boost/mpl/aux_/preprocessed/plain/bitor.hpp +142 -0
  936. data/ext/boost/mpl/aux_/preprocessed/plain/bitxor.hpp +142 -0
  937. data/ext/boost/mpl/aux_/preprocessed/plain/deque.hpp +323 -0
  938. data/ext/boost/mpl/aux_/preprocessed/plain/divides.hpp +141 -0
  939. data/ext/boost/mpl/aux_/preprocessed/plain/equal_to.hpp +92 -0
  940. data/ext/boost/mpl/aux_/preprocessed/plain/fold_impl.hpp +180 -0
  941. data/ext/boost/mpl/aux_/preprocessed/plain/full_lambda.hpp +554 -0
  942. data/ext/boost/mpl/aux_/preprocessed/plain/greater.hpp +92 -0
  943. data/ext/boost/mpl/aux_/preprocessed/plain/greater_equal.hpp +92 -0
  944. data/ext/boost/mpl/aux_/preprocessed/plain/inherit.hpp +125 -0
  945. data/ext/boost/mpl/aux_/preprocessed/plain/iter_fold_if_impl.hpp +133 -0
  946. data/ext/boost/mpl/aux_/preprocessed/plain/iter_fold_impl.hpp +180 -0
  947. data/ext/boost/mpl/aux_/preprocessed/plain/lambda_no_ctps.hpp +228 -0
  948. data/ext/boost/mpl/aux_/preprocessed/plain/less.hpp +92 -0
  949. data/ext/boost/mpl/aux_/preprocessed/plain/less_equal.hpp +92 -0
  950. data/ext/boost/mpl/aux_/preprocessed/plain/list.hpp +323 -0
  951. data/ext/boost/mpl/aux_/preprocessed/plain/list_c.hpp +328 -0
  952. data/ext/boost/mpl/aux_/preprocessed/plain/map.hpp +323 -0
  953. data/ext/boost/mpl/aux_/preprocessed/plain/minus.hpp +141 -0
  954. data/ext/boost/mpl/aux_/preprocessed/plain/modulus.hpp +99 -0
  955. data/ext/boost/mpl/aux_/preprocessed/plain/not_equal_to.hpp +92 -0
  956. data/ext/boost/mpl/aux_/preprocessed/plain/or.hpp +64 -0
  957. data/ext/boost/mpl/aux_/preprocessed/plain/placeholders.hpp +105 -0
  958. data/ext/boost/mpl/aux_/preprocessed/plain/plus.hpp +141 -0
  959. data/ext/boost/mpl/aux_/preprocessed/plain/quote.hpp +123 -0
  960. data/ext/boost/mpl/aux_/preprocessed/plain/reverse_fold_impl.hpp +231 -0
  961. data/ext/boost/mpl/aux_/preprocessed/plain/reverse_iter_fold_impl.hpp +231 -0
  962. data/ext/boost/mpl/aux_/preprocessed/plain/set.hpp +323 -0
  963. data/ext/boost/mpl/aux_/preprocessed/plain/set_c.hpp +328 -0
  964. data/ext/boost/mpl/aux_/preprocessed/plain/shift_left.hpp +97 -0
  965. data/ext/boost/mpl/aux_/preprocessed/plain/shift_right.hpp +97 -0
  966. data/ext/boost/mpl/aux_/preprocessed/plain/template_arity.hpp +11 -0
  967. data/ext/boost/mpl/aux_/preprocessed/plain/times.hpp +141 -0
  968. data/ext/boost/mpl/aux_/preprocessed/plain/unpack_args.hpp +94 -0
  969. data/ext/boost/mpl/aux_/preprocessed/plain/vector.hpp +323 -0
  970. data/ext/boost/mpl/aux_/preprocessed/plain/vector_c.hpp +309 -0
  971. data/ext/boost/mpl/aux_/preprocessor/add.hpp +65 -0
  972. data/ext/boost/mpl/aux_/preprocessor/def_params_tail.hpp +105 -0
  973. data/ext/boost/mpl/aux_/preprocessor/default_params.hpp +67 -0
  974. data/ext/boost/mpl/aux_/preprocessor/enum.hpp +62 -0
  975. data/ext/boost/mpl/aux_/preprocessor/ext_params.hpp +78 -0
  976. data/ext/boost/mpl/aux_/preprocessor/filter_params.hpp +28 -0
  977. data/ext/boost/mpl/aux_/preprocessor/is_seq.hpp +54 -0
  978. data/ext/boost/mpl/aux_/preprocessor/params.hpp +65 -0
  979. data/ext/boost/mpl/aux_/preprocessor/partial_spec_params.hpp +32 -0
  980. data/ext/boost/mpl/aux_/preprocessor/range.hpp +23 -0
  981. data/ext/boost/mpl/aux_/preprocessor/repeat.hpp +51 -0
  982. data/ext/boost/mpl/aux_/preprocessor/sub.hpp +65 -0
  983. data/ext/boost/mpl/aux_/preprocessor/token_equal.hpp +56 -0
  984. data/ext/boost/mpl/aux_/preprocessor/tuple.hpp +29 -0
  985. data/ext/boost/mpl/aux_/ptr_to_ref.hpp +46 -0
  986. data/ext/boost/mpl/aux_/push_back_impl.hpp +55 -0
  987. data/ext/boost/mpl/aux_/push_front_impl.hpp +56 -0
  988. data/ext/boost/mpl/aux_/range_c/O1_size.hpp +31 -0
  989. data/ext/boost/mpl/aux_/range_c/back.hpp +34 -0
  990. data/ext/boost/mpl/aux_/range_c/empty.hpp +37 -0
  991. data/ext/boost/mpl/aux_/range_c/front.hpp +33 -0
  992. data/ext/boost/mpl/aux_/range_c/iterator.hpp +106 -0
  993. data/ext/boost/mpl/aux_/range_c/size.hpp +37 -0
  994. data/ext/boost/mpl/aux_/range_c/tag.hpp +24 -0
  995. data/ext/boost/mpl/aux_/reverse_fold_impl.hpp +44 -0
  996. data/ext/boost/mpl/aux_/reverse_fold_impl_body.hpp +412 -0
  997. data/ext/boost/mpl/aux_/reverse_iter_fold_impl.hpp +43 -0
  998. data/ext/boost/mpl/aux_/sequence_wrapper.hpp +292 -0
  999. data/ext/boost/mpl/aux_/shift_op.hpp +87 -0
  1000. data/ext/boost/mpl/aux_/single_element_iter.hpp +118 -0
  1001. data/ext/boost/mpl/aux_/size_impl.hpp +52 -0
  1002. data/ext/boost/mpl/aux_/sort_impl.hpp +121 -0
  1003. data/ext/boost/mpl/aux_/static_cast.hpp +27 -0
  1004. data/ext/boost/mpl/aux_/template_arity.hpp +189 -0
  1005. data/ext/boost/mpl/aux_/template_arity_fwd.hpp +23 -0
  1006. data/ext/boost/mpl/aux_/test.hpp +32 -0
  1007. data/ext/boost/mpl/aux_/test/assert.hpp +29 -0
  1008. data/ext/boost/mpl/aux_/test/data.hpp +25 -0
  1009. data/ext/boost/mpl/aux_/test/test_case.hpp +21 -0
  1010. data/ext/boost/mpl/aux_/traits_lambda_spec.hpp +56 -0
  1011. data/ext/boost/mpl/aux_/transform_iter.hpp +123 -0
  1012. data/ext/boost/mpl/aux_/type_wrapper.hpp +47 -0
  1013. data/ext/boost/mpl/aux_/unwrap.hpp +47 -0
  1014. data/ext/boost/mpl/aux_/value_wknd.hpp +89 -0
  1015. data/ext/boost/mpl/aux_/yes_no.hpp +58 -0
  1016. data/ext/boost/mpl/back.hpp +39 -0
  1017. data/ext/boost/mpl/back_fwd.hpp +24 -0
  1018. data/ext/boost/mpl/back_inserter.hpp +34 -0
  1019. data/ext/boost/mpl/base.hpp +35 -0
  1020. data/ext/boost/mpl/begin.hpp +19 -0
  1021. data/ext/boost/mpl/begin_end.hpp +57 -0
  1022. data/ext/boost/mpl/begin_end_fwd.hpp +27 -0
  1023. data/ext/boost/mpl/bind.hpp +547 -0
  1024. data/ext/boost/mpl/bind_fwd.hpp +99 -0
  1025. data/ext/boost/mpl/bitand.hpp +23 -0
  1026. data/ext/boost/mpl/bitor.hpp +23 -0
  1027. data/ext/boost/mpl/bitwise.hpp +24 -0
  1028. data/ext/boost/mpl/bitxor.hpp +23 -0
  1029. data/ext/boost/mpl/bool.hpp +39 -0
  1030. data/ext/boost/mpl/bool_fwd.hpp +33 -0
  1031. data/ext/boost/mpl/clear.hpp +39 -0
  1032. data/ext/boost/mpl/clear_fwd.hpp +24 -0
  1033. data/ext/boost/mpl/comparison.hpp +24 -0
  1034. data/ext/boost/mpl/contains.hpp +41 -0
  1035. data/ext/boost/mpl/contains_fwd.hpp +25 -0
  1036. data/ext/boost/mpl/copy.hpp +58 -0
  1037. data/ext/boost/mpl/copy_if.hpp +96 -0
  1038. data/ext/boost/mpl/count.hpp +40 -0
  1039. data/ext/boost/mpl/count_fwd.hpp +24 -0
  1040. data/ext/boost/mpl/count_if.hpp +79 -0
  1041. data/ext/boost/mpl/deque.hpp +58 -0
  1042. data/ext/boost/mpl/deref.hpp +41 -0
  1043. data/ext/boost/mpl/distance.hpp +78 -0
  1044. data/ext/boost/mpl/distance_fwd.hpp +28 -0
  1045. data/ext/boost/mpl/divides.hpp +21 -0
  1046. data/ext/boost/mpl/empty.hpp +39 -0
  1047. data/ext/boost/mpl/empty_base.hpp +59 -0
  1048. data/ext/boost/mpl/empty_fwd.hpp +24 -0
  1049. data/ext/boost/mpl/empty_sequence.hpp +42 -0
  1050. data/ext/boost/mpl/end.hpp +19 -0
  1051. data/ext/boost/mpl/equal.hpp +112 -0
  1052. data/ext/boost/mpl/equal_to.hpp +21 -0
  1053. data/ext/boost/mpl/erase.hpp +42 -0
  1054. data/ext/boost/mpl/erase_fwd.hpp +24 -0
  1055. data/ext/boost/mpl/erase_key.hpp +41 -0
  1056. data/ext/boost/mpl/erase_key_fwd.hpp +24 -0
  1057. data/ext/boost/mpl/eval_if.hpp +71 -0
  1058. data/ext/boost/mpl/filter_view.hpp +46 -0
  1059. data/ext/boost/mpl/find.hpp +38 -0
  1060. data/ext/boost/mpl/find_if.hpp +50 -0
  1061. data/ext/boost/mpl/fold.hpp +48 -0
  1062. data/ext/boost/mpl/for_each.hpp +112 -0
  1063. data/ext/boost/mpl/front.hpp +39 -0
  1064. data/ext/boost/mpl/front_fwd.hpp +24 -0
  1065. data/ext/boost/mpl/front_inserter.hpp +33 -0
  1066. data/ext/boost/mpl/greater.hpp +21 -0
  1067. data/ext/boost/mpl/greater_equal.hpp +21 -0
  1068. data/ext/boost/mpl/has_key.hpp +41 -0
  1069. data/ext/boost/mpl/has_key_fwd.hpp +25 -0
  1070. data/ext/boost/mpl/has_xxx.hpp +233 -0
  1071. data/ext/boost/mpl/identity.hpp +45 -0
  1072. data/ext/boost/mpl/if.hpp +135 -0
  1073. data/ext/boost/mpl/index_if.hpp +60 -0
  1074. data/ext/boost/mpl/index_of.hpp +39 -0
  1075. data/ext/boost/mpl/inherit.hpp +229 -0
  1076. data/ext/boost/mpl/inherit_linearly.hpp +39 -0
  1077. data/ext/boost/mpl/insert.hpp +41 -0
  1078. data/ext/boost/mpl/insert_fwd.hpp +24 -0
  1079. data/ext/boost/mpl/insert_range.hpp +41 -0
  1080. data/ext/boost/mpl/insert_range_fwd.hpp +24 -0
  1081. data/ext/boost/mpl/inserter.hpp +32 -0
  1082. data/ext/boost/mpl/int.hpp +22 -0
  1083. data/ext/boost/mpl/int_fwd.hpp +27 -0
  1084. data/ext/boost/mpl/integral_c.hpp +51 -0
  1085. data/ext/boost/mpl/integral_c_fwd.hpp +32 -0
  1086. data/ext/boost/mpl/integral_c_tag.hpp +26 -0
  1087. data/ext/boost/mpl/is_placeholder.hpp +67 -0
  1088. data/ext/boost/mpl/is_sequence.hpp +112 -0
  1089. data/ext/boost/mpl/iter_fold.hpp +49 -0
  1090. data/ext/boost/mpl/iter_fold_if.hpp +117 -0
  1091. data/ext/boost/mpl/iterator_category.hpp +35 -0
  1092. data/ext/boost/mpl/iterator_range.hpp +42 -0
  1093. data/ext/boost/mpl/iterator_tags.hpp +27 -0
  1094. data/ext/boost/mpl/joint_view.hpp +65 -0
  1095. data/ext/boost/mpl/key_type.hpp +42 -0
  1096. data/ext/boost/mpl/key_type_fwd.hpp +25 -0
  1097. data/ext/boost/mpl/lambda.hpp +29 -0
  1098. data/ext/boost/mpl/lambda_fwd.hpp +57 -0
  1099. data/ext/boost/mpl/less.hpp +21 -0
  1100. data/ext/boost/mpl/less_equal.hpp +21 -0
  1101. data/ext/boost/mpl/limits/arity.hpp +21 -0
  1102. data/ext/boost/mpl/limits/list.hpp +21 -0
  1103. data/ext/boost/mpl/limits/map.hpp +21 -0
  1104. data/ext/boost/mpl/limits/set.hpp +21 -0
  1105. data/ext/boost/mpl/limits/unrolling.hpp +21 -0
  1106. data/ext/boost/mpl/limits/vector.hpp +21 -0
  1107. data/ext/boost/mpl/list.hpp +57 -0
  1108. data/ext/boost/mpl/list/aux_/O1_size.hpp +33 -0
  1109. data/ext/boost/mpl/list/aux_/begin_end.hpp +44 -0
  1110. data/ext/boost/mpl/list/aux_/clear.hpp +34 -0
  1111. data/ext/boost/mpl/list/aux_/empty.hpp +34 -0
  1112. data/ext/boost/mpl/list/aux_/front.hpp +33 -0
  1113. data/ext/boost/mpl/list/aux_/include_preprocessed.hpp +35 -0
  1114. data/ext/boost/mpl/list/aux_/item.hpp +55 -0
  1115. data/ext/boost/mpl/list/aux_/iterator.hpp +76 -0
  1116. data/ext/boost/mpl/list/aux_/numbered.hpp +68 -0
  1117. data/ext/boost/mpl/list/aux_/numbered_c.hpp +71 -0
  1118. data/ext/boost/mpl/list/aux_/pop_front.hpp +34 -0
  1119. data/ext/boost/mpl/list/aux_/preprocessed/plain/list10.hpp +149 -0
  1120. data/ext/boost/mpl/list/aux_/preprocessed/plain/list10_c.hpp +164 -0
  1121. data/ext/boost/mpl/list/aux_/preprocessed/plain/list20.hpp +169 -0
  1122. data/ext/boost/mpl/list/aux_/preprocessed/plain/list20_c.hpp +173 -0
  1123. data/ext/boost/mpl/list/aux_/preprocessed/plain/list30.hpp +189 -0
  1124. data/ext/boost/mpl/list/aux_/preprocessed/plain/list30_c.hpp +183 -0
  1125. data/ext/boost/mpl/list/aux_/preprocessed/plain/list40.hpp +209 -0
  1126. data/ext/boost/mpl/list/aux_/preprocessed/plain/list40_c.hpp +193 -0
  1127. data/ext/boost/mpl/list/aux_/preprocessed/plain/list50.hpp +229 -0
  1128. data/ext/boost/mpl/list/aux_/preprocessed/plain/list50_c.hpp +203 -0
  1129. data/ext/boost/mpl/list/aux_/push_back.hpp +36 -0
  1130. data/ext/boost/mpl/list/aux_/push_front.hpp +39 -0
  1131. data/ext/boost/mpl/list/aux_/size.hpp +33 -0
  1132. data/ext/boost/mpl/list/aux_/tag.hpp +24 -0
  1133. data/ext/boost/mpl/list/list0.hpp +42 -0
  1134. data/ext/boost/mpl/list/list0_c.hpp +31 -0
  1135. data/ext/boost/mpl/list/list10.hpp +43 -0
  1136. data/ext/boost/mpl/list/list10_c.hpp +43 -0
  1137. data/ext/boost/mpl/list/list20.hpp +43 -0
  1138. data/ext/boost/mpl/list/list20_c.hpp +43 -0
  1139. data/ext/boost/mpl/list/list30.hpp +43 -0
  1140. data/ext/boost/mpl/list/list30_c.hpp +43 -0
  1141. data/ext/boost/mpl/list/list40.hpp +43 -0
  1142. data/ext/boost/mpl/list/list40_c.hpp +43 -0
  1143. data/ext/boost/mpl/list/list50.hpp +43 -0
  1144. data/ext/boost/mpl/list/list50_c.hpp +43 -0
  1145. data/ext/boost/mpl/list_c.hpp +60 -0
  1146. data/ext/boost/mpl/logical.hpp +21 -0
  1147. data/ext/boost/mpl/long.hpp +22 -0
  1148. data/ext/boost/mpl/long_fwd.hpp +27 -0
  1149. data/ext/boost/mpl/lower_bound.hpp +143 -0
  1150. data/ext/boost/mpl/map.hpp +57 -0
  1151. data/ext/boost/mpl/map/aux_/at_impl.hpp +144 -0
  1152. data/ext/boost/mpl/map/aux_/begin_end_impl.hpp +50 -0
  1153. data/ext/boost/mpl/map/aux_/clear_impl.hpp +35 -0
  1154. data/ext/boost/mpl/map/aux_/contains_impl.hpp +43 -0
  1155. data/ext/boost/mpl/map/aux_/empty_impl.hpp +34 -0
  1156. data/ext/boost/mpl/map/aux_/erase_impl.hpp +41 -0
  1157. data/ext/boost/mpl/map/aux_/erase_key_impl.hpp +53 -0
  1158. data/ext/boost/mpl/map/aux_/has_key_impl.hpp +44 -0
  1159. data/ext/boost/mpl/map/aux_/include_preprocessed.hpp +53 -0
  1160. data/ext/boost/mpl/map/aux_/insert_impl.hpp +72 -0
  1161. data/ext/boost/mpl/map/aux_/item.hpp +138 -0
  1162. data/ext/boost/mpl/map/aux_/iterator.hpp +169 -0
  1163. data/ext/boost/mpl/map/aux_/key_type_impl.hpp +36 -0
  1164. data/ext/boost/mpl/map/aux_/map0.hpp +74 -0
  1165. data/ext/boost/mpl/map/aux_/numbered.hpp +110 -0
  1166. data/ext/boost/mpl/map/aux_/preprocessed/no_ctps/map10.hpp +350 -0
  1167. data/ext/boost/mpl/map/aux_/preprocessed/no_ctps/map20.hpp +370 -0
  1168. data/ext/boost/mpl/map/aux_/preprocessed/no_ctps/map30.hpp +390 -0
  1169. data/ext/boost/mpl/map/aux_/preprocessed/no_ctps/map40.hpp +410 -0
  1170. data/ext/boost/mpl/map/aux_/preprocessed/no_ctps/map50.hpp +430 -0
  1171. data/ext/boost/mpl/map/aux_/preprocessed/plain/map10.hpp +290 -0
  1172. data/ext/boost/mpl/map/aux_/preprocessed/plain/map20.hpp +310 -0
  1173. data/ext/boost/mpl/map/aux_/preprocessed/plain/map30.hpp +330 -0
  1174. data/ext/boost/mpl/map/aux_/preprocessed/plain/map40.hpp +350 -0
  1175. data/ext/boost/mpl/map/aux_/preprocessed/plain/map50.hpp +370 -0
  1176. data/ext/boost/mpl/map/aux_/preprocessed/typeof_based/map10.hpp +150 -0
  1177. data/ext/boost/mpl/map/aux_/preprocessed/typeof_based/map20.hpp +170 -0
  1178. data/ext/boost/mpl/map/aux_/preprocessed/typeof_based/map30.hpp +190 -0
  1179. data/ext/boost/mpl/map/aux_/preprocessed/typeof_based/map40.hpp +210 -0
  1180. data/ext/boost/mpl/map/aux_/preprocessed/typeof_based/map50.hpp +230 -0
  1181. data/ext/boost/mpl/map/aux_/size_impl.hpp +33 -0
  1182. data/ext/boost/mpl/map/aux_/tag.hpp +24 -0
  1183. data/ext/boost/mpl/map/aux_/value_type_impl.hpp +36 -0
  1184. data/ext/boost/mpl/map/map0.hpp +36 -0
  1185. data/ext/boost/mpl/map/map10.hpp +44 -0
  1186. data/ext/boost/mpl/map/map20.hpp +44 -0
  1187. data/ext/boost/mpl/map/map30.hpp +44 -0
  1188. data/ext/boost/mpl/map/map40.hpp +44 -0
  1189. data/ext/boost/mpl/map/map50.hpp +44 -0
  1190. data/ext/boost/mpl/math/fixed_c.hpp +36 -0
  1191. data/ext/boost/mpl/math/is_even.hpp +54 -0
  1192. data/ext/boost/mpl/math/rational_c.hpp +37 -0
  1193. data/ext/boost/mpl/max.hpp +19 -0
  1194. data/ext/boost/mpl/max_element.hpp +72 -0
  1195. data/ext/boost/mpl/min.hpp +19 -0
  1196. data/ext/boost/mpl/min_element.hpp +40 -0
  1197. data/ext/boost/mpl/min_max.hpp +46 -0
  1198. data/ext/boost/mpl/minus.hpp +21 -0
  1199. data/ext/boost/mpl/modulus.hpp +22 -0
  1200. data/ext/boost/mpl/multiplies.hpp +53 -0
  1201. data/ext/boost/mpl/multiset/aux_/count_impl.hpp +82 -0
  1202. data/ext/boost/mpl/multiset/aux_/insert_impl.hpp +34 -0
  1203. data/ext/boost/mpl/multiset/aux_/item.hpp +114 -0
  1204. data/ext/boost/mpl/multiset/aux_/multiset0.hpp +34 -0
  1205. data/ext/boost/mpl/multiset/aux_/tag.hpp +23 -0
  1206. data/ext/boost/mpl/multiset/multiset0.hpp +36 -0
  1207. data/ext/boost/mpl/negate.hpp +81 -0
  1208. data/ext/boost/mpl/next.hpp +19 -0
  1209. data/ext/boost/mpl/next_prior.hpp +49 -0
  1210. data/ext/boost/mpl/not.hpp +51 -0
  1211. data/ext/boost/mpl/not_equal_to.hpp +21 -0
  1212. data/ext/boost/mpl/numeric_cast.hpp +41 -0
  1213. data/ext/boost/mpl/or.hpp +57 -0
  1214. data/ext/boost/mpl/order.hpp +41 -0
  1215. data/ext/boost/mpl/order_fwd.hpp +25 -0
  1216. data/ext/boost/mpl/pair.hpp +70 -0
  1217. data/ext/boost/mpl/pair_view.hpp +169 -0
  1218. data/ext/boost/mpl/partition.hpp +53 -0
  1219. data/ext/boost/mpl/placeholders.hpp +100 -0
  1220. data/ext/boost/mpl/plus.hpp +21 -0
  1221. data/ext/boost/mpl/pop_back.hpp +39 -0
  1222. data/ext/boost/mpl/pop_back_fwd.hpp +24 -0
  1223. data/ext/boost/mpl/pop_front.hpp +39 -0
  1224. data/ext/boost/mpl/pop_front_fwd.hpp +24 -0
  1225. data/ext/boost/mpl/print.hpp +74 -0
  1226. data/ext/boost/mpl/prior.hpp +19 -0
  1227. data/ext/boost/mpl/protect.hpp +55 -0
  1228. data/ext/boost/mpl/push_back.hpp +53 -0
  1229. data/ext/boost/mpl/push_back_fwd.hpp +24 -0
  1230. data/ext/boost/mpl/push_front.hpp +52 -0
  1231. data/ext/boost/mpl/push_front_fwd.hpp +24 -0
  1232. data/ext/boost/mpl/quote.hpp +140 -0
  1233. data/ext/boost/mpl/range_c.hpp +48 -0
  1234. data/ext/boost/mpl/remove.hpp +52 -0
  1235. data/ext/boost/mpl/remove_if.hpp +83 -0
  1236. data/ext/boost/mpl/replace.hpp +55 -0
  1237. data/ext/boost/mpl/replace_if.hpp +88 -0
  1238. data/ext/boost/mpl/reverse.hpp +38 -0
  1239. data/ext/boost/mpl/reverse_fold.hpp +50 -0
  1240. data/ext/boost/mpl/reverse_iter_fold.hpp +56 -0
  1241. data/ext/boost/mpl/same_as.hpp +55 -0
  1242. data/ext/boost/mpl/sequence_tag.hpp +124 -0
  1243. data/ext/boost/mpl/sequence_tag_fwd.hpp +26 -0
  1244. data/ext/boost/mpl/set.hpp +57 -0
  1245. data/ext/boost/mpl/set/aux_/at_impl.hpp +40 -0
  1246. data/ext/boost/mpl/set/aux_/begin_end_impl.hpp +43 -0
  1247. data/ext/boost/mpl/set/aux_/clear_impl.hpp +35 -0
  1248. data/ext/boost/mpl/set/aux_/empty_impl.hpp +34 -0
  1249. data/ext/boost/mpl/set/aux_/erase_impl.hpp +41 -0
  1250. data/ext/boost/mpl/set/aux_/erase_key_impl.hpp +53 -0
  1251. data/ext/boost/mpl/set/aux_/has_key_impl.hpp +60 -0
  1252. data/ext/boost/mpl/set/aux_/include_preprocessed.hpp +42 -0
  1253. data/ext/boost/mpl/set/aux_/insert_impl.hpp +65 -0
  1254. data/ext/boost/mpl/set/aux_/item.hpp +82 -0
  1255. data/ext/boost/mpl/set/aux_/iterator.hpp +97 -0
  1256. data/ext/boost/mpl/set/aux_/key_type_impl.hpp +34 -0
  1257. data/ext/boost/mpl/set/aux_/numbered.hpp +48 -0
  1258. data/ext/boost/mpl/set/aux_/numbered_c.hpp +48 -0
  1259. data/ext/boost/mpl/set/aux_/preprocessed/plain/set10.hpp +140 -0
  1260. data/ext/boost/mpl/set/aux_/preprocessed/plain/set10_c.hpp +145 -0
  1261. data/ext/boost/mpl/set/aux_/preprocessed/plain/set20.hpp +168 -0
  1262. data/ext/boost/mpl/set/aux_/preprocessed/plain/set20_c.hpp +154 -0
  1263. data/ext/boost/mpl/set/aux_/preprocessed/plain/set30.hpp +195 -0
  1264. data/ext/boost/mpl/set/aux_/preprocessed/plain/set30_c.hpp +164 -0
  1265. data/ext/boost/mpl/set/aux_/preprocessed/plain/set40.hpp +221 -0
  1266. data/ext/boost/mpl/set/aux_/preprocessed/plain/set40_c.hpp +174 -0
  1267. data/ext/boost/mpl/set/aux_/preprocessed/plain/set50.hpp +250 -0
  1268. data/ext/boost/mpl/set/aux_/preprocessed/plain/set50_c.hpp +184 -0
  1269. data/ext/boost/mpl/set/aux_/set0.hpp +69 -0
  1270. data/ext/boost/mpl/set/aux_/size_impl.hpp +33 -0
  1271. data/ext/boost/mpl/set/aux_/tag.hpp +24 -0
  1272. data/ext/boost/mpl/set/aux_/value_type_impl.hpp +34 -0
  1273. data/ext/boost/mpl/set/set0.hpp +35 -0
  1274. data/ext/boost/mpl/set/set0_c.hpp +32 -0
  1275. data/ext/boost/mpl/set/set10.hpp +44 -0
  1276. data/ext/boost/mpl/set/set10_c.hpp +45 -0
  1277. data/ext/boost/mpl/set/set20.hpp +44 -0
  1278. data/ext/boost/mpl/set/set20_c.hpp +45 -0
  1279. data/ext/boost/mpl/set/set30.hpp +44 -0
  1280. data/ext/boost/mpl/set/set30_c.hpp +45 -0
  1281. data/ext/boost/mpl/set/set40.hpp +44 -0
  1282. data/ext/boost/mpl/set/set40_c.hpp +45 -0
  1283. data/ext/boost/mpl/set/set50.hpp +44 -0
  1284. data/ext/boost/mpl/set/set50_c.hpp +45 -0
  1285. data/ext/boost/mpl/set_c.hpp +60 -0
  1286. data/ext/boost/mpl/shift_left.hpp +22 -0
  1287. data/ext/boost/mpl/shift_right.hpp +22 -0
  1288. data/ext/boost/mpl/single_view.hpp +38 -0
  1289. data/ext/boost/mpl/size.hpp +42 -0
  1290. data/ext/boost/mpl/size_fwd.hpp +24 -0
  1291. data/ext/boost/mpl/size_t.hpp +25 -0
  1292. data/ext/boost/mpl/size_t_fwd.hpp +28 -0
  1293. data/ext/boost/mpl/sizeof.hpp +36 -0
  1294. data/ext/boost/mpl/sort.hpp +27 -0
  1295. data/ext/boost/mpl/stable_partition.hpp +75 -0
  1296. data/ext/boost/mpl/switch.hpp +49 -0
  1297. data/ext/boost/mpl/tag.hpp +52 -0
  1298. data/ext/boost/mpl/times.hpp +21 -0
  1299. data/ext/boost/mpl/transform.hpp +145 -0
  1300. data/ext/boost/mpl/transform_view.hpp +46 -0
  1301. data/ext/boost/mpl/unique.hpp +85 -0
  1302. data/ext/boost/mpl/unpack_args.hpp +146 -0
  1303. data/ext/boost/mpl/upper_bound.hpp +141 -0
  1304. data/ext/boost/mpl/value_type.hpp +42 -0
  1305. data/ext/boost/mpl/value_type_fwd.hpp +25 -0
  1306. data/ext/boost/mpl/vector.hpp +57 -0
  1307. data/ext/boost/mpl/vector/aux_/O1_size.hpp +56 -0
  1308. data/ext/boost/mpl/vector/aux_/at.hpp +116 -0
  1309. data/ext/boost/mpl/vector/aux_/back.hpp +59 -0
  1310. data/ext/boost/mpl/vector/aux_/begin_end.hpp +49 -0
  1311. data/ext/boost/mpl/vector/aux_/clear.hpp +55 -0
  1312. data/ext/boost/mpl/vector/aux_/empty.hpp +68 -0
  1313. data/ext/boost/mpl/vector/aux_/front.hpp +56 -0
  1314. data/ext/boost/mpl/vector/aux_/include_preprocessed.hpp +55 -0
  1315. data/ext/boost/mpl/vector/aux_/item.hpp +103 -0
  1316. data/ext/boost/mpl/vector/aux_/iterator.hpp +130 -0
  1317. data/ext/boost/mpl/vector/aux_/numbered.hpp +218 -0
  1318. data/ext/boost/mpl/vector/aux_/numbered_c.hpp +77 -0
  1319. data/ext/boost/mpl/vector/aux_/pop_back.hpp +40 -0
  1320. data/ext/boost/mpl/vector/aux_/pop_front.hpp +40 -0
  1321. data/ext/boost/mpl/vector/aux_/preprocessed/no_ctps/vector10.hpp +1528 -0
  1322. data/ext/boost/mpl/vector/aux_/preprocessed/no_ctps/vector10_c.hpp +149 -0
  1323. data/ext/boost/mpl/vector/aux_/preprocessed/no_ctps/vector20.hpp +1804 -0
  1324. data/ext/boost/mpl/vector/aux_/preprocessed/no_ctps/vector20_c.hpp +195 -0
  1325. data/ext/boost/mpl/vector/aux_/preprocessed/no_ctps/vector30.hpp +2124 -0
  1326. data/ext/boost/mpl/vector/aux_/preprocessed/no_ctps/vector30_c.hpp +238 -0
  1327. data/ext/boost/mpl/vector/aux_/preprocessed/no_ctps/vector40.hpp +2444 -0
  1328. data/ext/boost/mpl/vector/aux_/preprocessed/no_ctps/vector40_c.hpp +281 -0
  1329. data/ext/boost/mpl/vector/aux_/preprocessed/no_ctps/vector50.hpp +2764 -0
  1330. data/ext/boost/mpl/vector/aux_/preprocessed/no_ctps/vector50_c.hpp +325 -0
  1331. data/ext/boost/mpl/vector/aux_/preprocessed/plain/vector10.hpp +829 -0
  1332. data/ext/boost/mpl/vector/aux_/preprocessed/plain/vector10_c.hpp +149 -0
  1333. data/ext/boost/mpl/vector/aux_/preprocessed/plain/vector20.hpp +1144 -0
  1334. data/ext/boost/mpl/vector/aux_/preprocessed/plain/vector20_c.hpp +195 -0
  1335. data/ext/boost/mpl/vector/aux_/preprocessed/plain/vector30.hpp +1464 -0
  1336. data/ext/boost/mpl/vector/aux_/preprocessed/plain/vector30_c.hpp +238 -0
  1337. data/ext/boost/mpl/vector/aux_/preprocessed/plain/vector40.hpp +1784 -0
  1338. data/ext/boost/mpl/vector/aux_/preprocessed/plain/vector40_c.hpp +281 -0
  1339. data/ext/boost/mpl/vector/aux_/preprocessed/plain/vector50.hpp +2104 -0
  1340. data/ext/boost/mpl/vector/aux_/preprocessed/plain/vector50_c.hpp +325 -0
  1341. data/ext/boost/mpl/vector/aux_/preprocessed/typeof_based/vector10.hpp +139 -0
  1342. data/ext/boost/mpl/vector/aux_/preprocessed/typeof_based/vector10_c.hpp +154 -0
  1343. data/ext/boost/mpl/vector/aux_/preprocessed/typeof_based/vector20.hpp +159 -0
  1344. data/ext/boost/mpl/vector/aux_/preprocessed/typeof_based/vector20_c.hpp +163 -0
  1345. data/ext/boost/mpl/vector/aux_/preprocessed/typeof_based/vector30.hpp +179 -0
  1346. data/ext/boost/mpl/vector/aux_/preprocessed/typeof_based/vector30_c.hpp +173 -0
  1347. data/ext/boost/mpl/vector/aux_/preprocessed/typeof_based/vector40.hpp +199 -0
  1348. data/ext/boost/mpl/vector/aux_/preprocessed/typeof_based/vector40_c.hpp +183 -0
  1349. data/ext/boost/mpl/vector/aux_/preprocessed/typeof_based/vector50.hpp +219 -0
  1350. data/ext/boost/mpl/vector/aux_/preprocessed/typeof_based/vector50_c.hpp +193 -0
  1351. data/ext/boost/mpl/vector/aux_/push_back.hpp +40 -0
  1352. data/ext/boost/mpl/vector/aux_/push_front.hpp +40 -0
  1353. data/ext/boost/mpl/vector/aux_/size.hpp +49 -0
  1354. data/ext/boost/mpl/vector/aux_/tag.hpp +32 -0
  1355. data/ext/boost/mpl/vector/aux_/vector0.hpp +52 -0
  1356. data/ext/boost/mpl/vector/vector0.hpp +34 -0
  1357. data/ext/boost/mpl/vector/vector0_c.hpp +31 -0
  1358. data/ext/boost/mpl/vector/vector10.hpp +45 -0
  1359. data/ext/boost/mpl/vector/vector10_c.hpp +46 -0
  1360. data/ext/boost/mpl/vector/vector20.hpp +45 -0
  1361. data/ext/boost/mpl/vector/vector20_c.hpp +46 -0
  1362. data/ext/boost/mpl/vector/vector30.hpp +45 -0
  1363. data/ext/boost/mpl/vector/vector30_c.hpp +47 -0
  1364. data/ext/boost/mpl/vector/vector40.hpp +45 -0
  1365. data/ext/boost/mpl/vector/vector40_c.hpp +46 -0
  1366. data/ext/boost/mpl/vector/vector50.hpp +45 -0
  1367. data/ext/boost/mpl/vector/vector50_c.hpp +46 -0
  1368. data/ext/boost/mpl/vector_c.hpp +60 -0
  1369. data/ext/boost/mpl/void.hpp +76 -0
  1370. data/ext/boost/mpl/void_fwd.hpp +26 -0
  1371. data/ext/boost/mpl/zip_view.hpp +64 -0
  1372. data/ext/boost/next_prior.hpp +51 -0
  1373. data/ext/boost/noncopyable.hpp +36 -0
  1374. data/ext/boost/none.hpp +43 -0
  1375. data/ext/boost/optional.hpp +18 -0
  1376. data/ext/boost/optional/optional.hpp +922 -0
  1377. data/ext/boost/optional/optional_fwd.hpp +22 -0
  1378. data/ext/boost/optional/optional_io.hpp +84 -0
  1379. data/ext/boost/preprocessor/arithmetic.hpp +25 -0
  1380. data/ext/boost/preprocessor/arithmetic/add.hpp +51 -0
  1381. data/ext/boost/preprocessor/arithmetic/dec.hpp +288 -0
  1382. data/ext/boost/preprocessor/arithmetic/detail/div_base.hpp +61 -0
  1383. data/ext/boost/preprocessor/arithmetic/div.hpp +39 -0
  1384. data/ext/boost/preprocessor/arithmetic/inc.hpp +288 -0
  1385. data/ext/boost/preprocessor/arithmetic/mod.hpp +39 -0
  1386. data/ext/boost/preprocessor/arithmetic/mul.hpp +53 -0
  1387. data/ext/boost/preprocessor/arithmetic/sub.hpp +50 -0
  1388. data/ext/boost/preprocessor/array.hpp +27 -0
  1389. data/ext/boost/preprocessor/array/data.hpp +28 -0
  1390. data/ext/boost/preprocessor/array/elem.hpp +29 -0
  1391. data/ext/boost/preprocessor/array/insert.hpp +55 -0
  1392. data/ext/boost/preprocessor/array/pop_back.hpp +37 -0
  1393. data/ext/boost/preprocessor/array/pop_front.hpp +38 -0
  1394. data/ext/boost/preprocessor/array/push_back.hpp +33 -0
  1395. data/ext/boost/preprocessor/array/push_front.hpp +33 -0
  1396. data/ext/boost/preprocessor/array/remove.hpp +54 -0
  1397. data/ext/boost/preprocessor/array/replace.hpp +49 -0
  1398. data/ext/boost/preprocessor/array/reverse.hpp +29 -0
  1399. data/ext/boost/preprocessor/array/size.hpp +28 -0
  1400. data/ext/boost/preprocessor/assert_msg.hpp +17 -0
  1401. data/ext/boost/preprocessor/cat.hpp +35 -0
  1402. data/ext/boost/preprocessor/comma.hpp +17 -0
  1403. data/ext/boost/preprocessor/comma_if.hpp +17 -0
  1404. data/ext/boost/preprocessor/comparison.hpp +24 -0
  1405. data/ext/boost/preprocessor/comparison/equal.hpp +34 -0
  1406. data/ext/boost/preprocessor/comparison/greater.hpp +38 -0
  1407. data/ext/boost/preprocessor/comparison/greater_equal.hpp +38 -0
  1408. data/ext/boost/preprocessor/comparison/less.hpp +46 -0
  1409. data/ext/boost/preprocessor/comparison/less_equal.hpp +39 -0
  1410. data/ext/boost/preprocessor/comparison/not_equal.hpp +814 -0
  1411. data/ext/boost/preprocessor/config/config.hpp +70 -0
  1412. data/ext/boost/preprocessor/config/limits.hpp +29 -0
  1413. data/ext/boost/preprocessor/control.hpp +22 -0
  1414. data/ext/boost/preprocessor/control/deduce_d.hpp +22 -0
  1415. data/ext/boost/preprocessor/control/detail/dmc/while.hpp +536 -0
  1416. data/ext/boost/preprocessor/control/detail/edg/while.hpp +534 -0
  1417. data/ext/boost/preprocessor/control/detail/msvc/while.hpp +277 -0
  1418. data/ext/boost/preprocessor/control/detail/while.hpp +536 -0
  1419. data/ext/boost/preprocessor/control/expr_if.hpp +30 -0
  1420. data/ext/boost/preprocessor/control/expr_iif.hpp +31 -0
  1421. data/ext/boost/preprocessor/control/if.hpp +30 -0
  1422. data/ext/boost/preprocessor/control/iif.hpp +34 -0
  1423. data/ext/boost/preprocessor/control/while.hpp +312 -0
  1424. data/ext/boost/preprocessor/debug.hpp +18 -0
  1425. data/ext/boost/preprocessor/debug/assert.hpp +44 -0
  1426. data/ext/boost/preprocessor/debug/error.hpp +33 -0
  1427. data/ext/boost/preprocessor/debug/line.hpp +35 -0
  1428. data/ext/boost/preprocessor/dec.hpp +17 -0
  1429. data/ext/boost/preprocessor/detail/auto_rec.hpp +293 -0
  1430. data/ext/boost/preprocessor/detail/check.hpp +48 -0
  1431. data/ext/boost/preprocessor/detail/dmc/auto_rec.hpp +286 -0
  1432. data/ext/boost/preprocessor/detail/is_binary.hpp +30 -0
  1433. data/ext/boost/preprocessor/detail/is_nullary.hpp +30 -0
  1434. data/ext/boost/preprocessor/detail/is_unary.hpp +30 -0
  1435. data/ext/boost/preprocessor/detail/null.hpp +17 -0
  1436. data/ext/boost/preprocessor/detail/split.hpp +35 -0
  1437. data/ext/boost/preprocessor/empty.hpp +17 -0
  1438. data/ext/boost/preprocessor/enum.hpp +17 -0
  1439. data/ext/boost/preprocessor/enum_params.hpp +17 -0
  1440. data/ext/boost/preprocessor/enum_params_with_a_default.hpp +17 -0
  1441. data/ext/boost/preprocessor/enum_params_with_defaults.hpp +17 -0
  1442. data/ext/boost/preprocessor/enum_shifted.hpp +17 -0
  1443. data/ext/boost/preprocessor/enum_shifted_params.hpp +17 -0
  1444. data/ext/boost/preprocessor/expand.hpp +17 -0
  1445. data/ext/boost/preprocessor/expr_if.hpp +17 -0
  1446. data/ext/boost/preprocessor/facilities.hpp +21 -0
  1447. data/ext/boost/preprocessor/facilities/apply.hpp +34 -0
  1448. data/ext/boost/preprocessor/facilities/empty.hpp +21 -0
  1449. data/ext/boost/preprocessor/facilities/expand.hpp +28 -0
  1450. data/ext/boost/preprocessor/facilities/identity.hpp +23 -0
  1451. data/ext/boost/preprocessor/facilities/intercept.hpp +277 -0
  1452. data/ext/boost/preprocessor/facilities/is_1.hpp +23 -0
  1453. data/ext/boost/preprocessor/facilities/is_empty.hpp +43 -0
  1454. data/ext/boost/preprocessor/facilities/is_empty_or_1.hpp +30 -0
  1455. data/ext/boost/preprocessor/for.hpp +17 -0
  1456. data/ext/boost/preprocessor/identity.hpp +17 -0
  1457. data/ext/boost/preprocessor/if.hpp +17 -0
  1458. data/ext/boost/preprocessor/inc.hpp +17 -0
  1459. data/ext/boost/preprocessor/iterate.hpp +17 -0
  1460. data/ext/boost/preprocessor/iteration.hpp +19 -0
  1461. data/ext/boost/preprocessor/iteration/detail/bounds/lower1.hpp +99 -0
  1462. data/ext/boost/preprocessor/iteration/detail/bounds/lower2.hpp +99 -0
  1463. data/ext/boost/preprocessor/iteration/detail/bounds/lower3.hpp +99 -0
  1464. data/ext/boost/preprocessor/iteration/detail/bounds/lower4.hpp +99 -0
  1465. data/ext/boost/preprocessor/iteration/detail/bounds/lower5.hpp +99 -0
  1466. data/ext/boost/preprocessor/iteration/detail/bounds/upper1.hpp +99 -0
  1467. data/ext/boost/preprocessor/iteration/detail/bounds/upper2.hpp +99 -0
  1468. data/ext/boost/preprocessor/iteration/detail/bounds/upper3.hpp +99 -0
  1469. data/ext/boost/preprocessor/iteration/detail/bounds/upper4.hpp +99 -0
  1470. data/ext/boost/preprocessor/iteration/detail/bounds/upper5.hpp +99 -0
  1471. data/ext/boost/preprocessor/iteration/detail/finish.hpp +99 -0
  1472. data/ext/boost/preprocessor/iteration/detail/iter/forward1.hpp +1342 -0
  1473. data/ext/boost/preprocessor/iteration/detail/iter/forward2.hpp +1338 -0
  1474. data/ext/boost/preprocessor/iteration/detail/iter/forward3.hpp +1338 -0
  1475. data/ext/boost/preprocessor/iteration/detail/iter/forward4.hpp +1338 -0
  1476. data/ext/boost/preprocessor/iteration/detail/iter/forward5.hpp +1338 -0
  1477. data/ext/boost/preprocessor/iteration/detail/iter/reverse1.hpp +1296 -0
  1478. data/ext/boost/preprocessor/iteration/detail/iter/reverse2.hpp +1296 -0
  1479. data/ext/boost/preprocessor/iteration/detail/iter/reverse3.hpp +1296 -0
  1480. data/ext/boost/preprocessor/iteration/detail/iter/reverse4.hpp +1296 -0
  1481. data/ext/boost/preprocessor/iteration/detail/iter/reverse5.hpp +1296 -0
  1482. data/ext/boost/preprocessor/iteration/detail/local.hpp +812 -0
  1483. data/ext/boost/preprocessor/iteration/detail/rlocal.hpp +782 -0
  1484. data/ext/boost/preprocessor/iteration/detail/self.hpp +21 -0
  1485. data/ext/boost/preprocessor/iteration/detail/start.hpp +99 -0
  1486. data/ext/boost/preprocessor/iteration/iterate.hpp +82 -0
  1487. data/ext/boost/preprocessor/iteration/local.hpp +26 -0
  1488. data/ext/boost/preprocessor/iteration/self.hpp +19 -0
  1489. data/ext/boost/preprocessor/library.hpp +34 -0
  1490. data/ext/boost/preprocessor/limits.hpp +17 -0
  1491. data/ext/boost/preprocessor/list.hpp +35 -0
  1492. data/ext/boost/preprocessor/list/adt.hpp +73 -0
  1493. data/ext/boost/preprocessor/list/append.hpp +40 -0
  1494. data/ext/boost/preprocessor/list/at.hpp +39 -0
  1495. data/ext/boost/preprocessor/list/cat.hpp +42 -0
  1496. data/ext/boost/preprocessor/list/detail/dmc/fold_left.hpp +279 -0
  1497. data/ext/boost/preprocessor/list/detail/edg/fold_left.hpp +536 -0
  1498. data/ext/boost/preprocessor/list/detail/edg/fold_right.hpp +794 -0
  1499. data/ext/boost/preprocessor/list/detail/fold_left.hpp +279 -0
  1500. data/ext/boost/preprocessor/list/detail/fold_right.hpp +277 -0
  1501. data/ext/boost/preprocessor/list/enum.hpp +41 -0
  1502. data/ext/boost/preprocessor/list/filter.hpp +54 -0
  1503. data/ext/boost/preprocessor/list/first_n.hpp +58 -0
  1504. data/ext/boost/preprocessor/list/fold_left.hpp +303 -0
  1505. data/ext/boost/preprocessor/list/fold_right.hpp +40 -0
  1506. data/ext/boost/preprocessor/list/for_each.hpp +49 -0
  1507. data/ext/boost/preprocessor/list/for_each_i.hpp +65 -0
  1508. data/ext/boost/preprocessor/list/for_each_product.hpp +141 -0
  1509. data/ext/boost/preprocessor/list/rest_n.hpp +55 -0
  1510. data/ext/boost/preprocessor/list/reverse.hpp +40 -0
  1511. data/ext/boost/preprocessor/list/size.hpp +58 -0
  1512. data/ext/boost/preprocessor/list/to_tuple.hpp +38 -0
  1513. data/ext/boost/preprocessor/list/transform.hpp +49 -0
  1514. data/ext/boost/preprocessor/logical.hpp +29 -0
  1515. data/ext/boost/preprocessor/logical/and.hpp +30 -0
  1516. data/ext/boost/preprocessor/logical/bitand.hpp +38 -0
  1517. data/ext/boost/preprocessor/logical/bitnor.hpp +38 -0
  1518. data/ext/boost/preprocessor/logical/bitor.hpp +38 -0
  1519. data/ext/boost/preprocessor/logical/bitxor.hpp +38 -0
  1520. data/ext/boost/preprocessor/logical/bool.hpp +288 -0
  1521. data/ext/boost/preprocessor/logical/compl.hpp +36 -0
  1522. data/ext/boost/preprocessor/logical/nor.hpp +30 -0
  1523. data/ext/boost/preprocessor/logical/not.hpp +30 -0
  1524. data/ext/boost/preprocessor/logical/or.hpp +30 -0
  1525. data/ext/boost/preprocessor/logical/xor.hpp +30 -0
  1526. data/ext/boost/preprocessor/max.hpp +17 -0
  1527. data/ext/boost/preprocessor/min.hpp +17 -0
  1528. data/ext/boost/preprocessor/punctuation.hpp +20 -0
  1529. data/ext/boost/preprocessor/punctuation/comma.hpp +21 -0
  1530. data/ext/boost/preprocessor/punctuation/comma_if.hpp +31 -0
  1531. data/ext/boost/preprocessor/punctuation/paren.hpp +23 -0
  1532. data/ext/boost/preprocessor/punctuation/paren_if.hpp +38 -0
  1533. data/ext/boost/preprocessor/repeat.hpp +17 -0
  1534. data/ext/boost/preprocessor/repeat_2nd.hpp +17 -0
  1535. data/ext/boost/preprocessor/repeat_3rd.hpp +17 -0
  1536. data/ext/boost/preprocessor/repeat_from_to.hpp +17 -0
  1537. data/ext/boost/preprocessor/repeat_from_to_2nd.hpp +17 -0
  1538. data/ext/boost/preprocessor/repeat_from_to_3rd.hpp +17 -0
  1539. data/ext/boost/preprocessor/repetition.hpp +32 -0
  1540. data/ext/boost/preprocessor/repetition/deduce_r.hpp +22 -0
  1541. data/ext/boost/preprocessor/repetition/deduce_z.hpp +22 -0
  1542. data/ext/boost/preprocessor/repetition/detail/dmc/for.hpp +536 -0
  1543. data/ext/boost/preprocessor/repetition/detail/edg/for.hpp +534 -0
  1544. data/ext/boost/preprocessor/repetition/detail/for.hpp +536 -0
  1545. data/ext/boost/preprocessor/repetition/detail/msvc/for.hpp +277 -0
  1546. data/ext/boost/preprocessor/repetition/enum.hpp +66 -0
  1547. data/ext/boost/preprocessor/repetition/enum_binary_params.hpp +54 -0
  1548. data/ext/boost/preprocessor/repetition/enum_params.hpp +41 -0
  1549. data/ext/boost/preprocessor/repetition/enum_params_with_a_default.hpp +25 -0
  1550. data/ext/boost/preprocessor/repetition/enum_params_with_defaults.hpp +24 -0
  1551. data/ext/boost/preprocessor/repetition/enum_shifted.hpp +68 -0
  1552. data/ext/boost/preprocessor/repetition/enum_shifted_binary_params.hpp +51 -0
  1553. data/ext/boost/preprocessor/repetition/enum_shifted_params.hpp +44 -0
  1554. data/ext/boost/preprocessor/repetition/enum_trailing.hpp +63 -0
  1555. data/ext/boost/preprocessor/repetition/enum_trailing_binary_params.hpp +53 -0
  1556. data/ext/boost/preprocessor/repetition/enum_trailing_params.hpp +38 -0
  1557. data/ext/boost/preprocessor/repetition/for.hpp +306 -0
  1558. data/ext/boost/preprocessor/repetition/repeat.hpp +825 -0
  1559. data/ext/boost/preprocessor/repetition/repeat_from_to.hpp +87 -0
  1560. data/ext/boost/preprocessor/selection.hpp +18 -0
  1561. data/ext/boost/preprocessor/selection/max.hpp +39 -0
  1562. data/ext/boost/preprocessor/selection/min.hpp +39 -0
  1563. data/ext/boost/preprocessor/seq.hpp +41 -0
  1564. data/ext/boost/preprocessor/seq/cat.hpp +48 -0
  1565. data/ext/boost/preprocessor/seq/detail/split.hpp +284 -0
  1566. data/ext/boost/preprocessor/seq/elem.hpp +304 -0
  1567. data/ext/boost/preprocessor/seq/enum.hpp +288 -0
  1568. data/ext/boost/preprocessor/seq/filter.hpp +54 -0
  1569. data/ext/boost/preprocessor/seq/first_n.hpp +30 -0
  1570. data/ext/boost/preprocessor/seq/fold_left.hpp +1070 -0
  1571. data/ext/boost/preprocessor/seq/fold_right.hpp +288 -0
  1572. data/ext/boost/preprocessor/seq/for_each.hpp +60 -0
  1573. data/ext/boost/preprocessor/seq/for_each_i.hpp +61 -0
  1574. data/ext/boost/preprocessor/seq/for_each_product.hpp +126 -0
  1575. data/ext/boost/preprocessor/seq/insert.hpp +28 -0
  1576. data/ext/boost/preprocessor/seq/pop_back.hpp +29 -0
  1577. data/ext/boost/preprocessor/seq/pop_front.hpp +27 -0
  1578. data/ext/boost/preprocessor/seq/push_back.hpp +19 -0
  1579. data/ext/boost/preprocessor/seq/push_front.hpp +19 -0
  1580. data/ext/boost/preprocessor/seq/remove.hpp +29 -0
  1581. data/ext/boost/preprocessor/seq/replace.hpp +29 -0
  1582. data/ext/boost/preprocessor/seq/rest_n.hpp +30 -0
  1583. data/ext/boost/preprocessor/seq/reverse.hpp +39 -0
  1584. data/ext/boost/preprocessor/seq/seq.hpp +44 -0
  1585. data/ext/boost/preprocessor/seq/size.hpp +548 -0
  1586. data/ext/boost/preprocessor/seq/subseq.hpp +28 -0
  1587. data/ext/boost/preprocessor/seq/to_array.hpp +28 -0
  1588. data/ext/boost/preprocessor/seq/to_tuple.hpp +27 -0
  1589. data/ext/boost/preprocessor/seq/transform.hpp +48 -0
  1590. data/ext/boost/preprocessor/slot.hpp +17 -0
  1591. data/ext/boost/preprocessor/slot/counter.hpp +25 -0
  1592. data/ext/boost/preprocessor/slot/detail/counter.hpp +269 -0
  1593. data/ext/boost/preprocessor/slot/detail/def.hpp +49 -0
  1594. data/ext/boost/preprocessor/slot/detail/shared.hpp +247 -0
  1595. data/ext/boost/preprocessor/slot/detail/slot1.hpp +267 -0
  1596. data/ext/boost/preprocessor/slot/detail/slot2.hpp +267 -0
  1597. data/ext/boost/preprocessor/slot/detail/slot3.hpp +267 -0
  1598. data/ext/boost/preprocessor/slot/detail/slot4.hpp +267 -0
  1599. data/ext/boost/preprocessor/slot/detail/slot5.hpp +267 -0
  1600. data/ext/boost/preprocessor/slot/slot.hpp +32 -0
  1601. data/ext/boost/preprocessor/stringize.hpp +33 -0
  1602. data/ext/boost/preprocessor/tuple.hpp +24 -0
  1603. data/ext/boost/preprocessor/tuple/eat.hpp +57 -0
  1604. data/ext/boost/preprocessor/tuple/elem.hpp +385 -0
  1605. data/ext/boost/preprocessor/tuple/rem.hpp +72 -0
  1606. data/ext/boost/preprocessor/tuple/reverse.hpp +62 -0
  1607. data/ext/boost/preprocessor/tuple/to_list.hpp +62 -0
  1608. data/ext/boost/preprocessor/tuple/to_seq.hpp +60 -0
  1609. data/ext/boost/preprocessor/while.hpp +17 -0
  1610. data/ext/boost/preprocessor/wstringize.hpp +29 -0
  1611. data/ext/boost/ref.hpp +178 -0
  1612. data/ext/boost/shared_ptr.hpp +558 -0
  1613. data/ext/boost/src/barrier.cpp +42 -0
  1614. data/ext/boost/src/condition.cpp +692 -0
  1615. data/ext/boost/src/exceptions.cpp +147 -0
  1616. data/ext/boost/src/mutex.cpp +561 -0
  1617. data/ext/boost/src/mutex.inl +128 -0
  1618. data/ext/boost/src/once.cpp +213 -0
  1619. data/ext/boost/src/recursive_mutex.cpp +1040 -0
  1620. data/ext/boost/src/thread.cpp +371 -0
  1621. data/ext/boost/src/timeconv.inl +130 -0
  1622. data/ext/boost/src/tss.cpp +251 -0
  1623. data/ext/boost/src/tss_dll.cpp +72 -0
  1624. data/ext/boost/src/tss_hooks.cpp +212 -0
  1625. data/ext/boost/src/tss_null.cpp +33 -0
  1626. data/ext/boost/src/tss_pe.cpp +179 -0
  1627. data/ext/boost/src/xtime.cpp +158 -0
  1628. data/ext/boost/static_assert.hpp +118 -0
  1629. data/ext/boost/thread.hpp +19 -0
  1630. data/ext/boost/thread/barrier.hpp +44 -0
  1631. data/ext/boost/thread/condition.hpp +201 -0
  1632. data/ext/boost/thread/detail/config.hpp +95 -0
  1633. data/ext/boost/thread/detail/force_cast.hpp +39 -0
  1634. data/ext/boost/thread/detail/lock.hpp +209 -0
  1635. data/ext/boost/thread/detail/read_write_lock.hpp +1106 -0
  1636. data/ext/boost/thread/detail/singleton.hpp +59 -0
  1637. data/ext/boost/thread/detail/tss_hooks.hpp +78 -0
  1638. data/ext/boost/thread/exceptions.hpp +97 -0
  1639. data/ext/boost/thread/mutex.hpp +170 -0
  1640. data/ext/boost/thread/once.hpp +37 -0
  1641. data/ext/boost/thread/recursive_mutex.hpp +184 -0
  1642. data/ext/boost/thread/thread.hpp +90 -0
  1643. data/ext/boost/thread/tss.hpp +128 -0
  1644. data/ext/boost/thread/xtime.hpp +54 -0
  1645. data/ext/boost/throw_exception.hpp +46 -0
  1646. data/ext/boost/type.hpp +18 -0
  1647. data/ext/boost/type_traits/add_const.hpp +47 -0
  1648. data/ext/boost/type_traits/add_cv.hpp +48 -0
  1649. data/ext/boost/type_traits/add_pointer.hpp +72 -0
  1650. data/ext/boost/type_traits/add_reference.hpp +89 -0
  1651. data/ext/boost/type_traits/add_volatile.hpp +47 -0
  1652. data/ext/boost/type_traits/aligned_storage.hpp +13 -0
  1653. data/ext/boost/type_traits/alignment_of.hpp +100 -0
  1654. data/ext/boost/type_traits/alignment_traits.hpp +15 -0
  1655. data/ext/boost/type_traits/arithmetic_traits.hpp +20 -0
  1656. data/ext/boost/type_traits/array_traits.hpp +15 -0
  1657. data/ext/boost/type_traits/broken_compiler_spec.hpp +117 -0
  1658. data/ext/boost/type_traits/composite_traits.hpp +29 -0
  1659. data/ext/boost/type_traits/config.hpp +76 -0
  1660. data/ext/boost/type_traits/conversion_traits.hpp +17 -0
  1661. data/ext/boost/type_traits/cv_traits.hpp +24 -0
  1662. data/ext/boost/type_traits/decay.hpp +44 -0
  1663. data/ext/boost/type_traits/detail/bool_trait_def.hpp +173 -0
  1664. data/ext/boost/type_traits/detail/bool_trait_undef.hpp +27 -0
  1665. data/ext/boost/type_traits/detail/cv_traits_impl.hpp +97 -0
  1666. data/ext/boost/type_traits/detail/false_result.hpp +28 -0
  1667. data/ext/boost/type_traits/detail/ice_and.hpp +35 -0
  1668. data/ext/boost/type_traits/detail/ice_eq.hpp +36 -0
  1669. data/ext/boost/type_traits/detail/ice_not.hpp +31 -0
  1670. data/ext/boost/type_traits/detail/ice_or.hpp +34 -0
  1671. data/ext/boost/type_traits/detail/is_function_ptr_helper.hpp +220 -0
  1672. data/ext/boost/type_traits/detail/is_function_ptr_tester.hpp +654 -0
  1673. data/ext/boost/type_traits/detail/is_mem_fun_pointer_impl.hpp +817 -0
  1674. data/ext/boost/type_traits/detail/is_mem_fun_pointer_tester.hpp +2759 -0
  1675. data/ext/boost/type_traits/detail/size_t_trait_def.hpp +58 -0
  1676. data/ext/boost/type_traits/detail/size_t_trait_undef.hpp +16 -0
  1677. data/ext/boost/type_traits/detail/template_arity_spec.hpp +31 -0
  1678. data/ext/boost/type_traits/detail/type_trait_def.hpp +61 -0
  1679. data/ext/boost/type_traits/detail/type_trait_undef.hpp +19 -0
  1680. data/ext/boost/type_traits/detail/wrap.hpp +18 -0
  1681. data/ext/boost/type_traits/detail/yes_no_type.hpp +26 -0
  1682. data/ext/boost/type_traits/extent.hpp +134 -0
  1683. data/ext/boost/type_traits/function_traits.hpp +236 -0
  1684. data/ext/boost/type_traits/has_nothrow_assign.hpp +38 -0
  1685. data/ext/boost/type_traits/has_nothrow_constructor.hpp +38 -0
  1686. data/ext/boost/type_traits/has_nothrow_copy.hpp +38 -0
  1687. data/ext/boost/type_traits/has_nothrow_destructor.hpp +25 -0
  1688. data/ext/boost/type_traits/has_trivial_assign.hpp +50 -0
  1689. data/ext/boost/type_traits/has_trivial_constructor.hpp +42 -0
  1690. data/ext/boost/type_traits/has_trivial_copy.hpp +48 -0
  1691. data/ext/boost/type_traits/has_trivial_destructor.hpp +42 -0
  1692. data/ext/boost/type_traits/has_virtual_destructor.hpp +25 -0
  1693. data/ext/boost/type_traits/ice.hpp +20 -0
  1694. data/ext/boost/type_traits/integral_constant.hpp +53 -0
  1695. data/ext/boost/type_traits/intrinsics.hpp +137 -0
  1696. data/ext/boost/type_traits/is_abstract.hpp +137 -0
  1697. data/ext/boost/type_traits/is_arithmetic.hpp +43 -0
  1698. data/ext/boost/type_traits/is_array.hpp +90 -0
  1699. data/ext/boost/type_traits/is_base_and_derived.hpp +223 -0
  1700. data/ext/boost/type_traits/is_base_of.hpp +40 -0
  1701. data/ext/boost/type_traits/is_class.hpp +128 -0
  1702. data/ext/boost/type_traits/is_compound.hpp +40 -0
  1703. data/ext/boost/type_traits/is_const.hpp +142 -0
  1704. data/ext/boost/type_traits/is_convertible.hpp +416 -0
  1705. data/ext/boost/type_traits/is_empty.hpp +211 -0
  1706. data/ext/boost/type_traits/is_enum.hpp +180 -0
  1707. data/ext/boost/type_traits/is_float.hpp +27 -0
  1708. data/ext/boost/type_traits/is_floating_point.hpp +27 -0
  1709. data/ext/boost/type_traits/is_function.hpp +88 -0
  1710. data/ext/boost/type_traits/is_fundamental.hpp +41 -0
  1711. data/ext/boost/type_traits/is_integral.hpp +71 -0
  1712. data/ext/boost/type_traits/is_member_function_pointer.hpp +126 -0
  1713. data/ext/boost/type_traits/is_member_object_pointer.hpp +46 -0
  1714. data/ext/boost/type_traits/is_member_pointer.hpp +108 -0
  1715. data/ext/boost/type_traits/is_object.hpp +53 -0
  1716. data/ext/boost/type_traits/is_pod.hpp +135 -0
  1717. data/ext/boost/type_traits/is_pointer.hpp +149 -0
  1718. data/ext/boost/type_traits/is_polymorphic.hpp +102 -0
  1719. data/ext/boost/type_traits/is_reference.hpp +116 -0
  1720. data/ext/boost/type_traits/is_same.hpp +103 -0
  1721. data/ext/boost/type_traits/is_scalar.hpp +55 -0
  1722. data/ext/boost/type_traits/is_signed.hpp +117 -0
  1723. data/ext/boost/type_traits/is_stateless.hpp +48 -0
  1724. data/ext/boost/type_traits/is_union.hpp +49 -0
  1725. data/ext/boost/type_traits/is_unsigned.hpp +114 -0
  1726. data/ext/boost/type_traits/is_void.hpp +33 -0
  1727. data/ext/boost/type_traits/is_volatile.hpp +131 -0
  1728. data/ext/boost/type_traits/msvc/remove_all_extents.hpp +47 -0
  1729. data/ext/boost/type_traits/msvc/remove_bounds.hpp +43 -0
  1730. data/ext/boost/type_traits/msvc/remove_const.hpp +143 -0
  1731. data/ext/boost/type_traits/msvc/remove_cv.hpp +190 -0
  1732. data/ext/boost/type_traits/msvc/remove_extent.hpp +43 -0
  1733. data/ext/boost/type_traits/msvc/remove_pointer.hpp +42 -0
  1734. data/ext/boost/type_traits/msvc/remove_reference.hpp +42 -0
  1735. data/ext/boost/type_traits/msvc/remove_volatile.hpp +143 -0
  1736. data/ext/boost/type_traits/msvc/typeof.hpp +50 -0
  1737. data/ext/boost/type_traits/object_traits.hpp +33 -0
  1738. data/ext/boost/type_traits/rank.hpp +81 -0
  1739. data/ext/boost/type_traits/reference_traits.hpp +15 -0
  1740. data/ext/boost/type_traits/remove_all_extents.hpp +48 -0
  1741. data/ext/boost/type_traits/remove_bounds.hpp +48 -0
  1742. data/ext/boost/type_traits/remove_const.hpp +78 -0
  1743. data/ext/boost/type_traits/remove_cv.hpp +61 -0
  1744. data/ext/boost/type_traits/remove_extent.hpp +48 -0
  1745. data/ext/boost/type_traits/remove_pointer.hpp +43 -0
  1746. data/ext/boost/type_traits/remove_reference.hpp +50 -0
  1747. data/ext/boost/type_traits/remove_volatile.hpp +77 -0
  1748. data/ext/boost/type_traits/same_traits.hpp +15 -0
  1749. data/ext/boost/type_traits/transform_traits.hpp +21 -0
  1750. data/ext/boost/type_traits/transform_traits_spec.hpp +14 -0
  1751. data/ext/boost/type_traits/type_with_alignment.hpp +288 -0
  1752. data/ext/boost/utility.hpp +19 -0
  1753. data/ext/boost/utility/addressof.hpp +58 -0
  1754. data/ext/boost/utility/base_from_member.hpp +87 -0
  1755. data/ext/boost/utility/compare_pointees.hpp +68 -0
  1756. data/ext/boost/utility/enable_if.hpp +119 -0
  1757. data/ext/boost/utility/in_place_factory.hpp +58 -0
  1758. data/ext/boost/utility/result_of.hpp +66 -0
  1759. data/ext/boost/utility/typed_in_place_factory.hpp +57 -0
  1760. data/ext/boost/utility/value_init.hpp +77 -0
  1761. data/ext/boost/visit_each.hpp +29 -0
  1762. data/ext/boost/weak_ptr.hpp +194 -0
  1763. data/ext/passenger/extconf.rb +17 -0
  1764. data/ext/passenger/native_support.c +247 -0
  1765. data/lib/passenger/abstract_server.rb +308 -0
  1766. data/lib/passenger/application.rb +120 -0
  1767. data/lib/passenger/application_spawner.rb +295 -0
  1768. data/lib/passenger/cgi_fixed.rb +66 -0
  1769. data/lib/passenger/console_text_template.rb +59 -0
  1770. data/lib/passenger/dependencies.rb +285 -0
  1771. data/lib/passenger/framework_spawner.rb +349 -0
  1772. data/lib/passenger/html_template.rb +102 -0
  1773. data/lib/passenger/message_channel.rb +221 -0
  1774. data/lib/passenger/platform_info.rb +246 -0
  1775. data/lib/passenger/request_handler.rb +324 -0
  1776. data/lib/passenger/simple_benchmarking.rb +45 -0
  1777. data/lib/passenger/spawn_manager.rb +251 -0
  1778. data/lib/passenger/templates/apache2_config_snippets.txt.erb +13 -0
  1779. data/lib/passenger/templates/apache_must_be_compiled_with_prefork_mpm.txt.erb +8 -0
  1780. data/lib/passenger/templates/app_exited_during_initialization.html.erb +18 -0
  1781. data/lib/passenger/templates/app_init_error.html.erb +64 -0
  1782. data/lib/passenger/templates/database_error.html.erb +59 -0
  1783. data/lib/passenger/templates/deployment_example.txt.erb +18 -0
  1784. data/lib/passenger/templates/error_layout.css +97 -0
  1785. data/lib/passenger/templates/error_layout.html.erb +39 -0
  1786. data/lib/passenger/templates/framework_init_error.html.erb +39 -0
  1787. data/lib/passenger/templates/general_error.html.erb +22 -0
  1788. data/lib/passenger/templates/invalid_app_root.html.erb +9 -0
  1789. data/lib/passenger/templates/load_error.html.erb +46 -0
  1790. data/lib/passenger/templates/no_write_permission_to_passenger_root.txt.erb +9 -0
  1791. data/lib/passenger/templates/osx_broken_apache_warning.txt.erb +23 -0
  1792. data/lib/passenger/templates/possible_solutions_for_compilation_and_installation_problems.txt.erb +11 -0
  1793. data/lib/passenger/templates/run_installer_as_root.txt.erb +8 -0
  1794. data/lib/passenger/templates/version_not_found.html.erb +25 -0
  1795. data/lib/passenger/templates/welcome.txt.erb +15 -0
  1796. data/lib/passenger/utils.rb +222 -0
  1797. data/lib/rake/cplusplus.rb +43 -0
  1798. data/lib/rake/extensions.rb +175 -0
  1799. data/lib/rake/gempackagetask.rb +105 -0
  1800. data/lib/rake/packagetask.rb +186 -0
  1801. data/lib/rake/rdoctask.rb +148 -0
  1802. data/misc/find_owner_pipe_leaks.rb +121 -0
  1803. data/misc/render_error_pages.rb +105 -0
  1804. data/test/ApplicationPoolServerTest.cpp +100 -0
  1805. data/test/ApplicationPoolServer_ApplicationPoolTest.cpp +23 -0
  1806. data/test/ApplicationPoolTest.cpp +348 -0
  1807. data/test/CxxTestMain.cpp +24 -0
  1808. data/test/MessageChannelTest.cpp +310 -0
  1809. data/test/SpawnManagerTest.cpp +64 -0
  1810. data/test/StandardApplicationPoolTest.cpp +21 -0
  1811. data/test/UtilsTest.cpp +100 -0
  1812. data/test/abstract_server_spec.rb +17 -0
  1813. data/test/application_spawner_spec.rb +78 -0
  1814. data/test/application_spec.rb +25 -0
  1815. data/test/config.yml.example +21 -0
  1816. data/test/framework_spawner_spec.rb +99 -0
  1817. data/test/integration_tests.rb +356 -0
  1818. data/test/message_channel_spec.rb +171 -0
  1819. data/test/minimal_spawner_spec.rb +19 -0
  1820. data/test/spawn_manager_spec.rb +105 -0
  1821. data/test/spawn_server_spec.rb +25 -0
  1822. data/test/spawner_error_handling_spec.rb +35 -0
  1823. data/test/spawner_privilege_lowering_spec.rb +71 -0
  1824. data/test/stub/apache2/httpd.conf +72 -0
  1825. data/test/stub/apache2/httpd.conf.erb +77 -0
  1826. data/test/stub/apache2/mime.types +748 -0
  1827. data/test/stub/broken-railsapp/config/environment.rb +2 -0
  1828. data/test/stub/broken-railsapp/public/useless.txt +1 -0
  1829. data/test/stub/broken-railsapp2/config/environment.rb +3 -0
  1830. data/test/stub/broken-railsapp3/config/environment.rb +4 -0
  1831. data/test/stub/broken-railsapp4/config/environment.rb +1 -0
  1832. data/test/stub/broken-railsapp4/public/useless.txt +1 -0
  1833. data/test/stub/broken-railsapp5/config/environment.rb +1 -0
  1834. data/test/stub/broken-railsapp5/public/useless.txt +1 -0
  1835. data/test/stub/broken-railsapp5/vendor/rails/actionmailer/lib/action_mailer.rb +0 -0
  1836. data/test/stub/broken-railsapp5/vendor/rails/actionpack/lib/action_controller.rb +0 -0
  1837. data/test/stub/broken-railsapp5/vendor/rails/actionpack/lib/action_pack.rb +0 -0
  1838. data/test/stub/broken-railsapp5/vendor/rails/actionpack/lib/action_view.rb +0 -0
  1839. data/test/stub/broken-railsapp5/vendor/rails/activerecord/lib/active_record.rb +0 -0
  1840. data/test/stub/broken-railsapp5/vendor/rails/activeresource/lib/active_resource.rb +0 -0
  1841. data/test/stub/broken-railsapp5/vendor/rails/activesupport/lib/active_support.rb +17 -0
  1842. data/test/stub/broken-railsapp5/vendor/rails/activesupport/lib/active_support/whiny_nil.rb +0 -0
  1843. data/test/stub/broken-railsapp5/vendor/rails/railties/lib/dispatcher.rb +0 -0
  1844. data/test/stub/broken-railsapp5/vendor/rails/railties/lib/initializer.rb +9 -0
  1845. data/test/stub/broken-railsapp5/vendor/rails/railties/lib/ruby_version_check.rb +1 -0
  1846. data/test/stub/garbage1.dat +0 -0
  1847. data/test/stub/garbage2.dat +0 -0
  1848. data/test/stub/garbage3.dat +0 -0
  1849. data/test/stub/http_request.yml +23 -0
  1850. data/test/stub/message_channel.rb +9 -0
  1851. data/test/stub/message_channel_2.rb +10 -0
  1852. data/test/stub/message_channel_3.rb +15 -0
  1853. data/test/stub/minimal-railsapp/README +3 -0
  1854. data/test/stub/minimal-railsapp/config/application.rb +0 -0
  1855. data/test/stub/minimal-railsapp/config/environment.rb +3 -0
  1856. data/test/stub/minimal-railsapp/vendor/rails/actionmailer/lib/action_mailer.rb +0 -0
  1857. data/test/stub/minimal-railsapp/vendor/rails/actionpack/lib/action_controller.rb +6 -0
  1858. data/test/stub/minimal-railsapp/vendor/rails/actionpack/lib/action_pack.rb +0 -0
  1859. data/test/stub/minimal-railsapp/vendor/rails/actionpack/lib/action_view.rb +0 -0
  1860. data/test/stub/minimal-railsapp/vendor/rails/activerecord/lib/active_record.rb +0 -0
  1861. data/test/stub/minimal-railsapp/vendor/rails/activeresource/lib/active_resource.rb +0 -0
  1862. data/test/stub/minimal-railsapp/vendor/rails/activesupport/lib/active_support.rb +17 -0
  1863. data/test/stub/minimal-railsapp/vendor/rails/activesupport/lib/active_support/whiny_nil.rb +0 -0
  1864. data/test/stub/minimal-railsapp/vendor/rails/railties/lib/dispatcher.rb +0 -0
  1865. data/test/stub/minimal-railsapp/vendor/rails/railties/lib/initializer.rb +8 -0
  1866. data/test/stub/minimal-railsapp/vendor/rails/railties/lib/ruby_version_check.rb +1 -0
  1867. data/test/stub/mycook/app/controllers/application.rb +12 -0
  1868. data/test/stub/mycook/app/controllers/recipes_controller.rb +5 -0
  1869. data/test/stub/mycook/app/controllers/uploads_controller.rb +11 -0
  1870. data/test/stub/mycook/app/controllers/welcome_controller.rb +23 -0
  1871. data/test/stub/mycook/app/helpers/application_helper.rb +3 -0
  1872. data/test/stub/mycook/app/views/layouts/default.rhtml +26 -0
  1873. data/test/stub/mycook/app/views/recipes/create.rhtml +13 -0
  1874. data/test/stub/mycook/app/views/recipes/index.rhtml +3 -0
  1875. data/test/stub/mycook/app/views/recipes/new.rhtml +8 -0
  1876. data/test/stub/mycook/app/views/uploads/index.rhtml +1 -0
  1877. data/test/stub/mycook/app/views/uploads/new.html.erb +8 -0
  1878. data/test/stub/mycook/app/views/welcome/cached.rhtml +1 -0
  1879. data/test/stub/mycook/app/views/welcome/index.rhtml +20 -0
  1880. data/test/stub/mycook/config/boot.rb +108 -0
  1881. data/test/stub/mycook/config/database.yml +19 -0
  1882. data/test/stub/mycook/config/environment.rb +61 -0
  1883. data/test/stub/mycook/config/environments/development.rb +18 -0
  1884. data/test/stub/mycook/config/environments/production.rb +19 -0
  1885. data/test/stub/mycook/config/environments/test.rb +22 -0
  1886. data/test/stub/mycook/config/initializers/inflections.rb +10 -0
  1887. data/test/stub/mycook/config/initializers/mime_types.rb +5 -0
  1888. data/test/stub/mycook/config/routes.rb +38 -0
  1889. data/test/stub/mycook/public/404.html +30 -0
  1890. data/test/stub/mycook/public/422.html +30 -0
  1891. data/test/stub/mycook/public/500.html +30 -0
  1892. data/test/stub/mycook/public/dispatch.cgi +10 -0
  1893. data/test/stub/mycook/public/dispatch.fcgi +24 -0
  1894. data/test/stub/mycook/public/dispatch.rb +10 -0
  1895. data/test/stub/mycook/public/favicon.ico +0 -0
  1896. data/test/stub/mycook/public/images/angrywizard.gif +0 -0
  1897. data/test/stub/mycook/public/images/cookbook.gif +0 -0
  1898. data/test/stub/mycook/public/images/header.png +0 -0
  1899. data/test/stub/mycook/public/images/rails.png +0 -0
  1900. data/test/stub/mycook/public/javascripts/application.js +2 -0
  1901. data/test/stub/mycook/public/javascripts/controls.js +963 -0
  1902. data/test/stub/mycook/public/javascripts/dragdrop.js +972 -0
  1903. data/test/stub/mycook/public/javascripts/effects.js +1120 -0
  1904. data/test/stub/mycook/public/javascripts/prototype.js +4225 -0
  1905. data/test/stub/mycook/public/robots.txt +5 -0
  1906. data/test/stub/mycook/public/uploads.html +26 -0
  1907. data/test/stub/mycook/public/welcome/cached.html +26 -0
  1908. data/test/stub/railsapp-without-version-spec/app/controllers/application.rb +12 -0
  1909. data/test/stub/railsapp-without-version-spec/app/controllers/foo_controller.rb +5 -0
  1910. data/test/stub/railsapp-without-version-spec/app/helpers/application_helper.rb +3 -0
  1911. data/test/stub/railsapp-without-version-spec/config/boot.rb +108 -0
  1912. data/test/stub/railsapp-without-version-spec/config/database.yml +19 -0
  1913. data/test/stub/railsapp-without-version-spec/config/environment.rb +58 -0
  1914. data/test/stub/railsapp-without-version-spec/config/environments/development.rb +18 -0
  1915. data/test/stub/railsapp-without-version-spec/config/environments/production.rb +19 -0
  1916. data/test/stub/railsapp-without-version-spec/config/environments/test.rb +22 -0
  1917. data/test/stub/railsapp-without-version-spec/config/initializers/inflections.rb +10 -0
  1918. data/test/stub/railsapp-without-version-spec/config/initializers/mime_types.rb +5 -0
  1919. data/test/stub/railsapp-without-version-spec/config/routes.rb +35 -0
  1920. data/test/stub/railsapp-without-version-spec/public/useless.txt +1 -0
  1921. data/test/stub/railsapp/app/controllers/application.rb +12 -0
  1922. data/test/stub/railsapp/app/controllers/bar_controller_1.rb +5 -0
  1923. data/test/stub/railsapp/app/controllers/bar_controller_2.rb +5 -0
  1924. data/test/stub/railsapp/app/controllers/foo_controller.rb +5 -0
  1925. data/test/stub/railsapp/app/helpers/application_helper.rb +3 -0
  1926. data/test/stub/railsapp/config/boot.rb +108 -0
  1927. data/test/stub/railsapp/config/database.yml +19 -0
  1928. data/test/stub/railsapp/config/environment.rb +59 -0
  1929. data/test/stub/railsapp/config/environments/development.rb +18 -0
  1930. data/test/stub/railsapp/config/environments/production.rb +19 -0
  1931. data/test/stub/railsapp/config/environments/test.rb +22 -0
  1932. data/test/stub/railsapp/config/initializers/inflections.rb +10 -0
  1933. data/test/stub/railsapp/config/initializers/mime_types.rb +5 -0
  1934. data/test/stub/railsapp/config/routes.rb +35 -0
  1935. data/test/stub/railsapp/public/useless.txt +1 -0
  1936. data/test/stub/railsapp2/app/controllers/application.rb +12 -0
  1937. data/test/stub/railsapp2/app/controllers/foo_controller.rb +5 -0
  1938. data/test/stub/railsapp2/app/helpers/application_helper.rb +3 -0
  1939. data/test/stub/railsapp2/config/boot.rb +108 -0
  1940. data/test/stub/railsapp2/config/database.yml +19 -0
  1941. data/test/stub/railsapp2/config/environment.rb +59 -0
  1942. data/test/stub/railsapp2/config/environments/development.rb +18 -0
  1943. data/test/stub/railsapp2/config/environments/production.rb +19 -0
  1944. data/test/stub/railsapp2/config/environments/test.rb +22 -0
  1945. data/test/stub/railsapp2/config/initializers/inflections.rb +10 -0
  1946. data/test/stub/railsapp2/config/initializers/mime_types.rb +5 -0
  1947. data/test/stub/railsapp2/config/routes.rb +35 -0
  1948. data/test/stub/railsapp2/public/useless.txt +1 -0
  1949. data/test/stub/spawn_server.rb +17 -0
  1950. data/test/stub/zsfa/header.png +0 -0
  1951. data/test/stub/zsfa/index.html +14 -0
  1952. data/test/stub/zsfa/zsfa.png +0 -0
  1953. data/test/support/apache2_config_writer.rb +44 -0
  1954. data/test/support/config.rb +10 -0
  1955. data/test/support/multipart.rb +62 -0
  1956. data/test/support/run_rspec_tests.rb +10 -0
  1957. data/test/support/tut.h +1219 -0
  1958. data/test/support/tut_reporter.h +256 -0
  1959. data/test/support/valgrind.h +2539 -0
  1960. metadata +2204 -0
@@ -0,0 +1,197 @@
1
+ Security of user switching support in Passenger
2
+ ===============================================
3
+
4
+ Problem description
5
+ -------------------
6
+ TIP: It is strongly recommended that you first read our
7
+ link:Architectural%20overview.html[Architectural Overview].
8
+
9
+ A straightforward implementation of Passenger will spawn Rails applications in
10
+ the same user context as Apache itself. On server machines which host multiple
11
+ websites for multiple users, this may not be desired. All Rails applications
12
+ spawned by Passenger will be able to read and write to all directories that the
13
+ web server can. So for example, Joe's Rails applications could read Jane's
14
+ Rails application's 'database.yml' or delete her application files. This is
15
+ also a problem that typically plagues PHP web hosts.
16
+
17
+ There are multiple ways to solve this problem. The goal of this document is to
18
+ inform the reader about the solutions have we have analyzed, so that
19
+ Passenger's security may be peer reviewed.
20
+
21
+
22
+ Analysis of possible solutions
23
+ ------------------------------
24
+ It seems that the only way to solve this problem on Unix, is to run each Rails
25
+ application server as its owner's user and group. Passenger can make use of
26
+ one of the following methods to implement this:
27
+
28
+ 1. Apache (and thus Passenger) must already be running as root.
29
+ 2. Using Apache's suEXEC.
30
+ 3. A setuid root wrapper application must exist, to allow non-root processes
31
+ to obtain root privileges (or at least, the privilege to switch user).
32
+ 4. For each user $X that Passenger will need to switch to, there must exist
33
+ a setuid $X wrapper application.
34
+ 5. Using 'su'.
35
+ 6. Using 'sudo'.
36
+
37
+ Let us take a look at each method in detail.
38
+
39
+ [[apache_root]]
40
+ Apache must already be running as root
41
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
42
+ First, let us take a look at the typical Apache setup, in which Apache is bound
43
+ to port 80, and uses the prefork MPM. Binding to any port lower than 1024
44
+ requires root privileges, so Apache is typically run as root. This poses an
45
+ unacceptable security risk, so Apache's prefork MPM will, upon receiving an
46
+ HTTP request, spawn a child process with the privileges of a normal user,
47
+ typically 'www-data' or 'nobody'.
48
+ See http://httpd.apache.org/docs/2.2/mod/prefork.html[the documentation for the
49
+ prefork MPM] - in particular the ``User'' and ``Group'' directives - for details.
50
+ The process which is responsible for spawning child processes (also called the
51
+ control process) is run as root. This is also true for
52
+ http://httpd.apache.org/docs/2.2/mod/worker.html[the worker MPM].
53
+
54
+ Since Passenger has access to the control process, in the typical Apache setup,
55
+ Passenger can already launch Rails applications as a different user. But now we
56
+ have to ask this question:
57
+
58
+ =================================
59
+ If Apache is not running as root, are there still any Passenger users who
60
+ want to run Rails applications as different users?
61
+ =================================
62
+
63
+ If the answer is yes, then we cannot use this method.
64
+
65
+ The advantage of this method is that setting up Apache to run as root is
66
+ incredibly easy, and requires no new framework to be written. However, testing
67
+ this method in automated unit tests will require running the unit test suit as
68
+ root.
69
+
70
+ Using Apache's suEXEC
71
+ ~~~~~~~~~~~~~~~~~~~~~
72
+ Apache's http://httpd.apache.org/docs/2.0/suexec.html[suEXEC] allows one to
73
+ run CGI processes as different users. But it seems that suEXEC can only be
74
+ used for CGI, and is not a general-purpose mechanism. The
75
+ http://alain.knaff.lu/howto/PhpSuexec/[PHP-suEXEC] software allows one to run
76
+ PHP applications via suEXEC, but it requires patching suEXEC. If Passenger is
77
+ to use suEXEC, then it is likely that we'll have to patch suEXEC. The suEXEC
78
+ website strongly discourages patching.
79
+
80
+ Using a setuid root wrapper application
81
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
82
+ If we use this method, we must be extremely careful. It must not be possible
83
+ for arbitrary processes to gain root privileges. We want Passenger, and only
84
+ Passenger, to be able to gain root privileges.
85
+
86
+ There are multiple ways to implement this security. The first one is to use
87
+ a password file, which only Apache and the wrapper can read, through
88
+ the use of proper file permissions. The password file must never be world
89
+ readable or writable.
90
+
91
+ It works as follows:
92
+
93
+ 1. Passenger runs the wrapper.
94
+ 2. Passenger passes the content of the password file to the wrapper, via
95
+ an anonymous pipe (or some other anonymous channel, that no other
96
+ processes can access).
97
+ 3. The wrapper checks whether the passed content is the same as what is in
98
+ the password file. If it is, then it is proven that whatever application
99
+ ran the wrapper has read access to the password file, and thus is authorized
100
+ to use the wrapper.
101
+
102
+ An obvious problem that arises is: how does the wrapper locate its own password
103
+ file? We obviously do not want to be able to specify the password filename as
104
+ an argument to the wrapper: that would defeat the point of the password file.
105
+ The solution is that the filename is to be hardcoded into the binary during
106
+ compile time.
107
+
108
+ Another way to implement security is to use a whitelist of users that are
109
+ allowed to use the wrapper. The wrapper can then check whether the calling
110
+ process's user is in the whitelist.
111
+
112
+ Writing a wrapper is not too hard. Furthermore, unit tests do not have to be
113
+ run as root, in contrast to the run-Apache-as-root method.
114
+
115
+ [[setuid_root]]
116
+ Using a setuid $X wrapper application
117
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
118
+ A setuid $X wrapper will work in a fashion similar to the setuid root wrapper,
119
+ i.e. it will use a password file for authorization.
120
+
121
+ Passenger does not spawn Rails applications itself, but does so via the spawn
122
+ server. This spawn server is also responsible for preloading the Rails
123
+ framework and the Rails application code, in order to speed up the spawning
124
+ of Rails applications. See the design document of the spawn server for details.
125
+ The spawn server never calls `exec()`: doing so will make preloading useless.
126
+ If Passenger is to use a setuid $X wrapper, then it must start the spawn
127
+ server via the wrapper. The spawn server itself cannot use the wrapper.
128
+
129
+ However, doing so will make preloading less efficient. Passenger will be forced
130
+ to run a spawn server for each user. The different spawn servers do not share
131
+ memory with each other, so a lot of memory is wasted compared to the other
132
+ methods.
133
+
134
+ Implementing this will also take more work. One has to create a different
135
+ wrapper for each user, and to install it.
136
+
137
+ Using 'su'
138
+ ~~~~~~~~~~
139
+ The standard Unix 'su' tool asks for the root password. It's a bad idea for
140
+ Apache to know the root password, so using 'su' is not a viable alternative.
141
+
142
+ Using 'sudo'
143
+ ~~~~~~~~~~~~
144
+ It might be possible to use the 'sudo' utility. sudo can be configured in
145
+ such a way that the user Apache runs as can use sudo without having to enter a
146
+ password.
147
+
148
+ However, Passenger uses an anonymous communication channel (an unnamed Unix
149
+ socket) to communicate with the spawn server. sudo seems to close all file
150
+ descriptors before executing an application, so Passenger will have to
151
+ communicate with the spawn server via a non-anonymous channel, such as a named
152
+ Unix socket. Because other processes can access this channel, it can introduce
153
+ potential security problems. Note that passing information via program arguments
154
+ is not secure: it is possible to view that information with tools like 'ps',
155
+ or (on Linux) by reading the file `/proc/$PID/cmdline`.
156
+
157
+ So it seems 'sudo' is not a viable alternative.
158
+
159
+ Common security issues
160
+ ~~~~~~~~~~~~~~~~~~~~~~
161
+ Whatever method Passenger will use, the following security principles must be
162
+ honored:
163
+
164
+ - Rails applications must never be run as root.
165
+
166
+ It might also be worthy to look into suEXEC's security model for inspiration.
167
+
168
+ Also, the following questions remain:
169
+
170
+ - Is there a need for a user whitelist/blacklist? That is, is there a need for
171
+ the ability to restrict the set of users that Passenger can switch to?
172
+
173
+
174
+ Chosen solution
175
+ ---------------
176
+ Running Apache as root and writing a setuid root wrapper are the main
177
+ contestants. The former is preferred, because it's easier to implement.
178
+
179
+ We have had some conversations with people on the IRC channel #rubyonrails.
180
+ Among those people, nobody has ever run Apache as non-root. Because of this
181
+ we have chosen to implement the <<apache_root,Running Apache as root>>
182
+ solution, until a significant number of users request us to implement the
183
+ <<setuid_root,setuid root wrapper>> solution.
184
+
185
+ Please read link:rdoc/index.html[the Ruby API documentation] -- in particular
186
+ that of the 'ApplicationSpawner' class -- for implementation details. But to
187
+ make a long story short: it will switch to the owner of the file
188
+ 'config/environment.rb'. User whitelisting/blacklisting is currently not
189
+ implemented. We rely on the system administrator to set the correct owner
190
+ on that file.
191
+
192
+ We have also not implemented suEXEC's security model. suEXEC's model is quite
193
+ paranoid, and although paranoia is good to a certain extend, it can be in the
194
+ way of usability while proving little extra security. We are not entirely
195
+ convinced that implementing suEXEC's full security model will provide
196
+ significant benefits, but if you have good reasons to think otherwise, please
197
+ feel free to discuss it with us.
@@ -0,0 +1,1356 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
2
+ "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
3
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
4
+ <head>
5
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
6
+ <meta name="generator" content="AsciiDoc 8.2.5" />
7
+ <style type="text/css">
8
+ /* Debug borders */
9
+ p, li, dt, dd, div, pre, h1, h2, h3, h4, h5, h6 {
10
+ /*
11
+ border: 1px solid red;
12
+ */
13
+ }
14
+
15
+ body {
16
+ margin: 1em 5% 1em 5%;
17
+ }
18
+
19
+ a {
20
+ color: blue;
21
+ text-decoration: underline;
22
+ }
23
+ a:visited {
24
+ color: fuchsia;
25
+ }
26
+
27
+ em {
28
+ font-style: italic;
29
+ }
30
+
31
+ strong {
32
+ font-weight: bold;
33
+ }
34
+
35
+ tt {
36
+ color: navy;
37
+ }
38
+
39
+ h1, h2, h3, h4, h5, h6 {
40
+ color: #527bbd;
41
+ font-family: sans-serif;
42
+ margin-top: 1.2em;
43
+ margin-bottom: 0.5em;
44
+ line-height: 1.3;
45
+ }
46
+
47
+ h1, h2, h3 {
48
+ border-bottom: 2px solid silver;
49
+ }
50
+ h2 {
51
+ padding-top: 0.5em;
52
+ }
53
+ h3 {
54
+ float: left;
55
+ }
56
+ h3 + * {
57
+ clear: left;
58
+ }
59
+
60
+ div.sectionbody {
61
+ font-family: serif;
62
+ margin-left: 0;
63
+ }
64
+
65
+ hr {
66
+ border: 1px solid silver;
67
+ }
68
+
69
+ p {
70
+ margin-top: 0.5em;
71
+ margin-bottom: 0.5em;
72
+ }
73
+
74
+ pre {
75
+ padding: 0;
76
+ margin: 0;
77
+ }
78
+
79
+ span#author {
80
+ color: #527bbd;
81
+ font-family: sans-serif;
82
+ font-weight: bold;
83
+ font-size: 1.1em;
84
+ }
85
+ span#email {
86
+ }
87
+ span#revision {
88
+ font-family: sans-serif;
89
+ }
90
+
91
+ div#footer {
92
+ font-family: sans-serif;
93
+ font-size: small;
94
+ border-top: 2px solid silver;
95
+ padding-top: 0.5em;
96
+ margin-top: 4.0em;
97
+ }
98
+ div#footer-text {
99
+ float: left;
100
+ padding-bottom: 0.5em;
101
+ }
102
+ div#footer-badges {
103
+ float: right;
104
+ padding-bottom: 0.5em;
105
+ }
106
+
107
+ div#preamble,
108
+ div.tableblock, div.imageblock, div.exampleblock, div.verseblock,
109
+ div.quoteblock, div.literalblock, div.listingblock, div.sidebarblock,
110
+ div.admonitionblock {
111
+ margin-right: 10%;
112
+ margin-top: 1.5em;
113
+ margin-bottom: 1.5em;
114
+ }
115
+ div.admonitionblock {
116
+ margin-top: 2.5em;
117
+ margin-bottom: 2.5em;
118
+ }
119
+
120
+ div.content { /* Block element content. */
121
+ padding: 0;
122
+ }
123
+
124
+ /* Block element titles. */
125
+ div.title, caption.title {
126
+ font-family: sans-serif;
127
+ font-weight: bold;
128
+ text-align: left;
129
+ margin-top: 1.0em;
130
+ margin-bottom: 0.5em;
131
+ }
132
+ div.title + * {
133
+ margin-top: 0;
134
+ }
135
+
136
+ td div.title:first-child {
137
+ margin-top: 0.0em;
138
+ }
139
+ div.content div.title:first-child {
140
+ margin-top: 0.0em;
141
+ }
142
+ div.content + div.title {
143
+ margin-top: 0.0em;
144
+ }
145
+
146
+ div.sidebarblock > div.content {
147
+ background: #ffffee;
148
+ border: 1px solid silver;
149
+ padding: 0.5em;
150
+ }
151
+
152
+ div.listingblock {
153
+ margin-right: 0%;
154
+ }
155
+ div.listingblock > div.content {
156
+ border: 1px solid silver;
157
+ background: #f4f4f4;
158
+ padding: 0.5em;
159
+ }
160
+
161
+ div.quoteblock > div.content {
162
+ padding-left: 2.0em;
163
+ }
164
+
165
+ div.attribution {
166
+ text-align: right;
167
+ }
168
+ div.verseblock + div.attribution {
169
+ text-align: left;
170
+ }
171
+
172
+ div.admonitionblock .icon {
173
+ vertical-align: top;
174
+ font-size: 1.1em;
175
+ font-weight: bold;
176
+ text-decoration: underline;
177
+ color: #527bbd;
178
+ padding-right: 0.5em;
179
+ }
180
+ div.admonitionblock td.content {
181
+ padding-left: 0.5em;
182
+ border-left: 2px solid silver;
183
+ }
184
+
185
+ div.exampleblock > div.content {
186
+ border-left: 2px solid silver;
187
+ padding: 0.5em;
188
+ }
189
+
190
+ div.verseblock div.content {
191
+ white-space: pre;
192
+ }
193
+
194
+ div.imageblock div.content { padding-left: 0; }
195
+ div.imageblock img { border: 1px solid silver; }
196
+ span.image img { border-style: none; }
197
+
198
+ dl {
199
+ margin-top: 0.8em;
200
+ margin-bottom: 0.8em;
201
+ }
202
+ dt {
203
+ margin-top: 0.5em;
204
+ margin-bottom: 0;
205
+ font-style: italic;
206
+ }
207
+ dd > *:first-child {
208
+ margin-top: 0;
209
+ }
210
+
211
+ ul, ol {
212
+ list-style-position: outside;
213
+ }
214
+ div.olist2 ol {
215
+ list-style-type: lower-alpha;
216
+ }
217
+
218
+ div.tableblock > table {
219
+ border: 3px solid #527bbd;
220
+ }
221
+ thead {
222
+ font-family: sans-serif;
223
+ font-weight: bold;
224
+ }
225
+ tfoot {
226
+ font-weight: bold;
227
+ }
228
+
229
+ div.hlist {
230
+ margin-top: 0.8em;
231
+ margin-bottom: 0.8em;
232
+ }
233
+ div.hlist td {
234
+ padding-bottom: 5px;
235
+ }
236
+ td.hlist1 {
237
+ vertical-align: top;
238
+ font-style: italic;
239
+ padding-right: 0.8em;
240
+ }
241
+ td.hlist2 {
242
+ vertical-align: top;
243
+ }
244
+
245
+ @media print {
246
+ div#footer-badges { display: none; }
247
+ }
248
+
249
+ div#toctitle {
250
+ color: #527bbd;
251
+ font-family: sans-serif;
252
+ font-size: 1.1em;
253
+ font-weight: bold;
254
+ margin-top: 1.0em;
255
+ margin-bottom: 0.1em;
256
+ }
257
+
258
+ div.toclevel1, div.toclevel2, div.toclevel3, div.toclevel4 {
259
+ margin-top: 0;
260
+ margin-bottom: 0;
261
+ }
262
+ div.toclevel2 {
263
+ margin-left: 2em;
264
+ font-size: 0.9em;
265
+ }
266
+ div.toclevel3 {
267
+ margin-left: 4em;
268
+ font-size: 0.9em;
269
+ }
270
+ div.toclevel4 {
271
+ margin-left: 6em;
272
+ font-size: 0.9em;
273
+ }
274
+ /* Workarounds for IE6's broken and incomplete CSS2. */
275
+
276
+ div.sidebar-content {
277
+ background: #ffffee;
278
+ border: 1px solid silver;
279
+ padding: 0.5em;
280
+ }
281
+ div.sidebar-title, div.image-title {
282
+ font-family: sans-serif;
283
+ font-weight: bold;
284
+ margin-top: 0.0em;
285
+ margin-bottom: 0.5em;
286
+ }
287
+
288
+ div.listingblock div.content {
289
+ border: 1px solid silver;
290
+ background: #f4f4f4;
291
+ padding: 0.5em;
292
+ }
293
+
294
+ div.quoteblock-content {
295
+ padding-left: 2.0em;
296
+ }
297
+
298
+ div.exampleblock-content {
299
+ border-left: 2px solid silver;
300
+ padding-left: 0.5em;
301
+ }
302
+
303
+ /* IE6 sets dynamically generated links as visited. */
304
+ div#toc a:visited { color: blue; }
305
+ </style>
306
+ <script type="text/javascript">
307
+ /*<![CDATA[*/
308
+ window.onload = function(){generateToc(3)}
309
+ /* Author: Mihai Bazon, September 2002
310
+ * http://students.infoiasi.ro/~mishoo
311
+ *
312
+ * Table Of Content generator
313
+ * Version: 0.4
314
+ *
315
+ * Feel free to use this script under the terms of the GNU General Public
316
+ * License, as long as you do not remove or alter this notice.
317
+ */
318
+
319
+ /* modified by Troy D. Hanson, September 2006. License: GPL */
320
+ /* modified by Stuart Rackham, October 2006. License: GPL */
321
+
322
+ function getText(el) {
323
+ var text = "";
324
+ for (var i = el.firstChild; i != null; i = i.nextSibling) {
325
+ if (i.nodeType == 3 /* Node.TEXT_NODE */) // IE doesn't speak constants.
326
+ text += i.data;
327
+ else if (i.firstChild != null)
328
+ text += getText(i);
329
+ }
330
+ return text;
331
+ }
332
+
333
+ function TocEntry(el, text, toclevel) {
334
+ this.element = el;
335
+ this.text = text;
336
+ this.toclevel = toclevel;
337
+ }
338
+
339
+ function tocEntries(el, toclevels) {
340
+ var result = new Array;
341
+ var re = new RegExp('[hH]([2-'+(toclevels+1)+'])');
342
+ // Function that scans the DOM tree for header elements (the DOM2
343
+ // nodeIterator API would be a better technique but not supported by all
344
+ // browsers).
345
+ var iterate = function (el) {
346
+ for (var i = el.firstChild; i != null; i = i.nextSibling) {
347
+ if (i.nodeType == 1 /* Node.ELEMENT_NODE */) {
348
+ var mo = re.exec(i.tagName)
349
+ if (mo)
350
+ result[result.length] = new TocEntry(i, getText(i), mo[1]-1);
351
+ iterate(i);
352
+ }
353
+ }
354
+ }
355
+ iterate(el);
356
+ return result;
357
+ }
358
+
359
+ // This function does the work. toclevels = 1..4.
360
+ function generateToc(toclevels) {
361
+ var toc = document.getElementById("toc");
362
+ var entries = tocEntries(document.getElementsByTagName("body")[0], toclevels);
363
+ for (var i = 0; i < entries.length; ++i) {
364
+ var entry = entries[i];
365
+ if (entry.element.id == "")
366
+ entry.element.id = "toc" + i;
367
+ var a = document.createElement("a");
368
+ a.href = "#" + entry.element.id;
369
+ a.appendChild(document.createTextNode(entry.text));
370
+ var div = document.createElement("div");
371
+ div.appendChild(a);
372
+ div.className = "toclevel" + entry.toclevel;
373
+ toc.appendChild(div);
374
+ }
375
+ }
376
+ /*]]>*/
377
+ </script>
378
+ <title>Passenger users guide</title>
379
+ </head>
380
+ <body>
381
+ <div id="header">
382
+ <h1>Passenger users guide</h1>
383
+ <div id="toc">
384
+ <div id="toctitle">Table of Contents</div>
385
+ <noscript><p><b>JavaScript must be enabled in your browser to display the table of contents.</b></p></noscript>
386
+ </div>
387
+ </div>
388
+ <div id="preamble">
389
+ <div class="sectionbody">
390
+ <div class="para"><p><span class="image">
391
+ <a class="image" href="http://www.phusion.nl/">
392
+ <img src="images/phusion_banner.png" alt="images/phusion_banner.png" />
393
+ </a>
394
+ </span></p></div>
395
+ <div class="para"><p>Passenger is an Apache module, which makes deploying Ruby on Rails applications
396
+ on Apache a breeze. It follows the usual Ruby on Rails conventions, such as
397
+ "Don't-Repeat-Yourself" and ease of setup.</p></div>
398
+ <div class="para"><p>This users guide will teach you:</p></div>
399
+ <div class="ilist"><ul>
400
+ <li>
401
+ <p>
402
+ How to install Passenger.
403
+ </p>
404
+ </li>
405
+ <li>
406
+ <p>
407
+ How to configure Passenger.
408
+ </p>
409
+ </li>
410
+ <li>
411
+ <p>
412
+ How to deploy a Ruby on Rails application.
413
+ </p>
414
+ </li>
415
+ <li>
416
+ <p>
417
+ How to solve common problems.
418
+ </p>
419
+ </li>
420
+ </ul></div>
421
+ <div class="para"><p>This guide assumes that the reader is somewhat familiar with Apache and with
422
+ using the commandline.</p></div>
423
+ </div>
424
+ </div>
425
+ <h2 id="_installation">1. Installation</h2>
426
+ <div class="sectionbody">
427
+ <h3 id="_supported_operating_systems">1.1. Supported operating systems</h3><div style="clear:left"></div>
428
+ <div class="para"><p>Passenger works on any POSIX-compliant operating system. In other words:
429
+ practically any operating system on earth, except Microsoft Windows.</p></div>
430
+ <div class="para"><p>Passenger has been tested on:</p></div>
431
+ <div class="ilist"><ul>
432
+ <li>
433
+ <p>
434
+ Ubuntu Linux 6.06 (x86)
435
+ </p>
436
+ </li>
437
+ <li>
438
+ <p>
439
+ Ubuntu Linux 7.10 (x86)
440
+ </p>
441
+ </li>
442
+ <li>
443
+ <p>
444
+ Debian Sarge (x86)
445
+ </p>
446
+ </li>
447
+ <li>
448
+ <p>
449
+ Debian Etch (x86)
450
+ </p>
451
+ </li>
452
+ <li>
453
+ <p>
454
+ Debian Lenny/Sid (x86)
455
+ </p>
456
+ </li>
457
+ <li>
458
+ <p>
459
+ CentOS 5 (x86)
460
+ </p>
461
+ </li>
462
+ <li>
463
+ <p>
464
+ Red Hat Enterprise Linux 5 (x86)
465
+ </p>
466
+ </li>
467
+ <li>
468
+ <p>
469
+ Gentoo, March 14 2008 (AMD64)
470
+ </p>
471
+ </li>
472
+ <li>
473
+ <p>
474
+ FreeBSD 6.1-RELEASE (x86)
475
+ </p>
476
+ </li>
477
+ <li>
478
+ <p>
479
+ MacOS X Tiger (x86)
480
+ </p>
481
+ </li>
482
+ <li>
483
+ <p>
484
+ MacOS X Leopard (x86)
485
+ </p>
486
+ </li>
487
+ </ul></div>
488
+ <div class="para"><p>Other operating systems have not been tested, but Passenger will probably work
489
+ fine on them. Please
490
+ <a href="http://code.google.com/p/phusion-passenger/issues/list">report a bug</a>
491
+ or
492
+ <a href="http://groups.google.com/group/phusion-passenger">join our discussion list</a>
493
+ if it doesn't.</p></div>
494
+ <h3 id="install_passenger">1.2. Overview of download and installation methods</h3><div style="clear:left"></div>
495
+ <div class="para"><p>There are two ways to install Passenger:</p></div>
496
+ <div class="olist"><ol>
497
+ <li>
498
+ <p>
499
+ By installing the Passenger gem, as instructed on the &#8220;Install&#8221; page
500
+ on the Passenger website.
501
+ </p>
502
+ </li>
503
+ <li>
504
+ <p>
505
+ By downloading the source tarball from the Passenger website
506
+ (<em>passenger-x.x.x.tar.gz</em>).
507
+ </p>
508
+ </li>
509
+ </ol></div>
510
+ <div class="para"><p>In our opinion, installing the gem is easiest.</p></div>
511
+ <div class="para"><p>Passenger provides an easy-to-use installer for installing the Passenger
512
+ Apache module (<em>mod_passenger</em>).</p></div>
513
+ <div class="admonitionblock">
514
+ <table><tr>
515
+ <td class="icon">
516
+ <img src="./images/icons/note.png" alt="Note" />
517
+ </td>
518
+ <td class="content">You might have to run the installation commands in the following sections
519
+ as <em>root</em>. If the installer fails because of permission errors, it will tell
520
+ you.</td>
521
+ </tr></table>
522
+ </div>
523
+ <h3 id="specifying_correct_apache_install">1.3. Specifying the correct Apache installation</h3><div style="clear:left"></div>
524
+ <div class="para"><p>If your system has multiple Apache installations (this is likely the case on
525
+ MacOS X), then you will need to tell the Passenger installer which one to use.
526
+ If you only have one Apache installation (the case on most Linux systems), then
527
+ you can skip this section because Passenger will automatically detect it.</p></div>
528
+ <div class="para"><p>Every Apache installation has its own <tt>apxs</tt> program. You will need to tell
529
+ Passenger the location of this program, by specifying the <tt>APXS2</tt> environment
530
+ variable. Suppose that you want to use the Apache installation in
531
+ <em>/opt/apache2</em>. Then, assuming that the corresponding <tt>apxs</tt> program is located
532
+ <em>/opt/apache2/bin/apxs</em>, type:</p></div>
533
+ <div class="listingblock">
534
+ <div class="content">
535
+ <pre><tt>export APXS2=/opt/apache2/bin/apxs</tt></pre>
536
+ </div></div>
537
+ <div class="admonitionblock">
538
+ <table><tr>
539
+ <td class="icon">
540
+ <img src="./images/icons/note.png" alt="Note" />
541
+ </td>
542
+ <td class="content">On some systems, the <tt>apxs</tt> program might be called <tt>apxs2</tt>, and it might
543
+ be located in the <tt>sbin</tt> folder instead of the <tt>bin</tt> folder.</td>
544
+ </tr></table>
545
+ </div>
546
+ <h3 id="specifying_ruby_installation">1.4. Specifying the correct Ruby installation</h3><div style="clear:left"></div>
547
+ <div class="para"><p>If your system has multiple Ruby installations (this is likely the case on
548
+ MacOS X), then you will need to tell the Passenger installer which one to use.
549
+ If you only have one Ruby installation (the case on most Linux systems), then
550
+ you can skip this section because Passenger will automatically detect it.</p></div>
551
+ <div class="para"><p>To specify the Ruby installation, prepend your Ruby installation's <tt>bin</tt>
552
+ directory to the <tt>PATH</tt> environment variable. For example, if you have the
553
+ following Ruby installations:</p></div>
554
+ <div class="ilist"><ul>
555
+ <li>
556
+ <p>
557
+ /usr/bin/ruby
558
+ </p>
559
+ </li>
560
+ <li>
561
+ <p>
562
+ /opt/myruby/bin/ruby
563
+ </p>
564
+ </li>
565
+ </ul></div>
566
+ <div class="para"><p>and you want to use the latter, then type:</p></div>
567
+ <div class="listingblock">
568
+ <div class="content">
569
+ <pre><tt>export PATH=/opt/myruby/bin:$PATH</tt></pre>
570
+ </div></div>
571
+ <h3 id="_installing_via_the_gem">1.5. Installing via the gem</h3><div style="clear:left"></div>
572
+ <div class="para"><p>Please install the gem and then run the Passenger installer, by typing the
573
+ following commands:</p></div>
574
+ <div class="listingblock">
575
+ <div class="content">
576
+ <pre><tt>gem install passenger-x.x.x.gem
577
+ passenger-install-apache2-module</tt></pre>
578
+ </div></div>
579
+ <div class="para"><p>Please follow the instructions given by the installer.</p></div>
580
+ <h3 id="_installing_via_the_source_tarball">1.6. Installing via the source tarball</h3><div style="clear:left"></div>
581
+ <div class="para"><p>Extract the tarball to whatever location you prefer. The Passenger files
582
+ are to reside in that location permanently. For example, if you would like
583
+ Passenger to reside in <tt>/opt/passenger-x.x.x</tt>:</p></div>
584
+ <div class="listingblock">
585
+ <div class="content">
586
+ <pre><tt>cd /opt
587
+ tar xzvf ~/YourDownloadsFolder/passenger-x.x.x.tar.gz</tt></pre>
588
+ </div></div>
589
+ <div class="para"><p>Next, run the included installer:</p></div>
590
+ <div class="listingblock">
591
+ <div class="content">
592
+ <pre><tt>/opt/passenger-x.x.x/bin/passenger-install-apache2-module</tt></pre>
593
+ </div></div>
594
+ <div class="para"><p>Please follow the instructions given by the installer.</p></div>
595
+ <div class="admonitionblock">
596
+ <table><tr>
597
+ <td class="icon">
598
+ <img src="./images/icons/important.png" alt="Important" />
599
+ </td>
600
+ <td class="content">Please do not remove the <em>passenger-x.x.x</em> folder after
601
+ installation. Furthermore, the <em>passenger-x.x.x</em> folder must be accessible by Apache.</td>
602
+ </tr></table>
603
+ </div>
604
+ </div>
605
+ <h2 id="_deploying_a_ruby_on_rails_application">2. Deploying a Ruby on Rails application</h2>
606
+ <div class="sectionbody">
607
+ <div class="para"><p>Suppose you have a Ruby on Rails application in <em>/webapps/mycook</em>, and you own
608
+ the domain <em>www.mycook.com</em>. You can either deploy your application in the
609
+ virtual host's root (i.e. the application will be accessible from the root URL,
610
+ <em>http://www.mycook.com/</em>), or in a sub URI (i.e. the application will be
611
+ accessible from a sub URL, such as <em>http://www.mycook.com/railsapplication</em>).</p></div>
612
+ <div class="admonitionblock">
613
+ <table><tr>
614
+ <td class="icon">
615
+ <img src="./images/icons/note.png" alt="Note" />
616
+ </td>
617
+ <td class="content">The default <tt>RAILS_ENV</tt> environment in which deployed Rails applications
618
+ are run, is &#8220;production&#8221;. You can change this by changing the
619
+ <a href="#rails_env"><em>RailsEnv</em></a> configuration option.</td>
620
+ </tr></table>
621
+ </div>
622
+ <h3 id="_deploying_to_a_virtual_host_s_root">2.1. Deploying to a virtual host's root</h3><div style="clear:left"></div>
623
+ <div class="para"><p>Add a virtual host entry to your Apache configuration file. The virtual host's
624
+ document root must point to your Ruby on Rails application's <em>public</em> folder.
625
+ For example:</p></div>
626
+ <div class="listingblock">
627
+ <div class="content">
628
+ <pre><tt>&lt;VirtualHost *:80&gt;
629
+ ServerName www.mycook.com
630
+ DocumentRoot /webapps/mycook/public
631
+ &lt;/VirtualHost&gt;</tt></pre>
632
+ </div></div>
633
+ <div class="para"><p>Then restart Apache. The application has now been deployed.</p></div>
634
+ <h3 id="deploying_to_sub_uri">2.2. Deploying to a sub URI</h3><div style="clear:left"></div>
635
+ <div class="para"><p>Suppose that you already have a virtual host:</p></div>
636
+ <div class="listingblock">
637
+ <div class="content">
638
+ <pre><tt>&lt;VirtualHost *:80&gt;
639
+ ServerName www.phusion.nl
640
+ DocumentRoot /websites/phusion
641
+ &lt;/VirtualHost&gt;</tt></pre>
642
+ </div></div>
643
+ <div class="para"><p>And you want your Ruby on Rails application to be accessible from the URL
644
+ <em>http://www.phusion.nl/rails</em>.</p></div>
645
+ <div class="para"><p>To do this, make a symlink from your Ruby on Rails application's <em>public</em>
646
+ folder to a directory in the document root. For example:</p></div>
647
+ <div class="listingblock">
648
+ <div class="content">
649
+ <pre><tt>ln -s /webapps/mycook/public /websites/phusion/rails</tt></pre>
650
+ </div></div>
651
+ <div class="para"><p>Next, add a <tt>RailsBaseURI</tt> option to the virtual host configuration:</p></div>
652
+ <div class="listingblock">
653
+ <div class="content">
654
+ <pre><tt>&lt;VirtualHost *:80&gt;
655
+ ServerName www.phusion.nl
656
+ DocumentRoot /websites/phusion
657
+ RailsBaseURI /rails # This line has been added.
658
+ &lt;/VirtualHost&gt;</tt></pre>
659
+ </div></div>
660
+ <div class="para"><p>Then restart Apache. The application has now been deployed.</p></div>
661
+ <h3 id="_redeploying_restarting_the_ruby_on_rails_application">2.3. Redeploying (restarting the Ruby on Rails application)</h3><div style="clear:left"></div>
662
+ <div class="para"><p>Deploying a new version of a Ruby on Rails application is as simple as
663
+ re-uploading the application files, and restarting the application.</p></div>
664
+ <div class="para"><p>There are two ways to restart the application:</p></div>
665
+ <div class="olist"><ol>
666
+ <li>
667
+ <p>
668
+ By restarting Apache.
669
+ </p>
670
+ </li>
671
+ <li>
672
+ <p>
673
+ By creating or modifying the file <em>tmp/restart.txt</em> in the Rails
674
+ application's root folder. Passenger will automatically restart the
675
+ application.
676
+ </p>
677
+ </li>
678
+ </ol></div>
679
+ <div class="para"><p>For example, to restart our example MyCook application, we type this in the
680
+ command line:</p></div>
681
+ <div class="listingblock">
682
+ <div class="content">
683
+ <pre><tt>touch /webapps/mycook/tmp/restart.txt</tt></pre>
684
+ </div></div>
685
+ </div>
686
+ <h2 id="_configuring_passenger">3. Configuring Passenger</h2>
687
+ <div class="sectionbody">
688
+ <div class="para"><p>After installation, Passenger does not need any further configurations.
689
+ Nevertheless, the system administrator may be interested in changing
690
+ Passenger's behavior. Passenger's Apache module supports the following
691
+ configuration options:</p></div>
692
+ <div class="vlist"><dl>
693
+ <dt>
694
+ RailsSpawnServer &lt;filename&gt;
695
+ </dt>
696
+ <dd>
697
+ <p>
698
+ The location to the Passenger spawn server. This configuration option is
699
+ essential to Passenger. The correct value is given by the installer,
700
+ and should usually not be changed manually.
701
+ </p>
702
+ <div class="para"><p>This option may only occur once, in the global server configuration. If
703
+ this option is not given, then Passenger will look for the program
704
+ <tt>passenger-spawn-server</tt> in <tt>$PATH</tt>.</p></div>
705
+ </dd>
706
+ <dt>
707
+ RailsBaseURI &lt;uri&gt;
708
+ </dt>
709
+ <dd>
710
+ <p>
711
+ Used to specify that the given URI is a Rails application. See
712
+ <a href="#deploying_to_sub_uri">Deploying to a sub URI</a> for an example.
713
+ </p>
714
+ <div class="para"><p>This option may occur multiple times, in the global server configuration or in a
715
+ virtual host configuration block.</p></div>
716
+ </dd>
717
+ <dt>
718
+ RailsAutoDetect &lt;on|off&gt;
719
+ </dt>
720
+ <dd>
721
+ <p>
722
+ Whether Passenger should automatically detect whether a virtual host's
723
+ document root is a Ruby on Rails application. The default is <em>on</em>.
724
+ </p>
725
+ <div class="para"><p>This option may occur in the global server configuration or in a virtual host
726
+ configuration block.</p></div>
727
+ <div class="para"><p>For example, consider the following configuration:</p></div>
728
+ <div class="listingblock">
729
+ <div class="content">
730
+ <pre><tt>RailsAutoDetect off
731
+ &lt;VirtualHost *:80&gt;
732
+ ServerName www.mycook.com
733
+ DocumentRoot /webapps/mycook/public
734
+ &lt;/VirtualHost&gt;</tt></pre>
735
+ </div></div>
736
+ <div class="para"><p>If one goes to <em>http://www.mycook.com/</em>, the visitor will see the contents of
737
+ the <em>/webapps/mycook/public</em> folder, instead of the output of the Ruby on Rails
738
+ application.</p></div>
739
+ <div class="para"><p>It is possible to explicitly specify that the host is a Ruby on Rails
740
+ application by using the <tt>RailsBaseURI</tt> configuration option:</p></div>
741
+ <div class="listingblock">
742
+ <div class="content">
743
+ <pre><tt>RailsAutoDetect off
744
+ &lt;VirtualHost *:80&gt;
745
+ ServerName www.mycook.com
746
+ DocumentRoot /webapps/mycook/public
747
+ RailsBaseURI /
748
+ &lt;/VirtualHost&gt;</tt></pre>
749
+ </div></div>
750
+ </dd>
751
+ </dl></div>
752
+ <div class="vlist" id="RailsAllowModRewrite"><dl>
753
+ <dt>
754
+ RailsAllowModRewrite &lt;on|off&gt;
755
+ </dt>
756
+ <dd>
757
+ <p>
758
+ If enabled, Passenger will not override mod_rewrite rules. Please read
759
+ <a href="#conflicting_apache_modules">Conflicting Apache modules</a> for details.
760
+ </p>
761
+ <div class="para"><p>This option may occur in the global server configuration or in a virtual host
762
+ configuration block. The default value is <em>off</em>.</p></div>
763
+ </dd>
764
+ <dt>
765
+ RailsRuby &lt;filename&gt;
766
+ </dt>
767
+ <dd>
768
+ <p>
769
+ This option allows one to specify the Ruby interpreter to use.
770
+ </p>
771
+ <div class="para"><p>This option may only occur once, in the global server configuration.
772
+ The default is <em>ruby</em>.</p></div>
773
+ </dd>
774
+ </dl></div>
775
+ <div class="vlist" id="rails_env"><dl>
776
+ <dt>
777
+ RailsEnv &lt;string&gt;
778
+ </dt>
779
+ <dd>
780
+ <p>
781
+ This option allows one to specify the default <tt>RAILS_ENV</tt> value.
782
+ </p>
783
+ <div class="para"><p>This option may only occur once, in the global server configuration.
784
+ The default is <em>production</em>.</p></div>
785
+ <div class="admonitionblock">
786
+ <table><tr>
787
+ <td class="icon">
788
+ <img src="./images/icons/tip.png" alt="Tip" />
789
+ </td>
790
+ <td class="content">Even though it is not possible to specify a different RailsEnv
791
+ per virtual host in the Apache configuration file, one can set the
792
+ Rails environment by editing <tt>RAILS_ENV=&#8230;</tt> in the application's
793
+ <em>config/environment.rb</em>.</td>
794
+ </tr></table>
795
+ </div>
796
+ </dd>
797
+ <dt>
798
+ RailsMaxPoolSize &lt;integer&gt;
799
+ </dt>
800
+ <dd>
801
+ <p>
802
+ The maximum number of Ruby on Rails application instances that may
803
+ be simultaneously active. A larger number results in higher memory usage,
804
+ but improved ability to handle concurrent HTTP clients.
805
+ </p>
806
+ <div class="para"><p>The optimal value depends on your system's hardware and the server's average
807
+ load. You should experiment with different values. But generally speaking,
808
+ the value should be at least equal to the number of CPUs (or CPU cores) that
809
+ you have. If your system has 2 GB of RAM, then we recommend a value of <em>30</em>.
810
+ If your system is a Virtual Private Server (VPS) and has about 256 MB RAM, and
811
+ is also running other services such as MySQL, then we recommend a value of <em>2</em>.</p></div>
812
+ <div class="para"><p>If you find that your server is unable to handle the load on your Rails websites
813
+ (i.e. running out of memory) then you should lower this value. (Though if your
814
+ sites are really that popular, then you should strongly consider upgrading your
815
+ hardware or getting more servers.)</p></div>
816
+ <div class="para"><p>This option may only occur once, in the global server configuration.
817
+ The default value is <em>20</em>.</p></div>
818
+ <div class="admonitionblock">
819
+ <table><tr>
820
+ <td class="icon">
821
+ <img src="./images/icons/tip.png" alt="Tip" />
822
+ </td>
823
+ <td class="content">We strongly recommend you to <a href="#reducing_memory_usage">use Ruby Enterprise Edition</a>. This allows you to reduce your memory usage by about 33%. And it's
824
+ not hard to install.</td>
825
+ </tr></table>
826
+ </div>
827
+ </dd>
828
+ <dt>
829
+ RailsPoolIdleTime &lt;integer&gt;
830
+ </dt>
831
+ <dd>
832
+ <p>
833
+ The maximum number of seconds that a Ruby on Rails application instance
834
+ may be idle. That is, if an application instance hasn't done anything after
835
+ the given number of seconds, then it will be shutdown in order to conserve
836
+ memory.
837
+ </p>
838
+ <div class="para"><p>Decreasing this value means that Rails applications will have to be spawned
839
+ more often. Since spawning is a relatively slow operation, some visitors may
840
+ notice a small delay when they visit your Rails site. However, it will also
841
+ free up resources used by Rails applications more quickly.</p></div>
842
+ <div class="para"><p>The optimal value depends on the average time that a visitor spends on a single
843
+ Rails web page. We recommend a value of <tt>2 * x</tt>, where <tt>x</tt> is the average
844
+ number of seconds that a visitor spends on a single Rails web page. But your
845
+ mileage may vary.</p></div>
846
+ <div class="para"><p>This option may only occur once, in the global server configuration.
847
+ The default value is <em>120</em>.</p></div>
848
+ </dd>
849
+ </dl></div>
850
+ <div class="vlist" id="RailsUserSwitching"><dl>
851
+ <dt>
852
+ RailsUserSwitching &lt;on|off&gt;
853
+ </dt>
854
+ <dd>
855
+ <p>
856
+ Whether to enable <a href="#user_switching">user switching support</a>.
857
+ </p>
858
+ <div class="para"><p>This option may only occur once, in the global server configuration.
859
+ The default value is <em>on</em>.</p></div>
860
+ </dd>
861
+ </dl></div>
862
+ <div class="vlist" id="RailsDefaultUser"><dl>
863
+ <dt>
864
+ RailsDefaultUser &lt;username&gt;
865
+ </dt>
866
+ <dd>
867
+ <p>
868
+ Passenger enables <a href="#user_switching">user switching support</a> by default.
869
+ This configuration option allows one to specify which user Rails
870
+ applications must run as, if user switching fails or is disabled.
871
+ </p>
872
+ <div class="para"><p>This option may only occur once, in the global server configuration.
873
+ The default value is <em>nobody</em>.</p></div>
874
+ </dd>
875
+ </dl></div>
876
+ </div>
877
+ <h2 id="_troubleshooting">4. Troubleshooting</h2>
878
+ <div class="sectionbody">
879
+ <h3 id="_problems_during_installation">4.1. Problems during installation</h3><div style="clear:left"></div>
880
+ <h4 id="installing_ruby_dev">4.1.1. Ruby development headers aren't installed</h4>
881
+ <div class="sidebarblock">
882
+ <div class="sidebar-content">
883
+ <div class="sidebar-title">Symptoms</div>
884
+ <div class="para"><p>Installing Passenger fails because of one of the following errors:</p></div>
885
+ <div class="ilist"><ul>
886
+ <li>
887
+ <p>
888
+ The Passenger installer tells you that the Ruby development headers aren't
889
+ installed.
890
+ </p>
891
+ </li>
892
+ <li>
893
+ <p>
894
+ The error message &#8220;<em>no such file to load &#8212; mkmf&#8221;</em> occurs.
895
+ </p>
896
+ </li>
897
+ <li>
898
+ <p>
899
+ The error message &#8220;<em>ruby.h: No such file or directory&#8221;</em> occurs.
900
+ </p>
901
+ </li>
902
+ </ul></div>
903
+ </div></div>
904
+ <div class="para"><p>Passenger makes use of a native extension, so the Ruby development headers
905
+ must be installed. On most Linux systems, Ruby and the Ruby development headers
906
+ are contained in separate packages, so having Ruby installed does not
907
+ automatically imply having the development headers installed.</p></div>
908
+ <div class="para"><p>Here's how you can install the development headers:</p></div>
909
+ <div class="vlist"><dl>
910
+ <dt>
911
+ Ubuntu/Debian
912
+ </dt>
913
+ <dd>
914
+ <p>
915
+ Please type:
916
+ </p>
917
+ <div class="listingblock">
918
+ <div class="content">
919
+ <pre><tt>sudo apt-get install ruby1.8-dev</tt></pre>
920
+ </div></div>
921
+ </dd>
922
+ <dt>
923
+ Fedora/CentOS/RHEL
924
+ </dt>
925
+ <dd>
926
+ <p>
927
+ Please type:
928
+ </p>
929
+ <div class="listingblock">
930
+ <div class="content">
931
+ <pre><tt>su -c 'yum install ruby-devel'</tt></pre>
932
+ </div></div>
933
+ </dd>
934
+ <dt>
935
+ FreeBSD
936
+ </dt>
937
+ <dd>
938
+ <p>
939
+ Please install Ruby from <em>ports</em> or with <tt>pkg_add</tt>. If that fails,
940
+ please install Ruby from source.
941
+ </p>
942
+ </dd>
943
+ <dt>
944
+ MacOS X
945
+ </dt>
946
+ <dd>
947
+ <p>
948
+ Please install Ruby from source.
949
+ </p>
950
+ </dd>
951
+ <dt>
952
+ Other operating systems
953
+ </dt>
954
+ <dd>
955
+ <p>
956
+ Please consult your operating system's native package database.
957
+ There should be a package containing the Ruby development headers.
958
+ If that fails, please install Ruby from source.
959
+ </p>
960
+ </dd>
961
+ </dl></div>
962
+ <div class="admonitionblock">
963
+ <table><tr>
964
+ <td class="icon">
965
+ <img src="./images/icons/note.png" alt="Note" />
966
+ </td>
967
+ <td class="content">If you've installed a new Ruby version (i.e. your system now contains
968
+ multiple Ruby installations), then you will need to tell Passenger which Ruby
969
+ installation you want to use. Please read
970
+ <a href="#specifying_ruby_installation">Specifying the correct Ruby installation</a>.</td>
971
+ </tr></table>
972
+ </div>
973
+ <h4 id="_apache_development_headers_aren_t_installed">4.1.2. Apache development headers aren't installed</h4>
974
+ <div class="sidebarblock">
975
+ <div class="sidebar-content">
976
+ <div class="sidebar-title">Symptoms</div>
977
+ <div class="para"><p>Installing Passenger fails because of one of the following errors:</p></div>
978
+ <div class="ilist"><ul>
979
+ <li>
980
+ <p>
981
+ The installer says that the Apache development headers aren't installed.
982
+ </p>
983
+ </li>
984
+ <li>
985
+ <p>
986
+ The error message &#8220;<em>httpd.h: No such file or directory&#8221;</em> occurs.
987
+ </p>
988
+ <div class="para"><p>(Instead of <em>httpd.h</em>, the message might also be <em>http_config.h</em> or something
989
+ else similar to <em>http_*.h</em>.)</p></div>
990
+ </li>
991
+ </ul></div>
992
+ </div></div>
993
+ <div class="vlist"><dl>
994
+ <dt>
995
+ Ubuntu
996
+ </dt>
997
+ <dd>
998
+ <p>
999
+ Please type:
1000
+ </p>
1001
+ <div class="listingblock">
1002
+ <div class="content">
1003
+ <pre><tt>sudo apt-get install apache2-prefork-dev</tt></pre>
1004
+ </div></div>
1005
+ </dd>
1006
+ <dt>
1007
+ Debian
1008
+ </dt>
1009
+ <dd>
1010
+ <p>
1011
+ Please type:
1012
+ </p>
1013
+ <div class="listingblock">
1014
+ <div class="content">
1015
+ <pre><tt>sudo apt-get install apache2-dev</tt></pre>
1016
+ </div></div>
1017
+ </dd>
1018
+ <dt>
1019
+ Fedora/CentOS/RHEL
1020
+ </dt>
1021
+ <dd>
1022
+ <p>
1023
+ Please type:
1024
+ </p>
1025
+ <div class="listingblock">
1026
+ <div class="content">
1027
+ <pre><tt>su -c 'yum install httpd-devel'</tt></pre>
1028
+ </div></div>
1029
+ </dd>
1030
+ <dt>
1031
+ FreeBSD
1032
+ </dt>
1033
+ <dd>
1034
+ <p>
1035
+ Please install Apache from <em>ports</em> or with <tt>pkg_add</tt>. If that fails,
1036
+ please install Apache from source.
1037
+ </p>
1038
+ </dd>
1039
+ <dt>
1040
+ MacOS X
1041
+ </dt>
1042
+ <dd>
1043
+ <p>
1044
+ Please install Apache from source.
1045
+ </p>
1046
+ </dd>
1047
+ <dt>
1048
+ Other operating systems
1049
+ </dt>
1050
+ <dd>
1051
+ <p>
1052
+ Please consult your operating system's native package database.
1053
+ There should be a package containing the Apache development headers.
1054
+ If that fails, please install Apache from source.
1055
+ </p>
1056
+ </dd>
1057
+ </dl></div>
1058
+ <h4 id="_apr_development_headers_aren_t_installed">4.1.3. APR development headers aren't installed</h4>
1059
+ <div class="sidebarblock">
1060
+ <div class="sidebar-content">
1061
+ <div class="sidebar-title">Symptoms</div>
1062
+ <div class="para"><p>Installing Passenger fails because one of the following errors:</p></div>
1063
+ <div class="ilist"><ul>
1064
+ <li>
1065
+ <p>
1066
+ The installer tells you that APR development headers aren't installed.
1067
+ </p>
1068
+ </li>
1069
+ <li>
1070
+ <p>
1071
+ The error message &#8220;<em>apr_pools.h: No such file or directory&#8221;</em> occurs.
1072
+ </p>
1073
+ </li>
1074
+ <li>
1075
+ <p>
1076
+ The error message &#8220;<em>apr_strings.h: No such file or directory&#8221;</em> occurs.
1077
+ </p>
1078
+ </li>
1079
+ </ul></div>
1080
+ </div></div>
1081
+ <div class="vlist"><dl>
1082
+ <dt>
1083
+ Ubuntu
1084
+ </dt>
1085
+ <dd>
1086
+ <p>
1087
+ Please type:
1088
+ </p>
1089
+ <div class="listingblock">
1090
+ <div class="content">
1091
+ <pre><tt>sudo apt-get install libapr1-dev</tt></pre>
1092
+ </div></div>
1093
+ </dd>
1094
+ <dt>
1095
+ Debian
1096
+ </dt>
1097
+ <dd>
1098
+ <p>
1099
+ Please type:
1100
+ </p>
1101
+ <div class="listingblock">
1102
+ <div class="content">
1103
+ <pre><tt>sudo apt-get install libapr1-dev</tt></pre>
1104
+ </div></div>
1105
+ </dd>
1106
+ <dt>
1107
+ Fedora/CentOS/RHEL
1108
+ </dt>
1109
+ <dd>
1110
+ <p>
1111
+ Please type:
1112
+ </p>
1113
+ <div class="listingblock">
1114
+ <div class="content">
1115
+ <pre><tt>su -c 'yum install apr-devel'</tt></pre>
1116
+ </div></div>
1117
+ </dd>
1118
+ <dt>
1119
+ Other Linux distributions
1120
+ </dt>
1121
+ <dd>
1122
+ <p>
1123
+ Please consult your distribution's package database. There should be a
1124
+ package which provides APR development headers.
1125
+ </p>
1126
+ </dd>
1127
+ <dt>
1128
+ Other operating systems
1129
+ </dt>
1130
+ <dd>
1131
+ <p>
1132
+ The APR development are bundled with Apache. If the APR headers aren't,
1133
+ then it probably means that they have been removed after Apache's been
1134
+ installed. Please reinstall Apache to get back the APR headers.
1135
+ </p>
1136
+ </dd>
1137
+ </dl></div>
1138
+ <h4 id="_passenger_is_using_the_wrong_apache_during_installation">4.1.4. Passenger is using the wrong Apache during installation</h4>
1139
+ <div class="para"><p>Please <a href="#specifying_correct_apache_install">Specifying the correct Apache installation</a>, and re-run the Passenger installer.</p></div>
1140
+ <h4 id="_passenger_is_using_the_wrong_ruby_during_installation">4.1.5. Passenger is using the wrong Ruby during installation</h4>
1141
+ <div class="para"><p>Please <a href="#specifying_ruby_installation">Specifying the correct Ruby installation</a>, and re-run the Passenger installer.</p></div>
1142
+ <h3 id="_problems_after_installation">4.2. Problems after installation</h3><div style="clear:left"></div>
1143
+ <div class="admonitionblock">
1144
+ <table><tr>
1145
+ <td class="icon">
1146
+ <img src="./images/icons/tip.png" alt="Tip" />
1147
+ </td>
1148
+ <td class="content">
1149
+ <div class="title">The golden tip: read your Apache error logs!</div>
1150
+ <div class="para"><p><em>mod_passenger</em> will write all errors to the Apache error log. So if
1151
+ you're experiencing post-installation problems, please look
1152
+ inside the Apache error logs. It will tell you what exactly went wrong.</p></div>
1153
+ </td>
1154
+ </tr></table>
1155
+ </div>
1156
+ <h4 id="_passenger_has_been_compiled_against_the_wrong_apache_installation">4.2.1. Passenger has been compiled against the wrong Apache installation</h4>
1157
+ <div class="sidebarblock">
1158
+ <div class="sidebar-content">
1159
+ <div class="sidebar-title">Symptoms</div>
1160
+ <div class="para"><p>Apache crashes during startup (after being daemonized). The Apache error log
1161
+ says &#8220;<em>seg fault or similar nasty error detected in the parent process&#8221;</em>.</p></div>
1162
+ </div></div>
1163
+ <div class="para"><p>This problem is most likely to occur on MacOS X. Most OS X users have multiple
1164
+ Apache installations on their system.</p></div>
1165
+ <div class="para"><p>To solve this problem, please <a href="#specifying_correct_apache_install">specify the correct Apache installation</a>, and <a href="#install_passenger">reinstall Passenger</a>.</p></div>
1166
+ <h4 id="_the_apache_error_log_says_that_the_spawn_manager_script_does_not_exist_or_that_it_does_not_have_permission_to_execute_it">4.2.2. The Apache error log says that the spawn manager script does not exist, or that it does not have permission to execute it</h4>
1167
+ <div class="para"><p>If you are sure that the RailsSpawnServer configuration option is set correctly,
1168
+ then this problem is most likely caused by the fact that you're running Apache
1169
+ with SELinux. On Fedora, CentOS and RedHat Enterprise Linux, Apache is locked
1170
+ down by SELinux policies.</p></div>
1171
+ <div class="para"><p>To solve this problem, you must set some permissions on the Passenger files and
1172
+ folders, so that Apache can access them.</p></div>
1173
+ <div class="ilist"><ul>
1174
+ <li>
1175
+ <p>
1176
+ If you've installed Passenger via a gem, then you must first find out the
1177
+ location in which RubyGems stores gem files. Type the following command:
1178
+ </p>
1179
+ <div class="listingblock">
1180
+ <div class="content">
1181
+ <pre><tt>gem environment | grep 'INSTALLATION DIRECTORY'</tt></pre>
1182
+ </div></div>
1183
+ <div class="para"><p>It should show something along the lines of:</p></div>
1184
+ <div class="listingblock">
1185
+ <div class="content">
1186
+ <pre><tt> - INSTALLATION DIRECTORY: /usr/lib/ruby/gems/1.8</tt></pre>
1187
+ </div></div>
1188
+ <div class="para"><p>The directory name that you see in the output is the RubyGems gem folder.
1189
+ Next, we'll fix the Passenger folder permissions as follows:</p></div>
1190
+ <div class="listingblock">
1191
+ <div class="content">
1192
+ <pre><tt>cd /usr/lib/ruby/gems/1.8 # Replace this with whatever your gem folder is.
1193
+ cd gems
1194
+ chcon -R -h -t httpd_sys_content_t passenger-*</tt></pre>
1195
+ </div></div>
1196
+ </li>
1197
+ <li>
1198
+ <p>
1199
+ If you've installed Passenger via the source tarball, then run the following
1200
+ command:
1201
+ </p>
1202
+ <div class="listingblock">
1203
+ <div class="content">
1204
+ <pre><tt>chcon -R -h -t httpd_sys_content_t /path/to/passenger/folder</tt></pre>
1205
+ </div></div>
1206
+ </li>
1207
+ </ul></div>
1208
+ <div class="para"><p>Once the permissions are fixed, restart Apache.</p></div>
1209
+ <h3 id="_the_rails_application_reports_that_it_s_unable_to_start_because_of_a_permission_error">4.3. The Rails application reports that it's unable to start because of a permission error</h3><div style="clear:left"></div>
1210
+ <div class="para"><p>Please check whether your Rails application's folder has the correct
1211
+ permissions. By default, Rails applications are started as the owner of the
1212
+ file <em>config/environment.rb</em>, except if the file is owned by root. If the
1213
+ file is owned by root, then the Rails application will be started as <em>nobody</em>
1214
+ (or as the user specify by <a href="#RailsDefaultUser">RailsDefaultUser</a>, if that's
1215
+ specified).</p></div>
1216
+ <div class="para"><p>Please read <a href="#user_switching">User switching (security)</a> for details.</p></div>
1217
+ </div>
1218
+ <h2 id="_tips_and_notes">5. Tips and notes</h2>
1219
+ <div class="sectionbody">
1220
+ <h3 id="user_switching">5.1. User switching (security)</h3><div style="clear:left"></div>
1221
+ <div class="para"><p>There is a problem that plagues most PHP web host, namely the fact that all PHP
1222
+ applications are run in the same user context as the web server. So for
1223
+ example, Joe's PHP application will be able to read Jane's PHP application's
1224
+ passwords. This is obviously undesirable on many servers.</p></div>
1225
+ <div class="para"><p>Passenger solves this problem by implementing <em>user switching</em>. A Rails
1226
+ application is started as the owner of the file <em>config/environment.rb</em>. So if
1227
+ <em>/home/webapps/foo/config/environment.rb</em> is owned by <em>joe</em>, then Passenger
1228
+ will launch the corresponding Rails application as <em>joe</em> as well.</p></div>
1229
+ <div class="para"><p>This behavior is the default, and you don't need to configure anything. But
1230
+ there are things that you should keep in mind:</p></div>
1231
+ <div class="ilist"><ul>
1232
+ <li>
1233
+ <p>
1234
+ The owner of <em>environment.rb</em> must have read access to the Rails application's
1235
+ folder, and read/write access to the Rails application's <em>logs</em> folder.
1236
+ </p>
1237
+ </li>
1238
+ <li>
1239
+ <p>
1240
+ This feature is only available if Apache is started by <em>root</em>. This is the
1241
+ case on most Apache installations.
1242
+ </p>
1243
+ </li>
1244
+ <li>
1245
+ <p>
1246
+ Under no circumstances will Rails applications be run as <em>root</em>. If
1247
+ <em>environment.rb</em> is owned as root or by an unknown user, then the Rails
1248
+ application will run as the user specified by
1249
+ <a href="#RailsDefaultUser">RailsDefaultUser</a>.
1250
+ </p>
1251
+ </li>
1252
+ </ul></div>
1253
+ <div class="para"><p>User switching can be disabled with the
1254
+ <a href="#RailsUserSwitching">RailsUserSwitching</a> option.</p></div>
1255
+ <h3 id="reducing_memory_usage">5.2. Reducing memory consumption of Ruby on Rails apps by 33%</h3><div style="clear:left"></div>
1256
+ <div class="para"><p>Is it possible to reduce memory consumption of your Rails apps by 33% on average,
1257
+ by using <a href="http://www.rubyenterpriseedition.com/">Ruby Enterprise Edition</a>.
1258
+ Please visit the website for details.</p></div>
1259
+ <h3 id="_moving_passenger_to_a_different_directory">5.3. Moving Passenger to a different directory</h3><div style="clear:left"></div>
1260
+ <div class="para"><p>It is possible to relocate the Passenger files to a different directory. It
1261
+ involves two steps:</p></div>
1262
+ <div class="olist"><ol>
1263
+ <li>
1264
+ <p>
1265
+ Moving the directory.
1266
+ </p>
1267
+ </li>
1268
+ <li>
1269
+ <p>
1270
+ Updating the &#8220;RailsSpawnServer&#8221; configuration option in Apache.
1271
+ </p>
1272
+ </li>
1273
+ </ol></div>
1274
+ <div class="para"><p>For example, if Passenger is located in <em>/opt/passenger/</em>, and you'd like to
1275
+ move it to <em>/usr/local/passenger/</em>, then do this:</p></div>
1276
+ <div class="olist"><ol>
1277
+ <li>
1278
+ <p>
1279
+ Run the following command:
1280
+ </p>
1281
+ <div class="listingblock">
1282
+ <div class="content">
1283
+ <pre><tt>mv /opt/passenger /usr/local/passenger</tt></pre>
1284
+ </div></div>
1285
+ </li>
1286
+ <li>
1287
+ <p>
1288
+ Edit your Apache configuration file, and set:
1289
+ </p>
1290
+ <div class="listingblock">
1291
+ <div class="content">
1292
+ <pre><tt>RailsSpawnServer /usr/local/passenger/bin/passenger-spawn-server</tt></pre>
1293
+ </div></div>
1294
+ </li>
1295
+ </ol></div>
1296
+ <h3 id="_installing_multiple_ruby_on_rails_versions">5.4. Installing multiple Ruby on Rails versions</h3><div style="clear:left"></div>
1297
+ <div class="para"><p>Each Ruby on Rails applications that are going to be deployed may require a
1298
+ specific Ruby on Rails version. You can install a specific version with
1299
+ this command:</p></div>
1300
+ <div class="listingblock">
1301
+ <div class="content">
1302
+ <pre><tt>gem install rails -v X.X.X</tt></pre>
1303
+ </div></div>
1304
+ <div class="para"><p>where <em>X.X.X</em> is the version number of Ruby on Rails.</p></div>
1305
+ <div class="para"><p>All of these versions will exist in parallel, and will not conflict with each
1306
+ other. Passenger will automatically make use of the correct version.</p></div>
1307
+ <h3 id="_x_sendfile_support">5.5. X-Sendfile support</h3><div style="clear:left"></div>
1308
+ <div class="para"><p>Passenger does not provide X-Sendfile support by itself. Please install
1309
+ <a href="http://tn123.ath.cx/mod_xsendfile/">mod_xsendfile</a> for X-Sendfile support.</p></div>
1310
+ <h3 id="conflicting_apache_modules">5.6. Conflicting Apache modules</h3><div style="clear:left"></div>
1311
+ <div class="para"><p>Passenger conflicts with <em>mod_rewrite</em> and <em>mod_alias</em>. Those modules may be
1312
+ installed and loaded together with <em>mod_passenger</em>, and they will work fine
1313
+ outside virtual hosts that contain a Rails application, but we recommend you
1314
+ not to use their features inside virtual hosts that contain a Rails
1315
+ application.</p></div>
1316
+ <div class="para"><p>By default, Passenger will override mod_rewrite rules on Rails hosts. This is
1317
+ because the default .htaccess, as provided by Ruby on Rails, redirects all
1318
+ requests to `dispatch.cgi' using mod_rewrite. This is a CGI application which
1319
+ loads the entire Ruby on Rails framework for every request, and thus is very
1320
+ slow. If we do not override mod_rewrite, then Ruby on Rails apps will be slow
1321
+ on Passenger by default &#8212; but we want a good out-of-the-box experience.</p></div>
1322
+ <div class="para"><p>Furthermore, the primary reason why people use mod_rewrite with Rails
1323
+ applications, is to accelerate page caching. Passenger supports page caching
1324
+ out-of-the-box, without mod_rewrite.</p></div>
1325
+ <div class="para"><p>It is not fully understood how mod_alias conflicts with Passenger, but we
1326
+ recommend you not to use it on Rails virtual hosts. mod_alias rules can result
1327
+ in surprising problems.</p></div>
1328
+ <div class="para"><p>If you really want to use mod_rewrite on Rails virtual hosts, then please set
1329
+ the <a href="#RailsAllowModRewrite">RailsAllowModRewrite</a> configuration option. But
1330
+ please note that you will have to delete Rails applications' default .htaccess
1331
+ file, or add rewrite rules to negate its effects.</p></div>
1332
+ </div>
1333
+ <h2 id="_appendix_a_about_this_document">6. Appendix A: About this document</h2>
1334
+ <div class="sectionbody">
1335
+ <div class="para"><p>The text of this document is licensed under the
1336
+ <a href="http://creativecommons.org/licenses/by-sa/3.0/">Creative Commons
1337
+ Attribution-Share Alike 3.0 Unported License</a>.</p></div>
1338
+ <div class="para"><p><span class="image">
1339
+ <a class="image" href="http://creativecommons.org/licenses/by-sa/3.0/">
1340
+ <img src="images/by_sa.png" alt="images/by_sa.png" />
1341
+ </a>
1342
+ </span></p></div>
1343
+ <div class="para"><p>Passenger is brought to you by Phusion.</p></div>
1344
+ <div class="para"><p><span class="image">
1345
+ <a class="image" href="http://www.phusion.nl/">
1346
+ <img src="images/phusion_banner.png" alt="images/phusion_banner.png" />
1347
+ </a>
1348
+ </span></p></div>
1349
+ </div>
1350
+ <div id="footer">
1351
+ <div id="footer-text">
1352
+ Last updated 2008-04-10 21:31:28 CEST
1353
+ </div>
1354
+ </div>
1355
+ </body>
1356
+ </html>