passenger 5.0.0.beta3 → 5.0.0.rc1

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 (218) hide show
  1. checksums.yaml +8 -8
  2. checksums.yaml.gz.asc +7 -7
  3. data.tar.gz.asc +7 -7
  4. data/.editorconfig +11 -5
  5. data/CHANGELOG +38 -0
  6. data/CONTRIBUTING.md +1 -4
  7. data/Gemfile +0 -1
  8. data/Gemfile.lock +0 -2
  9. data/Rakefile +33 -33
  10. data/bin/passenger +1 -1
  11. data/bin/passenger-config +1 -1
  12. data/bin/passenger-install-apache2-module +800 -800
  13. data/bin/passenger-install-nginx-module +592 -592
  14. data/bin/passenger-memory-stats +127 -127
  15. data/bin/passenger-status +216 -216
  16. data/build/agents.rb +127 -127
  17. data/build/apache2.rb +87 -87
  18. data/build/basics.rb +60 -60
  19. data/build/common_library.rb +165 -165
  20. data/build/cplusplus_support.rb +51 -51
  21. data/build/cxx_tests.rb +268 -268
  22. data/build/debian.rb +143 -143
  23. data/build/documentation.rb +58 -58
  24. data/build/integration_tests.rb +81 -81
  25. data/build/misc.rb +132 -132
  26. data/build/nginx.rb +20 -20
  27. data/build/node_tests.rb +7 -7
  28. data/build/oxt_tests.rb +14 -14
  29. data/build/packaging.rb +570 -570
  30. data/build/preprocessor.rb +260 -260
  31. data/build/rake_extensions.rb +71 -71
  32. data/build/ruby_extension.rb +29 -29
  33. data/build/ruby_tests.rb +6 -6
  34. data/build/test_basics.rb +37 -37
  35. data/debian.template/control.template +3 -5
  36. data/dev/copy_boost_headers +134 -134
  37. data/dev/install_scripts_bootstrap_code.rb +25 -25
  38. data/dev/list_tests +20 -20
  39. data/dev/ruby_server.rb +223 -223
  40. data/dev/runner +18 -18
  41. data/doc/ServerOptimizationGuide.txt.md +55 -2
  42. data/doc/Users guide Nginx.txt +0 -26
  43. data/doc/Users guide Standalone.txt +5 -1
  44. data/doc/users_guide_snippets/tips.txt +9 -0
  45. data/ext/common/ApplicationPool2/Group.h +23 -11
  46. data/ext/common/ApplicationPool2/Implementation.cpp +32 -7
  47. data/ext/common/ApplicationPool2/Pool.h +22 -17
  48. data/ext/common/ApplicationPool2/SmartSpawner.h +4 -1
  49. data/ext/common/ApplicationPool2/Spawner.h +1 -1
  50. data/ext/common/Constants.h +1 -1
  51. data/ext/common/agents/Base.cpp +35 -20
  52. data/ext/common/agents/HelperAgent/Main.cpp +8 -1
  53. data/ext/common/agents/HelperAgent/OptionParser.h +18 -4
  54. data/ext/common/agents/HelperAgent/RequestHandler.h +2 -83
  55. data/ext/common/agents/HelperAgent/RequestHandler/ForwardResponse.cpp +54 -1
  56. data/ext/common/agents/HelperAgent/RequestHandler/InitRequest.cpp +7 -4
  57. data/ext/common/agents/Main.cpp +1 -1
  58. data/ext/common/agents/Watchdog/Main.cpp +54 -19
  59. data/ext/nginx/Configuration.c +7 -0
  60. data/ext/nginx/ContentHandler.c +9 -1
  61. data/helper-scripts/backtrace-sanitizer.rb +106 -87
  62. data/helper-scripts/crash-watch.rb +32 -0
  63. data/helper-scripts/download_binaries/extconf.rb +38 -38
  64. data/helper-scripts/meteor-loader.rb +107 -107
  65. data/helper-scripts/prespawn +101 -101
  66. data/helper-scripts/rack-loader.rb +96 -96
  67. data/helper-scripts/rack-preloader.rb +137 -137
  68. data/lib/phusion_passenger.rb +292 -292
  69. data/lib/phusion_passenger/abstract_installer.rb +438 -438
  70. data/lib/phusion_passenger/active_support3_extensions/init.rb +168 -170
  71. data/lib/phusion_passenger/admin_tools.rb +20 -20
  72. data/lib/phusion_passenger/admin_tools/instance.rb +178 -178
  73. data/lib/phusion_passenger/admin_tools/instance_registry.rb +61 -61
  74. data/lib/phusion_passenger/admin_tools/memory_stats.rb +267 -267
  75. data/lib/phusion_passenger/apache2/config_options.rb +182 -182
  76. data/lib/phusion_passenger/common_library.rb +479 -485
  77. data/lib/phusion_passenger/config/about_command.rb +161 -161
  78. data/lib/phusion_passenger/config/admin_command_command.rb +129 -129
  79. data/lib/phusion_passenger/config/agent_compiler.rb +121 -121
  80. data/lib/phusion_passenger/config/build_native_support_command.rb +43 -43
  81. data/lib/phusion_passenger/config/command.rb +25 -25
  82. data/lib/phusion_passenger/config/compile_agent_command.rb +62 -62
  83. data/lib/phusion_passenger/config/compile_nginx_engine_command.rb +88 -73
  84. data/lib/phusion_passenger/config/detach_process_command.rb +72 -72
  85. data/lib/phusion_passenger/config/download_agent_command.rb +246 -227
  86. data/lib/phusion_passenger/config/download_nginx_engine_command.rb +245 -224
  87. data/lib/phusion_passenger/config/install_agent_command.rb +144 -132
  88. data/lib/phusion_passenger/config/install_standalone_runtime_command.rb +205 -185
  89. data/lib/phusion_passenger/config/installation_utils.rb +204 -204
  90. data/lib/phusion_passenger/config/list_instances_command.rb +64 -64
  91. data/lib/phusion_passenger/config/main.rb +152 -152
  92. data/lib/phusion_passenger/config/nginx_engine_compiler.rb +319 -300
  93. data/lib/phusion_passenger/config/reopen_logs_command.rb +67 -67
  94. data/lib/phusion_passenger/config/restart_app_command.rb +155 -155
  95. data/lib/phusion_passenger/config/system_metrics_command.rb +13 -13
  96. data/lib/phusion_passenger/config/utils.rb +95 -95
  97. data/lib/phusion_passenger/config/validate_install_command.rb +198 -198
  98. data/lib/phusion_passenger/console_text_template.rb +25 -25
  99. data/lib/phusion_passenger/constants.rb +90 -90
  100. data/lib/phusion_passenger/debug_logging.rb +106 -106
  101. data/lib/phusion_passenger/loader_shared_helpers.rb +447 -432
  102. data/lib/phusion_passenger/message_channel.rb +312 -312
  103. data/lib/phusion_passenger/message_client.rb +176 -176
  104. data/lib/phusion_passenger/native_support.rb +369 -369
  105. data/lib/phusion_passenger/nginx/config_options.rb +297 -297
  106. data/lib/phusion_passenger/packaging.rb +131 -131
  107. data/lib/phusion_passenger/platform_info.rb +360 -360
  108. data/lib/phusion_passenger/platform_info/apache.rb +767 -767
  109. data/lib/phusion_passenger/platform_info/apache_detector.rb +199 -199
  110. data/lib/phusion_passenger/platform_info/binary_compatibility.rb +107 -107
  111. data/lib/phusion_passenger/platform_info/compiler.rb +570 -570
  112. data/lib/phusion_passenger/platform_info/curl.rb +32 -32
  113. data/lib/phusion_passenger/platform_info/cxx_portability.rb +188 -188
  114. data/lib/phusion_passenger/platform_info/depcheck.rb +372 -372
  115. data/lib/phusion_passenger/platform_info/depcheck_specs/apache2.rb +109 -109
  116. data/lib/phusion_passenger/platform_info/depcheck_specs/compiler_toolchain.rb +4 -4
  117. data/lib/phusion_passenger/platform_info/depcheck_specs/gems.rb +10 -34
  118. data/lib/phusion_passenger/platform_info/depcheck_specs/libs.rb +101 -101
  119. data/lib/phusion_passenger/platform_info/depcheck_specs/ruby.rb +5 -5
  120. data/lib/phusion_passenger/platform_info/depcheck_specs/utilities.rb +13 -13
  121. data/lib/phusion_passenger/platform_info/linux.rb +55 -55
  122. data/lib/phusion_passenger/platform_info/operating_system.rb +149 -149
  123. data/lib/phusion_passenger/platform_info/ruby.rb +468 -448
  124. data/lib/phusion_passenger/platform_info/zlib.rb +9 -9
  125. data/lib/phusion_passenger/plugin.rb +66 -66
  126. data/lib/phusion_passenger/preloader_shared_helpers.rb +126 -126
  127. data/lib/phusion_passenger/public_api.rb +191 -191
  128. data/lib/phusion_passenger/rack/out_of_band_gc.rb +93 -94
  129. data/lib/phusion_passenger/rack/thread_handler_extension.rb +231 -227
  130. data/lib/phusion_passenger/request_handler.rb +567 -577
  131. data/lib/phusion_passenger/request_handler/thread_handler.rb +379 -381
  132. data/lib/phusion_passenger/ruby_core_enhancements.rb +86 -86
  133. data/lib/phusion_passenger/ruby_core_io_enhancements.rb +74 -74
  134. data/lib/phusion_passenger/simple_benchmarking.rb +25 -25
  135. data/lib/phusion_passenger/standalone/app_finder.rb +153 -150
  136. data/lib/phusion_passenger/standalone/command.rb +44 -40
  137. data/lib/phusion_passenger/standalone/config_utils.rb +53 -53
  138. data/lib/phusion_passenger/standalone/control_utils.rb +38 -59
  139. data/lib/phusion_passenger/standalone/main.rb +73 -73
  140. data/lib/phusion_passenger/standalone/start_command.rb +697 -685
  141. data/lib/phusion_passenger/standalone/start_command/builtin_engine.rb +193 -155
  142. data/lib/phusion_passenger/standalone/start_command/nginx_engine.rb +162 -133
  143. data/lib/phusion_passenger/standalone/status_command.rb +64 -64
  144. data/lib/phusion_passenger/standalone/stop_command.rb +72 -72
  145. data/lib/phusion_passenger/standalone/version_command.rb +9 -9
  146. data/lib/phusion_passenger/union_station/connection.rb +32 -32
  147. data/lib/phusion_passenger/union_station/core.rb +251 -251
  148. data/lib/phusion_passenger/union_station/transaction.rb +126 -126
  149. data/lib/phusion_passenger/utils.rb +199 -167
  150. data/lib/phusion_passenger/utils/ansi_colors.rb +128 -128
  151. data/lib/phusion_passenger/utils/download.rb +196 -196
  152. data/lib/phusion_passenger/utils/file_system_watcher.rb +158 -158
  153. data/lib/phusion_passenger/utils/hosts_file_parser.rb +101 -101
  154. data/lib/phusion_passenger/utils/lock.rb +31 -31
  155. data/lib/phusion_passenger/utils/native_support_utils.rb +31 -31
  156. data/lib/phusion_passenger/utils/progress_bar.rb +26 -26
  157. data/lib/phusion_passenger/utils/shellwords.rb +20 -20
  158. data/lib/phusion_passenger/utils/terminal_choice_menu.rb +206 -206
  159. data/lib/phusion_passenger/utils/unseekable_socket.rb +272 -272
  160. data/lib/phusion_passenger/vendor/crash_watch/app.rb +129 -0
  161. data/lib/phusion_passenger/vendor/crash_watch/gdb_controller.rb +341 -0
  162. data/lib/phusion_passenger/vendor/crash_watch/version.rb +24 -0
  163. data/lib/phusion_passenger/vendor/daemon_controller.rb +877 -0
  164. data/lib/phusion_passenger/vendor/daemon_controller/lock_file.rb +127 -0
  165. data/lib/phusion_passenger/vendor/daemon_controller/spawn.rb +26 -0
  166. data/lib/phusion_passenger/vendor/daemon_controller/version.rb +29 -0
  167. data/packaging/rpm/passenger_spec/passenger.spec.template +0 -1
  168. data/passenger.gemspec +0 -1
  169. data/resources/templates/config/nginx_engine_compiler/possible_solutions_for_download_and_extraction_problems.txt.erb +27 -0
  170. data/resources/templates/standalone/config.erb +19 -15
  171. data/test/integration_tests/apache2_tests.rb +566 -566
  172. data/test/integration_tests/downloaded_binaries_tests.rb +126 -125
  173. data/test/integration_tests/native_packaging_spec.rb +296 -296
  174. data/test/integration_tests/nginx_tests.rb +393 -393
  175. data/test/integration_tests/shared/example_webapp_tests.rb +282 -280
  176. data/test/integration_tests/source_packaging_test.rb +138 -138
  177. data/test/integration_tests/spec_helper.rb +5 -5
  178. data/test/integration_tests/standalone_tests.rb +367 -367
  179. data/test/ruby/debug_logging_spec.rb +133 -133
  180. data/test/ruby/message_channel_spec.rb +186 -186
  181. data/test/ruby/rack/loader_spec.rb +28 -28
  182. data/test/ruby/rack/preloader_spec.rb +34 -34
  183. data/test/ruby/rails3.0/loader_spec.rb +12 -12
  184. data/test/ruby/rails3.0/preloader_spec.rb +18 -18
  185. data/test/ruby/rails3.1/loader_spec.rb +12 -12
  186. data/test/ruby/rails3.1/preloader_spec.rb +18 -18
  187. data/test/ruby/rails3.2/loader_spec.rb +12 -12
  188. data/test/ruby/rails3.2/preloader_spec.rb +18 -18
  189. data/test/ruby/rails4.0/loader_spec.rb +12 -12
  190. data/test/ruby/rails4.0/preloader_spec.rb +18 -18
  191. data/test/ruby/rails4.1/loader_spec.rb +12 -12
  192. data/test/ruby/rails4.1/preloader_spec.rb +18 -18
  193. data/test/ruby/request_handler_spec.rb +730 -730
  194. data/test/ruby/shared/loader_sharedspec.rb +224 -224
  195. data/test/ruby/shared/rails/union_station_extensions_sharedspec.rb +327 -327
  196. data/test/ruby/shared/ruby_loader_sharedspec.rb +47 -47
  197. data/test/ruby/spec_helper.rb +65 -65
  198. data/test/ruby/standalone/runtime_installer_spec.rb +384 -384
  199. data/test/ruby/union_station_spec.rb +276 -276
  200. data/test/ruby/utils/file_system_watcher_spec.rb +220 -220
  201. data/test/ruby/utils/hosts_file_parser.rb +248 -248
  202. data/test/ruby/utils/tee_input_spec.rb +215 -215
  203. data/test/ruby/utils/unseekable_socket_spec.rb +57 -57
  204. data/test/ruby/utils_spec.rb +21 -21
  205. data/test/stub/rack/config.ru +87 -87
  206. data/test/stub/rack/library.rb +8 -8
  207. data/test/stub/rack/start.rb +30 -30
  208. data/test/support/apache2_controller.rb +191 -191
  209. data/test/support/nginx_controller.rb +90 -99
  210. data/test/support/placebo-preloader.rb +57 -57
  211. data/test/support/test_helper.rb +435 -435
  212. metadata +11 -21
  213. metadata.gz.asc +7 -7
  214. data/lib/phusion_passenger/standalone/command2.rb +0 -292
  215. data/lib/phusion_passenger/standalone/start2_command.rb +0 -799
  216. data/resources/templates/standalone/download_tool_missing.txt.erb +0 -18
  217. data/resources/templates/standalone/possible_solutions_for_download_and_extraction_problems.txt.erb +0 -17
  218. data/resources/templates/standalone/run_installer_as_root.txt.erb +0 -8
