build/cplusplus_support.rb in passenger-4.0.0.rc4 vs build/cplusplus_support.rb in passenger-4.0.0.rc6

- old
+ new

@@ -1,7 +1,7 @@ # Phusion Passenger - https://www.phusionpassenger.com/ -# Copyright (c) 2010 Phusion +# Copyright (c) 2010-2013 Phusion # # "Phusion Passenger" is a trademark of Hongli Lai & Ninh Bui. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal @@ -21,16 +21,37 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. # Rake functions for compiling/linking C++ stuff. +def run_compiler(*command) + require 'phusion_passenger/utils/ansi_colors' if !defined?(PhusionPassenger::Utils::AnsiColors) + show_command = command.join(' ') + puts show_command + if !system(*command) + if $? && $?.exitstatus == 4 + # This probably means the compiler ran out of memory. + msg = "<b>" + + "-----------------------------------------------\n" + + "Your compiler failed with the exit status 4. This " + + "probably means that it ran out of memory. To solve " + + "this problem, try increasing your swap space: " + + "https://www.digitalocean.com/community/articles/how-to-add-swap-on-ubuntu-12-04" + + "</b>" + fail(PhusionPassenger::Utils::AnsiColors.ansi_colorize(msg)) + else + fail "Command failed with status (#{$? ? $?.exitstatus : 1}): [#{show_command}]" + end + end +end + def compile_c(source, flags = "#{EXTRA_PRE_CFLAGS} #{PlatformInfo.portability_cflags} #{EXTRA_CXXFLAGS}") - sh "#{CC} #{flags} -c #{source}" + run_compiler "#{CC} #{flags} -c #{source}" end def compile_cxx(source, flags = "#{EXTRA_PRE_CXXFLAGS} #{PlatformInfo.portability_cflags} #{EXTRA_CXXFLAGS}") - sh "#{CXX} #{flags} -c #{source}" + run_compiler "#{CXX} #{flags} -c #{source}" end def create_static_library(target, sources) # On OS X, 'ar cru' will sometimes fail with an obscure error: # @@ -42,20 +63,20 @@ sh "ar cru #{target} #{sources}" sh "ranlib #{target}" end def create_executable(target, sources, linkflags = "#{EXTRA_PRE_CXXFLAGS} #{EXTRA_PRE_LDFLAGS} #{PlatformInfo.portability_cflags} #{EXTRA_CXXFLAGS} #{PlatformInfo.portability_ldflags} #{EXTRA_LDFLAGS}") - sh "#{CXX} #{sources} -o #{target} #{linkflags}" + run_compiler "#{CXX} #{sources} -o #{target} #{linkflags}" end def create_c_executable(target, sources, linkflags = "#{EXTRA_PRE_CFLAGS} #{EXTRA_PRE_LDFLAGS} #{PlatformInfo.portability_cflags} #{EXTRA_CXXFLAGS} #{PlatformInfo.portability_ldflags} #{EXTRA_LDFLAGS}") - sh "#{CC} #{sources} -o #{target} #{linkflags}" + run_compiler "#{CC} #{sources} -o #{target} #{linkflags}" end def create_shared_library(target, sources, flags = "#{EXTRA_PRE_CXXFLAGS} #{EXTRA_PRE_LDFLAGS} #{PlatformInfo.portability_cflags} #{EXTRA_CXXFLAGS} #{PlatformInfo.portability_ldflags} #{EXTRA_LDFLAGS}") if RUBY_PLATFORM =~ /darwin/ shlib_flag = "-flat_namespace -bundle -undefined dynamic_lookup" else shlib_flag = "-shared" end - sh "#{CXX} #{shlib_flag} #{sources} -fPIC -o #{target} #{flags}" + run_compiler "#{CXX} #{shlib_flag} #{sources} -fPIC -o #{target} #{flags}" end