summaryrefslogtreecommitdiffstats
path: root/m4macros/ax_isc_rpath.m4
diff options
context:
space:
mode:
Diffstat (limited to 'm4macros/ax_isc_rpath.m4')
-rw-r--r--m4macros/ax_isc_rpath.m464
1 files changed, 64 insertions, 0 deletions
diff --git a/m4macros/ax_isc_rpath.m4 b/m4macros/ax_isc_rpath.m4
new file mode 100644
index 0000000..cae89b9
--- /dev/null
+++ b/m4macros/ax_isc_rpath.m4
@@ -0,0 +1,64 @@
+dnl @synopsis AX_ISC_RPATH
+dnl
+dnl @summary figure out whether and which "rpath" linker option is available
+dnl
+dnl This macro checks if the linker supports an option to embed a path
+dnl to a runtime library (often installed in an uncommon place), such as the
+dnl commonly used -R option. If found, it sets the ISC_RPATH_FLAG variable to
+dnl the found option flag. The main configure.ac can use it as follows:
+dnl if test "x$ISC_RPATH_FLAG" != "x"; then
+dnl LDFLAGS="$LDFLAGS ${ISC_RPATH_FLAG}/usr/local/lib/some_library"
+dnl fi
+dnl
+dnl If you pass --disable-rpath to configure, ISC_RPATH_FLAG is not set
+
+AC_DEFUN([AX_ISC_RPATH], [
+
+AC_ARG_ENABLE(rpath,
+ [AS_HELP_STRING([--disable-rpath],[don't hardcode library path into binaries])],
+ rpath=$enableval, rpath=yes)
+
+if test x$rpath != xno; then
+ # We'll tweak both CXXFLAGS and CCFLAGS so this function will work
+ # whichever language is used in the main script. Note also that it's not
+ #LDFLAGS; technically this is a linker flag, but we've noticed $LDFLAGS
+ # can be placed where the compiler could interpret it as a compiler
+ # option, leading to subtle failure mode. So, in the check below using
+ # the compiler flag is safer (in the actual Makefiles the flag should be
+ # set in LDFLAGS).
+ CXXFLAGS_SAVED="$CXXFLAGS"
+ CXXFLAGS="$CXXFLAGS -Wl,-R/usr/lib"
+ CCFLAGS_SAVED="$CCFLAGS"
+ CCFLAGS="$CCFLAGS -Wl,-R/usr/lib"
+
+ # check -Wl,-R and -R rather than gcc specific -rpath to be as portable
+ # as possible. -Wl,-R seems to be safer, so we try it first. In some
+ # cases -R is not actually recognized but AC_LINK_IFELSE doesn't fail due
+ # to that.
+ AC_MSG_CHECKING([whether -Wl,-R flag is available in linker])
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
+ [AC_MSG_RESULT(yes)
+ ISC_RPATH_FLAG=-Wl,-R
+ ],
+ [AC_MSG_RESULT(no)
+ AC_MSG_CHECKING([whether -R flag is available in linker])
+
+ # Apple clang 5.1 is now considers unknown parameters
+ # passed to linker (ld) as errors. However, the same
+ # unknown parameters passed to compiler (g++) are merely
+ # treated as warnings. To make sure that we pick those
+ # up, is to use -Werror.
+ CXXFLAGS="$CXXFLAGS_SAVED -R/usr/lib"
+ CCFLAGS="$CCFLAGS_SAVED -R/usr/lib"
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
+ [AC_MSG_RESULT([yes; note that -R is more sensitive about the position in option arguments])
+ ISC_RPATH_FLAG=-R],
+ [AC_MSG_RESULT(no)])
+ ]
+ )
+
+ CXXFLAGS=$CXXFLAGS_SAVED
+ CCFLAGS=$CCFLAGS_SAVED
+fi
+
+])dnl AX_ISC_RPATH