data/build/basics.rb CHANGED
@@ -22,7 +22,7 @@
22
22
  # THE SOFTWARE.
23
23
 
24
24
  begin
25
- require 'rubygems'
25
+ require 'rubygems'
26
26
  rescue LoadError
27
27
  end
28
28
  require 'pathname'
@@ -50,83 +50,83 @@ require 'build/cplusplus_support'
50
50
  #################################################
51
51
 
52
52
  class TemplateRenderer
53
- def initialize(filename)
54
- require 'erb' if !defined?(ERB)
55
- @erb = ERB.new(File.read(filename), nil, "-")
56
- @erb.filename = filename
57
- end
58
-
59
- def render
60
- return @erb.result(binding)
61
- end
62
-
63
- def render_to(filename)
64
- puts "Creating #{filename}"
65
- text = render
66
- # When packaging, some timestamps may be modified. The user may not
67
- # have write access to the source root (for example, when Passenger
68
- # Standalone is compiling its runtime), so we only write to the file
69
- # when necessary.
70
- if !File.exist?(filename) || File.writable?(filename) || File.read(filename) != text
71
- File.open(filename, 'w') do |f|
72
- f.write(text)
73
- end
74
- end
75
- end
53
+ def initialize(filename)
54
+ require 'erb' if !defined?(ERB)
55
+ @erb = ERB.new(File.read(filename), nil, "-")
56
+ @erb.filename = filename
57
+ end
58
+
59
+ def render
60
+ return @erb.result(binding)
61
+ end
62
+
63
+ def render_to(filename)
64
+ puts "Creating #{filename}"
65
+ text = render
66
+ # When packaging, some timestamps may be modified. The user may not
67
+ # have write access to the source root (for example, when Passenger
68
+ # Standalone is compiling its runtime), so we only write to the file
69
+ # when necessary.
70
+ if !File.exist?(filename) || File.writable?(filename) || File.read(filename) != text
71
+ File.open(filename, 'w') do |f|
72
+ f.write(text)
73
+ end
74
+ end
75
+ end
76
76
  end
