# File lib/phusion_passenger/platform_info/apache.rb, line 175 def self.apache2_module_cflags(with_apr_flags = true) flags = ["-fPIC"] if with_apr_flags flags << apr_flags flags << apu_flags end if !apxs2.nil? apxs2_flags = `#{apxs2} -q CFLAGS`.strip << " -I" << `#{apxs2} -q INCLUDEDIR`.strip apxs2_flags.gsub!(/-O\d? /, '') # Remove flags not supported by GCC if RUBY_PLATFORM =~ /solaris/ # TODO: Add support for people using SunStudio # The big problem is Coolstack apxs includes a bunch of solaris -x directives. options = apxs2_flags.split options.reject! { |f| f =~ /^\-x/ } options.reject! { |f| f =~ /^\-Xa/ } options.reject! { |f| f =~ /^\-fast/ } options.reject! { |f| f =~ /^\-mt/ } apxs2_flags = options.join(' ') end apxs2_flags.strip! flags << apxs2_flags end if !httpd.nil? && RUBY_PLATFORM =~ /darwin/ # The default Apache install on OS X is a universal binary. # Figure out which architectures it's compiled for and do the same # thing for mod_passenger. We use the 'file' utility to do this. # # Running 'file' on the Apache executable usually outputs something # like this: # # /usr/sbin/httpd: Mach-O universal binary with 4 architectures # /usr/sbin/httpd (for architecture ppc7400): Mach-O executable ppc # /usr/sbin/httpd (for architecture ppc64): Mach-O 64-bit executable ppc64 # /usr/sbin/httpd (for architecture i386): Mach-O executable i386 # /usr/sbin/httpd (for architecture x86_64): Mach-O 64-bit executable x86_64 # # But on some machines, it may output just: # # /usr/sbin/httpd: Mach-O fat file with 4 architectures # # (http://code.google.com/p/phusion-passenger/issues/detail?id=236) output = `file "#{httpd}"`.strip if output =~ /Mach-O fat file/ && output !~ /for architecture/ architectures = ["i386", "ppc", "x86_64", "ppc64"] else architectures = [] output.split("\n").grep(/for architecture/).each do |line| line =~ /for architecture (.*?)\)/ architectures << $1 end end # The compiler may not support all architectures in the binary. # XCode 4 seems to have removed support for the PPC architecture # even though there are still plenty of Apache binaries around # containing PPC components. architectures.reject! do |arch| !compiler_supports_architecture?(arch) end architectures.map! do |arch| "-arch #{arch}" end flags << architectures.compact.join(' ') end return flags.compact.join(' ').strip end