From 7bd50bc0c4e27adbbc619a74bd22fb6bf7333321 Mon Sep 17 00:00:00 2001 From: "David M. Lee" Date: Fri, 18 Jan 2013 21:35:09 +0000 Subject: [PATCH] Specify the -rpath linker flag when prefix != /usr. This allows Asterisk to start without having to specify the LD_LIBRARY_PATH. This can be disabled by passing --disable-rpath to configure. (closes issue ASTERISK-20407) Reported by: David M. Lee Review: https://reviewboard.asterisk.org/r/2132/ ........ Merged revisions 379475 from http://svn.asterisk.org/svn/asterisk/branches/11 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@379477 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- Makefile | 5 ++++- UPGRADE-11.txt | 8 ++++++++ UPGRADE.txt | 1 - configure | 44 +++++++++++++++++++++++++++++++++++++++++++- configure.ac | 32 ++++++++++++++++++++++++++++++++ main/Makefile | 3 +++ makeopts.in | 1 + 7 files changed, 91 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index 57883221ae..71c8f00167 100644 --- a/Makefile +++ b/Makefile @@ -252,7 +252,7 @@ MOD_SUBDIRS_MENUSELECT_TREE:=$(MOD_SUBDIRS:%=%-menuselect-tree) ifneq ($(findstring darwin,$(OSARCH)),) _ASTCFLAGS+=-D__Darwin__ - _SOLINK=-Xlinker -macosx_version_min -Xlinker 10.4 -Xlinker -undefined -Xlinker dynamic_lookup -force_flat_namespace + _SOLINK=-Xlinker -macosx_version_min -Xlinker 10.4 -Xlinker -undefined -Xlinker dynamic_lookup ifeq ($(shell if test `/usr/bin/sw_vers -productVersion | cut -c4` -gt 5; then echo 6; else echo 0; fi),6) _SOLINK+=/usr/lib/bundle1.o endif @@ -268,6 +268,9 @@ else endif endif +# Include rpath settings +_ASTLDFLAGS+=$(AST_RPATH) + ifeq ($(OSARCH),SunOS) SOLINK=-shared -fpic -L/usr/local/ssl/lib -lrt DYLINK=$(SOLINK) diff --git a/UPGRADE-11.txt b/UPGRADE-11.txt index d565602d9a..de880408f8 100644 --- a/UPGRADE-11.txt +++ b/UPGRADE-11.txt @@ -20,6 +20,14 @@ === =========================================================== +From 11.2 to 11.3: + +* Now by default, when Asterisk is installed in a path other than /usr, the + Asterisk binary will search for shared libraries in ${libdir} in addition to + searching system libraries. This allows Asterisk to find its shared + libraries without having to specify LD_LIBRARY_PATH. This can be disabled by + passing --disable-rpath to configure. + From 10 to 11: Voicemail: diff --git a/UPGRADE.txt b/UPGRADE.txt index 2ba2ea9f29..3f6169ade6 100644 --- a/UPGRADE.txt +++ b/UPGRADE.txt @@ -21,7 +21,6 @@ === =========================================================== -From 11 to 12: AMI: - The SIP SIPqualifypeer action now sends a response indicating it will qualify diff --git a/configure b/configure index edbf19ca14..5abec2de7a 100755 --- a/configure +++ b/configure @@ -1,5 +1,5 @@ #! /bin/sh -# From configure.ac Revision: 377981 . +# From configure.ac Revision: 378915 . # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69 for asterisk trunk. # @@ -684,6 +684,7 @@ PBX_DLADDR PBX_IP_MTU_DISCOVER PBX_GLOB_BRACE PBX_GLOB_NOMAGIC +AST_RPATH AST_NESTED_FUNCTIONS AST_NATIVE_ARCH AST_SHADOW_WARNINGS @@ -1302,6 +1303,7 @@ enable_xmldoc enable_largefile enable_internal_poll enable_asteriskssl +enable_rpath ' ac_precious_vars='build_alias host_alias @@ -1946,6 +1948,7 @@ Optional Features: --disable-largefile omit support for large files --enable-internal-poll Use Asterisk's poll implementation --disable-asteriskssl Disable Asterisk's SSL wrapper library + --disable-rpath Disables rpath linker option checking Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] @@ -16394,6 +16397,45 @@ fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +# Check whether --enable-rpath was given. +if test "${enable_rpath+set}" = set; then : + enableval=$enable_rpath; case "${enableval}" in + y|ye|yes) check_rpath=yes ;; + n|no) check_rpath=no ;; + *) as_fn_error $? "bad value ${enableval} for --disable-rpath" "$LINENO" 5 ;; + esac +else + check_rpath=yes +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use rpath" >&5 +$as_echo_n "checking whether to use rpath... " >&6; } +AST_RPATH= +if test "${check_rpath}" != yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: skipped" >&5 +$as_echo "skipped" >&6; } +elif test "${prefix}" = /usr || test "${prefix}" = NONE; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not needed" >&5 +$as_echo "not needed" >&6; } +else + case "${host_os}" in + darwin*) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not supported" >&5 +$as_echo "not supported" >&6; } + # We set macosx_version_min to 10.4, which doesn't + # support rpath. However, we set install_name on our + # dylibs, so it's not strictly necessary. + ;; + *) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: required" >&5 +$as_echo "required" >&6; } + AST_RPATH="-Wl,-rpath,${libdir}" + ;; + esac +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysinfo" >&5 $as_echo_n "checking for sysinfo... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext diff --git a/configure.ac b/configure.ac index 536d4425f5..b5f4d29a2f 100644 --- a/configure.ac +++ b/configure.ac @@ -1054,6 +1054,38 @@ AC_COMPILE_IFELSE( ) AC_SUBST(AST_NESTED_FUNCTIONS) +dnl Check to see if rpath should be set in LDFLAGS +AC_ARG_ENABLE(rpath, + [AC_HELP_STRING([--disable-rpath], + [Disables rpath linker option checking])], + [case "${enableval}" in + y|ye|yes) check_rpath=yes ;; + n|no) check_rpath=no ;; + *) AC_MSG_ERROR(bad value ${enableval} for --disable-rpath) ;; + esac], [check_rpath=yes]) + +AC_MSG_CHECKING(whether to use rpath) +AST_RPATH= +if test "${check_rpath}" != yes; then + AC_MSG_RESULT(skipped) +elif test "${prefix}" = /usr || test "${prefix}" = NONE; then + AC_MSG_RESULT(not needed) +else + case "${host_os}" in + darwin*) + AC_MSG_RESULT(not supported) + # We set macosx_version_min to 10.4, which doesn't + # support rpath. However, we set install_name on our + # dylibs, so it's not strictly necessary. + ;; + *) + AC_MSG_RESULT(required) + AST_RPATH="-Wl,-rpath,${libdir}" + ;; + esac +fi +AC_SUBST(AST_RPATH) + AC_MSG_CHECKING(for sysinfo) AC_LINK_IFELSE( [AC_LANG_PROGRAM([#include ], diff --git a/main/Makefile b/main/Makefile index fbb885cf8c..5dec42e682 100644 --- a/main/Makefile +++ b/main/Makefile @@ -226,6 +226,9 @@ $(ASTSSL_LIB): $(ASTSSL_LIB).$(ASTSSL_SO_VERSION) else # Darwin ASTSSL_LIB:=libasteriskssl.dylib +# -install_name allows library to be found if installed somewhere other than +# /lib or /usr/lib +$(ASTSSL_LIB): _ASTLDFLAGS+=-dynamiclib -install_name $(ASTLIBDIR)/$(ASTSSL_LIB) $(ASTSSL_LIB): _ASTCFLAGS+=-fPIC -DAST_MODULE=\"asteriskssl\" $(ASTSSL_LIB): LIBS+=$(ASTSSL_LIBS) $(ASTSSL_LIB): SOLINK=$(DYLINK) diff --git a/makeopts.in b/makeopts.in index c10507fcb7..c0b043474b 100644 --- a/makeopts.in +++ b/makeopts.in @@ -108,6 +108,7 @@ AST_TRAMPOLINES=@AST_TRAMPOLINES@ AST_NO_STRICT_OVERFLOW=@AST_NO_STRICT_OVERFLOW@ AST_SHADOW_WARNINGS=@AST_SHADOW_WARNINGS@ AST_NESTED_FUNCTIONS=@AST_NESTED_FUNCTIONS@ +AST_RPATH=@AST_RPATH@ AST_FORTIFY_SOURCE=@AST_FORTIFY_SOURCE@ AST_MARCH_NATIVE=@AST_MARCH_NATIVE@