SXEmacs v22.1.16 is released!
[sxemacs] / m4 / sxe-linker.m4
index 7167593..aaef866 100644 (file)
@@ -1,13 +1,81 @@
 dnl sxe-linker.m4 -- Linker stuff, esp. dynamic linking
 dnl needed for emodules for one
 
+AC_DEFUN([SXE_CHECK_LINKER_FLAGS], [dnl
+dnl just like SXE_CHECK_COMPILER_FLAGS but calls the linker
+dnl SXE_CHECK_LINKER_FLAGS(<FLAG>, <ACTION-IF-FOUND>, <ACTION-IF-NOT-FOUND>,
+dnl     <ADDITIONAL-FLAGS>)
+       AC_MSG_CHECKING([whether linker accepts $1])
+
+       dnl Some hackery here since AC_CACHE_VAL can't handle a non-literal varname:
+       SXE_LANG_WERROR([push+on])
+       AS_LITERAL_IF([$1], [
+               AC_CACHE_VAL(AS_TR_SH(sxe_cv_[]_AC_LANG_ABBREV[]_flags_$1), [
+                       sxe_save_FLAGS=$[]_AC_LANG_PREFIX[]FLAGS
+                       _AC_LANG_PREFIX[]FLAGS="$4 ${XFLAG} $1"
+                       AC_LINK_IFELSE([AC_LANG_PROGRAM()],
+                               AS_TR_SH(sxe_cv_[]_AC_LANG_ABBREV[]_flags_$1)="yes",
+                               AS_TR_SH(sxe_cv_[]_AC_LANG_ABBREV[]_flags_$1)="no")
+                       _AC_LANG_PREFIX[]FLAGS=$sxe_save_FLAGS])], [
+               sxe_save_FLAGS=$[]_AC_LANG_PREFIX[]FLAGS
+               _AC_LANG_PREFIX[]FLAGS="$4 ${XFLAG} $1"
+               AC_LINK_IFELSE([AC_LANG_PROGRAM()],
+                       eval AS_TR_SH(sxe_cv_[]_AC_LANG_ABBREV[]_flags_$1)="yes",
+                       eval AS_TR_SH(sxe_cv_[]_AC_LANG_ABBREV[]_flags_$1)="no")
+               _AC_LANG_PREFIX[]FLAGS=$sxe_save_FLAGS])
+       eval sxe_check_linker_flags=$AS_TR_SH(sxe_cv_[]_AC_LANG_ABBREV[]_flags_$1)
+       SXE_LANG_WERROR([pop])
+
+       AC_MSG_RESULT([$sxe_check_linker_flags])
+       if test "$sxe_check_linker_flags" = "yes"; then
+               m4_default([$2], :)
+       else
+               m4_default([$3], :)
+       fi
+])dnl SXE_CHECK_LINKER_FLAGS
+
+AC_DEFUN([SXE_CHECK_LINK_LIB], [dnl
+dnl just like SXE_CHECK_LINKER_FLAGS but calls the linker with -l <LIB>
+dnl SXE_CHECK_LINK_LIB(<LIB>, <ACTION-IF-FOUND>, <ACTION-IF-NOT-FOUND>,
+dnl     <ADDITIONAL-FLAGS>)
+       AC_MSG_CHECKING([whether library $1 can be linked])
+
+       dnl Some hackery here since AC_CACHE_VAL can't handle a non-literal varname:
+       SXE_LANG_WERROR([push+on])
+       AS_LITERAL_IF([$1], [
+               AC_CACHE_VAL(AS_TR_SH(sxe_cv_[]_AC_LANG_ABBREV[]_flags_$1), [
+                       sxe_save_FLAGS=$[]_AC_LANG_PREFIX[]FLAGS
+                       _AC_LANG_PREFIX[]FLAGS="$4 ${XFLAG} -l$1"
+                       AC_LINK_IFELSE([AC_LANG_PROGRAM()],
+                               AS_TR_SH(sxe_cv_[]_AC_LANG_ABBREV[]_lib_$1)="yes",
+                               AS_TR_SH(sxe_cv_[]_AC_LANG_ABBREV[]_lib_$1)="no")
+                       _AC_LANG_PREFIX[]FLAGS=$sxe_save_FLAGS])], [
+               sxe_save_FLAGS=$[]_AC_LANG_PREFIX[]FLAGS
+               _AC_LANG_PREFIX[]FLAGS="$4 ${XFLAG} -l$1"
+               AC_LINK_IFELSE([AC_LANG_PROGRAM()],
+                       eval AS_TR_SH(sxe_cv_[]_AC_LANG_ABBREV[]_lib_$1)="yes",
+                       eval AS_TR_SH(sxe_cv_[]_AC_LANG_ABBREV[]_lib_$1)="no")
+               _AC_LANG_PREFIX[]FLAGS=$sxe_save_FLAGS])
+       eval sxe_check_linker_lib=$AS_TR_SH(sxe_cv_[]_AC_LANG_ABBREV[]_lib_$1)
+       SXE_LANG_WERROR([pop])
+
+       AC_MSG_RESULT([$sxe_check_linker_lib])
+       if test "$sxe_check_linker_lib" = "yes"; then
+               m4_default([$2], :)
+       else
+               m4_default([$3], :)
+       fi
+])dnl SXE_CHECK_LINK_LIB
 
 AC_DEFUN([SXE_CHECK_LD_ZFLAG], [dnl
        pushdef([LD_ZFLAG], [$1])
        pushdef([cv_zflag], [sxe_cv_ld__z_]translit(LD_ZFLAG,[-.=],[___]))
 
-       AC_CACHE_CHECK([whether linker supports -z ]LD_ZFLAG[],
-               []cv_zflag[], [_SXE_CHECK_LD_ZFLAG(LD_ZFLAG)])
+       SXE_CHECK_LINKER_FLAGS([-z ]LD_ZFLAG[])
+
+dnl Use the check that actually calls the compiler/linker to examine the flags
+dnl    AC_CACHE_CHECK([whether linker supports -z ]LD_ZFLAG[],
+dnl            []cv_zflag[], [_SXE_CHECK_LD_ZFLAG(LD_ZFLAG)])
 
        popdef([cv_zflag])
        popdef([LD_ZFLAG])
@@ -40,12 +108,9 @@ AC_DEFUN([_SXE_CHECK_LD_ZFLAG], [dnl
        popdef([LD_ZFLAG])
 ])dnl _SXE_CHECK_LD_ZFLAG
 
-AC_DEFUN([SXE_CHECK_LD_NOCOMBRELOC], [dnl
-       SXE_CHECK_LD_ZFLAG([nocombreloc])
-])dnl SXE_CHECK_LD_NOCOMBRELOC
+AC_DEFUN([SXE_CHECK_LDFLAGS], [dnl
+       AC_REQUIRE([SXE_CHECK_COMPILER_XFLAG])
 
-
-AC_DEFUN([SXE_CHECK_LINKER_FLAGS], [dnl
        ## relocation
        SXE_CHECK_LD_ZFLAG([combreloc])
        SXE_CHECK_LD_ZFLAG([nocombreloc])
@@ -57,7 +122,26 @@ AC_DEFUN([SXE_CHECK_LINKER_FLAGS], [dnl
        ## binding policy
        SXE_CHECK_LD_ZFLAG([lazy])
        SXE_CHECK_LD_ZFLAG([now])
-])dnl SXE_CHECK_LINKER_FLAGS
+
+       LDFLAGS="${ldflags} ${ac_cv_env_LDFLAGS_value}"
+       AC_MSG_CHECKING([for preferred LDFLAGS])
+       AC_MSG_RESULT([${LDFLAGS}])
+
+       AC_MSG_NOTICE([
+If you wish to ADD your own flags you want to stop here and rerun the
+configure script like so:
+  configure LDFLAGS=<to-be-added-flags>
+
+You can always override the determined LDFLAGS, partially or totally,
+using
+  make -C <directory> LDFLAGS=<your-own-flags> [target]
+or
+  make LDFLAGS=<your-own-flags> [target]
+respectively
+
+NOTE: -C <directory> option is not available on all systems
+               ])
+])dnl SXE_CHECK_LDFLAGS
 
 AC_DEFUN([SXE_PREPEND_LINKER_FLAG], [dnl
        ## a convenience function to add such linker flags to variables