passenger 4.0.20 → 4.0.21
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.
- checksums.yaml +8 -8
- checksums.yaml.gz.asc +7 -7
- data.tar.gz.asc +7 -7
- data/.gitignore +1 -0
- data/.travis.yml +1 -1
- data/NEWS +15 -0
- data/README.md +5 -3
- data/Rakefile +1 -0
- data/bin/passenger-config +1 -5
- data/bin/passenger-install-apache2-module +53 -5
- data/bin/passenger-install-nginx-module +19 -6
- data/bin/passenger-memory-stats +3 -3
- data/build/agents.rb +11 -8
- data/build/apache2.rb +9 -5
- data/build/basics.rb +15 -21
- data/build/common_library.rb +16 -6
- data/build/cplusplus_support.rb +5 -5
- data/build/cxx_tests.rb +3 -3
- data/build/documentation.rb +1 -1
- data/build/misc.rb +4 -37
- data/build/node_tests.rb +29 -0
- data/build/oxt_tests.rb +1 -1
- data/build/packaging.rb +29 -10
- data/build/preprocessor.rb +2 -1
- data/build/test_basics.rb +15 -6
- data/debian.template/locations.ini.template +1 -0
- data/debian.template/passenger.install.template +1 -0
- data/dev/copy_boost_headers.rb +7 -3
- data/dev/run_travis.sh +32 -16
- data/doc/Users guide Apache.idmap.txt +22 -34
- data/doc/Users guide Apache.txt +20 -234
- data/doc/Users guide Nginx.idmap.txt +84 -66
- data/doc/Users guide Nginx.txt +50 -1
- data/doc/Users guide Standalone.idmap.txt +74 -0
- data/doc/Users guide Standalone.txt +22 -9
- data/doc/Users guide.txt +51 -0
- data/doc/users_guide_snippets/environment_variables.txt +0 -3
- data/doc/users_guide_snippets/installation.txt +337 -380
- data/doc/users_guide_snippets/installation/run_installer.txt +58 -0
- data/doc/users_guide_snippets/installation/verify_running_epilogue.txt +6 -0
- data/doc/users_guide_snippets/support_information.txt +2 -9
- data/doc/users_guide_snippets/troubleshooting/default.txt +112 -0
- data/doc/users_guide_snippets/troubleshooting/rails.txt +56 -0
- data/doc/users_guide_snippets/where_to_get_support.txt +9 -0
- data/ext/apache2/Bucket.h +1 -1
- data/ext/apache2/Configuration.hpp +0 -44
- data/ext/apache2/CreateDirConfig.cpp +1 -1
- data/ext/apache2/CreateDirConfig.cpp.erb +1 -1
- data/ext/apache2/Hooks.cpp +28 -21
- data/ext/apache2/MergeDirConfig.cpp +1 -0
- data/ext/apache2/MergeDirConfig.cpp.erb +1 -1
- data/ext/apache2/SetHeaders.cpp +73 -0
- data/ext/apache2/SetHeaders.cpp.erb +88 -0
- data/ext/boost/algorithm/string/detail/find_format.hpp +5 -5
- data/ext/boost/algorithm/string/detail/find_format_all.hpp +5 -5
- data/ext/boost/algorithm/string/detail/finder.hpp +1 -1
- data/ext/boost/algorithm/string/formatter.hpp +2 -2
- data/ext/boost/assert.hpp +6 -1
- data/ext/boost/atomic.hpp +18 -0
- data/ext/boost/atomic/atomic.hpp +241 -0
- data/ext/boost/atomic/detail/base.hpp +585 -0
- data/ext/boost/atomic/detail/cas32strong.hpp +885 -0
- data/ext/boost/atomic/detail/cas32weak.hpp +947 -0
- data/ext/boost/atomic/detail/cas64strong.hpp +443 -0
- data/ext/boost/atomic/detail/config.hpp +54 -0
- data/ext/boost/atomic/detail/gcc-alpha.hpp +368 -0
- data/ext/boost/atomic/detail/gcc-armv6plus.hpp +252 -0
- data/ext/boost/atomic/detail/gcc-cas.hpp +157 -0
- data/ext/boost/atomic/detail/gcc-ppc.hpp +2850 -0
- data/ext/boost/atomic/detail/gcc-sparcv9.hpp +1259 -0
- data/ext/boost/atomic/detail/gcc-x86.hpp +1766 -0
- data/ext/boost/atomic/detail/generic-cas.hpp +206 -0
- data/ext/boost/atomic/detail/interlocked.hpp +200 -0
- data/ext/boost/atomic/detail/linux-arm.hpp +189 -0
- data/ext/boost/atomic/detail/lockpool.hpp +97 -0
- data/ext/boost/atomic/detail/platform.hpp +62 -0
- data/ext/boost/atomic/detail/type-classification.hpp +45 -0
- data/ext/boost/chrono/config.hpp +8 -3
- data/ext/boost/chrono/duration.hpp +9 -10
- data/ext/boost/chrono/system_clocks.hpp +1 -1
- data/ext/boost/chrono/time_point.hpp +4 -3
- data/ext/boost/config/auto_link.hpp +53 -52
- data/ext/boost/config/compiler/borland.hpp +1 -0
- data/ext/boost/config/compiler/clang.hpp +24 -1
- data/ext/boost/config/compiler/codegear.hpp +1 -0
- data/ext/boost/config/compiler/common_edg.hpp +1 -0
- data/ext/boost/config/compiler/cray.hpp +1 -0
- data/ext/boost/config/compiler/digitalmars.hpp +1 -0
- data/ext/boost/config/compiler/gcc.hpp +29 -3
- data/ext/boost/config/compiler/gcc_xml.hpp +2 -1
- data/ext/boost/config/compiler/hp_acc.hpp +1 -0
- data/ext/boost/config/compiler/intel.hpp +1 -1
- data/ext/boost/config/compiler/metrowerks.hpp +1 -0
- data/ext/boost/config/compiler/mpw.hpp +1 -0
- data/ext/boost/config/compiler/pathscale.hpp +1 -0
- data/ext/boost/config/compiler/pgi.hpp +1 -0
- data/ext/boost/config/compiler/sunpro_cc.hpp +1 -0
- data/ext/boost/config/compiler/vacpp.hpp +3 -2
- data/ext/boost/config/compiler/visualc.hpp +25 -11
- data/ext/boost/config/platform/vxworks.hpp +353 -15
- data/ext/boost/config/select_compiler_config.hpp +4 -4
- data/ext/boost/config/stdlib/dinkumware.hpp +10 -3
- data/ext/boost/config/stdlib/libstdcpp3.hpp +2 -1
- data/ext/boost/config/suffix.hpp +45 -19
- data/ext/boost/date_time/format_date_parser.hpp +1 -11
- data/ext/boost/date_time/strings_from_facet.hpp +5 -3
- data/ext/boost/detail/atomic_redef_macros.hpp +19 -0
- data/ext/boost/detail/atomic_undef_macros.hpp +39 -0
- data/ext/boost/detail/endian.hpp +52 -4
- data/ext/boost/detail/scoped_enum_emulation.hpp +10 -10
- data/ext/boost/detail/select_type.hpp +36 -0
- data/ext/boost/exception/current_exception_cast.hpp +1 -1
- data/ext/boost/exception/detail/error_info_impl.hpp +3 -5
- data/ext/boost/exception/detail/exception_ptr.hpp +3 -3
- data/ext/boost/exception/detail/is_output_streamable.hpp +1 -1
- data/ext/boost/exception/detail/object_hex_dump.hpp +1 -1
- data/ext/boost/exception/detail/type_info.hpp +1 -1
- data/ext/boost/exception/diagnostic_information.hpp +15 -14
- data/ext/boost/exception/exception.hpp +1 -1
- data/ext/boost/exception/get_error_info.hpp +1 -1
- data/ext/boost/exception/info.hpp +12 -13
- data/ext/boost/exception/to_string.hpp +6 -1
- data/ext/boost/exception/to_string_stub.hpp +9 -1
- data/ext/boost/foreach.hpp +5 -5
- data/ext/boost/function/function_template.hpp +6 -6
- data/ext/boost/functional/hash/detail/float_functions.hpp +90 -0
- data/ext/boost/functional/hash/detail/hash_float.hpp +11 -2
- data/ext/boost/functional/hash/extensions.hpp +14 -2
- data/ext/boost/functional/hash/hash.hpp +26 -5
- data/ext/boost/get_pointer.hpp +17 -2
- data/ext/boost/integer_traits.hpp +1 -1
- data/ext/boost/lexical_cast.hpp +615 -395
- data/ext/boost/libs/atomic/lockpool.cpp +24 -0
- data/ext/boost/libs/system/src/error_code.cpp +25 -18
- data/ext/boost/libs/thread/src/future.cpp +7 -5
- data/ext/boost/libs/thread/src/pthread/once.cpp +9 -3
- data/ext/boost/libs/thread/src/pthread/once_atomic.cpp +90 -0
- data/ext/boost/libs/thread/src/pthread/thread.cpp +129 -95
- data/ext/boost/libs/thread/src/pthread/timeconv.inl +20 -1
- data/ext/boost/limits.hpp +1 -1
- data/ext/boost/math/policies/policy.hpp +10 -0
- data/ext/boost/math/special_functions/detail/round_fwd.hpp +17 -4
- data/ext/boost/math/special_functions/fpclassify.hpp +114 -45
- data/ext/boost/math/special_functions/math_fwd.hpp +195 -83
- data/ext/boost/math/special_functions/sign.hpp +13 -8
- data/ext/boost/math/tools/config.hpp +38 -16
- data/ext/boost/move/algorithm.hpp +275 -0
- data/ext/boost/move/core.hpp +332 -0
- data/ext/boost/move/detail/config_begin.hpp +23 -0
- data/ext/boost/move/detail/config_end.hpp +20 -0
- data/ext/boost/move/detail/meta_utils.hpp +158 -0
- data/ext/boost/move/iterator.hpp +298 -0
- data/ext/boost/move/move.hpp +10 -1256
- data/ext/boost/move/traits.hpp +142 -0
- data/ext/boost/move/utility.hpp +194 -0
- data/ext/boost/mpl/assert.hpp +72 -4
- data/ext/boost/noncopyable.hpp +15 -3
- data/ext/boost/pointer_to_other.hpp +55 -0
- data/ext/boost/range/concepts.hpp +4 -4
- data/ext/boost/range/detail/extract_optional_type.hpp +1 -1
- data/ext/boost/range/empty.hpp +1 -1
- data/ext/boost/range/iterator_range_core.hpp +4 -1
- data/ext/boost/range/iterator_range_io.hpp +2 -2
- data/ext/boost/ratio/config.hpp +6 -0
- data/ext/boost/ratio/detail/overflow_helpers.hpp +2 -2
- data/ext/boost/smart_ptr/allocate_shared_array.hpp +250 -0
- data/ext/boost/smart_ptr/detail/allocate_array_helper.hpp +169 -0
- data/ext/boost/smart_ptr/detail/array_deleter.hpp +124 -0
- data/ext/boost/smart_ptr/detail/array_traits.hpp +53 -0
- data/ext/boost/smart_ptr/detail/array_utility.hpp +178 -0
- data/ext/boost/smart_ptr/detail/make_array_helper.hpp +157 -0
- data/ext/boost/smart_ptr/detail/operator_bool.hpp +16 -9
- data/ext/boost/smart_ptr/detail/shared_count.hpp +78 -7
- data/ext/boost/smart_ptr/detail/sp_convertible.hpp +15 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base.hpp +12 -6
- data/ext/boost/smart_ptr/detail/sp_counted_base_acc_ia64.hpp +1 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_aix.hpp +1 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_cw_ppc.hpp +1 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_cw_x86.hpp +1 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_gcc_ia64.hpp +1 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_gcc_mips.hpp +1 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_gcc_ppc.hpp +1 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_gcc_sparc.hpp +1 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_gcc_x86.hpp +1 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_nt.hpp +1 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_pt.hpp +1 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_snc_ps3.hpp +162 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_solaris.hpp +1 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_spin.hpp +1 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_sync.hpp +1 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_vacpp_ppc.hpp +1 -0
- data/ext/boost/smart_ptr/detail/sp_counted_impl.hpp +15 -0
- data/ext/boost/smart_ptr/detail/sp_forward.hpp +39 -0
- data/ext/boost/smart_ptr/detail/sp_has_sync.hpp +19 -3
- data/ext/boost/smart_ptr/detail/sp_if_array.hpp +31 -0
- data/ext/boost/smart_ptr/detail/sp_nullptr_t.hpp +45 -0
- data/ext/boost/smart_ptr/detail/spinlock_gcc_arm.hpp +5 -12
- data/ext/boost/smart_ptr/enable_shared_from_this.hpp +4 -4
- data/ext/boost/smart_ptr/make_shared.hpp +5 -1060
- data/ext/boost/smart_ptr/make_shared_array.hpp +247 -0
- data/ext/boost/smart_ptr/make_shared_object.hpp +1128 -0
- data/ext/boost/smart_ptr/scoped_array.hpp +32 -7
- data/ext/boost/smart_ptr/scoped_ptr.hpp +31 -5
- data/ext/boost/smart_ptr/shared_array.hpp +135 -20
- data/ext/boost/smart_ptr/shared_ptr.hpp +444 -126
- data/ext/boost/smart_ptr/weak_ptr.hpp +39 -28
- data/ext/boost/static_assert.hpp +74 -17
- data/ext/boost/system/error_code.hpp +76 -68
- data/ext/boost/system/system_error.hpp +5 -1
- data/ext/boost/thread/barrier.hpp +6 -2
- data/ext/boost/thread/completion_latch.hpp +233 -0
- data/ext/boost/thread/condition.hpp +6 -1
- data/ext/boost/thread/detail/async_func.hpp +571 -0
- data/ext/boost/thread/detail/config.hpp +248 -40
- data/ext/boost/thread/detail/counter.hpp +93 -0
- data/ext/boost/thread/detail/delete.hpp +12 -0
- data/ext/boost/thread/detail/invoke.hpp +1351 -0
- data/ext/boost/thread/detail/is_convertible.hpp +48 -0
- data/ext/boost/thread/detail/lockable_wrapper.hpp +45 -0
- data/ext/boost/thread/detail/log.hpp +83 -0
- data/ext/boost/thread/detail/make_tuple_indices.hpp +224 -0
- data/ext/boost/thread/detail/move.hpp +32 -16
- data/ext/boost/thread/detail/thread.hpp +236 -41
- data/ext/boost/thread/detail/thread_group.hpp +55 -9
- data/ext/boost/thread/detail/thread_interruption.hpp +4 -1
- data/ext/boost/thread/exceptions.hpp +2 -0
- data/ext/boost/thread/externally_locked.hpp +351 -0
- data/ext/boost/thread/externally_locked_stream.hpp +170 -0
- data/ext/boost/thread/future.hpp +2517 -455
- data/ext/boost/thread/future_error_code.hpp +61 -0
- data/ext/boost/thread/is_locked_by_this_thread.hpp +39 -0
- data/ext/boost/thread/latch.hpp +142 -0
- data/ext/boost/thread/lock_algorithms.hpp +468 -0
- data/ext/boost/thread/lock_concepts.hpp +197 -0
- data/ext/boost/thread/lock_factories.hpp +78 -0
- data/ext/boost/thread/lock_guard.hpp +88 -0
- data/ext/boost/thread/lock_options.hpp +31 -0
- data/ext/boost/thread/lock_traits.hpp +45 -0
- data/ext/boost/thread/lock_types.hpp +1226 -0
- data/ext/boost/thread/lockable_adapter.hpp +226 -0
- data/ext/boost/thread/lockable_concepts.hpp +157 -0
- data/ext/boost/thread/lockable_traits.hpp +207 -0
- data/ext/boost/thread/locks.hpp +5 -1816
- data/ext/boost/thread/mutex.hpp +33 -1
- data/ext/boost/thread/null_mutex.hpp +243 -0
- data/ext/boost/thread/once.hpp +10 -1
- data/ext/boost/thread/poly_lockable.hpp +68 -0
- data/ext/boost/thread/poly_lockable_adapter.hpp +89 -0
- data/ext/boost/thread/poly_shared_lockable.hpp +135 -0
- data/ext/boost/thread/poly_shared_lockable_adapter.hpp +170 -0
- data/ext/boost/thread/pthread/condition_variable.hpp +74 -26
- data/ext/boost/thread/pthread/condition_variable_fwd.hpp +54 -27
- data/ext/boost/thread/pthread/mutex.hpp +101 -38
- data/ext/boost/thread/pthread/once.hpp +459 -44
- data/ext/boost/thread/pthread/once_atomic.hpp +313 -0
- data/ext/boost/thread/pthread/recursive_mutex.hpp +19 -10
- data/ext/boost/thread/pthread/shared_mutex.hpp +226 -61
- data/ext/boost/thread/pthread/shared_mutex_assert.hpp +724 -0
- data/ext/boost/thread/pthread/thread_data.hpp +53 -50
- data/ext/boost/thread/pthread/timespec.hpp +96 -12
- data/ext/boost/thread/recursive_mutex.hpp +44 -1
- data/ext/boost/thread/reverse_lock.hpp +3 -2
- data/ext/boost/thread/scoped_thread.hpp +285 -0
- data/ext/boost/thread/shared_lock_guard.hpp +2 -1
- data/ext/boost/thread/shared_mutex.hpp +23 -0
- data/ext/boost/thread/strict_lock.hpp +235 -0
- data/ext/boost/thread/sync_bounded_queue.hpp +594 -0
- data/ext/boost/thread/sync_queue.hpp +516 -0
- data/ext/boost/thread/synchronized_value.hpp +1001 -0
- data/ext/boost/thread/testable_mutex.hpp +148 -0
- data/ext/boost/thread/thread.hpp +1 -13
- data/ext/boost/thread/thread_functors.hpp +57 -0
- data/ext/boost/thread/thread_guard.hpp +46 -0
- data/ext/boost/thread/thread_only.hpp +29 -0
- data/ext/boost/thread/v2/shared_mutex.hpp +1062 -0
- data/ext/boost/thread/v2/thread.hpp +37 -10
- data/ext/boost/thread/xtime.hpp +2 -1
- data/ext/boost/token_functions.hpp +16 -16
- data/ext/boost/type_traits/add_lvalue_reference.hpp +26 -0
- data/ext/boost/type_traits/add_reference.hpp +1 -1
- data/ext/boost/type_traits/add_rvalue_reference.hpp +4 -4
- data/ext/boost/type_traits/aligned_storage.hpp +13 -0
- data/ext/boost/type_traits/common_type.hpp +11 -12
- data/ext/boost/type_traits/config.hpp +1 -1
- data/ext/boost/type_traits/detail/common_type_imp.hpp +1 -1
- data/ext/boost/type_traits/detail/has_binary_operator.hpp +1 -1
- data/ext/boost/type_traits/detail/is_function_ptr_tester.hpp +1 -1
- data/ext/boost/type_traits/has_left_shift.hpp +49 -0
- data/ext/boost/type_traits/has_right_shift.hpp +49 -0
- data/ext/boost/type_traits/has_trivial_move_assign.hpp +57 -0
- data/ext/boost/type_traits/has_trivial_move_constructor.hpp +57 -0
- data/ext/boost/type_traits/intrinsics.hpp +18 -2
- data/ext/boost/type_traits/is_abstract.hpp +1 -1
- data/ext/boost/type_traits/is_array.hpp +1 -1
- data/ext/boost/type_traits/is_const.hpp +1 -1
- data/ext/boost/type_traits/is_convertible.hpp +78 -17
- data/ext/boost/type_traits/is_function.hpp +6 -1
- data/ext/boost/type_traits/is_integral.hpp +6 -1
- data/ext/boost/type_traits/is_nothrow_move_assignable.hpp +84 -0
- data/ext/boost/type_traits/is_nothrow_move_constructible.hpp +84 -0
- data/ext/boost/type_traits/is_pod.hpp +3 -1
- data/ext/boost/type_traits/is_rvalue_reference.hpp +1 -1
- data/ext/boost/type_traits/is_volatile.hpp +1 -1
- data/ext/boost/type_traits/make_signed.hpp +153 -0
- data/ext/boost/type_traits/make_unsigned.hpp +16 -0
- data/ext/boost/type_traits/remove_const.hpp +1 -1
- data/ext/boost/type_traits/remove_cv.hpp +1 -1
- data/ext/boost/type_traits/remove_reference.hpp +1 -1
- data/ext/boost/type_traits/remove_volatile.hpp +1 -1
- data/ext/boost/unordered/detail/allocate.hpp +1120 -0
- data/ext/boost/unordered/detail/buckets.hpp +876 -0
- data/ext/boost/unordered/detail/equivalent.hpp +680 -0
- data/ext/boost/unordered/detail/extract_key.hpp +183 -0
- data/ext/boost/unordered/detail/fwd.hpp +23 -0
- data/ext/boost/unordered/detail/table.hpp +861 -0
- data/ext/boost/unordered/detail/unique.hpp +622 -0
- data/ext/boost/unordered/detail/util.hpp +260 -0
- data/ext/boost/unordered/unordered_map.hpp +1652 -0
- data/ext/boost/unordered/unordered_map_fwd.hpp +65 -0
- data/ext/boost/unordered/unordered_set.hpp +1549 -0
- data/ext/boost/unordered/unordered_set_fwd.hpp +63 -0
- data/ext/boost/unordered_map.hpp +18 -0
- data/ext/boost/unordered_set.hpp +18 -0
- data/ext/boost/utility/addressof.hpp +2 -2
- data/ext/boost/utility/result_of.hpp +8 -1
- data/ext/boost/version.hpp +2 -2
- data/ext/common/Account.h +1 -1
- data/ext/common/AccountsDatabase.h +1 -1
- data/ext/common/AgentsStarter.cpp +3 -1
- data/ext/common/AgentsStarter.h +2 -2
- data/ext/common/ApplicationPool2/AppTypes.cpp +24 -6
- data/ext/common/ApplicationPool2/AppTypes.h +17 -8
- data/ext/common/ApplicationPool2/Common.h +12 -12
- data/ext/common/ApplicationPool2/DirectSpawner.h +2 -2
- data/ext/common/ApplicationPool2/DummySpawner.h +3 -3
- data/ext/common/ApplicationPool2/Group.h +6 -6
- data/ext/common/ApplicationPool2/Implementation.cpp +19 -19
- data/ext/common/ApplicationPool2/PipeWatcher.h +5 -5
- data/ext/common/ApplicationPool2/Pool.h +21 -21
- data/ext/common/ApplicationPool2/Process.h +6 -6
- data/ext/common/ApplicationPool2/Session.h +1 -1
- data/ext/common/ApplicationPool2/SmartSpawner.h +24 -12
- data/ext/common/ApplicationPool2/Socket.h +2 -2
- data/ext/common/ApplicationPool2/Spawner.h +64 -14
- data/ext/common/ApplicationPool2/SpawnerFactory.h +7 -7
- data/ext/common/ApplicationPool2/SuperGroup.h +5 -5
- data/ext/common/BackgroundEventLoop.cpp +4 -4
- data/ext/common/BackgroundEventLoop.h +1 -1
- data/ext/common/Constants.h +13 -1
- data/ext/common/EventedBufferedInput.h +8 -8
- data/ext/common/Exceptions.cpp +71 -0
- data/ext/common/Exceptions.h +60 -7
- data/ext/common/FileDescriptor.h +4 -4
- data/ext/common/MessageClient.h +1 -1
- data/ext/common/MessageServer.h +5 -5
- data/ext/common/MultiLibeio.cpp +3 -3
- data/ext/common/MultiLibeio.h +2 -2
- data/ext/common/RandomGenerator.h +11 -11
- data/ext/common/ResourceLocator.h +8 -1
- data/ext/common/SafeLibev.h +12 -12
- data/ext/common/ServerInstanceDir.h +11 -3
- data/ext/common/UnionStation.h +10 -10
- data/ext/common/Utils.cpp +11 -13
- data/ext/common/Utils.h +9 -9
- data/ext/common/Utils/BlockingQueue.h +10 -10
- data/ext/common/Utils/BufferedIO.h +1 -1
- data/ext/common/Utils/CachedFileStat.hpp +2 -2
- data/ext/common/Utils/FileChangeChecker.h +1 -1
- data/ext/common/Utils/HashMap.h +13 -4
- data/ext/common/Utils/IOUtils.cpp +33 -10
- data/ext/common/Utils/IniFile.h +3 -3
- data/ext/common/Utils/Lock.h +2 -2
- data/ext/common/Utils/MessagePassing.h +10 -10
- data/ext/common/Utils/ProcessMetricsCollector.h +24 -6
- data/ext/common/Utils/ScopeGuard.h +5 -5
- data/ext/common/Utils/jsoncpp.cpp +2 -0
- data/ext/common/agents/HelperAgent/FileBackedPipe.h +26 -26
- data/ext/common/agents/HelperAgent/Main.cpp +18 -18
- data/ext/common/agents/HelperAgent/RequestHandler.cpp +4 -4
- data/ext/common/agents/HelperAgent/RequestHandler.h +30 -21
- data/ext/common/agents/LoggingAgent/AdminController.h +1 -1
- data/ext/common/agents/LoggingAgent/FilterSupport.h +13 -11
- data/ext/common/agents/LoggingAgent/LoggingServer.h +11 -11
- data/ext/common/agents/LoggingAgent/Main.cpp +9 -9
- data/ext/common/agents/LoggingAgent/RemoteSender.h +3 -3
- data/ext/common/agents/SpawnPreparer.cpp +1 -0
- data/ext/common/agents/Watchdog/AgentWatcher.cpp +8 -7
- data/ext/common/agents/Watchdog/Main.cpp +81 -73
- data/ext/common/agents/Watchdog/ServerInstanceDirToucher.cpp +1 -1
- data/ext/libev/Changes +57 -0
- data/ext/libev/LICENSE +2 -1
- data/ext/libev/Makefile.in +110 -50
- data/ext/libev/README +8 -8
- data/ext/libev/aclocal.m4 +1503 -861
- data/ext/libev/config.guess +290 -304
- data/ext/libev/config.sub +77 -198
- data/ext/libev/configure +1735 -890
- data/ext/libev/configure.ac +3 -2
- data/ext/libev/ev++.h +6 -6
- data/ext/libev/ev.c +541 -214
- data/ext/libev/ev.h +106 -100
- data/ext/libev/ev_epoll.c +1 -1
- data/ext/libev/ev_kqueue.c +20 -4
- data/ext/libev/ev_vars.h +15 -16
- data/ext/libev/ev_win32.c +12 -2
- data/ext/libev/ev_wrap.h +162 -160
- data/ext/libev/event.c +29 -6
- data/ext/libev/event.h +9 -2
- data/ext/libev/ltmain.sh +2632 -1384
- data/ext/nginx/ConfigurationCommands.c +1 -1
- data/ext/nginx/ConfigurationCommands.c.erb +3 -1
- data/ext/nginx/ContentHandler.c +25 -2
- data/ext/nginx/CreateLocationConfig.c +1 -0
- data/ext/nginx/CreateLocationConfig.c.erb +1 -1
- data/ext/nginx/MergeLocationConfig.c +1 -0
- data/ext/nginx/MergeLocationConfig.c.erb +1 -1
- data/ext/nginx/config +12 -0
- data/ext/oxt/dynamic_thread_group.hpp +7 -4
- data/ext/oxt/system_calls.cpp +5 -1
- data/ext/oxt/system_calls.hpp +3 -0
- data/helper-scripts/node-loader.js +117 -249
- data/lib/phusion_passenger.rb +27 -5
- data/lib/phusion_passenger/abstract_installer.rb +104 -9
- data/lib/phusion_passenger/admin_tools/memory_stats.rb +10 -9
- data/lib/phusion_passenger/apache2/config_options.rb +6 -3
- data/lib/phusion_passenger/common_library.rb +7 -1
- data/lib/phusion_passenger/constants.rb +6 -0
- data/lib/phusion_passenger/loader_shared_helpers.rb +7 -4
- data/lib/phusion_passenger/nginx/config_options.rb +2 -1
- data/lib/phusion_passenger/packaging.rb +3 -0
- data/lib/phusion_passenger/platform_info/apache.rb +43 -6
- data/lib/phusion_passenger/platform_info/apache_detector.rb +15 -5
- data/lib/phusion_passenger/platform_info/compiler.rb +167 -32
- data/lib/phusion_passenger/platform_info/cxx_portability.rb +133 -77
- data/lib/phusion_passenger/platform_info/depcheck.rb +17 -7
- data/lib/phusion_passenger/platform_info/depcheck_specs/apache2.rb +3 -3
- data/lib/phusion_passenger/platform_info/depcheck_specs/compiler_toolchain.rb +4 -4
- data/lib/phusion_passenger/platform_info/depcheck_specs/ruby.rb +5 -6
- data/lib/phusion_passenger/platform_info/linux.rb +2 -1
- data/lib/phusion_passenger/platform_info/operating_system.rb +1 -1
- data/lib/phusion_passenger/platform_info/ruby.rb +18 -3
- data/lib/phusion_passenger/standalone/runtime_installer.rb +6 -2
- data/lib/phusion_passenger/standalone/start_command.rb +8 -2
- data/lib/phusion_passenger/utils/ansi_colors.rb +9 -0
- data/lib/phusion_passenger/utils/hosts_file_parser.rb +4 -2
- data/node_lib/phusion_passenger/httplib_emulation.js +141 -0
- data/node_lib/phusion_passenger/line_reader.js +154 -0
- data/node_lib/phusion_passenger/request_handler.js +65 -0
- data/node_lib/phusion_passenger/session_protocol_parser.js +113 -0
- data/resources/templates/apache2/deployment_example.txt.erb +2 -1
- data/resources/templates/apache2/installing_against_a_different_apache.txt.erb +14 -0
- data/resources/templates/apache2/multiple_apache_installations_detected.txt.erb +15 -0
- data/resources/templates/apache2/possible_solutions_for_compilation_and_installation_problems.txt.erb +4 -5
- data/resources/templates/general_error_with_html.html.template +1 -1
- data/resources/templates/installer_common/gem_install_permission_problems.txt.erb +17 -0
- data/resources/templates/installer_common/low_amount_of_memory_warning.txt.erb +6 -4
- data/resources/templates/installer_common/world_inaccessible_directories.txt.erb +16 -0
- data/resources/templates/nginx/deployment_example.txt.erb +2 -1
- data/resources/templates/nginx/possible_solutions_for_compilation_and_installation_problems.txt.erb +4 -5
- data/resources/templates/standalone/config.erb +1 -0
- data/test/cxx/ApplicationPool2/DirectSpawnerTest.cpp +3 -3
- data/test/cxx/ApplicationPool2/PoolTest.cpp +4 -4
- data/test/cxx/ApplicationPool2/ProcessTest.cpp +5 -5
- data/test/cxx/ApplicationPool2/SmartSpawnerTest.cpp +5 -5
- data/test/cxx/ApplicationPool2/SpawnerTestCases.cpp +1 -1
- data/test/cxx/EventedBufferedInputTest.cpp +6 -6
- data/test/cxx/FileBackedPipeTest.cpp +1 -1
- data/test/cxx/MessagePassingTest.cpp +1 -1
- data/test/cxx/MessageServerTest.cpp +4 -4
- data/test/cxx/RequestHandlerTest.cpp +7 -7
- data/test/cxx/UnionStationTest.cpp +2 -2
- data/test/node/line_reader_spec.js +338 -0
- data/test/node/spec_helper.js +27 -0
- data/test/ruby/standalone/runtime_installer_spec.rb +2 -1
- metadata +131 -22
- metadata.gz.asc +7 -7
- data/ext/boost/functional/hash/detail/container_fwd_0x.hpp +0 -29
- data/ext/boost/lambda/core.hpp +0 -79
- data/ext/boost/lambda/detail/actions.hpp +0 -174
- data/ext/boost/lambda/detail/arity_code.hpp +0 -110
- data/ext/boost/lambda/detail/function_adaptors.hpp +0 -789
- data/ext/boost/lambda/detail/is_instance_of.hpp +0 -104
- data/ext/boost/lambda/detail/lambda_config.hpp +0 -48
- data/ext/boost/lambda/detail/lambda_functor_base.hpp +0 -615
- data/ext/boost/lambda/detail/lambda_functors.hpp +0 -324
- data/ext/boost/lambda/detail/lambda_fwd.hpp +0 -74
- data/ext/boost/lambda/detail/lambda_traits.hpp +0 -578
- data/ext/boost/lambda/detail/member_ptr.hpp +0 -737
- data/ext/boost/lambda/detail/operator_actions.hpp +0 -139
- data/ext/boost/lambda/detail/operator_lambda_func_base.hpp +0 -271
- data/ext/boost/lambda/detail/operator_return_type_traits.hpp +0 -917
- data/ext/boost/lambda/detail/operators.hpp +0 -370
- data/ext/boost/lambda/detail/ret.hpp +0 -325
- data/ext/boost/lambda/detail/return_type_traits.hpp +0 -282
- data/ext/boost/lambda/detail/select_functions.hpp +0 -74
- data/ext/boost/lambda/lambda.hpp +0 -34
@@ -23,6 +23,8 @@
|
|
23
23
|
|
24
24
|
require 'phusion_passenger/platform_info'
|
25
25
|
require 'phusion_passenger/platform_info/compiler'
|
26
|
+
require 'phusion_passenger/platform_info/operating_system'
|
27
|
+
require 'phusion_passenger/platform_info/linux'
|
26
28
|
|
27
29
|
module PhusionPassenger
|
28
30
|
|
@@ -98,6 +100,30 @@ module PlatformInfo
|
|
98
100
|
end
|
99
101
|
memoize :httpd_version
|
100
102
|
|
103
|
+
# The Apache executable's architectural bits. Returns 32 or 64,
|
104
|
+
# or nil if unable to detect.
|
105
|
+
def self.httpd_architecture_bits(options = nil)
|
106
|
+
if options
|
107
|
+
httpd = options[:httpd] || self.httpd(options)
|
108
|
+
else
|
109
|
+
httpd = self.httpd
|
110
|
+
end
|
111
|
+
if httpd
|
112
|
+
`#{httpd} -V` =~ %r{Architecture:(.*)}
|
113
|
+
text = $1
|
114
|
+
if text =~ /32/
|
115
|
+
return 32
|
116
|
+
elsif text =~ /64/
|
117
|
+
return 64
|
118
|
+
else
|
119
|
+
return nil
|
120
|
+
end
|
121
|
+
else
|
122
|
+
return nil
|
123
|
+
end
|
124
|
+
end
|
125
|
+
memoize :httpd_architecture_bits
|
126
|
+
|
101
127
|
# The Apache root directory.
|
102
128
|
def self.httpd_root(options = nil)
|
103
129
|
if info = httpd_V(options)
|
@@ -414,7 +440,7 @@ module PlatformInfo
|
|
414
440
|
apxs2_flags.gsub!(/-O\d? /, '')
|
415
441
|
|
416
442
|
# Remove flags not supported by GCC
|
417
|
-
if
|
443
|
+
if os_name =~ /solaris/ # TODO: Add support for people using SunStudio
|
418
444
|
# The big problem is Coolstack apxs includes a bunch of solaris -x directives.
|
419
445
|
options = apxs2_flags.split
|
420
446
|
options.reject! { |f| f =~ /^\-x/ }
|
@@ -423,11 +449,22 @@ module PlatformInfo
|
|
423
449
|
options.reject! { |f| f =~ /^\-mt/ }
|
424
450
|
apxs2_flags = options.join(' ')
|
425
451
|
end
|
452
|
+
|
453
|
+
if os_name == "linux" &&
|
454
|
+
linux_distro_tags.include?(:redhat) &&
|
455
|
+
apxs2 == "/usr/sbin/apxs" &&
|
456
|
+
httpd_architecture_bits == 64
|
457
|
+
# The Apache package in CentOS 5 x86_64 is broken.
|
458
|
+
# 'apxs -q CFLAGS' contains directives for compiling
|
459
|
+
# the module as 32-bit, even though httpd itself
|
460
|
+
# is 64-bit. Fix this.
|
461
|
+
apxs2_flags.gsub!('-m32 -march=i386 -mtune=generic', '')
|
462
|
+
end
|
426
463
|
|
427
464
|
apxs2_flags.strip!
|
428
465
|
flags << apxs2_flags
|
429
466
|
end
|
430
|
-
if !httpd.nil? &&
|
467
|
+
if !httpd.nil? && os_name == "macosx"
|
431
468
|
# The default Apache install on OS X is a universal binary.
|
432
469
|
# Figure out which architectures it's compiled for and do the same
|
433
470
|
# thing for mod_passenger. We use the 'file' utility to do this.
|
@@ -513,7 +550,7 @@ module PlatformInfo
|
|
513
550
|
return !try_compile("whether APR is needed for building Apache modules",
|
514
551
|
:c, "#include <apr.h>\n", apache2_module_cflags(false))
|
515
552
|
end
|
516
|
-
memoize :apr_config_needed_for_building_apache_modules
|
553
|
+
memoize :apr_config_needed_for_building_apache_modules?, true
|
517
554
|
|
518
555
|
private
|
519
556
|
def self.determine_apr_info
|
@@ -523,10 +560,10 @@ private
|
|
523
560
|
flags = `#{apr_config} --cppflags --includes`.strip
|
524
561
|
libs = `#{apr_config} --link-ld`.strip
|
525
562
|
flags.gsub!(/-O\d? /, '')
|
526
|
-
if
|
563
|
+
if os_name =~ /solaris/
|
527
564
|
# Remove flags not supported by GCC
|
528
565
|
flags = flags.split(/ +/).reject{ |f| f =~ /^\-mt/ }.join(' ')
|
529
|
-
elsif
|
566
|
+
elsif os_name =~ /aix/
|
530
567
|
libs << " -Wl,-G -Wl,-brtl"
|
531
568
|
end
|
532
569
|
return [flags, libs]
|
@@ -545,7 +582,7 @@ private
|
|
545
582
|
return [flags, libs]
|
546
583
|
end
|
547
584
|
end
|
548
|
-
memoize :determine_apu_info
|
585
|
+
memoize :determine_apu_info, true
|
549
586
|
private_class_method :determine_apu_info
|
550
587
|
|
551
588
|
# Run `httpd -V` and return its output. On some systems, such as Ubuntu 13.10,
|
@@ -76,6 +76,8 @@ class ApacheDetector
|
|
76
76
|
end
|
77
77
|
end
|
78
78
|
|
79
|
+
attr_reader :results
|
80
|
+
|
79
81
|
def initialize(output)
|
80
82
|
@output = output
|
81
83
|
@results = []
|
@@ -175,25 +177,33 @@ class ApacheDetector
|
|
175
177
|
log " <b>#{PhusionPassenger.bin_dir}/passenger-install-apache2-module</b>"
|
176
178
|
log ""
|
177
179
|
log "If you are sure that you have Apache installed, please read the documentation:"
|
178
|
-
log " * <b>#{PhusionPassenger.
|
180
|
+
log " * <b>#{PhusionPassenger.apache2_doc_path}</b>, section"
|
179
181
|
log " section 'Installation' -> 'Customizing the compilation process' ->"
|
180
182
|
log " 'Forcing location of command line tools and dependencies'"
|
181
183
|
log " * Or visit the online version:"
|
182
|
-
log " <b
|
184
|
+
log " <b>#{APACHE2_DOC_URL}#_forcing_location_of_command_line_tools_and_dependencies</b>"
|
183
185
|
elsif @results.size > 1
|
184
186
|
log "<yellow>WARNING: You have multiple Apache installations on your system!</yellow>"
|
185
187
|
log "You are strongly recommended to read this section of the documentation:"
|
186
|
-
log " * <b>#{PhusionPassenger.
|
188
|
+
log " * <b>#{PhusionPassenger.apache2_doc_path}</b>, section"
|
187
189
|
log " section 'Installation' -> 'Customizing the compilation process' ->"
|
188
190
|
log " 'Forcing location of command line tools and dependencies'"
|
189
191
|
log " * Or visit the online version:"
|
190
|
-
log " <b
|
192
|
+
log " <b>#{APACHE2_DOC_URL}#_forcing_location_of_command_line_tools_and_dependencies</b>"
|
191
193
|
end
|
192
194
|
end
|
193
195
|
|
196
|
+
def result_for(apxs2)
|
197
|
+
return @results.find { |r| r.apxs2 == apxs2 }
|
198
|
+
end
|
199
|
+
|
194
200
|
private
|
195
201
|
def log(message)
|
196
|
-
@output.
|
202
|
+
if @output.tty?
|
203
|
+
@output.puts(Utils::AnsiColors.ansi_colorize(message))
|
204
|
+
else
|
205
|
+
@output.puts(Utils::AnsiColors.strip_color_tags(message))
|
206
|
+
end
|
197
207
|
end
|
198
208
|
|
199
209
|
# On Ubuntu, /usr/bin/apxs2 is a symlink to /usr/bin/apxs. We're only
|
@@ -40,6 +40,18 @@ private
|
|
40
40
|
end
|
41
41
|
private_class_method :detect_language_extension
|
42
42
|
|
43
|
+
def self.detect_compiler_type_name(language)
|
44
|
+
case language
|
45
|
+
when :c
|
46
|
+
return "C"
|
47
|
+
when :cxx
|
48
|
+
return "C++"
|
49
|
+
else
|
50
|
+
raise ArgumentError, "Unsupported language #{language.inspect}"
|
51
|
+
end
|
52
|
+
end
|
53
|
+
private_class_method :detect_compiler_type_name
|
54
|
+
|
43
55
|
def self.create_compiler_command(language, flags1, flags2, link = false)
|
44
56
|
case language
|
45
57
|
when :c
|
@@ -94,17 +106,40 @@ private
|
|
94
106
|
elsif result
|
95
107
|
log("Check suceeded")
|
96
108
|
if capture_output
|
97
|
-
return { :output => output }
|
109
|
+
return { :result => true, :output => output }
|
98
110
|
else
|
99
111
|
return true
|
100
112
|
end
|
101
113
|
else
|
102
114
|
log("Check failed with exit status #{$?.exitstatus}")
|
103
|
-
|
115
|
+
if capture_output == :always
|
116
|
+
return { :result => false, :output => output }
|
117
|
+
else
|
118
|
+
return false
|
119
|
+
end
|
104
120
|
end
|
105
121
|
end
|
106
122
|
private_class_method :run_compiler
|
107
123
|
|
124
|
+
def self.cc_or_cxx_supports_feliminate_unused_debug?(language)
|
125
|
+
ext = detect_language_extension(language)
|
126
|
+
compiler_type_name = detect_compiler_type_name(language)
|
127
|
+
create_temp_file("passenger-compile-check.#{ext}") do |filename, f|
|
128
|
+
f.close
|
129
|
+
begin
|
130
|
+
command = create_compiler_command(language,
|
131
|
+
"-c '#{filename}' -o '#{filename}.o'",
|
132
|
+
'-feliminate-unused-debug-symbols -feliminate-unused-debug-types')
|
133
|
+
result = run_compiler("Checking for #{compiler_type_name} compiler '--feliminate-unused-debug-{symbols,types}' support",
|
134
|
+
command, filename, '', true)
|
135
|
+
return result && result[:output].empty?
|
136
|
+
ensure
|
137
|
+
File.unlink("#{filename}.o") rescue nil
|
138
|
+
end
|
139
|
+
end
|
140
|
+
end
|
141
|
+
private_class_method :cc_or_cxx_supports_feliminate_unused_debug?
|
142
|
+
|
108
143
|
public
|
109
144
|
def self.cc
|
110
145
|
return string_env('CC', default_cc)
|
@@ -135,6 +170,11 @@ public
|
|
135
170
|
end
|
136
171
|
end
|
137
172
|
|
173
|
+
def self.cc_is_gcc?
|
174
|
+
`#{cc} -v 2>&1` =~ /gcc version/
|
175
|
+
end
|
176
|
+
memoize :cc_is_gcc?
|
177
|
+
|
138
178
|
def self.cc_is_clang?
|
139
179
|
`#{cc} --version 2>&1` =~ /clang version/
|
140
180
|
end
|
@@ -150,6 +190,11 @@ public
|
|
150
190
|
end
|
151
191
|
memoize :cc_is_sun_studio?
|
152
192
|
|
193
|
+
def self.cxx_is_sun_studio?
|
194
|
+
`#{cxx} -V 2>&1` =~ /Sun C/ || `#{cc} -flags 2>&1` =~ /Sun C/
|
195
|
+
end
|
196
|
+
memoize :cxx_is_sun_studio?
|
197
|
+
|
153
198
|
|
154
199
|
# Looks for the given C or C++ header. This works by invoking the compiler and
|
155
200
|
# searching in the compiler's header search path. Returns its full filename,
|
@@ -254,68 +299,140 @@ public
|
|
254
299
|
:c, '', "-arch #{arch}")
|
255
300
|
end
|
256
301
|
|
257
|
-
def self.
|
258
|
-
return false if
|
302
|
+
def self.cc_supports_visibility_flag?
|
303
|
+
return false if os_name =~ /aix/
|
259
304
|
return try_compile("Checking for C compiler '-fvisibility' support",
|
260
305
|
:c, '', '-fvisibility=hidden')
|
261
306
|
end
|
262
|
-
memoize :
|
307
|
+
memoize :cc_supports_visibility_flag?, true
|
308
|
+
|
309
|
+
def self.cxx_supports_visibility_flag?
|
310
|
+
return false if os_name =~ /aix/
|
311
|
+
return try_compile("Checking for C++ compiler '-fvisibility' support",
|
312
|
+
:cxx, '', '-fvisibility=hidden')
|
313
|
+
end
|
314
|
+
memoize :cxx_supports_visibility_flag?, true
|
263
315
|
|
264
|
-
def self.
|
316
|
+
def self.cc_supports_wno_attributes_flag?
|
265
317
|
return try_compile("Checking for C compiler '-Wno-attributes' support",
|
266
318
|
:c, '', '-Wno-attributes')
|
267
319
|
end
|
268
|
-
memoize :
|
320
|
+
memoize :cc_supports_wno_attributes_flag?, true
|
269
321
|
|
270
|
-
def self.
|
322
|
+
def self.cxx_supports_wno_attributes_flag?
|
323
|
+
return try_compile("Checking for C++ compiler '-Wno-attributes' support",
|
324
|
+
:cxx, '', '-Wno-attributes')
|
325
|
+
end
|
326
|
+
memoize :cxx_supports_wno_attributes_flag?, true
|
327
|
+
|
328
|
+
def self.cc_supports_wno_missing_field_initializers_flag?
|
271
329
|
return try_compile("Checking for C compiler '-Wno-missing-field-initializers' support",
|
272
330
|
:c, '', '-Wno-missing-field-initializers')
|
273
331
|
end
|
274
|
-
memoize :
|
332
|
+
memoize :cc_supports_wno_missing_field_initializers_flag?, true
|
333
|
+
|
334
|
+
def self.cxx_supports_wno_missing_field_initializers_flag?
|
335
|
+
return try_compile("Checking for C++ compiler '-Wno-missing-field-initializers' support",
|
336
|
+
:cxx, '', '-Wno-missing-field-initializers')
|
337
|
+
end
|
338
|
+
memoize :cxx_supports_wno_missing_field_initializers_flag?, true
|
275
339
|
|
276
|
-
def self.
|
340
|
+
def self.cc_supports_no_tls_direct_seg_refs_option?
|
277
341
|
return try_compile("Checking for C compiler '-mno-tls-direct-seg-refs' support",
|
278
342
|
:c, '', '-mno-tls-direct-seg-refs')
|
279
343
|
end
|
280
|
-
memoize :
|
344
|
+
memoize :cc_supports_no_tls_direct_seg_refs_option?, true
|
281
345
|
|
282
|
-
def self.
|
283
|
-
return try_compile("Checking for C compiler '-
|
284
|
-
:
|
346
|
+
def self.cxx_supports_no_tls_direct_seg_refs_option?
|
347
|
+
return try_compile("Checking for C++ compiler '-mno-tls-direct-seg-refs' support",
|
348
|
+
:cxx, '', '-mno-tls-direct-seg-refs')
|
285
349
|
end
|
286
|
-
memoize :
|
350
|
+
memoize :cxx_supports_no_tls_direct_seg_refs_option?, true
|
351
|
+
|
352
|
+
def self.compiler_supports_wno_ambiguous_member_template?
|
353
|
+
result = try_compile("Checking for C++ compiler '-Wno-ambiguous-member-template' support",
|
354
|
+
:cxx, '', '-Wno-ambiguous-member-template')
|
355
|
+
return false if !result
|
287
356
|
|
288
|
-
|
289
|
-
|
357
|
+
# For some reason, GCC does not complain about -Wno-ambiguous-member-template
|
358
|
+
# not being supported unless the source contains another error. So we
|
359
|
+
# check for this.
|
360
|
+
create_temp_file("passenger-compile-check.cpp") do |filename, f|
|
361
|
+
source = %Q{
|
362
|
+
void foo() {
|
363
|
+
return error;
|
364
|
+
}
|
365
|
+
}
|
366
|
+
f.puts(source)
|
290
367
|
f.close
|
291
368
|
begin
|
292
|
-
command = create_compiler_command(:
|
369
|
+
command = create_compiler_command(:cxx,
|
293
370
|
"-c '#{filename}' -o '#{filename}.o'",
|
294
|
-
'-
|
295
|
-
result = run_compiler("Checking
|
296
|
-
command, filename,
|
297
|
-
return result && result[:output].empty?
|
371
|
+
'-Wno-ambiguous-member-template')
|
372
|
+
result = run_compiler("Checking whether C++ compiler '-Wno-ambiguous-member-template' support is *really* supported",
|
373
|
+
command, filename, source, :always)
|
298
374
|
ensure
|
299
375
|
File.unlink("#{filename}.o") rescue nil
|
300
376
|
end
|
301
377
|
end
|
378
|
+
|
379
|
+
return result && result[:output] !~ /-Wno-ambiguous-member-template/
|
302
380
|
end
|
303
|
-
|
381
|
+
memoize :compiler_supports_wno_ambiguous_member_template?, true
|
382
|
+
|
383
|
+
def self.cc_supports_feliminate_unused_debug?
|
384
|
+
return cc_or_cxx_supports_feliminate_unused_debug?(:c)
|
385
|
+
end
|
386
|
+
memoize :cc_supports_feliminate_unused_debug?, true
|
387
|
+
|
388
|
+
def self.cxx_supports_feliminate_unused_debug?
|
389
|
+
return cc_or_cxx_supports_feliminate_unused_debug?(:cxx)
|
390
|
+
end
|
391
|
+
memoize :cxx_supports_feliminate_unused_debug?, true
|
392
|
+
|
304
393
|
# Returns whether compiling C++ with -fvisibility=hidden might result
|
305
394
|
# in tons of useless warnings, like this:
|
306
395
|
# http://code.google.com/p/phusion-passenger/issues/detail?id=526
|
307
396
|
# This appears to be a bug in older g++ versions:
|
308
397
|
# http://gcc.gnu.org/ml/gcc-patches/2006-07/msg00861.html
|
309
398
|
# Warnings should be suppressed with -Wno-attributes.
|
310
|
-
def self.
|
311
|
-
if
|
399
|
+
def self.cc_visibility_flag_generates_warnings?
|
400
|
+
if os_name =~ /linux/ && `#{cc} -v 2>&1` =~ /gcc version (.*?)/
|
401
|
+
return $1 <= "4.1.2"
|
402
|
+
else
|
403
|
+
return false
|
404
|
+
end
|
405
|
+
end
|
406
|
+
memoize :cc_visibility_flag_generates_warnings?, true
|
407
|
+
|
408
|
+
def self.cxx_visibility_flag_generates_warnings?
|
409
|
+
if os_name =~ /linux/ && `#{cxx} -v 2>&1` =~ /gcc version (.*?)/
|
312
410
|
return $1 <= "4.1.2"
|
313
411
|
else
|
314
412
|
return false
|
315
413
|
end
|
316
414
|
end
|
317
|
-
memoize :
|
415
|
+
memoize :cxx_visibility_flag_generates_warnings?, true
|
318
416
|
|
417
|
+
def self.adress_sanitizer_flag
|
418
|
+
if cc_is_clang?
|
419
|
+
if `#{cc} --help` =~ /-fsanitize=/
|
420
|
+
return "-fsanitize=address"
|
421
|
+
else
|
422
|
+
return "-faddress-sanitizer"
|
423
|
+
end
|
424
|
+
else
|
425
|
+
return nil
|
426
|
+
end
|
427
|
+
end
|
428
|
+
memoize :adress_sanitizer_flag
|
429
|
+
|
430
|
+
def self.has_rt_library?
|
431
|
+
return try_link("Checking for -lrt support",
|
432
|
+
:c, "int main() { return 0; }\n", '-lrt')
|
433
|
+
end
|
434
|
+
memoize :has_rt_library?, true
|
435
|
+
|
319
436
|
def self.has_math_library?
|
320
437
|
return try_link("Checking for -lmath support",
|
321
438
|
:c, "int main() { return 0; }\n", '-lmath')
|
@@ -327,6 +444,15 @@ public
|
|
327
444
|
:c, '#include <alloca.h>')
|
328
445
|
end
|
329
446
|
memoize :has_alloca_h?, true
|
447
|
+
|
448
|
+
def self.has_accept4?
|
449
|
+
return try_compile("Checking for accept4()", :c, %Q{
|
450
|
+
#define _GNU_SOURCE
|
451
|
+
#include <sys/socket.h>
|
452
|
+
static void *foo = accept4;
|
453
|
+
})
|
454
|
+
end
|
455
|
+
memoize :has_accept4?, true
|
330
456
|
|
331
457
|
# C compiler flags that should be passed in order to enable debugging information.
|
332
458
|
def self.debugging_cflags
|
@@ -335,10 +461,10 @@ public
|
|
335
461
|
# -ggdb instead.
|
336
462
|
#
|
337
463
|
# In any case we'll always want to use -ggdb for better GDB debugging.
|
338
|
-
if
|
339
|
-
return '-g'
|
340
|
-
else
|
464
|
+
if cc_is_gcc?
|
341
465
|
return '-ggdb'
|
466
|
+
else
|
467
|
+
return '-g'
|
342
468
|
end
|
343
469
|
end
|
344
470
|
|
@@ -346,7 +472,7 @@ public
|
|
346
472
|
if !ENV['DMALLOC_LIBS'].to_s.empty?
|
347
473
|
return ENV['DMALLOC_LIBS']
|
348
474
|
end
|
349
|
-
if
|
475
|
+
if os_name == "macosx"
|
350
476
|
['/opt/local', '/usr/local', '/usr'].each do |prefix|
|
351
477
|
filename = "#{prefix}/lib/libdmallocthcxx.a"
|
352
478
|
if File.exist?(filename)
|
@@ -361,7 +487,7 @@ public
|
|
361
487
|
memoize :dmalloc_ldflags
|
362
488
|
|
363
489
|
def self.electric_fence_ldflags
|
364
|
-
if
|
490
|
+
if os_name == "macosx"
|
365
491
|
['/opt/local', '/usr/local', '/usr'].each do |prefix|
|
366
492
|
filename = "#{prefix}/lib/libefence.a"
|
367
493
|
if File.exist?(filename)
|
@@ -376,7 +502,7 @@ public
|
|
376
502
|
memoize :electric_fence_ldflags
|
377
503
|
|
378
504
|
def self.export_dynamic_flags
|
379
|
-
if
|
505
|
+
if os_name == "linux"
|
380
506
|
return '-rdynamic'
|
381
507
|
else
|
382
508
|
return nil
|
@@ -411,6 +537,15 @@ public
|
|
411
537
|
end
|
412
538
|
end
|
413
539
|
memoize :gnu_make, true
|
540
|
+
|
541
|
+
def self.xcode_select_version
|
542
|
+
if find_command('xcode-select')
|
543
|
+
`xcode-select --version` =~ /version (.+)\./
|
544
|
+
return $1
|
545
|
+
else
|
546
|
+
return nil
|
547
|
+
end
|
548
|
+
end
|
414
549
|
end
|
415
550
|
|
416
551
|
end # module PhusionPassenger
|