77
77
 
78
78
  def string_option(name, default_value = nil)
79
- value = ENV[name]
80
- if value.nil? || value.empty?
81
- return default_value
82
- else
83
- return value
84
- end
79
+ value = ENV[name]
80
+ if value.nil? || value.empty?
81
+ return default_value
82
+ else
83
+ return value
84
+ end
85
85
  end
86
86
 
87
87
  def compiler_flag_option(name)
88
- return string_option(name, '').gsub("\n", " ")
88
+ return string_option(name, '').gsub("\n", " ")
89
89
  end
90
90
 
91
91
  def boolean_option(name, default_value = false)
92
- value = ENV[name]
93
- if value.nil? || value.empty?
94
- return default_value
95
- else
96
- return value == "yes" || value == "on" || value == "true" || value == "1"
97
- end
92
+ value = ENV[name]
93
+ if value.nil? || value.empty?
94
+ return default_value
95
+ else
96
+ return value == "yes" || value == "on" || value == "true" || value == "1"
97
+ end
98
98
  end
99
99
 
100
100
  def maybe_wrap_in_ccache(command)
101
- if boolean_option('USE_CCACHE', false) && command !~ /^ccache /
102
- return "ccache #{command}"
103
- else
104
- return command
105
- end
101
+ if boolean_option('USE_CCACHE', false) && command !~ /^ccache /
102
+ return "ccache #{command}"
103
+ else
104
+ return command
105
+ end
106
106
  end
