passenger 2.2.2 → 2.2.3

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 (254) hide show
  1. data/DEVELOPERS.TXT +13 -3
  2. data/Rakefile +42 -33
  3. data/bin/passenger-install-apache2-module +1 -2
  4. data/bin/passenger-install-nginx-module +7 -19
  5. data/bin/passenger-status +64 -15
  6. data/bin/passenger-stress-test +2 -2
  7. data/doc/ApplicationPool algorithm.txt +26 -22
  8. data/doc/Users guide Apache.html +374 -149
  9. data/doc/Users guide Apache.txt +318 -51
  10. data/doc/Users guide Nginx.html +13 -13
  11. data/doc/Users guide Nginx.txt +7 -2
  12. data/doc/cxxapi/Bucket_8h-source.html +62 -25
  13. data/doc/cxxapi/Configuration_8h-source.html +343 -326
  14. data/doc/cxxapi/DirectoryMapper_8h-source.html +12 -12
  15. data/doc/cxxapi/Hooks_8h-source.html +1 -1
  16. data/doc/cxxapi/annotated.html +1 -1
  17. data/doc/cxxapi/classHooks-members.html +1 -1
  18. data/doc/cxxapi/classHooks.html +1 -1
  19. data/doc/cxxapi/classPassenger_1_1DirectoryMapper-members.html +2 -2
  20. data/doc/cxxapi/classPassenger_1_1DirectoryMapper.html +9 -9
  21. data/doc/cxxapi/classes.html +1 -1
  22. data/doc/cxxapi/definitions_8h-source.html +1 -1
  23. data/doc/cxxapi/files.html +1 -1
  24. data/doc/cxxapi/functions.html +2 -2
  25. data/doc/cxxapi/functions_func.html +2 -2
  26. data/doc/cxxapi/graph_legend.html +1 -1
  27. data/doc/cxxapi/group__Configuration.html +1 -1
  28. data/doc/cxxapi/group__Core.html +1 -1
  29. data/doc/cxxapi/group__Hooks.html +1 -1
  30. data/doc/cxxapi/group__Support.html +1 -1
  31. data/doc/cxxapi/main.html +1 -1
  32. data/doc/cxxapi/modules.html +1 -1
  33. data/doc/rdoc/classes/ConditionVariable.html +194 -0
  34. data/doc/rdoc/classes/Exception.html +120 -0
  35. data/doc/rdoc/classes/GC.html +113 -0
  36. data/doc/rdoc/classes/IO.html +169 -0
  37. data/doc/rdoc/classes/PhusionPassenger.html +238 -0
  38. data/doc/rdoc/classes/PhusionPassenger/AbstractInstaller.html +153 -0
  39. data/doc/rdoc/classes/PhusionPassenger/AbstractRequestHandler.html +517 -0
  40. data/doc/rdoc/classes/PhusionPassenger/AbstractServer.html +719 -0
  41. data/doc/rdoc/classes/PhusionPassenger/AbstractServer/ServerAlreadyStarted.html +97 -0
  42. data/doc/rdoc/classes/PhusionPassenger/AbstractServer/ServerError.html +96 -0
  43. data/doc/rdoc/classes/PhusionPassenger/AbstractServer/ServerNotStarted.html +97 -0
  44. data/doc/rdoc/classes/PhusionPassenger/AbstractServer/UnknownMessage.html +96 -0
  45. data/doc/rdoc/classes/PhusionPassenger/AbstractServerCollection.html +598 -0
  46. data/doc/rdoc/classes/PhusionPassenger/AdminTools.html +140 -0
  47. data/doc/rdoc/classes/PhusionPassenger/AdminTools/ControlProcess.html +317 -0
  48. data/doc/rdoc/classes/PhusionPassenger/AdminTools/ControlProcess/Instance.html +138 -0
  49. data/doc/rdoc/classes/PhusionPassenger/AppInitError.html +154 -0
  50. data/doc/rdoc/classes/PhusionPassenger/Application.html +283 -0
  51. data/doc/rdoc/classes/PhusionPassenger/ConsoleTextTemplate.html +172 -0
  52. data/doc/rdoc/classes/PhusionPassenger/FrameworkInitError.html +145 -0
  53. data/doc/rdoc/classes/PhusionPassenger/HTMLTemplate.html +175 -0
  54. data/doc/rdoc/classes/PhusionPassenger/InitializationError.html +141 -0
  55. data/doc/rdoc/classes/PhusionPassenger/InvalidPath.html +92 -0
  56. data/doc/rdoc/classes/PhusionPassenger/MessageChannel.html +489 -0
  57. data/doc/rdoc/classes/PhusionPassenger/NativeSupport.html +350 -0
  58. data/doc/rdoc/classes/PhusionPassenger/Rack.html +91 -0
  59. data/doc/rdoc/classes/PhusionPassenger/Rack/ApplicationSpawner.html +188 -0
  60. data/doc/rdoc/classes/PhusionPassenger/Rack/RequestHandler.html +194 -0
  61. data/doc/rdoc/classes/PhusionPassenger/Railz.html +95 -0
  62. data/doc/rdoc/classes/PhusionPassenger/Railz/ApplicationSpawner.html +442 -0
  63. data/doc/rdoc/classes/PhusionPassenger/Railz/ApplicationSpawner/Error.html +98 -0
  64. data/doc/rdoc/classes/PhusionPassenger/Railz/CGIFixed.html +200 -0
  65. data/doc/rdoc/classes/PhusionPassenger/Railz/FrameworkSpawner.html +436 -0
  66. data/doc/rdoc/classes/PhusionPassenger/Railz/FrameworkSpawner/Error.html +98 -0
  67. data/doc/rdoc/classes/PhusionPassenger/Railz/RequestHandler.html +155 -0
  68. data/doc/rdoc/classes/PhusionPassenger/SpawnManager.html +402 -0
  69. data/doc/rdoc/classes/PhusionPassenger/UnknownError.html +125 -0
  70. data/doc/rdoc/classes/PhusionPassenger/Utils.html +805 -0
  71. data/doc/rdoc/classes/PhusionPassenger/VersionNotFound.html +140 -0
  72. data/doc/rdoc/classes/PhusionPassenger/WSGI.html +89 -0
  73. data/doc/rdoc/classes/PhusionPassenger/WSGI/ApplicationSpawner.html +188 -0
  74. data/doc/rdoc/classes/PlatformInfo.html +831 -0
  75. data/doc/rdoc/classes/RakeExtensions.html +197 -0
  76. data/doc/rdoc/classes/Signal.html +131 -0
  77. data/doc/rdoc/created.rid +1 -0
  78. data/doc/rdoc/files/DEVELOPERS_TXT.html +255 -0
  79. data/doc/rdoc/files/README.html +157 -0
  80. data/doc/rdoc/files/ext/phusion_passenger/native_support_c.html +92 -0
  81. data/doc/rdoc/files/lib/phusion_passenger/abstract_installer_rb.html +129 -0
  82. data/doc/rdoc/files/lib/phusion_passenger/abstract_request_handler_rb.html +131 -0
  83. data/doc/rdoc/files/lib/phusion_passenger/abstract_server_collection_rb.html +126 -0
  84. data/doc/rdoc/files/lib/phusion_passenger/abstract_server_rb.html +130 -0
  85. data/doc/rdoc/files/lib/phusion_passenger/admin_tools/control_process_rb.html +130 -0
  86. data/doc/rdoc/files/lib/phusion_passenger/admin_tools_rb.html +122 -0
  87. data/doc/rdoc/files/lib/phusion_passenger/application_rb.html +127 -0
  88. data/doc/rdoc/files/lib/phusion_passenger/console_text_template_rb.html +126 -0
  89. data/doc/rdoc/files/lib/phusion_passenger/constants_rb.html +122 -0
  90. data/doc/rdoc/files/lib/phusion_passenger/dependencies_rb.html +134 -0
  91. data/doc/rdoc/files/lib/phusion_passenger/events_rb.html +122 -0
  92. data/doc/rdoc/files/lib/phusion_passenger/exceptions_rb.html +122 -0
  93. data/doc/rdoc/files/lib/phusion_passenger/html_template_rb.html +126 -0
  94. data/doc/rdoc/files/lib/phusion_passenger/message_channel_rb.html +122 -0
  95. data/doc/rdoc/files/lib/phusion_passenger/packaging_rb.html +122 -0
  96. data/doc/rdoc/files/lib/phusion_passenger/platform_info_rb.html +127 -0
  97. data/doc/rdoc/files/lib/phusion_passenger/rack/application_spawner_rb.html +133 -0
  98. data/doc/rdoc/files/lib/phusion_passenger/rack/request_handler_rb.html +127 -0
  99. data/doc/rdoc/files/lib/phusion_passenger/railz/application_spawner_rb.html +143 -0
  100. data/doc/rdoc/files/lib/phusion_passenger/railz/cgi_fixed_rb.html +126 -0
  101. data/doc/rdoc/files/lib/phusion_passenger/railz/framework_spawner_rb.html +145 -0
  102. data/doc/rdoc/files/lib/phusion_passenger/railz/request_handler_rb.html +127 -0
  103. data/doc/rdoc/files/lib/phusion_passenger/simple_benchmarking_rb.html +122 -0
  104. data/doc/rdoc/files/lib/phusion_passenger/spawn_manager_rb.html +161 -0
  105. data/doc/rdoc/files/lib/phusion_passenger/utils_rb.html +175 -0
  106. data/doc/rdoc/files/lib/phusion_passenger/wsgi/application_spawner_rb.html +129 -0
  107. data/doc/rdoc/files/misc/rake/extensions_rb.html +130 -0
  108. data/doc/rdoc/fr_class_index.html +90 -0
  109. data/doc/rdoc/fr_file_index.html +76 -0
  110. data/doc/rdoc/fr_method_index.html +200 -0
  111. data/doc/rdoc/index.html +26 -0
  112. data/doc/rdoc/rdoc-style.css +187 -0
  113. data/doc/users_guide_snippets/rackup_specifications.txt +2 -8
  114. data/ext/apache2/Bucket.cpp +71 -38
  115. data/ext/apache2/Bucket.h +53 -16
  116. data/ext/apache2/Configuration.cpp +15 -0
  117. data/ext/apache2/Configuration.h +19 -2
  118. data/ext/apache2/DirectoryMapper.h +10 -10
  119. data/ext/apache2/Hooks.cpp +334 -74
  120. data/ext/boost/mpl/apply.hpp +5 -1
  121. data/ext/boost/mpl/apply_wrap.hpp +5 -2
  122. data/ext/boost/mpl/aux_/full_lambda.hpp +5 -1
  123. data/ext/boost/mpl/bind.hpp +5 -1
  124. data/ext/common/Application.h +11 -31
  125. data/ext/common/ApplicationPool.h +2 -1
  126. data/ext/common/ApplicationPoolServer.h +61 -20
  127. data/ext/common/ApplicationPoolServerExecutable.cpp +132 -4
  128. data/ext/common/ApplicationPoolStatusReporter.h +189 -65
  129. data/ext/common/Base64.cpp +143 -0
  130. data/ext/common/Base64.h +57 -0
  131. data/ext/common/CachedFileStat.cpp +25 -82
  132. data/ext/common/CachedFileStat.h +11 -125
  133. data/ext/common/CachedFileStat.hpp +243 -0
  134. data/ext/common/Exceptions.h +13 -0
  135. data/ext/common/FileChangeChecker.h +209 -0
  136. data/ext/common/Logging.h +3 -2
  137. data/ext/common/MessageChannel.h +10 -10
  138. data/ext/common/PoolOptions.h +72 -5
  139. data/ext/common/SpawnManager.h +11 -8
  140. data/ext/common/StandardApplicationPool.h +38 -39
  141. data/ext/common/StaticString.h +1 -0
  142. data/ext/common/StringListCreator.h +83 -0
  143. data/ext/common/SystemTime.h +3 -2
  144. data/ext/common/Timer.h +88 -0
  145. data/ext/common/Utils.cpp +161 -42
  146. data/ext/common/Utils.h +62 -31
  147. data/ext/common/Version.h +1 -1
  148. data/ext/nginx/Configuration.c +0 -4
  149. data/ext/nginx/ContentHandler.c +8 -6
  150. data/ext/nginx/HelperServer.cpp +45 -55
  151. data/ext/nginx/HttpStatusExtractor.h +4 -0
  152. data/ext/nginx/StaticContentHandler.c +25 -5
  153. data/ext/nginx/config +3 -0
  154. data/ext/nginx/ngx_http_passenger_module.c +72 -17
  155. data/ext/nginx/ngx_http_passenger_module.h +2 -2
  156. data/lib/phusion_passenger/abstract_request_handler.rb +15 -7
  157. data/lib/phusion_passenger/abstract_server.rb +16 -2
  158. data/lib/phusion_passenger/admin_tools/control_process.rb +36 -25
  159. data/lib/phusion_passenger/constants.rb +1 -1
  160. data/lib/phusion_passenger/dependencies.rb +10 -0
  161. data/lib/phusion_passenger/platform_info.rb +1 -1
  162. data/lib/phusion_passenger/rack/application_spawner.rb +21 -2
  163. data/lib/phusion_passenger/rack/request_handler.rb +10 -0
  164. data/lib/phusion_passenger/railz/application_spawner.rb +38 -2
  165. data/lib/phusion_passenger/railz/framework_spawner.rb +26 -28
  166. data/lib/phusion_passenger/railz/request_handler.rb +5 -1
  167. data/lib/phusion_passenger/spawn_manager.rb +6 -2
  168. data/lib/phusion_passenger/utils.rb +79 -27
  169. data/misc/rake/cplusplus.rb +5 -5
  170. data/test/ApplicationPoolServerTest.cpp +42 -0
  171. data/test/ApplicationPoolTest.cpp +255 -267
  172. data/test/Base64Test.cpp +48 -0
  173. data/test/CachedFileStatTest.cpp +243 -103
  174. data/test/FileChangeCheckerTest.cpp +331 -0
  175. data/test/PoolOptionsTest.cpp +80 -0
  176. data/test/UtilsTest.cpp +5 -17
  177. data/test/integration_tests/apache2_tests.rb +15 -4
  178. data/test/integration_tests/mycook_spec.rb +3 -4
  179. data/test/oxt/syscall_interruption_test.cpp +2 -14
  180. data/test/ruby/abstract_server_collection_spec.rb +1 -1
  181. data/test/ruby/abstract_server_spec.rb +35 -1
  182. data/test/ruby/rack/application_spawner_spec.rb +23 -6
  183. data/test/ruby/rails/application_spawner_spec.rb +6 -6
  184. data/test/ruby/rails/framework_spawner_spec.rb +6 -5
  185. data/test/ruby/rails/minimal_spawner_spec.rb +19 -0
  186. data/test/ruby/rails/spawner_error_handling_spec.rb +62 -7
  187. data/test/ruby/spawn_manager_spec.rb +10 -7
  188. data/test/ruby/spawn_server_spec.rb +1 -1
  189. data/test/ruby/utils_spec.rb +193 -20
  190. data/test/ruby/wsgi/application_spawner_spec.rb +3 -1
  191. data/test/stub/apache2/httpd.conf.erb +3 -0
  192. data/test/stub/rack/config.ru +1 -1
  193. data/test/stub/rails_apps/mycook/app/controllers/welcome_controller.rb +8 -0
  194. data/test/support/Support.cpp +84 -0
  195. data/test/support/Support.h +66 -8
  196. data/test/support/config.rb +14 -2
  197. data/test/support/test_helper.rb +5 -0
  198. data/vendor/rack-1.0.0-git/lib/rack/auth/openid.rb +123 -116
  199. data/vendor/rack-1.0.0-git/lib/rack/cascade.rb +17 -12
  200. data/vendor/rack-1.0.0-git/lib/rack/commonlogger.rb +34 -43
  201. data/vendor/rack-1.0.0-git/lib/rack/handler/cgi.rb +1 -1
  202. data/vendor/rack-1.0.0-git/lib/rack/handler/fastcgi.rb +1 -1
  203. data/vendor/rack-1.0.0-git/lib/rack/handler/lsws.rb +1 -1
  204. data/vendor/rack-1.0.0-git/lib/rack/handler/mongrel.rb +1 -1
  205. data/vendor/rack-1.0.0-git/lib/rack/handler/scgi.rb +1 -1
  206. data/vendor/rack-1.0.0-git/lib/rack/handler/webrick.rb +1 -1
  207. data/vendor/rack-1.0.0-git/lib/rack/mock.rb +4 -17
  208. data/vendor/rack-1.0.0-git/lib/rack/request.rb +3 -9
  209. data/vendor/rack-1.0.0-git/lib/rack/rewindable_input.rb +2 -0
  210. data/vendor/rack-1.0.0-git/lib/rack/utils.rb +38 -12
  211. metadata +231 -186
  212. data/ext/common/FileChecker.h +0 -112
  213. data/test/FileCheckerTest.cpp +0 -79
  214. data/test/stub/minimal-railsapp/README +0 -3
  215. data/test/stub/minimal-railsapp/config/application.rb +0 -0
  216. data/test/stub/minimal-railsapp/config/environment.rb +0 -3
  217. data/test/stub/minimal-railsapp/vendor/rails/actionmailer/lib/action_mailer.rb +0 -0
  218. data/test/stub/minimal-railsapp/vendor/rails/actionpack/lib/action_controller.rb +0 -10
  219. data/test/stub/minimal-railsapp/vendor/rails/actionpack/lib/action_pack.rb +0 -0
  220. data/test/stub/minimal-railsapp/vendor/rails/actionpack/lib/action_view.rb +0 -0
  221. data/test/stub/minimal-railsapp/vendor/rails/activerecord/lib/active_record.rb +0 -7
  222. data/test/stub/minimal-railsapp/vendor/rails/activeresource/lib/active_resource.rb +0 -0
  223. data/test/stub/minimal-railsapp/vendor/rails/activesupport/lib/active_support.rb +0 -17
  224. data/test/stub/minimal-railsapp/vendor/rails/activesupport/lib/active_support/whiny_nil.rb +0 -0
  225. data/test/stub/minimal-railsapp/vendor/rails/railties/lib/dispatcher.rb +0 -0
  226. data/test/stub/minimal-railsapp/vendor/rails/railties/lib/initializer.rb +0 -8
  227. data/test/stub/minimal-railsapp/vendor/rails/railties/lib/ruby_version_check.rb +0 -1
  228. data/test/stub/railsapp/app/controllers/application.rb +0 -12
  229. data/test/stub/railsapp/app/controllers/bar_controller.rb +0 -5
  230. data/test/stub/railsapp/app/controllers/bar_controller_1.txt +0 -5
  231. data/test/stub/railsapp/app/controllers/bar_controller_2.txt +0 -5
  232. data/test/stub/railsapp/app/controllers/foo_controller.rb +0 -9
  233. data/test/stub/railsapp/app/helpers/application_helper.rb +0 -3
  234. data/test/stub/railsapp/config/boot.rb +0 -108
  235. data/test/stub/railsapp/config/database.yml +0 -19
  236. data/test/stub/railsapp/config/environment.rb +0 -59
  237. data/test/stub/railsapp/config/environments/development.rb +0 -18
  238. data/test/stub/railsapp/config/environments/production.rb +0 -19
  239. data/test/stub/railsapp/config/initializers/inflections.rb +0 -10
  240. data/test/stub/railsapp/config/initializers/mime_types.rb +0 -5
  241. data/test/stub/railsapp/config/routes.rb +0 -35
  242. data/test/stub/railsapp/public/useless.txt +0 -1
  243. data/test/stub/railsapp2/app/controllers/application.rb +0 -12
  244. data/test/stub/railsapp2/app/controllers/foo_controller.rb +0 -5
  245. data/test/stub/railsapp2/app/helpers/application_helper.rb +0 -3
  246. data/test/stub/railsapp2/config/boot.rb +0 -108
  247. data/test/stub/railsapp2/config/database.yml +0 -19
  248. data/test/stub/railsapp2/config/environment.rb +0 -59
  249. data/test/stub/railsapp2/config/environments/development.rb +0 -18
  250. data/test/stub/railsapp2/config/environments/production.rb +0 -19
  251. data/test/stub/railsapp2/config/initializers/inflections.rb +0 -10
  252. data/test/stub/railsapp2/config/initializers/mime_types.rb +0 -5
  253. data/test/stub/railsapp2/config/routes.rb +0 -35
  254. data/test/stub/railsapp2/public/useless.txt +0 -1
