--- passenger/build/common_library.rb +++ passenger/build/common_library.rb @@ -34,19 +34,19 @@ # Defines tasks for compiling a static library containing Boost and OXT. def define_libboost_oxt_task(namespace, output_dir, extra_compiler_flags = nil) output_file = "#{output_dir}.a" - flags = "-Iext #{extra_compiler_flags} #{EXTRA_CXXFLAGS}" - + flags = "-Iext #{extra_compiler_flags} #{EXTRA_CXXFLAGS} -fPIC #{ENV['RPM_OPT_FLAGS']} " + if false && boolean_option('RELEASE') # Disable RELEASE support. Passenger Standalone wants to link to the # common library but does not know whether it was compiled with RELEASE # or not. See http://code.google.com/p/phusion-passenger/issues/detail?id=808 sources = Dir['ext/boost/libs/**/*.cpp'] + Dir['ext/oxt/*.cpp'] sources.sort! - + aggregate_source = "#{output_dir}/aggregate.cpp" aggregate_object = "#{output_dir}/aggregate.o" object_files = [aggregate_object] - + file(aggregate_object => sources) do sh "mkdir -p #{output_dir}" if !File.directory?(output_dir) aggregate_content = %Q{ @@ -71,13 +71,13 @@ boost_output_dir = "#{output_dir}/boost" object_file = "#{boost_output_dir}/#{object_name}" boost_object_files << object_file - + file object_file => source_file do sh "mkdir -p #{boost_output_dir}" if !File.directory?(boost_output_dir) compile_cxx(source_file, "#{flags} -o #{object_file}") end end - + # Define compilation targets for .cpp files in ext/oxt. oxt_object_files = [] oxt_dependency_files = Dir["ext/oxt/*.hpp"] + Dir["ext/oxt/detail/*.hpp"] @@ -92,19 +92,19 @@ compile_cxx(source_file, "#{flags} -o #{object_file}") end end - + object_files = boost_object_files + oxt_object_files end - + file(output_file => object_files) do sh "mkdir -p #{output_dir}" create_static_library(output_file, object_files.join(' ')) end - + task "#{namespace}:clean" do sh "rm -rf #{output_file} #{output_dir}" end - + return output_file end @@ -116,9 +116,9 @@ LIBEV_CFLAGS = "-Iext/libev" LIBEV_LIBS = LIBEV_OUTPUT_DIR + ".libs/libev.a" LIBEV_TARGET = LIBEV_LIBS - + task :libev => LIBEV_TARGET - + dependencies = [ "ext/libev/configure", "ext/libev/config.h.in", @@ -128,7 +128,7 @@ cc = PlatformInfo.cc cxx = PlatformInfo.cxx # Disable all warnings: http://pod.tst.eu/http://cvs.schmorp.de/libev/ev.pod#COMPILER_WARNINGS - cflags = "#{EXTRA_CFLAGS} -w" + cflags = "#{EXTRA_CFLAGS} #{ENV['RPM_OPT_FLAGS']} -w" sh "mkdir -p #{LIBEV_OUTPUT_DIR}" if !File.directory?(LIBEV_OUTPUT_DIR) sh "cd #{LIBEV_OUTPUT_DIR} && sh #{LIBEV_SOURCE_DIR}configure " + "--disable-shared --enable-static " + @@ -136,7 +136,7 @@ # do, so we force our compiler choice. "CC='#{cc}' CXX='#{cxx}' CFLAGS='#{cflags}' orig_CFLAGS=1" end - + libev_sources = Dir["ext/libev/{*.c,*.h}"] file LIBEV_OUTPUT_DIR + ".libs/libev.a" => [LIBEV_OUTPUT_DIR + "Makefile"] + libev_sources do sh "rm -f #{LIBEV_OUTPUT_DIR}/libev.la" @@ -148,7 +148,7 @@ sh "cd #{LIBEV_OUTPUT_DIR} && make maintainer-clean" end end - + task :clean => 'libev:clean' else LIBEV_CFLAGS = string_option('LIBEV_CFLAGS', '-I/usr/include/libev') @@ -168,9 +168,9 @@ LIBEIO_CFLAGS = "-Iext/libeio" LIBEIO_LIBS = LIBEIO_OUTPUT_DIR + ".libs/libeio.a" LIBEIO_TARGET = LIBEIO_LIBS - + task :libeio => LIBEIO_TARGET - + dependencies = [ "ext/libeio/configure", "ext/libeio/config.h.in", @@ -181,7 +181,7 @@ cxx = PlatformInfo.cxx # Disable all warnings. The author has a clear standpoint on that: # http://pod.tst.eu/http://cvs.schmorp.de/libev/ev.pod#COMPILER_WARNINGS - cflags = "#{EXTRA_CFLAGS} -w" + cflags = "#{EXTRA_CFLAGS} #{ENV['RPM_OPT_FLAGS']} -w" sh "mkdir -p #{LIBEIO_OUTPUT_DIR}" if !File.directory?(LIBEIO_OUTPUT_DIR) sh "cd #{LIBEIO_OUTPUT_DIR} && sh #{LIBEIO_SOURCE_DIR}configure " + "--disable-shared --enable-static " + @@ -189,13 +189,14 @@ # do, so we force our compiler choice. "CC='#{cc}' CXX='#{cxx}' CFLAGS='#{cflags}'" end - + libeio_sources = Dir["ext/libeio/{*.c,*.h}"] file LIBEIO_OUTPUT_DIR + ".libs/libeio.a" => [LIBEIO_OUTPUT_DIR + "Makefile"] + libeio_sources do sh "rm -f #{LIBEIO_OUTPUT_DIR}/libeio.la" + sh "cd #{LIBEIO_OUTPUT_DIR} && make eio.o" sh "cd #{LIBEIO_OUTPUT_DIR} && make libeio.la" end - + task :clean do if File.exist?(LIBEIO_OUTPUT_DIR + "Makefile") sh "cd #{LIBEIO_OUTPUT_DIR} && make maintainer-clean" --- passenger/ext/boost/libs/thread/src/pthread/thread.cpp +++ passenger/ext/boost/libs/thread/src/pthread/thread.cpp @@ -390,6 +390,7 @@ { return false; } + return false; } bool thread::joinable() const BOOST_NOEXCEPT --- passenger/lib/phusion_passenger/common_library.rb +++ passenger/lib/phusion_passenger/common_library.rb @@ -101,7 +101,7 @@ end def define_tasks(extra_compiler_flags = nil) - flags = "-Iext -Iext/common #{LIBEV_CFLAGS} #{extra_compiler_flags} " + flags = "-Iext -Iext/common #{LIBEV_CFLAGS} #{extra_compiler_flags} -fPIC #{ENV['RPM_OPT_FLAGS']} " cflags = (flags + EXTRA_CFLAGS).strip cxxflags = (flags + EXTRA_CXXFLAGS).strip @@ -171,7 +171,7 @@ # packaging the runtime ('passenger package-runtime') so we # never generate static libraries. library = "#{@output_dir}/#{category}.a" - + file(library => object_filenames) do create_static_library(library, object_filenames.join(' ')) end