107
107
 
108
108
  #################################################
109
109
 
110
110
  if string_option('OUTPUT_DIR')
111
- OUTPUT_DIR = string_option('OUTPUT_DIR') + "/"
111
+ OUTPUT_DIR = string_option('OUTPUT_DIR') + "/"
112
112
  else
113
- OUTPUT_DIR = "buildout/"
113
+ OUTPUT_DIR = "buildout/"
114
114
  end
115
115
 
116
116
  verbose true if !boolean_option('REALLY_QUIET')
117
117
  if boolean_option('STDERR_TO_STDOUT')
118
- # Just redirecting the file descriptor isn't enough because
119
- # data written to STDERR might arrive in an unexpected order
120
- # compared to STDOUT.
121
- STDERR.reopen(STDOUT)
122
- Object.send(:remove_const, :STDERR)
123
- STDERR = STDOUT
124
- $stderr = $stdout
118
+ # Just redirecting the file descriptor isn't enough because
119
+ # data written to STDERR might arrive in an unexpected order
120
+ # compared to STDOUT.
121
+ STDERR.reopen(STDOUT)
122
+ Object.send(:remove_const, :STDERR)
123
+ STDERR = STDOUT
124
+ $stderr = $stdout
125
125
  end
126
126
 
127
127
  if boolean_option('CACHING', true) && !boolean_option('RELEASE')
128
- PlatformInfo.cache_dir = OUTPUT_DIR + "cache"
129
- FileUtils.mkdir_p(PlatformInfo.cache_dir)
128
+ PlatformInfo.cache_dir = OUTPUT_DIR + "cache"
129
+ FileUtils.mkdir_p(PlatformInfo.cache_dir)
130
130
  end
131
131
 
132
132
  # https://github.com/phusion/passenger/issues/672
@@ -174,21 +174,21 @@ EXTRA_CFLAGS << " " << compiler_flag_option('EXTRA_CFLAGS') if !compiler_flag_op
174
174
  EXTRA_CXXFLAGS = PlatformInfo.default_extra_cxxflags.dup
175
175
  EXTRA_CXXFLAGS << " " << compiler_flag_option('EXTRA_CXXFLAGS') if !compiler_flag_option('EXTRA_CXXFLAGS').empty?
176
176
  [EXTRA_CFLAGS, EXTRA_CXXFLAGS].each do |flags|
177
- flags << " -fno-omit-frame-pointers" if USE_ASAN
178
- flags << " -DPASSENGER_DISABLE_THREAD_LOCAL_STORAGE" if !boolean_option('PASSENGER_THREAD_LOCAL_STORAGE', true)
177
+ flags << " -fno-omit-frame-pointers" if USE_ASAN
178
+ flags << " -DPASSENGER_DISABLE_THREAD_LOCAL_STORAGE" if !boolean_option('PASSENGER_THREAD_LOCAL_STORAGE', true)
179
179
  end