@@ -0,0 +1,140 @@
1
+ <?xml version="1.0" encoding="iso-8859-1"?>
2
+ <!DOCTYPE html
3
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
+ <html>
6
+ <head>
7
+ <title>Class: PhusionPassenger::VersionNotFound</title>
8
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
9
+ <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
10
+
11
+ <script language="JavaScript" type="text/javascript">
12
+ // <![CDATA[
13
+
14
+ function toggleSource( id )
15
+ {
16
+ var elem
17
+ var link
18
+
19
+ if( document.getElementById )
20
+ {
21
+ elem = document.getElementById( id )
22
+ link = document.getElementById( "l_" + id )
23
+ }
24
+ else if ( document.all )
25
+ {
26
+ elem = eval( "document.all." + id )
27
+ link = eval( "document.all.l_" + id )
28
+ }
29
+ else
30
+ return false;
31
+
32
+ if( elem.style.display == "block" )
33
+ {
34
+ elem.style.display = "none"
35
+ link.innerHTML = "show source"
36
+ }
37
+ else
38
+ {
39
+ elem.style.display = "block"
40
+ link.innerHTML = "hide source"
41
+ }
42
+ }
43
+
44
+ function openCode( url )
45
+ {
46
+ window.open( url, "SOURCE_CODE", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=480,width=750" ).focus();
47
+ }
48
+ // ]]>
49
+ </script>
50
+ </head>
51
+
52
+ <body>
53
+ <table width="100%" border='0' cellpadding='0' cellspacing='0' class='banner'><tr>
54
+ <td class="file-title"><span class="file-title-prefix">Class</span><br />PhusionPassenger::VersionNotFound</td>
55
+ <td align="right">
56
+ <table cellspacing="0" cellpadding="2">
57
+ <tr valign="top">
58
+ <td>In:</td>
59
+ <td>
60
+ <a href="../../files/lib/phusion_passenger/exceptions_rb.html">lib/phusion_passenger/exceptions.rb</a>
61
+ </td>
62
+ </tr>
63
+ <tr>
64
+ <td>Parent:</td>
65
+ <td>
66
+ StandardError
67
+ </td>
68
+ </tr>
69
+ </table>
70
+ </td>
71
+ </tr>
72
+ </table>
73
+ <!-- banner header -->
74
+
75
+ <div id="bodyContent">
76
+ <div id="content">
77
+
78
+ <div class="description"><p>
79
+ Indicates that there is no Ruby on Rails version installed that satisfies a
80
+ given Ruby on Rails Gem version specification.
81
+ </p>
82
+ </div>
83
+
84
+
85
+
86
+ <div class="sectiontitle">Methods</div>
87
+ <ul>
88
+ <li><a href="#M000094">new</a></li>
89
+ </ul>
90
+
91
+
92
+
93
+
94
+
95
+ <div class="sectiontitle">Attributes</div>
96
+ <table border='0' cellpadding='5'>
97
+ <tr valign='top'>
98
+ <td class='attr-rw'>
99
+ [R]
100
+ </td>
101
+ <td class='attr-name'>gem_version_spec</td>
102
+ <td class='attr-desc'></td>
103
+ </tr>
104
+ </table>
105
+
106
+ <div class="sectiontitle">Public Class methods</div>
107
+ <div class="method">
108
+ <div class="title">
109
+ <a name="M000094"></a><b>new</b>(message, gem_version_spec)
110
+ </div>
111
+ <div class="description">
112
+ <ul>
113
+ <li><tt>message</tt>: The exception message.
114
+
115
+ </li>
116
+ <li><tt>gem_version_spec</tt>: The Ruby on Rails Gem version specification that
117
+ caused this error.
118
+
119
+ </li>
120
+ </ul>
121
+ </div>
122
+ <div class="sourcecode">
123
+ <p class="source-link">[ <a href="javascript:toggleSource('M000094_source')" id="l_M000094_source">show source</a> ]</p>
124
+ <div id="M000094_source" class="dyn-source">
125
+ <pre>
126
+ <span class="ruby-comment cmt"># File lib/phusion_passenger/exceptions.rb, line 33</span>
127
+ 33: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">message</span>, <span class="ruby-identifier">gem_version_spec</span>)
128
+ 34: <span class="ruby-keyword kw">super</span>(<span class="ruby-identifier">message</span>)
129
+ 35: <span class="ruby-ivar">@gem_version_spec</span> = <span class="ruby-identifier">gem_version_spec</span>
130
+ 36: <span class="ruby-keyword kw">end</span>
131
+ </pre>
132
+ </div>
133
+ </div>
134
+ </div>
135
+ </div>
136
+
137
+ </div>
138
+
139
+ </body>
140
+ </html>
@@ -0,0 +1,89 @@
1
+ <?xml version="1.0" encoding="iso-8859-1"?>
2
+ <!DOCTYPE html
3
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
+ <html>
6
+ <head>
7
+ <title>Module: PhusionPassenger::WSGI</title>
8
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
9
+ <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
10
+
11
+ <script language="JavaScript" type="text/javascript">
12
+ // <![CDATA[
13
+
14
+ function toggleSource( id )
15
+ {
16
+ var elem
17
+ var link
18
+
19
+ if( document.getElementById )
20
+ {
21
+ elem = document.getElementById( id )
22
+ link = document.getElementById( "l_" + id )
23
+ }
24
+ else if ( document.all )
25
+ {
26
+ elem = eval( "document.all." + id )
27
+ link = eval( "document.all.l_" + id )
28
+ }
29
+ else
30
+ return false;
31
+
32
+ if( elem.style.display == "block" )
33
+ {
34
+ elem.style.display = "none"
35
+ link.innerHTML = "show source"
36
+ }
37
+ else
38
+ {
39
+ elem.style.display = "block"
40
+ link.innerHTML = "hide source"
41
+ }
42
+ }
43
+
44
+ function openCode( url )
45
+ {
46
+ window.open( url, "SOURCE_CODE", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=480,width=750" ).focus();
47
+ }
48
+ // ]]>
49
+ </script>
50
+ </head>
51
+
52
+ <body>
53
+ <table width="100%" border='0' cellpadding='0' cellspacing='0' class='banner'><tr>
54
+ <td class="file-title"><span class="file-title-prefix">Module</span><br />PhusionPassenger::WSGI</td>
55
+ <td align="right">
56
+ <table cellspacing="0" cellpadding="2">
57
+ <tr valign="top">
58
+ <td>In:</td>
59
+ <td>
60
+ <a href="../../files/lib/phusion_passenger/wsgi/application_spawner_rb.html">lib/phusion_passenger/wsgi/application_spawner.rb</a>
61
+ </td>
62
+ </tr>
63
+ </table>
64
+ </td>
65
+ </tr>
66
+ </table>
67
+ <!-- banner header -->
68
+
69
+ <div id="bodyContent">
70
+ <div id="content">
71
+
72
+
73
+
74
+
75
+
76
+
77
+
78
+ <div class="sectiontitle">Classes and Modules</div>
79
+ Class <a href="WSGI/ApplicationSpawner.html" class="link">PhusionPassenger::WSGI::ApplicationSpawner</a><br />
80
+
81
+
82
+
83
+
84
+ </div>
85
+
86
+ </div>
87
+
88
+ </body>
89
+ </html>
@@ -0,0 +1,188 @@
1
+ <?xml version="1.0" encoding="iso-8859-1"?>
2
+ <!DOCTYPE html
3
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
+ <html>
6
+ <head>
7
+ <title>Class: PhusionPassenger::WSGI::ApplicationSpawner</title>
8
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
9
+ <link rel="stylesheet" href="../../.././rdoc-style.css" type="text/css" media="screen" />
10
+
11
+ <script language="JavaScript" type="text/javascript">
12
+ // <![CDATA[
13
+
14
+ function toggleSource( id )
15
+ {
16
+ var elem
17
+ var link
18
+
19
+ if( document.getElementById )
20
+ {
21
+ elem = document.getElementById( id )
22
+ link = document.getElementById( "l_" + id )
23
+ }
24
+ else if ( document.all )
25
+ {
26
+ elem = eval( "document.all." + id )
27
+ link = eval( "document.all.l_" + id )
28
+ }
29
+ else
30
+ return false;
31
+
32
+ if( elem.style.display == "block" )
33
+ {
34
+ elem.style.display = "none"
35
+ link.innerHTML = "show source"
36
+ }
37
+ else
38
+ {
39
+ elem.style.display = "block"
40
+ link.innerHTML = "hide source"
41
+ }
42
+ }
43
+
44
+ function openCode( url )
45
+ {
46
+ window.open( url, "SOURCE_CODE", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=480,width=750" ).focus();
47
+ }
48
+ // ]]>
49
+ </script>
50
+ </head>
51
+
52
+ <body>
53
+ <table width="100%" border='0' cellpadding='0' cellspacing='0' class='banner'><tr>
54
+ <td class="file-title"><span class="file-title-prefix">Class</span><br />PhusionPassenger::WSGI::ApplicationSpawner</td>
55
+ <td align="right">
56
+ <table cellspacing="0" cellpadding="2">
57
+ <tr valign="top">
58
+ <td>In:</td>
59
+ <td>
60
+ <a href="../../../files/lib/phusion_passenger/wsgi/application_spawner_rb.html">lib/phusion_passenger/wsgi/application_spawner.rb</a>
61
+ </td>
62
+ </tr>
63
+ <tr>
64
+ <td>Parent:</td>
65
+ <td>
66
+ Object
67
+ </td>
68
+ </tr>
69
+ </table>
70
+ </td>
71
+ </tr>
72
+ </table>
73
+ <!-- banner header -->
74
+
75
+ <div id="bodyContent">
76
+ <div id="content">
77
+
78
+ <div class="description"><p>
79
+ Class for spawning <a href="../WSGI.html">WSGI</a> applications.
80
+ </p>
81
+ </div>
82
+
83
+
84
+
85
+ <div class="sectiontitle">Methods</div>
86
+ <ul>
87
+ <li><a href="#M000037">spawn_application</a></li>
88
+ <li><a href="#M000038">spawn_application</a></li>
89
+ </ul>
90
+
91
+ <div class="sectiontitle">Included Modules</div>
92
+ <ul>
93
+ <li><a href="../Utils.html">Utils</a></li>
94
+ </ul>
95
+
96
+
97
+
98
+ <div class="sectiontitle">Constants</div>
99
+ <table border='0' cellpadding='5'>
100
+ <tr valign='top'>
101
+ <td class="attr-name">REQUEST_HANDLER</td>
102
+ <td>=</td>
103
+ <td class="attr-value">File.expand_path(File.dirname(__FILE__) + &quot;/request_handler.py&quot;)</td>
104
+ </tr>
105
+ </table>
106
+
107
+
108
+ <div class="sectiontitle">Public Class methods</div>
109
+ <div class="method">
110
+ <div class="title">
111
+ <a name="M000037"></a><b>spawn_application</b>(*args)
112
+ </div>
113
+ <div class="sourcecode">
114
+ <p class="source-link">[ <a href="javascript:toggleSource('M000037_source')" id="l_M000037_source">show source</a> ]</p>
115
+ <div id="M000037_source" class="dyn-source">
116
+ <pre>
117
+ <span class="ruby-comment cmt"># File lib/phusion_passenger/wsgi/application_spawner.rb, line 36</span>
118
+ 36: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">spawn_application</span>(<span class="ruby-operator">*</span><span class="ruby-identifier">args</span>)
119
+ 37: <span class="ruby-ivar">@@instance</span> <span class="ruby-operator">||=</span> <span class="ruby-constant">ApplicationSpawner</span>.<span class="ruby-identifier">new</span>
120
+ 38: <span class="ruby-ivar">@@instance</span>.<span class="ruby-identifier">spawn_application</span>(<span class="ruby-operator">*</span><span class="ruby-identifier">args</span>)
121
+ 39: <span class="ruby-keyword kw">end</span>
122
+ </pre>
123
+ </div>
124
+ </div>
125
+ </div>
126
+ <div class="sectiontitle">Public Instance methods</div>
127
+ <div class="method">
128
+ <div class="title">
129
+ <a name="M000038"></a><b>spawn_application</b>(app_root, lower_privilege = true, lowest_user = &quot;nobody&quot;, environment = &quot;production&quot;)
130
+ </div>
131
+ <div class="description">
132
+ <p>
133
+ Spawn an instance of the given <a href="../WSGI.html">WSGI</a> application.
134
+ When successful, an <a href="../Application.html">Application</a> object
135
+ will be returned, which represents the spawned application.
136
+ </p>
137
+ <p>
138
+ Raises:
139
+ </p>
140
+ <ul>
141
+ <li><a href="../AppInitError.html">AppInitError</a>: The <a
142
+ href="../WSGI.html">WSGI</a> application raised an exception or called
143
+ exit() during startup.
144
+
145
+ </li>
146
+ <li>SystemCallError, IOError, SocketError: Something went wrong.
147
+
148
+ </li>
149
+ </ul>
150
+ </div>
151
+ <div class="sourcecode">
152
+ <p class="source-link">[ <a href="javascript:toggleSource('M000038_source')" id="l_M000038_source">show source</a> ]</p>
153
+ <div id="M000038_source" class="dyn-source">
154
+ <pre>
155
+ <span class="ruby-comment cmt"># File lib/phusion_passenger/wsgi/application_spawner.rb, line 49</span>
156
+ 49: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">spawn_application</span>(<span class="ruby-identifier">app_root</span>, <span class="ruby-identifier">lower_privilege</span> = <span class="ruby-keyword kw">true</span>, <span class="ruby-identifier">lowest_user</span> = <span class="ruby-value str">&quot;nobody&quot;</span>, <span class="ruby-identifier">environment</span> = <span class="ruby-value str">&quot;production&quot;</span>)
157
+ 50: <span class="ruby-identifier">a</span>, <span class="ruby-identifier">b</span> = <span class="ruby-constant">UNIXSocket</span>.<span class="ruby-identifier">pair</span>
158
+ 51: <span class="ruby-identifier">pid</span> = <span class="ruby-identifier">safe_fork</span>(<span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">class</span>.<span class="ruby-identifier">to_s</span>, <span class="ruby-keyword kw">true</span>) <span class="ruby-keyword kw">do</span>
159
+ 52: <span class="ruby-identifier">a</span>.<span class="ruby-identifier">close</span>
160
+ 53:
161
+ 54: <span class="ruby-identifier">file_descriptors_to_leave_open</span> = [<span class="ruby-value">0</span>, <span class="ruby-value">1</span>, <span class="ruby-value">2</span>, <span class="ruby-identifier">b</span>.<span class="ruby-identifier">fileno</span>]
162
+ 55: <span class="ruby-constant">NativeSupport</span>.<span class="ruby-identifier">close_all_file_descriptors</span>(<span class="ruby-identifier">file_descriptors_to_leave_open</span>)
163
+ 56: <span class="ruby-identifier">close_all_io_objects_for_fds</span>(<span class="ruby-identifier">file_descriptors_to_leave_open</span>)
164
+ 57:
165
+ 58: <span class="ruby-identifier">run</span>(<span class="ruby-constant">MessageChannel</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">b</span>), <span class="ruby-identifier">app_root</span>, <span class="ruby-identifier">lower_privilege</span>, <span class="ruby-identifier">lowest_user</span>, <span class="ruby-identifier">environment</span>)
166
+ 59: <span class="ruby-keyword kw">end</span>
167
+ 60: <span class="ruby-identifier">b</span>.<span class="ruby-identifier">close</span>
168
+ 61: <span class="ruby-constant">Process</span>.<span class="ruby-identifier">waitpid</span>(<span class="ruby-identifier">pid</span>) <span class="ruby-keyword kw">rescue</span> <span class="ruby-keyword kw">nil</span>
169
+ 62:
170
+ 63: <span class="ruby-identifier">channel</span> = <span class="ruby-constant">MessageChannel</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">a</span>)
171
+ 64: <span class="ruby-identifier">pid</span>, <span class="ruby-identifier">socket_name</span>, <span class="ruby-identifier">socket_type</span> = <span class="ruby-identifier">channel</span>.<span class="ruby-identifier">read</span>
172
+ 65: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">pid</span>.<span class="ruby-identifier">nil?</span>
173
+ 66: <span class="ruby-identifier">raise</span> <span class="ruby-constant">IOError</span>, <span class="ruby-value str">&quot;Connection closed&quot;</span>
174
+ 67: <span class="ruby-keyword kw">end</span>
175
+ 68: <span class="ruby-identifier">owner_pipe</span> = <span class="ruby-identifier">channel</span>.<span class="ruby-identifier">recv_io</span>
176
+ 69: <span class="ruby-keyword kw">return</span> <span class="ruby-constant">Application</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@app_root</span>, <span class="ruby-identifier">pid</span>, <span class="ruby-identifier">socket_name</span>,
177
+ 70: <span class="ruby-identifier">socket_type</span>, <span class="ruby-identifier">owner_pipe</span>)
178
+ 71: <span class="ruby-keyword kw">end</span>
179
+ </pre>
180
+ </div>
181
+ </div>
182
+ </div>
183
+ </div>
184
+
185
+ </div>
186
+
187
+ </body>
188
+ </html>
@@ -0,0 +1,831 @@
1
+ <?xml version="1.0" encoding="iso-8859-1"?>
2
+ <!DOCTYPE html
3
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
+ <html>
6
+ <head>
7
+ <title>Module: PlatformInfo</title>
8
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
9
+ <link rel="stylesheet" href=".././rdoc-style.css" type="text/css" media="screen" />
10
+
11
+ <script language="JavaScript" type="text/javascript">
12
+ // <![CDATA[
13
+
14
+ function toggleSource( id )
15
+ {
16
+ var elem
17
+ var link
18
+
19
+ if( document.getElementById )
20
+ {
21
+ elem = document.getElementById( id )
22
+ link = document.getElementById( "l_" + id )
23
+ }
24
+ else if ( document.all )
25
+ {
26
+ elem = eval( "document.all." + id )
27
+ link = eval( "document.all.l_" + id )
28
+ }
29
+ else
30
+ return false;
31
+
32
+ if( elem.style.display == "block" )
33
+ {
34
+ elem.style.display = "none"
35
+ link.innerHTML = "show source"
36
+ }
37
+ else
38
+ {
39
+ elem.style.display = "block"
40
+ link.innerHTML = "hide source"
41
+ }
42
+ }
43
+
44
+ function openCode( url )
45
+ {
46
+ window.open( url, "SOURCE_CODE", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=480,width=750" ).focus();
47
+ }
48
+ // ]]>
49
+ </script>
50
+ </head>
51
+
52
+ <body>
53
+ <table width="100%" border='0' cellpadding='0' cellspacing='0' class='banner'><tr>
54
+ <td class="file-title"><span class="file-title-prefix">Module</span><br />PlatformInfo</td>
55
+ <td align="right">
56
+ <table cellspacing="0" cellpadding="2">
57
+ <tr valign="top">
58
+ <td>In:</td>
59
+ <td>
60
+ <a href="../files/lib/phusion_passenger/platform_info_rb.html">lib/phusion_passenger/platform_info.rb</a>
61
+ </td>
62
+ </tr>
63
+ </table>
64
+ </td>
65
+ </tr>
66
+ </table>
67
+ <!-- banner header -->
68
+
69
+ <div id="bodyContent">
70
+ <div id="content">
71
+
72
+ <div class="description"><p>
73
+ This module autodetects various platform-specific information, and provides
74
+ that information through constants.
75
+ </p>
76
+ <p>
77
+ Users can change the detection behavior by setting the environment variable
78
+ <tt>APXS2</tt> to the correct &#8216;apxs&#8217; (or &#8216;<a
79
+ href="PlatformInfo.html#M000014">apxs2</a>&#8217;) binary, as provided by
80
+ Apache.
81
+ </p>
82
+ </div>
83
+
84
+
85
+
86
+ <div class="sectiontitle">Methods</div>
87
+ <ul>
88
+ <li><a href="#M000019">apache2_bindir</a></li>
89
+ <li><a href="#M000024">apache2_module_cflags</a></li>
90
+ <li><a href="#M000025">apache2_module_ldflags</a></li>
91
+ <li><a href="#M000020">apache2_sbindir</a></li>
92
+ <li><a href="#M000015">apache2ctl</a></li>
93
+ <li><a href="#M000017">apr_config</a></li>
94
+ <li><a href="#M000030">apr_config_needed_for_building_apache_modules?</a></li>
95
+ <li><a href="#M000026">apr_flags</a></li>
96
+ <li><a href="#M000027">apr_libs</a></li>
97
+ <li><a href="#M000018">apu_config</a></li>
98
+ <li><a href="#M000028">apu_flags</a></li>
99
+ <li><a href="#M000029">apu_libs</a></li>
100
+ <li><a href="#M000014">apxs2</a></li>
101
+ <li><a href="#M000023">debugging_cflags</a></li>
102
+ <li><a href="#M000011">find_command</a></li>
103
+ <li><a href="#M000016">httpd</a></li>
104
+ <li><a href="#M000031">library_extension</a></li>
105
+ <li><a href="#M000032">linux_distro</a></li>
106
+ <li><a href="#M000021">portability_cflags</a></li>
107
+ <li><a href="#M000022">portability_ldflags</a></li>
108
+ <li><a href="#M000012">rake</a></li>
109
+ <li><a href="#M000013">rspec</a></li>
110
+ </ul>
111
+
112
+
113
+
114
+
115
+ <div class="sectiontitle">Constants</div>
116
+ <table border='0' cellpadding='5'>
117
+ <tr valign='top'>
118
+ <td class="attr-name">RUBY</td>
119
+ <td>=</td>
120
+ <td class="attr-value">Config::CONFIG['bindir'] + '/' + Config::CONFIG['RUBY_INSTALL_NAME'] + Config::CONFIG['EXEEXT']</td>
121
+ </tr>
122
+ <tr valign='top'>
123
+ <td>&nbsp;</td>
124
+ <td colspan="2" class="attr-desc">
125
+ The absolute path to the current Ruby interpreter.
126
+
127
+ </td>
128
+ </tr>
129
+ <tr valign='top'>
130
+ <td class="attr-name">GEM</td>
131
+ <td>=</td>
132
+ <td class="attr-value">locate_ruby_executable('gem')</td>
133
+ </tr>
134
+ <tr valign='top'>
135
+ <td>&nbsp;</td>
136
+ <td colspan="2" class="attr-desc">
137
+ The correct &#8216;gem&#8217; command for this Ruby interpreter.
138
+
139
+ </td>
140
+ </tr>
141
+ </table>
142
+
143
+
144
+ <div class="sectiontitle">Public Class methods</div>
145
+ <div class="method">
146
+ <div class="title">
147
+ <a name="M000019"></a><b>apache2_bindir</b>()
148
+ </div>
149
+ <div class="description">
150
+ <p>
151
+ The absolute path to the Apache 2 &#8216;bin&#8217; directory.
152
+ </p>
153
+ </div>
154
+ <div class="sourcecode">
155
+ <p class="source-link">[ <a href="javascript:toggleSource('M000019_source')" id="l_M000019_source">show source</a> ]</p>
156
+ <div id="M000019_source" class="dyn-source">
157
+ <pre>
158
+ <span class="ruby-comment cmt"># File lib/phusion_passenger/platform_info.rb, line 312</span>
159
+ 312: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">apache2_bindir</span>
160
+ 313: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">apxs2</span>.<span class="ruby-identifier">nil?</span>
161
+ 314: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">nil</span>
162
+ 315: <span class="ruby-keyword kw">else</span>
163
+ 316: <span class="ruby-keyword kw">return</span> <span class="ruby-node">`#{apxs2} -q BINDIR 2&gt;/dev/null`</span>.<span class="ruby-identifier">strip</span>
164
+ 317: <span class="ruby-keyword kw">end</span>
165
+ 318: <span class="ruby-keyword kw">end</span>
166
+ </pre>
167
+ </div>
168
+ </div>
169
+ </div>
170
+ <div class="method">
171
+ <div class="title">
172
+ <a name="M000024"></a><b>apache2_module_cflags</b>(with_apr_flags = true)
173
+ </div>
174
+ <div class="description">
175
+ <p>
176
+ The C compiler flags that are necessary to compile an Apache module.
177
+ Possibly includes APR and APU compiler flags.
178
+ </p>
179
+ </div>
180
+ <div class="sourcecode">
181
+ <p class="source-link">[ <a href="javascript:toggleSource('M000024_source')" id="l_M000024_source">show source</a> ]</p>
182
+ <div id="M000024_source" class="dyn-source">
183
+ <pre>
184
+ <span class="ruby-comment cmt"># File lib/phusion_passenger/platform_info.rb, line 383</span>
185
+ 383: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">apache2_module_cflags</span>(<span class="ruby-identifier">with_apr_flags</span> = <span class="ruby-keyword kw">true</span>)
186
+ 384: <span class="ruby-identifier">flags</span> = [<span class="ruby-value str">&quot;-fPIC&quot;</span>]
187
+ 385: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">with_apr_flags</span>
188
+ 386: <span class="ruby-identifier">flags</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">apr_flags</span>
189
+ 387: <span class="ruby-identifier">flags</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">apu_flags</span>
190
+ 388: <span class="ruby-keyword kw">end</span>
191
+ 389: <span class="ruby-keyword kw">if</span> <span class="ruby-operator">!</span><span class="ruby-identifier">apxs2</span>.<span class="ruby-identifier">nil?</span>
192
+ 390: <span class="ruby-identifier">apxs2_flags</span> = <span class="ruby-node">`#{apxs2} -q CFLAGS`</span>.<span class="ruby-identifier">strip</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value str">&quot; -I&quot;</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-node">`#{apxs2} -q INCLUDEDIR`</span>.<span class="ruby-identifier">strip</span>
193
+ 391: <span class="ruby-identifier">apxs2_flags</span>.<span class="ruby-identifier">gsub!</span>(<span class="ruby-regexp re">/-O\d? /</span>, <span class="ruby-value str">''</span>)
194
+ 392:
195
+ 393: <span class="ruby-comment cmt"># Remove flags not supported by GCC</span>
196
+ 394: <span class="ruby-keyword kw">if</span> <span class="ruby-constant">RUBY_PLATFORM</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp re">/solaris/</span> <span class="ruby-comment cmt"># TODO: Add support for people using SunStudio</span>
197
+ 395: <span class="ruby-comment cmt"># The big problem is Coolstack apxs includes a bunch of solaris -x directives.</span>
198
+ 396: <span class="ruby-identifier">options</span> = <span class="ruby-identifier">apxs2_flags</span>.<span class="ruby-identifier">split</span>
199
+ 397: <span class="ruby-identifier">options</span>.<span class="ruby-identifier">reject!</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">f</span><span class="ruby-operator">|</span> <span class="ruby-identifier">f</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp re">/^\-x/</span> }
200
+ 398: <span class="ruby-identifier">options</span>.<span class="ruby-identifier">reject!</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">f</span><span class="ruby-operator">|</span> <span class="ruby-identifier">f</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp re">/^\-Xa/</span> }
201
+ 399: <span class="ruby-identifier">apxs2_flags</span> = <span class="ruby-identifier">options</span>.<span class="ruby-identifier">join</span>(<span class="ruby-value str">' '</span>)
202
+ 400: <span class="ruby-keyword kw">end</span>
203
+ 401:
204
+ 402: <span class="ruby-identifier">apxs2_flags</span>.<span class="ruby-identifier">strip!</span>
205
+ 403: <span class="ruby-identifier">flags</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">apxs2_flags</span>
206
+ 404: <span class="ruby-keyword kw">end</span>
207
+ 405: <span class="ruby-keyword kw">if</span> <span class="ruby-operator">!</span><span class="ruby-identifier">httpd</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-constant">RUBY_PLATFORM</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp re">/darwin/</span>
208
+ 406: <span class="ruby-comment cmt"># The default Apache install on OS X is a universal binary.</span>
209
+ 407: <span class="ruby-comment cmt"># Figure out which architectures it's compiled for and do the same</span>
210
+ 408: <span class="ruby-comment cmt"># thing for mod_passenger. We use the 'file' utility to do this.</span>
211
+ 409: <span class="ruby-comment cmt">#</span>
212
+ 410: <span class="ruby-comment cmt"># Running 'file' on the Apache executable usually outputs something</span>
213
+ 411: <span class="ruby-comment cmt"># like this:</span>
214
+ 412: <span class="ruby-comment cmt">#</span>
215
+ 413: <span class="ruby-comment cmt"># /usr/sbin/httpd: Mach-O universal binary with 4 architectures</span>
216
+ 414: <span class="ruby-comment cmt"># /usr/sbin/httpd (for architecture ppc7400): Mach-O executable ppc</span>
217
+ 415: <span class="ruby-comment cmt"># /usr/sbin/httpd (for architecture ppc64): Mach-O 64-bit executable ppc64</span>
218
+ 416: <span class="ruby-comment cmt"># /usr/sbin/httpd (for architecture i386): Mach-O executable i386</span>
219
+ 417: <span class="ruby-comment cmt"># /usr/sbin/httpd (for architecture x86_64): Mach-O 64-bit executable x86_64</span>
220
+ 418: <span class="ruby-comment cmt">#</span>
221
+ 419: <span class="ruby-comment cmt"># But on some machines, it may output just:</span>
222
+ 420: <span class="ruby-comment cmt">#</span>
223
+ 421: <span class="ruby-comment cmt"># /usr/sbin/httpd: Mach-O fat file with 4 architectures</span>
224
+ 422: <span class="ruby-comment cmt">#</span>
225
+ 423: <span class="ruby-comment cmt"># (http://code.google.com/p/phusion-passenger/issues/detail?id=236)</span>
226
+ 424: <span class="ruby-identifier">output</span> = <span class="ruby-node">`file &quot;#{httpd}&quot;`</span>.<span class="ruby-identifier">strip</span>
227
+ 425: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">output</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp re">/Mach-O fat file/</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">output</span> <span class="ruby-operator">!~</span> <span class="ruby-regexp re">/for architecture/</span>
228
+ 426: <span class="ruby-identifier">architectures</span> = [<span class="ruby-value str">&quot;-arch i386 -arch ppc -arch x86_64 -arch ppc64&quot;</span>]
229
+ 427: <span class="ruby-keyword kw">else</span>
230
+ 428: <span class="ruby-identifier">architectures</span> = []
231
+ 429: <span class="ruby-identifier">output</span>.<span class="ruby-identifier">split</span>(<span class="ruby-value str">&quot;\n&quot;</span>).<span class="ruby-identifier">grep</span>(<span class="ruby-regexp re">/for architecture/</span>).<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">line</span><span class="ruby-operator">|</span>
232
+ 430: <span class="ruby-identifier">line</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp re">/for architecture (.*?)\)/</span>
233
+ 431: <span class="ruby-identifier">architectures</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-node">&quot;-arch #{$1}&quot;</span>
234
+ 432: <span class="ruby-keyword kw">end</span>
235
+ 433: <span class="ruby-keyword kw">end</span>
236
+ 434: <span class="ruby-identifier">flags</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">architectures</span>.<span class="ruby-identifier">compact</span>.<span class="ruby-identifier">join</span>(<span class="ruby-value str">' '</span>)
237
+ 435: <span class="ruby-keyword kw">end</span>
238
+ 436: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">flags</span>.<span class="ruby-identifier">compact</span>.<span class="ruby-identifier">join</span>(<span class="ruby-value str">' '</span>).<span class="ruby-identifier">strip</span>
239
+ 437: <span class="ruby-keyword kw">end</span>
240
+ </pre>
241
+ </div>
242
+ </div>
243
+ </div>
244
+ <div class="method">
245
+ <div class="title">
246
+ <a name="M000025"></a><b>apache2_module_ldflags</b>()
247
+ </div>
248
+ <div class="description">
249
+ <p>
250
+ Linker flags that are necessary for linking an Apache module. Possibly
251
+ includes APR and APU linker flags.
252
+ </p>
253
+ </div>
254
+ <div class="sourcecode">
255
+ <p class="source-link">[ <a href="javascript:toggleSource('M000025_source')" id="l_M000025_source">show source</a> ]</p>
256
+ <div id="M000025_source" class="dyn-source">
257
+ <pre>
258
+ <span class="ruby-comment cmt"># File lib/phusion_passenger/platform_info.rb, line 442</span>
259
+ 442: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">apache2_module_ldflags</span>
260
+ 443: <span class="ruby-identifier">flags</span> = <span class="ruby-node">&quot;-fPIC #{apr_libs} #{apu_libs}&quot;</span>
261
+ 444: <span class="ruby-identifier">flags</span>.<span class="ruby-identifier">strip!</span>
262
+ 445: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">flags</span>
263
+ 446: <span class="ruby-keyword kw">end</span>
264
+ </pre>
265
+ </div>
266
+ </div>
267
+ </div>
268
+ <div class="method">
269
+ <div class="title">
270
+ <a name="M000020"></a><b>apache2_sbindir</b>()
271
+ </div>
272
+ <div class="description">
273
+ <p>
274
+ The absolute path to the Apache 2 &#8216;sbin&#8217; directory.
275
+ </p>
276
+ </div>
277
+ <div class="sourcecode">
278
+ <p class="source-link">[ <a href="javascript:toggleSource('M000020_source')" id="l_M000020_source">show source</a> ]</p>
279
+ <div id="M000020_source" class="dyn-source">
280
+ <pre>
281
+ <span class="ruby-comment cmt"># File lib/phusion_passenger/platform_info.rb, line 322</span>
282
+ 322: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">apache2_sbindir</span>
283
+ 323: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">apxs2</span>.<span class="ruby-identifier">nil?</span>
284
+ 324: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">nil</span>
285
+ 325: <span class="ruby-keyword kw">else</span>
286
+ 326: <span class="ruby-keyword kw">return</span> <span class="ruby-node">`#{apxs2} -q SBINDIR`</span>.<span class="ruby-identifier">strip</span>
287
+ 327: <span class="ruby-keyword kw">end</span>
288
+ 328: <span class="ruby-keyword kw">end</span>
289
+ </pre>
290
+ </div>
291
+ </div>
292
+ </div>
293
+ <div class="method">
294
+ <div class="title">
295
+ <a name="M000015"></a><b>apache2ctl</b>()
296
+ </div>
297
+ <div class="description">
298
+ <p>
299
+ The absolute path to the &#8216;apachectl&#8217; or &#8216;<a
300
+ href="PlatformInfo.html#M000015">apache2ctl</a>&#8217; binary.
301
+ </p>
302
+ </div>
303
+ <div class="sourcecode">
304
+ <p class="source-link">[ <a href="javascript:toggleSource('M000015_source')" id="l_M000015_source">show source</a> ]</p>
305
+ <div id="M000015_source" class="dyn-source">
306
+ <pre>
307
+ <span class="ruby-comment cmt"># File lib/phusion_passenger/platform_info.rb, line 234</span>
308
+ 234: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">apache2ctl</span>
309
+ 235: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">find_apache2_executable</span>(<span class="ruby-value str">'apache2ctl'</span>, <span class="ruby-value str">'apachectl2'</span>, <span class="ruby-value str">'apachectl'</span>)
310
+ 236: <span class="ruby-keyword kw">end</span>
311
+ </pre>
312
+ </div>
313
+ </div>
314
+ </div>
315
+ <div class="method">
316
+ <div class="title">
317
+ <a name="M000017"></a><b>apr_config</b>()
318
+ </div>
319
+ <div class="description">
320
+ <p>
321
+ The absolute path to the &#8216;apr-config&#8217; or
322
+ &#8216;apr-1-config&#8217; executable.
323
+ </p>
324
+ </div>
325
+ <div class="sourcecode">
326
+ <p class="source-link">[ <a href="javascript:toggleSource('M000017_source')" id="l_M000017_source">show source</a> ]</p>
327
+ <div id="M000017_source" class="dyn-source">
328
+ <pre>
329
+ <span class="ruby-comment cmt"># File lib/phusion_passenger/platform_info.rb, line 258</span>
330
+ 258: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">apr_config</span>
331
+ 259: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">env_defined?</span>(<span class="ruby-value str">'APR_CONFIG'</span>)
332
+ 260: <span class="ruby-keyword kw">return</span> <span class="ruby-constant">ENV</span>[<span class="ruby-value str">'APR_CONFIG'</span>]
333
+ 261: <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">apxs2</span>.<span class="ruby-identifier">nil?</span>
334
+ 262: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">nil</span>
335
+ 263: <span class="ruby-keyword kw">else</span>
336
+ 264: <span class="ruby-identifier">filename</span> = <span class="ruby-node">`#{apxs2} -q APR_CONFIG 2&gt;/dev/null`</span>.<span class="ruby-identifier">strip</span>
337
+ 265: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">filename</span>.<span class="ruby-identifier">empty?</span>
338
+ 266: <span class="ruby-identifier">apr_bindir</span> = <span class="ruby-node">`#{apxs2} -q APR_BINDIR 2&gt;/dev/null`</span>.<span class="ruby-identifier">strip</span>
339
+ 267: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">apr_bindir</span>.<span class="ruby-identifier">empty?</span>
340
+ 268: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">nil</span>
341
+ 269: <span class="ruby-keyword kw">else</span>
342
+ 270: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">select_executable</span>(<span class="ruby-identifier">apr_bindir</span>,
343
+ 271: <span class="ruby-value str">&quot;apr-1-config&quot;</span>, <span class="ruby-value str">&quot;apr-config&quot;</span>)
344
+ 272: <span class="ruby-keyword kw">end</span>
345
+ 273: <span class="ruby-keyword kw">elsif</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">exist?</span>(<span class="ruby-identifier">filename</span>)
346
+ 274: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">filename</span>
347
+ 275: <span class="ruby-keyword kw">else</span>
348
+ 276: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">nil</span>
349
+ 277: <span class="ruby-keyword kw">end</span>
350
+ 278: <span class="ruby-keyword kw">end</span>
351
+ 279: <span class="ruby-keyword kw">end</span>
352
+ </pre>
353
+ </div>
354
+ </div>
355
+ </div>
356
+ <div class="method">
357
+ <div class="title">
358
+ <a name="M000030"></a><b>apr_config_needed_for_building_apache_modules?</b>()
359
+ </div>
360
+ <div class="description">
361
+ <p>
362
+ Returns whether it is necessary to use information outputted by
363
+ &#8216;apr-config&#8217; and &#8216;apu-config&#8217; in order to compile
364
+ an Apache module. When Apache is installed with &#8212;with-included-apr,
365
+ the APR/APU headers are placed into the same directory as the Apache
366
+ headers, and so &#8216;apr-config&#8217; and &#8216;apu-config&#8217;
367
+ won&#8216;t be necessary in that case.
368
+ </p>
369
+ </div>
370
+ <div class="sourcecode">
371
+ <p class="source-link">[ <a href="javascript:toggleSource('M000030_source')" id="l_M000030_source">show source</a> ]</p>
372
+ <div id="M000030_source" class="dyn-source">
373
+ <pre>
374
+ <span class="ruby-comment cmt"># File lib/phusion_passenger/platform_info.rb, line 478</span>
375
+ 478: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">apr_config_needed_for_building_apache_modules?</span>
376
+ 479: <span class="ruby-identifier">filename</span> = <span class="ruby-constant">File</span>.<span class="ruby-identifier">join</span>(<span class="ruby-node">&quot;/tmp/passenger-platform-check-#{Process.pid}.c&quot;</span>)
377
+ 480: <span class="ruby-constant">File</span>.<span class="ruby-identifier">open</span>(<span class="ruby-identifier">filename</span>, <span class="ruby-value str">&quot;w&quot;</span>) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">f</span><span class="ruby-operator">|</span>
378
+ 481: <span class="ruby-identifier">f</span>.<span class="ruby-identifier">puts</span>(<span class="ruby-value str">&quot;#include &lt;apr.h&gt;&quot;</span>)
379
+ 482: <span class="ruby-keyword kw">end</span>
380
+ 483: <span class="ruby-keyword kw">begin</span>
381
+ 484: <span class="ruby-keyword kw">return</span> <span class="ruby-operator">!</span><span class="ruby-identifier">system</span>(<span class="ruby-node">&quot;(gcc #{apache2_module_cflags(false)} -c '#{filename}' -o '#{filename}.o') &gt;/dev/null 2&gt;/dev/null&quot;</span>)
382
+ 485: <span class="ruby-keyword kw">ensure</span>
383
+ 486: <span class="ruby-constant">File</span>.<span class="ruby-identifier">unlink</span>(<span class="ruby-identifier">filename</span>) <span class="ruby-keyword kw">rescue</span> <span class="ruby-keyword kw">nil</span>
384
+ 487: <span class="ruby-constant">File</span>.<span class="ruby-identifier">unlink</span>(<span class="ruby-node">&quot;#{filename}.o&quot;</span>) <span class="ruby-keyword kw">rescue</span> <span class="ruby-keyword kw">nil</span>
385
+ 488: <span class="ruby-keyword kw">end</span>
386
+ 489: <span class="ruby-keyword kw">end</span>
387
+ </pre>
388
+ </div>
389
+ </div>
390
+ </div>
391
+ <div class="method">
392
+ <div class="title">
393
+ <a name="M000026"></a><b>apr_flags</b>()
394
+ </div>
395
+ <div class="description">
396
+ <p>
397
+ The C compiler flags that are necessary for programs that use APR.
398
+ </p>
399
+ </div>
400
+ <div class="sourcecode">
401
+ <p class="source-link">[ <a href="javascript:toggleSource('M000026_source')" id="l_M000026_source">show source</a> ]</p>
402
+ <div id="M000026_source" class="dyn-source">
403
+ <pre>
404
+ <span class="ruby-comment cmt"># File lib/phusion_passenger/platform_info.rb, line 450</span>
405
+ 450: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">apr_flags</span>
406
+ 451: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">determine_apr_info</span>[<span class="ruby-value">0</span>]
407
+ 452: <span class="ruby-keyword kw">end</span>
408
+ </pre>
409
+ </div>
410
+ </div>
411
+ </div>
412
+ <div class="method">
413
+ <div class="title">
414
+ <a name="M000027"></a><b>apr_libs</b>()
415
+ </div>
416
+ <div class="description">
417
+ <p>
418
+ The linker flags that are necessary for linking programs that use APR.
419
+ </p>
420
+ </div>
421
+ <div class="sourcecode">
422
+ <p class="source-link">[ <a href="javascript:toggleSource('M000027_source')" id="l_M000027_source">show source</a> ]</p>
423
+ <div id="M000027_source" class="dyn-source">
424
+ <pre>
425
+ <span class="ruby-comment cmt"># File lib/phusion_passenger/platform_info.rb, line 455</span>
426
+ 455: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">apr_libs</span>
427
+ 456: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">determine_apr_info</span>[<span class="ruby-value">1</span>]
428
+ 457: <span class="ruby-keyword kw">end</span>
429
+ </pre>
430
+ </div>
431
+ </div>
432
+ </div>
433
+ <div class="method">
434
+ <div class="title">
435
+ <a name="M000018"></a><b>apu_config</b>()
436
+ </div>
437
+ <div class="description">
438
+ <p>
439
+ The absolute path to the &#8216;apu-config&#8217; or
440
+ &#8216;apu-1-config&#8217; executable.
441
+ </p>
442
+ </div>
443
+ <div class="sourcecode">
444
+ <p class="source-link">[ <a href="javascript:toggleSource('M000018_source')" id="l_M000018_source">show source</a> ]</p>
445
+ <div id="M000018_source" class="dyn-source">
446
+ <pre>
447
+ <span class="ruby-comment cmt"># File lib/phusion_passenger/platform_info.rb, line 283</span>
448
+ 283: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">apu_config</span>
449
+ 284: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">env_defined?</span>(<span class="ruby-value str">'APU_CONFIG'</span>)
450
+ 285: <span class="ruby-keyword kw">return</span> <span class="ruby-constant">ENV</span>[<span class="ruby-value str">'APU_CONFIG'</span>]
451
+ 286: <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">apxs2</span>.<span class="ruby-identifier">nil?</span>
452
+ 287: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">nil</span>
453
+ 288: <span class="ruby-keyword kw">else</span>
454
+ 289: <span class="ruby-identifier">filename</span> = <span class="ruby-node">`#{apxs2} -q APU_CONFIG 2&gt;/dev/null`</span>.<span class="ruby-identifier">strip</span>
455
+ 290: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">filename</span>.<span class="ruby-identifier">empty?</span>
456
+ 291: <span class="ruby-identifier">apu_bindir</span> = <span class="ruby-node">`#{apxs2} -q APU_BINDIR 2&gt;/dev/null`</span>.<span class="ruby-identifier">strip</span>
457
+ 292: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">apu_bindir</span>.<span class="ruby-identifier">empty?</span>
458
+ 293: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">nil</span>
459
+ 294: <span class="ruby-keyword kw">else</span>
460
+ 295: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">select_executable</span>(<span class="ruby-identifier">apu_bindir</span>,
461
+ 296: <span class="ruby-value str">&quot;apu-1-config&quot;</span>, <span class="ruby-value str">&quot;apu-config&quot;</span>)
462
+ 297: <span class="ruby-keyword kw">end</span>
463
+ 298: <span class="ruby-keyword kw">elsif</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">exist?</span>(<span class="ruby-identifier">filename</span>)
464
+ 299: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">filename</span>
465
+ 300: <span class="ruby-keyword kw">else</span>
466
+ 301: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">nil</span>
467
+ 302: <span class="ruby-keyword kw">end</span>
468
+ 303: <span class="ruby-keyword kw">end</span>
469
+ 304: <span class="ruby-keyword kw">end</span>
470
+ </pre>
471
+ </div>
472
+ </div>
473
+ </div>
474
+ <div class="method">
475
+ <div class="title">
476
+ <a name="M000028"></a><b>apu_flags</b>()
477
+ </div>
478
+ <div class="description">
479
+ <p>
480
+ The C compiler flags that are necessary for programs that use APR-Util.
481
+ </p>
482
+ </div>
483
+ <div class="sourcecode">
484
+ <p class="source-link">[ <a href="javascript:toggleSource('M000028_source')" id="l_M000028_source">show source</a> ]</p>
485
+ <div id="M000028_source" class="dyn-source">
486
+ <pre>
487
+ <span class="ruby-comment cmt"># File lib/phusion_passenger/platform_info.rb, line 460</span>
488
+ 460: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">apu_flags</span>
489
+ 461: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">determine_apu_info</span>[<span class="ruby-value">0</span>]
490
+ 462: <span class="ruby-keyword kw">end</span>
491
+ </pre>
492
+ </div>
493
+ </div>
494
+ </div>
495
+ <div class="method">
496
+ <div class="title">
497
+ <a name="M000029"></a><b>apu_libs</b>()
498
+ </div>
499
+ <div class="description">
500
+ <p>
501
+ The linker flags that are necessary for linking programs that use APR-Util.
502
+ </p>
503
+ </div>
504
+ <div class="sourcecode">
505
+ <p class="source-link">[ <a href="javascript:toggleSource('M000029_source')" id="l_M000029_source">show source</a> ]</p>
506
+ <div id="M000029_source" class="dyn-source">
507
+ <pre>
508
+ <span class="ruby-comment cmt"># File lib/phusion_passenger/platform_info.rb, line 465</span>
509
+ 465: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">apu_libs</span>
510
+ 466: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">determine_apu_info</span>[<span class="ruby-value">1</span>]
511
+ 467: <span class="ruby-keyword kw">end</span>
512
+ </pre>
513
+ </div>
514
+ </div>
515
+ </div>
516
+ <div class="method">
517
+ <div class="title">
518
+ <a name="M000014"></a><b>apxs2</b>()
519
+ </div>
520
+ <div class="description">
521
+ <p>
522
+ The absolute path to the &#8216;apxs&#8217; or &#8216;<a
523
+ href="PlatformInfo.html#M000014">apxs2</a>&#8217; executable, or nil if not
524
+ found.
525
+ </p>
526
+ </div>
527
+ <div class="sourcecode">
528
+ <p class="source-link">[ <a href="javascript:toggleSource('M000014_source')" id="l_M000014_source">show source</a> ]</p>
529
+ <div id="M000014_source" class="dyn-source">
530
+ <pre>
531
+ <span class="ruby-comment cmt"># File lib/phusion_passenger/platform_info.rb, line 219</span>
532
+ 219: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">apxs2</span>
533
+ 220: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">env_defined?</span>(<span class="ruby-value str">&quot;APXS2&quot;</span>)
534
+ 221: <span class="ruby-keyword kw">return</span> <span class="ruby-constant">ENV</span>[<span class="ruby-value str">&quot;APXS2&quot;</span>]
535
+ 222: <span class="ruby-keyword kw">end</span>
536
+ 223: [<span class="ruby-value str">'apxs2'</span>, <span class="ruby-value str">'apxs'</span>].<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">name</span><span class="ruby-operator">|</span>
537
+ 224: <span class="ruby-identifier">command</span> = <span class="ruby-identifier">find_command</span>(<span class="ruby-identifier">name</span>)
538
+ 225: <span class="ruby-keyword kw">if</span> <span class="ruby-operator">!</span><span class="ruby-identifier">command</span>.<span class="ruby-identifier">nil?</span>
539
+ 226: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">command</span>
540
+ 227: <span class="ruby-keyword kw">end</span>
541
+ 228: <span class="ruby-keyword kw">end</span>
542
+ 229: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">nil</span>
543
+ 230: <span class="ruby-keyword kw">end</span>
544
+ </pre>
545
+ </div>
546
+ </div>
547
+ </div>
548
+ <div class="method">
549
+ <div class="title">
550
+ <a name="M000023"></a><b>debugging_cflags</b>()
551
+ </div>
552
+ <div class="description">
553
+ <p>
554
+ C compiler flags that should be passed in order to enable debugging
555
+ information.
556
+ </p>
557
+ </div>
558
+ <div class="sourcecode">
559
+ <p class="source-link">[ <a href="javascript:toggleSource('M000023_source')" id="l_M000023_source">show source</a> ]</p>
560
+ <div id="M000023_source" class="dyn-source">
561
+ <pre>
562
+ <span class="ruby-comment cmt"># File lib/phusion_passenger/platform_info.rb, line 370</span>
563
+ 370: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">debugging_cflags</span>
564
+ 371: <span class="ruby-keyword kw">if</span> <span class="ruby-constant">RUBY_PLATFORM</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp re">/openbsd/</span>
565
+ 372: <span class="ruby-comment cmt"># According to OpenBSD's pthreads man page, pthreads do not work</span>
566
+ 373: <span class="ruby-comment cmt"># correctly when an app is compiled with -g. It recommends using</span>
567
+ 374: <span class="ruby-comment cmt"># -ggdb instead.</span>
568
+ 375: <span class="ruby-keyword kw">return</span> <span class="ruby-value str">'-ggdb'</span>
569
+ 376: <span class="ruby-keyword kw">else</span>
570
+ 377: <span class="ruby-keyword kw">return</span> <span class="ruby-value str">'-g'</span>
571
+ 378: <span class="ruby-keyword kw">end</span>
572
+ 379: <span class="ruby-keyword kw">end</span>
573
+ </pre>
574
+ </div>
575
+ </div>
576
+ </div>
577
+ <div class="method">
578
+ <div class="title">
579
+ <a name="M000011"></a><b>find_command</b>(name)
580
+ </div>
581
+ <div class="description">
582
+ <p>
583
+ Check whether the specified command is in $PATH, and return its absolute
584
+ filename. Returns nil if the command is not found.
585
+ </p>
586
+ <p>
587
+ This function exists because system(&#8216;which&#8217;) doesn&#8216;t
588
+ always behave correctly, for some weird reason.
589
+ </p>
590
+ </div>
591
+ <div class="sourcecode">
592
+ <p class="source-link">[ <a href="javascript:toggleSource('M000011_source')" id="l_M000011_source">show source</a> ]</p>
593
+ <div id="M000011_source" class="dyn-source">
594
+ <pre>
595
+ <span class="ruby-comment cmt"># File lib/phusion_passenger/platform_info.rb, line 188</span>
596
+ 188: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">find_command</span>(<span class="ruby-identifier">name</span>)
597
+ 189: <span class="ruby-constant">ENV</span>[<span class="ruby-value str">'PATH'</span>].<span class="ruby-identifier">split</span>(<span class="ruby-constant">File</span><span class="ruby-operator">::</span><span class="ruby-constant">PATH_SEPARATOR</span>).<span class="ruby-identifier">detect</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">directory</span><span class="ruby-operator">|</span>
598
+ 190: <span class="ruby-identifier">path</span> = <span class="ruby-constant">File</span>.<span class="ruby-identifier">join</span>(<span class="ruby-identifier">directory</span>, <span class="ruby-identifier">name</span>.<span class="ruby-identifier">to_s</span>)
599
+ 191: <span class="ruby-keyword kw">if</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">executable?</span>(<span class="ruby-identifier">path</span>)
600
+ 192: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">path</span>
601
+ 193: <span class="ruby-keyword kw">end</span>
602
+ 194: <span class="ruby-keyword kw">end</span>
603
+ 195: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">nil</span>
604
+ 196: <span class="ruby-keyword kw">end</span>
605
+ </pre>
606
+ </div>
607
+ </div>
608
+ </div>
609
+ <div class="method">
610
+ <div class="title">
611
+ <a name="M000016"></a><b>httpd</b>()
612
+ </div>
613
+ <div class="description">
614
+ <p>
615
+ The absolute path to the Apache binary (that is, &#8216;<a
616
+ href="PlatformInfo.html#M000016">httpd</a>&#8217;, &#8216;httpd2&#8217;,
617
+ &#8216;apache&#8217; or &#8216;apache2&#8217;).
618
+ </p>
619
+ </div>
620
+ <div class="sourcecode">
621
+ <p class="source-link">[ <a href="javascript:toggleSource('M000016_source')" id="l_M000016_source">show source</a> ]</p>
622
+ <div id="M000016_source" class="dyn-source">
623
+ <pre>
624
+ <span class="ruby-comment cmt"># File lib/phusion_passenger/platform_info.rb, line 240</span>
625
+ 240: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">httpd</span>
626
+ 241: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">env_defined?</span>(<span class="ruby-value str">'HTTPD'</span>)
627
+ 242: <span class="ruby-keyword kw">return</span> <span class="ruby-constant">ENV</span>[<span class="ruby-value str">'HTTPD'</span>]
628
+ 243: <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">apxs2</span>.<span class="ruby-identifier">nil?</span>
629
+ 244: [<span class="ruby-value str">&quot;apache2&quot;</span>, <span class="ruby-value str">&quot;httpd2&quot;</span>, <span class="ruby-value str">&quot;apache&quot;</span>, <span class="ruby-value str">&quot;httpd&quot;</span>].<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">name</span><span class="ruby-operator">|</span>
630
+ 245: <span class="ruby-identifier">command</span> = <span class="ruby-identifier">find_command</span>(<span class="ruby-identifier">name</span>)
631
+ 246: <span class="ruby-keyword kw">if</span> <span class="ruby-operator">!</span><span class="ruby-identifier">command</span>.<span class="ruby-identifier">nil?</span>
632
+ 247: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">command</span>
633
+ 248: <span class="ruby-keyword kw">end</span>
634
+ 249: <span class="ruby-keyword kw">end</span>
635
+ 250: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">nil</span>
636
+ 251: <span class="ruby-keyword kw">else</span>
637
+ 252: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">find_apache2_executable</span>(<span class="ruby-node">`#{apxs2} -q TARGET`</span>.<span class="ruby-identifier">strip</span>)
638
+ 253: <span class="ruby-keyword kw">end</span>
639
+ 254: <span class="ruby-keyword kw">end</span>
640
+ </pre>
641
+ </div>
642
+ </div>
643
+ </div>
644
+ <div class="method">
645
+ <div class="title">
646
+ <a name="M000031"></a><b>library_extension</b>()
647
+ </div>
648
+ <div class="description">
649
+ <p>
650
+ The current platform&#8216;s shared library extension (&#8216;so&#8217; on
651
+ most Unices).
652
+ </p>
653
+ </div>
654
+ <div class="sourcecode">
655
+ <p class="source-link">[ <a href="javascript:toggleSource('M000031_source')" id="l_M000031_source">show source</a> ]</p>
656
+ <div id="M000031_source" class="dyn-source">
657
+ <pre>
658
+ <span class="ruby-comment cmt"># File lib/phusion_passenger/platform_info.rb, line 493</span>
659
+ 493: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">library_extension</span>
660
+ 494: <span class="ruby-keyword kw">if</span> <span class="ruby-constant">RUBY_PLATFORM</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp re">/darwin/</span>
661
+ 495: <span class="ruby-keyword kw">return</span> <span class="ruby-value str">&quot;bundle&quot;</span>
662
+ 496: <span class="ruby-keyword kw">else</span>
663
+ 497: <span class="ruby-keyword kw">return</span> <span class="ruby-value str">&quot;so&quot;</span>
664
+ 498: <span class="ruby-keyword kw">end</span>
665
+ 499: <span class="ruby-keyword kw">end</span>
666
+ </pre>
667
+ </div>
668
+ </div>
669
+ </div>
670
+ <div class="method">
671
+ <div class="title">
672
+ <a name="M000032"></a><b>linux_distro</b>()
673
+ </div>
674
+ <div class="description">
675
+ <p>
676
+ An identifier for the current Linux distribution. nil if the operating
677
+ system is not Linux.
678
+ </p>
679
+ </div>
680
+ <div class="sourcecode">
681
+ <p class="source-link">[ <a href="javascript:toggleSource('M000032_source')" id="l_M000032_source">show source</a> ]</p>
682
+ <div id="M000032_source" class="dyn-source">
683
+ <pre>
684
+ <span class="ruby-comment cmt"># File lib/phusion_passenger/platform_info.rb, line 502</span>
685
+ 502: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">linux_distro</span>
686
+ 503: <span class="ruby-keyword kw">if</span> <span class="ruby-constant">RUBY_PLATFORM</span> <span class="ruby-operator">!~</span> <span class="ruby-regexp re">/linux/</span>
687
+ 504: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">nil</span>
688
+ 505: <span class="ruby-keyword kw">end</span>
689
+ 506: <span class="ruby-identifier">lsb_release</span> = <span class="ruby-identifier">read_file</span>(<span class="ruby-value str">&quot;/etc/lsb-release&quot;</span>)
690
+ 507: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">lsb_release</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp re">/Ubuntu/</span>
691
+ 508: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">:ubuntu</span>
692
+ 509: <span class="ruby-keyword kw">elsif</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">exist?</span>(<span class="ruby-value str">&quot;/etc/debian_version&quot;</span>)
693
+ 510: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">:debian</span>
694
+ 511: <span class="ruby-keyword kw">elsif</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">exist?</span>(<span class="ruby-value str">&quot;/etc/redhat-release&quot;</span>)
695
+ 512: <span class="ruby-identifier">redhat_release</span> = <span class="ruby-identifier">read_file</span>(<span class="ruby-value str">&quot;/etc/redhat-release&quot;</span>)
696
+ 513: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">redhat_release</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp re">/CentOS/</span>
697
+ 514: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">:centos</span>
698
+ 515: <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">redhat_release</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp re">/Fedora/</span> <span class="ruby-comment cmt"># is this correct?</span>
699
+ 516: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">:fedora</span>
700
+ 517: <span class="ruby-keyword kw">else</span>
701
+ 518: <span class="ruby-comment cmt"># On official RHEL distros, the content is in the form of</span>
702
+ 519: <span class="ruby-comment cmt"># &quot;Red Hat Enterprise Linux Server release 5.1 (Tikanga)&quot;</span>
703
+ 520: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">:rhel</span>
704
+ 521: <span class="ruby-keyword kw">end</span>
705
+ 522: <span class="ruby-keyword kw">elsif</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">exist?</span>(<span class="ruby-value str">&quot;/etc/suse-release&quot;</span>)
706
+ 523: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">:suse</span>
707
+ 524: <span class="ruby-keyword kw">elsif</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">exist?</span>(<span class="ruby-value str">&quot;/etc/gentoo-release&quot;</span>)
708
+ 525: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">:gentoo</span>
709
+ 526: <span class="ruby-keyword kw">else</span>
710
+ 527: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">:unknown</span>
711
+ 528: <span class="ruby-keyword kw">end</span>
712
+ 529: <span class="ruby-comment cmt"># TODO: Slackware, Mandrake/Mandriva</span>
713
+ 530: <span class="ruby-keyword kw">end</span>
714
+ </pre>
715
+ </div>
716
+ </div>
717
+ </div>
718
+ <div class="method">
719
+ <div class="title">
720
+ <a name="M000021"></a><b>portability_cflags</b>()
721
+ </div>
722
+ <div class="description">
723
+ <p>
724
+ Compiler flags that should be used for compiling every C/C++ program, for
725
+ portability reasons. These flags should be specified as last when invoking
726
+ the compiler.
727
+ </p>
728
+ </div>
729
+ <div class="sourcecode">
730
+ <p class="source-link">[ <a href="javascript:toggleSource('M000021_source')" id="l_M000021_source">show source</a> ]</p>
731
+ <div id="M000021_source" class="dyn-source">
732
+ <pre>
733
+ <span class="ruby-comment cmt"># File lib/phusion_passenger/platform_info.rb, line 338</span>
734
+ 338: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">portability_cflags</span>
735
+ 339: <span class="ruby-comment cmt"># _GLIBCPP__PTHREADS is for fixing Boost compilation on OpenBSD.</span>
736
+ 340: <span class="ruby-identifier">flags</span> = [<span class="ruby-value str">&quot;-D_REENTRANT -I/usr/local/include&quot;</span>]
737
+ 341: <span class="ruby-keyword kw">if</span> <span class="ruby-constant">RUBY_PLATFORM</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp re">/solaris/</span>
738
+ 342: <span class="ruby-identifier">flags</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value str">'-D_XOPEN_SOURCE=500 -D_XPG4_2 -D__EXTENSIONS__ -D__SOLARIS__ -D_FILE_OFFSET_BITS=64'</span>
739
+ 343: <span class="ruby-identifier">flags</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value str">'-DBOOST_HAS_STDINT_H'</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-constant">RUBY_PLATFORM</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp re">/solaris2.9/</span>
740
+ 344: <span class="ruby-identifier">flags</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value str">'-D__SOLARIS9__ -DBOOST__STDC_CONSTANT_MACROS_DEFINED'</span> <span class="ruby-keyword kw">if</span> <span class="ruby-constant">RUBY_PLATFORM</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp re">/solaris2.9/</span>
741
+ 345: <span class="ruby-identifier">flags</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value str">'-mcpu=ultrasparc'</span> <span class="ruby-keyword kw">if</span> <span class="ruby-constant">RUBY_PLATFORM</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp re">/sparc/</span>
742
+ 346: <span class="ruby-keyword kw">elsif</span> <span class="ruby-constant">RUBY_PLATFORM</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp re">/openbsd/</span>
743
+ 347: <span class="ruby-identifier">flags</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value str">'-DBOOST_HAS_STDINT_H -D_GLIBCPP__PTHREADS'</span>
744
+ 348: <span class="ruby-keyword kw">elsif</span> <span class="ruby-constant">RUBY_PLATFORM</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp re">/aix/</span>
745
+ 349: <span class="ruby-identifier">flags</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value str">'-DOXT_DISABLE_BACKTRACES'</span>
746
+ 350: <span class="ruby-keyword kw">elsif</span> <span class="ruby-constant">RUBY_PLATFORM</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp re">/sparc-linux/</span>
747
+ 351: <span class="ruby-identifier">flags</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value str">'-DBOOST_SP_USE_PTHREADS'</span>
748
+ 352: <span class="ruby-keyword kw">end</span>
749
+ 353: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">flags</span>.<span class="ruby-identifier">compact</span>.<span class="ruby-identifier">join</span>(<span class="ruby-value str">&quot; &quot;</span>).<span class="ruby-identifier">strip</span>
750
+ 354: <span class="ruby-keyword kw">end</span>
751
+ </pre>
752
+ </div>
753
+ </div>
754
+ </div>
755
+ <div class="method">
756
+ <div class="title">
757
+ <a name="M000022"></a><b>portability_ldflags</b>()
758
+ </div>
759
+ <div class="description">
760
+ <p>
761
+ Linker flags that should be used for linking every C/C++ program, for
762
+ portability reasons. These flags should be specified as last when invoking
763
+ the linker.
764
+ </p>
765
+ </div>
766
+ <div class="sourcecode">
767
+ <p class="source-link">[ <a href="javascript:toggleSource('M000022_source')" id="l_M000022_source">show source</a> ]</p>
768
+ <div id="M000022_source" class="dyn-source">
769
+ <pre>
770
+ <span class="ruby-comment cmt"># File lib/phusion_passenger/platform_info.rb, line 360</span>
771
+ 360: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">portability_ldflags</span>
772
+ 361: <span class="ruby-keyword kw">if</span> <span class="ruby-constant">RUBY_PLATFORM</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp re">/solaris/</span>
773
+ 362: <span class="ruby-keyword kw">return</span> <span class="ruby-value str">'-lxnet -lrt -lsocket -lnsl -lpthread'</span>
774
+ 363: <span class="ruby-keyword kw">else</span>
775
+ 364: <span class="ruby-keyword kw">return</span> <span class="ruby-value str">'-lpthread'</span>
776
+ 365: <span class="ruby-keyword kw">end</span>
777
+ 366: <span class="ruby-keyword kw">end</span>
778
+ </pre>
779
+ </div>
780
+ </div>
781
+ </div>
782
+ <div class="method">
783
+ <div class="title">
784
+ <a name="M000012"></a><b>rake</b>()
785
+ </div>
786
+ <div class="description">
787
+ <p>
788
+ Returns the absolute path to the Rake executable that belongs to the
789
+ current Ruby interpreter. Returns nil if it doesn&#8216;t exist.
790
+ </p>
791
+ </div>
792
+ <div class="sourcecode">
793
+ <p class="source-link">[ <a href="javascript:toggleSource('M000012_source')" id="l_M000012_source">show source</a> ]</p>
794
+ <div id="M000012_source" class="dyn-source">
795
+ <pre>
796
+ <span class="ruby-comment cmt"># File lib/phusion_passenger/platform_info.rb, line 205</span>
797
+ 205: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">rake</span>
798
+ 206: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">locate_ruby_executable</span>(<span class="ruby-value str">'rake'</span>)
799
+ 207: <span class="ruby-keyword kw">end</span>
800
+ </pre>
801
+ </div>
802
+ </div>
803
+ </div>
804
+ <div class="method">
805
+ <div class="title">
806
+ <a name="M000013"></a><b>rspec</b>()
807
+ </div>
808
+ <div class="description">
809
+ <p>
810
+ Returns the absolute path to the RSpec runner program that belongs to the
811
+ current Ruby interpreter. Returns nil if it doesn&#8216;t exist.
812
+ </p>
813
+ </div>
814
+ <div class="sourcecode">
815
+ <p class="source-link">[ <a href="javascript:toggleSource('M000013_source')" id="l_M000013_source">show source</a> ]</p>
816
+ <div id="M000013_source" class="dyn-source">
817
+ <pre>
818
+ <span class="ruby-comment cmt"># File lib/phusion_passenger/platform_info.rb, line 213</span>
819
+ 213: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">rspec</span>
820
+ 214: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">locate_ruby_executable</span>(<span class="ruby-value str">'spec'</span>)
821
+ 215: <span class="ruby-keyword kw">end</span>
822
+ </pre>
823
+ </div>
824
+ </div>
825
+ </div>
826
+ </div>
827
+
828
+ </div>
829
+
830
+ </body>
831
+ </html>