180
180
 
181
181
  # Extra linker flags that should always be passed to the linker.
182
182
  # These should be included first in the command string.
183
183
  EXTRA_PRE_C_LDFLAGS = compiler_flag_option('EXTRA_PRE_LDFLAGS') + " " +
184
- compiler_flag_option('EXTRA_PRE_C_LDFLAGS')
184
+ compiler_flag_option('EXTRA_PRE_C_LDFLAGS')
185
185
  EXTRA_PRE_CXX_LDFLAGS = compiler_flag_option('EXTRA_PRE_LDFLAGS') + " " +
186
- compiler_flag_option('EXTRA_PRE_CXX_LDFLAGS')
186
+ compiler_flag_option('EXTRA_PRE_CXX_LDFLAGS')
187
187
  # These should be included last in the command string, even after portability_*_ldflags.
188
188
  EXTRA_C_LDFLAGS = compiler_flag_option('EXTRA_LDFLAGS') + " " +
189
- compiler_flag_option('EXTRA_C_LDFLAGS')
189
+ compiler_flag_option('EXTRA_C_LDFLAGS')
190
190
  EXTRA_CXX_LDFLAGS = compiler_flag_option('EXTRA_LDFLAGS') + " " +
191
- compiler_flag_option('EXTRA_CXX_LDFLAGS')
191
+ compiler_flag_option('EXTRA_CXX_LDFLAGS')
192
192
 
193
193
 
194
194
  AGENT_OUTPUT_DIR = string_option('AGENT_OUTPUT_DIR', OUTPUT_DIR + "support-binaries") + "/"
@@ -198,7 +198,7 @@ LIBEV_OUTPUT_DIR = string_option('LIBEV_OUTPUT_DIR', OUTPUT_DIR + "libe
198
198
  LIBEIO_OUTPUT_DIR = string_option('LIBEIO_OUTPUT_DIR', OUTPUT_DIR + "libeio") + "/"
199
199
  ruby_extension_archdir = PlatformInfo.ruby_extension_binary_compatibility_id
200
200
  RUBY_EXTENSION_OUTPUT_DIR = string_option('RUBY_EXTENSION_OUTPUT_DIR',
201
- OUTPUT_DIR + "ruby/" + ruby_extension_archdir) + "/"
201
+ OUTPUT_DIR + "ruby/" + ruby_extension_archdir) + "/"
202
202
  PKG_DIR = string_option('PKG_DIR', "pkg")
203
203
 
204
204
 
@@ -33,130 +33,130 @@ PhusionPassenger.require_passenger_lib 'common_library'
33
33
 
34
34
  # Defines tasks for compiling a static library containing Boost and OXT.
35
35
  def define_libboost_oxt_task(namespace, output_dir, extra_compiler_flags = nil)
36
- output_file = "#{output_dir}.a"
37
- flags = "-Iext #{extra_compiler_flags} #{EXTRA_CXXFLAGS}"
38
-
39
- if false && boolean_option('RELEASE')
40
- # Disable RELEASE support. Passenger Standalone wants to link to the
41
- # common library but does not know whether it was compiled with RELEASE
42
- # or not. See http://code.google.com/p/phusion-passenger/issues/detail?id=808
43
- sources = Dir['ext/boost/libs/**/*.cpp'] + Dir['ext/oxt/*.cpp']
44
- sources.sort!
45
-
46
- aggregate_source = "#{output_dir}/aggregate.cpp"
47
- aggregate_object = "#{output_dir}/aggregate.o"
48
- object_files = [aggregate_object]
49
-
50
- file(aggregate_object => sources) do
51
- sh "mkdir -p #{output_dir}" if !File.directory?(output_dir)
52
- aggregate_content = %Q{
53
- #ifndef _GNU_SOURCE
54
- #define _GNU_SOURCE
55
- #endif
56
- }
57
- sources.each do |source_file|
58
- name = source_file.sub(/^ext\//, '')
59
- aggregate_content << "#include \"#{name}\"\n"
60
- end
61
- File.open(aggregate_source, 'w') do |f|
62
- f.write(aggregate_content)
63
- end
64
- compile_cxx(aggregate_source, "#{flags} -o #{aggregate_object}")
65
- end
66
- else
67
- # Define compilation targets for .cpp files in ext/boost/src/pthread.
68
- boost_object_files = []
69
- Dir['ext/boost/libs/**/*.cpp'].each do |source_file|
70
- object_name = File.basename(source_file.sub(/\.cpp$/, '.o'))
71
- boost_output_dir = "#{output_dir}/boost"
72
- object_file = "#{boost_output_dir}/#{object_name}"
73
- boost_object_files << object_file
74
-
75
- file object_file => source_file do
76
- sh "mkdir -p #{boost_output_dir}" if !File.directory?(boost_output_dir)
77
- compile_cxx(source_file, "#{flags} -o #{object_file}")
78
- end
79
- end
80
-
81
- # Define compilation targets for .cpp files in ext/oxt.
82
- oxt_object_files = []
83
- oxt_dependency_files = Dir["ext/oxt/*.hpp"] + Dir["ext/oxt/detail/*.hpp"]
84
- Dir['ext/oxt/*.cpp'].each do |source_file|
85
- object_name = File.basename(source_file.sub(/\.cpp$/, '.o'))
86
- oxt_output_dir = "#{output_dir}/oxt"
87
- object_file = "#{oxt_output_dir}/#{object_name}"
88
- oxt_object_files << object_file
89
-
90
- file object_file => [source_file, *oxt_dependency_files] do
91
- sh "mkdir -p #{oxt_output_dir}" if !File.directory?(oxt_output_dir)
92
- compile_cxx(source_file, "-O2 #{flags} -o #{object_file}".strip)
93
- end
94
- end
95
-
96
- object_files = boost_object_files + oxt_object_files
97
- end
98
-
99
- file(output_file => object_files) do
100
- sh "mkdir -p #{output_dir}"
101
- create_static_library(output_file, object_files.join(' '))
102
- end
103
-
104
- task "#{namespace}:clean" do
105
- sh "rm -rf #{output_file} #{output_dir}"
106
- end
107
-
108
- return output_file
36
+ output_file = "#{output_dir}.a"
37
+ flags = "-Iext #{extra_compiler_flags} #{EXTRA_CXXFLAGS}"
38
+
39
+ if false && boolean_option('RELEASE')
40
+ # Disable RELEASE support. Passenger Standalone wants to link to the
41
+ # common library but does not know whether it was compiled with RELEASE
42
+ # or not. See http://code.google.com/p/phusion-passenger/issues/detail?id=808
43
+ sources = Dir['ext/boost/libs/**/*.cpp'] + Dir['ext/oxt/*.cpp']
44
+ sources.sort!
45
+
46
+ aggregate_source = "#{output_dir}/aggregate.cpp"
47
+ aggregate_object = "#{output_dir}/aggregate.o"
48
+ object_files = [aggregate_object]
49
+
50
+ file(aggregate_object => sources) do
51
+ sh "mkdir -p #{output_dir}" if !File.directory?(output_dir)
52
+ aggregate_content = %Q{
53
+ #ifndef _GNU_SOURCE
54
+ #define _GNU_SOURCE
55
+ #endif
56
+ }
57
+ sources.each do |source_file|
58
+ name = source_file.sub(/^ext\//, '')
59
+ aggregate_content << "#include \"#{name}\"\n"
60
+ end
61
+ File.open(aggregate_source, 'w') do |f|
62
+ f.write(aggregate_content)
63
+ end
64
+ compile_cxx(aggregate_source, "#{flags} -o #{aggregate_object}")
65
+ end
66
+ else
67
+ # Define compilation targets for .cpp files in ext/boost/src/pthread.
68
+ boost_object_files = []
69
+ Dir['ext/boost/libs/**/*.cpp'].each do |source_file|
70
+ object_name = File.basename(source_file.sub(/\.cpp$/, '.o'))
71
+ boost_output_dir = "#{output_dir}/boost"
72
+ object_file = "#{boost_output_dir}/#{object_name}"
73
+ boost_object_files << object_file
74
+
75
+ file object_file => source_file do
76
+ sh "mkdir -p #{boost_output_dir}" if !File.directory?(boost_output_dir)
77
+ compile_cxx(source_file, "#{flags} -o #{object_file}")
78
+ end
79
+ end
80
+
81
+ # Define compilation targets for .cpp files in ext/oxt.
82
+ oxt_object_files = []
83
+ oxt_dependency_files = Dir["ext/oxt/*.hpp"] + Dir["ext/oxt/detail/*.hpp"]
84
+ Dir['ext/oxt/*.cpp'].each do |source_file|
85
+ object_name = File.basename(source_file.sub(/\.cpp$/, '.o'))
86
+ oxt_output_dir = "#{output_dir}/oxt"
87
+ object_file = "#{oxt_output_dir}/#{object_name}"
88
+ oxt_object_files << object_file
89
+
90
+ file object_file => [source_file, *oxt_dependency_files] do
91
+ sh "mkdir -p #{oxt_output_dir}" if !File.directory?(oxt_output_dir)
92
+ compile_cxx(source_file, "-O2 #{flags} -o #{object_file}".strip)
93
+ end
94
+ end
95
+
96
+ object_files = boost_object_files + oxt_object_files
97
+ end
98
+
99
+ file(output_file => object_files) do
100
+ sh "mkdir -p #{output_dir}"
101
+ create_static_library(output_file, object_files.join(' '))
102
+ end
103
+
104
+ task "#{namespace}:clean" do
105
+ sh "rm -rf #{output_file} #{output_dir}"
106
+ end
107
+
108
+ return output_file
109
109
  end
110
110
 
111
111
 
112
112
  ########## libev ##########
113
113
 
114
114
  if USE_VENDORED_LIBEV
115
- LIBEV_SOURCE_DIR = File.expand_path("../ext/libev", File.dirname(__FILE__)) + "/"
116
- LIBEV_CFLAGS = "-Iext/libev"
117
- LIBEV_LIBS = LIBEV_OUTPUT_DIR + ".libs/libev.a"
118
- LIBEV_TARGET = LIBEV_LIBS
119
-
120
- task :libev => LIBEV_TARGET
121
-
122
- dependencies = [
123
- "ext/libev/configure",
124
- "ext/libev/config.h.in",
125
- "ext/libev/Makefile.am"
126
- ]
127
- file LIBEV_OUTPUT_DIR + "Makefile" => dependencies do
128
- cc = PlatformInfo.cc
129
- cxx = PlatformInfo.cxx
130
- # Disable all warnings: http://pod.tst.eu/http://cvs.schmorp.de/libev/ev.pod#COMPILER_WARNINGS
131
- cflags = "#{EXTRA_CFLAGS} -w"
132
- sh "mkdir -p #{LIBEV_OUTPUT_DIR}" if !File.directory?(LIBEV_OUTPUT_DIR)
133
- sh "cd #{LIBEV_OUTPUT_DIR} && sh #{LIBEV_SOURCE_DIR}configure " +
134
- "--disable-shared --enable-static " +
135
- # libev's configure script may select a different default compiler than we
136
- # do, so we force our compiler choice.
137
- "CC='#{cc}' CXX='#{cxx}' CFLAGS='#{cflags}' orig_CFLAGS=1"
138
- end
139
-
140
- libev_sources = Dir["ext/libev/{*.c,*.h}"]
141
- file LIBEV_OUTPUT_DIR + ".libs/libev.a" => [LIBEV_OUTPUT_DIR + "Makefile"] + libev_sources do
142
- sh "rm -f #{LIBEV_OUTPUT_DIR}libev.la"
143
- sh "cd #{LIBEV_OUTPUT_DIR} && make libev.la"
144
- end
145
-
146
- task 'libev:clean' do
147
- patterns = %w(Makefile config.h config.log config.status libtool
148
- stamp-h1 *.o *.lo *.la .libs .deps)
149
- patterns.each do |pattern|
150
- sh "rm -rf #{LIBEV_OUTPUT_DIR}#{pattern}"
151
- end
152
- end
153
-
154
- task :clean => 'libev:clean'
115
+ LIBEV_SOURCE_DIR = File.expand_path("../ext/libev", File.dirname(__FILE__)) + "/"
116
+ LIBEV_CFLAGS = "-Iext/libev"
117
+ LIBEV_LIBS = LIBEV_OUTPUT_DIR + ".libs/libev.a"
118
+ LIBEV_TARGET = LIBEV_LIBS
119
+
120
+ task :libev => LIBEV_TARGET
121
+
122
+ dependencies = [
123
+ "ext/libev/configure",
124
+ "ext/libev/config.h.in",
125
+ "ext/libev/Makefile.am"
126
+ ]
127
+ file LIBEV_OUTPUT_DIR + "Makefile" => dependencies do
128
+ cc = PlatformInfo.cc
129
+ cxx = PlatformInfo.cxx
130
+ # Disable all warnings: http://pod.tst.eu/http://cvs.schmorp.de/libev/ev.pod#COMPILER_WARNINGS
131
+ cflags = "#{EXTRA_CFLAGS} -w"
132
+ sh "mkdir -p #{LIBEV_OUTPUT_DIR}" if !File.directory?(LIBEV_OUTPUT_DIR)
133
+ sh "cd #{LIBEV_OUTPUT_DIR} && sh #{LIBEV_SOURCE_DIR}configure " +
134
+ "--disable-shared --enable-static " +
135
+ # libev's configure script may select a different default compiler than we
136
+ # do, so we force our compiler choice.
137
+ "CC='#{cc}' CXX='#{cxx}' CFLAGS='#{cflags}' orig_CFLAGS=1"
138
+ end
139
+
140
+ libev_sources = Dir["ext/libev/{*.c,*.h}"]
141
+ file LIBEV_OUTPUT_DIR + ".libs/libev.a" => [LIBEV_OUTPUT_DIR + "Makefile"] + libev_sources do
142
+ sh "rm -f #{LIBEV_OUTPUT_DIR}libev.la"
143
+ sh "cd #{LIBEV_OUTPUT_DIR} && make libev.la"
144
+ end
145
+
146
+ task 'libev:clean' do
147
+ patterns = %w(Makefile config.h config.log config.status libtool
148
+ stamp-h1 *.o *.lo *.la .libs .deps)
149
+ patterns.each do |pattern|
150
+ sh "rm -rf #{LIBEV_OUTPUT_DIR}#{pattern}"
151
+ end
152
+ end
153
+
154
+ task :clean => 'libev:clean'
155
155
  else
156
- LIBEV_CFLAGS = string_option('LIBEV_CFLAGS', '-I/usr/include/libev')
157
- LIBEV_LIBS = string_option('LIBEV_LIBS', '-lev')
158
- LIBEV_TARGET = nil
159
- task :libev # do nothing
156
+ LIBEV_CFLAGS = string_option('LIBEV_CFLAGS', '-I/usr/include/libev')
157
+ LIBEV_LIBS = string_option('LIBEV_LIBS', '-lev')
158
+ LIBEV_TARGET = nil
159
+ task :libev # do nothing
160
160
  end
161
161
 
162
162
  # Apple Clang 4.2 complains about ambiguous member templates in ev++.h.
@@ -166,52 +166,52 @@ LIBEV_CFLAGS << " -Wno-ambiguous-member-template" if PlatformInfo.compiler_suppo
166
166
  ########## libeio ##########
167
167
 
168
168
  if USE_VENDORED_LIBEIO
169
- LIBEIO_SOURCE_DIR = File.expand_path("../ext/libeio", File.dirname(__FILE__)) + "/"
170
- LIBEIO_CFLAGS = "-Iext/libeio"
171
- LIBEIO_LIBS = LIBEIO_OUTPUT_DIR + ".libs/libeio.a"
172
- LIBEIO_TARGET = LIBEIO_LIBS
173
-
174
- task :libeio => LIBEIO_TARGET
175
-
176
- dependencies = [
177
- "ext/libeio/configure",
178
- "ext/libeio/config.h.in",
179
- "ext/libeio/Makefile.am"
180
- ]
181
- file LIBEIO_OUTPUT_DIR + "Makefile" => dependencies do
182
- cc = PlatformInfo.cc
183
- cxx = PlatformInfo.cxx
184
- # Disable all warnings. The author has a clear standpoint on that:
185
- # http://pod.tst.eu/http://cvs.schmorp.de/libev/ev.pod#COMPILER_WARNINGS
186
- cflags = "#{EXTRA_CFLAGS} -w"
187
- sh "mkdir -p #{LIBEIO_OUTPUT_DIR}" if !File.directory?(LIBEIO_OUTPUT_DIR)
188
- sh "cd #{LIBEIO_OUTPUT_DIR} && sh #{LIBEIO_SOURCE_DIR}configure " +
189
- "--disable-shared --enable-static " +
190
- # libeio's configure script may select a different default compiler than we
191
- # do, so we force our compiler choice.
192
- "CC='#{cc}' CXX='#{cxx}' CFLAGS='#{cflags}'"
193
- end
194
-
195
- libeio_sources = Dir["ext/libeio/{*.c,*.h}"]
196
- file LIBEIO_OUTPUT_DIR + ".libs/libeio.a" => [LIBEIO_OUTPUT_DIR + "Makefile"] + libeio_sources do
197
- sh "rm -f #{LIBEIO_OUTPUT_DIR}/libeio.la"
198
- sh "cd #{LIBEIO_OUTPUT_DIR} && make libeio.la"
199
- end
200
-
201
- task 'libeio:clean' do
202
- patterns = %w(Makefile config.h config.log config.status libtool
203
- stamp-h1 *.o *.lo *.la .libs .deps)
204
- patterns.each do |pattern|
205
- sh "rm -rf #{LIBEIO_OUTPUT_DIR}#{pattern}"
206
- end
207
- end
208
-
209
- task :clean => 'libeio:clean'
169
+ LIBEIO_SOURCE_DIR = File.expand_path("../ext/libeio", File.dirname(__FILE__)) + "/"
170
+ LIBEIO_CFLAGS = "-Iext/libeio"
171
+ LIBEIO_LIBS = LIBEIO_OUTPUT_DIR + ".libs/libeio.a"
172
+ LIBEIO_TARGET = LIBEIO_LIBS
173
+
174
+ task :libeio => LIBEIO_TARGET
175
+
176
+ dependencies = [
177
+ "ext/libeio/configure",
178
+ "ext/libeio/config.h.in",
179
+ "ext/libeio/Makefile.am"
180
+ ]
181
+ file LIBEIO_OUTPUT_DIR + "Makefile" => dependencies do
182
+ cc = PlatformInfo.cc
183
+ cxx = PlatformInfo.cxx
184
+ # Disable all warnings. The author has a clear standpoint on that:
185
+ # http://pod.tst.eu/http://cvs.schmorp.de/libev/ev.pod#COMPILER_WARNINGS
186
+ cflags = "#{EXTRA_CFLAGS} -w"
187
+ sh "mkdir -p #{LIBEIO_OUTPUT_DIR}" if !File.directory?(LIBEIO_OUTPUT_DIR)
188
+ sh "cd #{LIBEIO_OUTPUT_DIR} && sh #{LIBEIO_SOURCE_DIR}configure " +
189
+ "--disable-shared --enable-static " +
190
+ # libeio's configure script may select a different default compiler than we
191
+ # do, so we force our compiler choice.
192
+ "CC='#{cc}' CXX='#{cxx}' CFLAGS='#{cflags}'"
193
+ end
194
+
195
+ libeio_sources = Dir["ext/libeio/{*.c,*.h}"]
196
+ file LIBEIO_OUTPUT_DIR + ".libs/libeio.a" => [LIBEIO_OUTPUT_DIR + "Makefile"] + libeio_sources do
197
+ sh "rm -f #{LIBEIO_OUTPUT_DIR}/libeio.la"
198
+ sh "cd #{LIBEIO_OUTPUT_DIR} && make libeio.la"
199
+ end
200
+
201
+ task 'libeio:clean' do
202
+ patterns = %w(Makefile config.h config.log config.status libtool
203
+ stamp-h1 *.o *.lo *.la .libs .deps)
204
+ patterns.each do |pattern|
205
+ sh "rm -rf #{LIBEIO_OUTPUT_DIR}#{pattern}"
206
+ end
207
+ end
208
+
209
+ task :clean => 'libeio:clean'
210
210
  else
211
- LIBEIO_CFLAGS = string_option('LIBEIO_CFLAGS', '-I/usr/include/libeio')
212
- LIBEIO_LIBS = string_option('LIBEIO_LIBS', '-leio')
213
- LIBEIO_TARGET = nil
214
- task :libeio # do nothing
211
+ LIBEIO_CFLAGS = string_option('LIBEIO_CFLAGS', '-I/usr/include/libeio')
212
+ LIBEIO_LIBS = string_option('LIBEIO_LIBS', '-leio')
213
+ LIBEIO_TARGET = nil
214
+ task :libeio # do nothing
215
215
  end
216
216
 
217
217
 
@@ -225,9 +225,9 @@ end
225
225
 
226
226
  dependencies = ['ext/common/Constants.h.erb', 'lib/phusion_passenger.rb', 'lib/phusion_passenger/constants.rb']
227
227
  file 'ext/common/Constants.h' => dependencies do
228
- PhusionPassenger.require_passenger_lib 'constants'
229
- template = TemplateRenderer.new('ext/common/Constants.h.erb')
230
- template.render_to('ext/common/Constants.h')
228
+ PhusionPassenger.require_passenger_lib 'constants'
229
+ template = TemplateRenderer.new('ext/common/Constants.h.erb')
230
+ template.render_to('ext/common/Constants.h')
231
231
  end
232
232
 
233
233