Revert "Fix the fix, make pi a normal lisp var (Closes bug #176)"
[sxemacs] / m4 / sxe-linker.m4
index 8b30b05..aaef866 100644 (file)
 dnl sxe-linker.m4 -- Linker stuff, esp. dynamic linking
 dnl needed for emodules for one
 
-dnl that's a too fucking long thing, split it!
-AC_DEFUN([SXE_SHLIB_STUFF],[
-dll_ld=
-dll_ldflags=
-dll_cflags=
-dll_post=
-dll_ldo="-o"
-ld_dynamic_link_flags=
-xehost=$ac_cv_build
-xealias=$ac_cv_build_alias
-
-AC_MSG_CHECKING([how to build dynamic libraries for ${xehost}])
-AC_MSG_RESULT([])
-# Transform *-*-linux* to *-*-linux-gnu*, to support old configure scripts.
-case "$xehost" in
-*-*-linux-gnu*) ;;
-*-*-linux*) xehost=`echo $xehost | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'`
-esac
-
-xehost_cpu=`echo $xehost | sed 's/^\([[^-]]*\)-\([[^-]]*\)-\(.*\)$/\1/'`
-xehost_vendor=`echo $xehost | sed 's/^\([[^-]]*\)-\([[^-]]*\)-\(.*\)$/\2/'`
-xehost_os=`echo $xehost | sed 's/^\([[^-]]*\)-\([[^-]]*\)-\(.*\)$/\3/'`
-
-case "$xehost_os" in
-aix3*)
-  # AIX sometimes has problems with the GCC collect2 program.  For some
-  # reason, if we set the COLLECT_NAMES environment variable, the problems
-  # vanish in a puff of smoke.
-  if test "${COLLECT_NAMES+set}" != set; then
-    COLLECT_NAMES=
-    export COLLECT_NAMES
-  fi
-  ;;
-esac
-
-# Now see if the compiler is really GCC.
-if test "$GCC" = "yes"; then
-  XEGCC=yes
-else
-  AC_MSG_CHECKING([whether we are using GNU C])
-  AC_EGREP_CPP(yes,[
-#ifdef __GNUC__
-  yes;
-#endif
-],XEGCC=yes, XEGCC=no)
-  AC_MSG_RESULT([${XEGCC}])
-fi
-
-AC_MSG_CHECKING([how to produce PIC code])
-wl=
-
-can_build_shared=yes
-if test "$XEGCC" = yes -o "$__ICC" = yes; then
-  wl='-Wl,'
-
-  case "$xehost_os" in
-  aix[[3-9]]* | irix[[5-9]]* | osf[[3-9]])
-    # PIC is the default for these OSes.
-    ;;
-
-  *darwin*) dll_cflags='-dynamic'
-    ;;
-
-  os2*)
-    # We can build DLLs from non-PIC.
-    ;;
-  amigaos*)
-    # FIXME: we need at least 68020 code to build shared libraries, but
-    # adding the `-m68020' flag to GCC prevents building anything better,
-    # like `-m68040'.
-    dll_cflags='-m68020 -resident32 -malways-restore-a4'
-    ;;
-  *)
-    dll_cflags='-fPIC'
-    ;;
-  esac
-else
-  # PORTME Check for PIC flags for the system compiler.
-  case "$xehost_os" in
-  hpux9* | hpux1[[0-9]]*)
-    # Is there a better link_static_flag that works with the bundled CC?
-    wl='-Wl,'
-    dll_cflags='+Z'
-    ;;
-
-  irix[[5-9]]*)
-    wl='-Wl,'
-    # PIC (with -KPIC) is the default.
-    ;;
-
-  os2*)
-    # We can build DLLs from non-PIC.
-    ;;
-
-  osf[[3-9]]*)
-    # All OSF/1 code is PIC.
-    wl='-Wl,'
-    ;;
-
-  aix[[3-9]]*)
-    # All AIX code is PIC.
-    wl='-Wl,'
-    ;;
-
-  sco3.2v5*)
-    dll_cflags='-belf -Kpic'
-    wl='-Wl,'
-    ;;
-
-  unixware*)
-    dll_cflags="-KPIC"
-    wl="-Wl,"
-    ;;
-
-  sysv4*)
-    dll_cflags="-KPIC"
-    wl="-Wl,"
-    ;;
-
-  sysv5*)
-    dll_cflags="-KPIC"
-    wl="-Wl,"
-    ;;
-
-  solaris2*)
-    dll_cflags='-KPIC'
-    wl='-Wl,'
-    ;;
-
-  sunos4*)
-    dll_cflags='-PIC'
-    wl='-Qoption ld '
-    ;;
-
-  uts4*)
-    dll_cflags='-pic'
-    ;;
-
-  *)
-    can_build_shared=no
-    ;;
-  esac
-fi
-
-if test -n "$dll_cflags"; then
-  AC_MSG_RESULT([${dll_cflags}])
-
-  # Check to make sure the dll_cflags actually works.
-  AC_MSG_CHECKING([if PIC flag ${dll_cflags} really works])
-  save_CFLAGS="$CFLAGS"
-  CFLAGS="$CFLAGS $dll_cflags -DPIC"
-  AC_COMPILE_IFELSE([AC_LANG_SOURCE([[int x=0;]])],[
-    # On HP-UX, the stripped-down bundled CC doesn't accept +Z, but also
-    # reports no error.  So, we need to grep stderr for (Bundled).
-    if grep '(Bundled)' config.log >/dev/null; then
-      AC_MSG_RESULT(no)
-      can_build_shared=no
-      dll_cflags=
-    else
-      AC_MSG_RESULT(yes)
-    fi], [AC_MSG_RESULT(no)
-    can_build_shared=no
-    dll_cflags=])
-  CFLAGS="$save_CFLAGS"
-else
-  AC_MSG_RESULT(none)
-fi
-
-dnl
-dnl Now comes the LD trickery. We do things differently to libtool here.
-dnl I believe that libtool is incorrect in trying to drive the linker
-dnl directly. This can cause considerable problems if the module you are
-dnl compiling has C++ or other static initializers. If we use ld directly,
-dnl we don't end up with the crt stuff being linked in, and we don't end up
-dnl with any .init or .fini sections (or the moral equivalent thereof).
-dnl gcc takes great care to do this properly when invoked in -shared
-dnl mode, and we really do want this behavior. Perhaps the libtool folks
-dnl are not aware that any SVR4 based dynamic loader will automatically
-dnl execute code in the .init section before dlopen() returns. This is
-dnl vital, as the module may have been compiled to rely on that behavior.
-dnl
-dnl So, having said all of that, we diverge from libtool significantly
-dnl here. We want to try and use the C compiler as much as possible. Only
-dnl if the C compiler itself cannot create shared libraries do we try to
-dnl find the linker.
-dnl
-dnl The other advantage to my scheme is that it removes the dependancy
-dnl on a given compiler version remaining static with relation to the
-dnl version of XEmacs. With the libtool way, it picks up the linker that
-dnl gcc uses, which can be the internal collect2 that comes with gcc.
-dnl If the user ever changes their compiler version, the paths will no
-dnl longer be correct, and ellcc will break. This is clearly unacceptable.
-dnl By using the compiler driver on the path, we don't have this problem.
-dnl If that is not clear, consider that gcc -print-prog-name=ld can
-dnl produce something along the lines of:
-dnl   /usr/local/lib/gcc-lib/OS-NAME/GCC-VERSION/ld
-dnl If you ever change GCC versions, then that path no longer exists.
-dnl
-dnl So, we change the check order here. We first check to see if we are
-dnl using GCC, and if so, we see if -shared works. If it does, great.
-dnl If we are not using gcc, but the system C compiler can produce
-dnl shared objects, we try that. Only if all of that fails do we revert
-dnl back to the libtool ld trickery.
-dnl
-dnl We don't do ANY of this if we can't produce shared objects.
-dnl
-if test "$can_build_shared" = "yes"; then
-cc_produces_so=no
-xldf=
-xcldf=
-AC_MSG_CHECKING([if C compiler can produce shared libraries])
-if test "$XEGCC" = "yes" -o "$__ICC" = "yes"; then
-       case "$xehost_os" in
-       *darwin*)
-               xcldf='-bundle'
-               xldf='-bundle -undefined suppress -flat_namespace'
-               ;;
-       *)
-               xcldf="-shared"
-               xldf="-shared"
-               ;;
-       esac
-else # Not using GCC
-       case "$xehost_os" in
-       aix[[3-9]]*)
-               xldf="-bE:ELLSONAME.exp -H512 -T512 -bhalt:4 -bM:SRE -bnoentry -lc"
-               xcldf="${wl}-bE:ELLSONAME.exp ${wl}-H512 ${wl}-T512 ${wl}-bhalt:4 ${wl}-bM:SRE ${wl}-bnoentry ${wl}-lc"
-               ;;
-
-       freebsd2* | netbsd* | openbsd*)
-               xldf="-Bshareable"
-               xcldf="${wl}-Bshareable"
-               ;;
-
-       freebsd3*)
-               xcldf="-shared"
-               ;;
-
-       hpux*)
-               xldf="-b +s"
-               xcldf="${wl}-b ${wl}+s"
-               ;;
-
-       irix[[5-9]]* | osf[[3-9]]*)
-               xcldf="${wl}-shared"
-               xldf="-shared"
-               ;;
-
-       sco3.2v5* | unixware* | sysv5* | sysv4* | solaris2* | solaris7* | uts4*)
-               xcldf="-G"
-               xldf="-G"
-               ;;
-
-       sunos4*)
-               xcldf="${wl}-assert ${wl}pure-text ${wl}-Bstatic"
-               xldf="-assert pure-text -Bstatic"
-               ;;
-       esac
-fi # End if if we are using gcc
-
-if test -n "$xcldf"; then
-       SXE_DUMP_LIBS
-       LDFLAGS="$xcldf $LDFLAGS"
-       LIBS=
-dnl    xe_libs=
-dnl    ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS '"$xe_cppflags $xe_ldflags"' conftest.$ac_ext '"$xe_libs"' 1>&AS_MESSAGE_LOG_FD'
-       AC_LINK_IFELSE([AC_LANG_SOURCE([[int x=0;]])],
-               [cc_produces_so=yes], [cc_produces_so=no])
-       SXE_RESTORE_LIBS
-dnl    ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS '"$xe_cppflags $xe_ldflags"' conftest.$ac_ext '"$xe_libs"' 1>&AS_MESSAGE_LOG_FD'
-       :
-else
-       cc_produces_so=no
-fi
-AC_MSG_RESULT([${cc_produces_so}])
-
-LTLD=$LD
-if test -z "$LTLD"; then
-  ac_prog=ld
-  if test "$XEGCC" = yes; then
-    # Check if gcc -print-prog-name=ld gives a path.
-    AC_MSG_CHECKING([for ld used by GCC])
-    ac_prog=`($CC -print-prog-name=ld) 2>&5`
-    case "$ac_prog" in
-    # Accept absolute paths.
-    /*)
-      if test -z "$LTLD"; then
-#        case "$ac_prog" in
-#          *gcc-lib*) LTLD="$CC"
-#                     ;;
-#          *)
-         LTLD="$ac_prog"
-#                     ;;
-#        esac
-      fi
-      ;;
-    "")
-      # If it fails, then pretend we aren't using GCC.
-      ac_prog=ld
-      ;;
-    *)
-      # If it is relative, then search for the first ld in PATH.
-      with_gnu_ld=unknown
-      ;;
-    esac
-  else
-    AC_MSG_CHECKING([for GNU ld])
-  fi
-
-  if test -z "$LTLD"; then
-    IFS="${IFS=        }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
-    for ac_dir in $PATH; do
-      test -z "$ac_dir" && ac_dir=.
-      if test -f "$ac_dir/$ac_prog"; then
-        LTLD="$ac_dir/$ac_prog"
-        # Check to see if the program is GNU ld.  I'd rather use --version,
-        # but apparently some GNU ld's only accept -v.
-        # Break only if it was the GNU/non-GNU ld that we prefer.
-        if "$LTLD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then
-          xe_gnu_ld=yes
-        else
-          xe_gnu_ld=no
-        fi
-      fi
-    done
-    IFS="$ac_save_ifs"
-  fi
-
-  if test -n "$LTLD"; then
-    AC_MSG_RESULT([${LTLD}])
-  else
-    AC_MSG_RESULT(no)
-  fi
-
-  if test -z "$LTLD" -a "$cc_produces_so" = no; then
-    AC_MSG_ERROR(no acceptable linker found in \$PATH)
-    exit 1
-  fi
-fi
-
-dnl
-dnl Order of the tests changed somewhat to prevent repetition
-dnl
-ld_dynamic_link_flags=
-
-# Check to see if it really is or isn't GNU ld.
-AC_MSG_CHECKING([if the linker is GNU ld])
-# I'd rather use --version here, but apparently some GNU ld's only accept -v.
-if $LTLD -v 2>&1 </dev/null | egrep '(GNU|with BFD)' 1>&5; then
-  xe_gnu_ld=yes
-else
-  xe_gnu_ld=no
-fi
-AC_MSG_RESULT([${xe_gnu_ld}])
-
-case "$xehost_os" in
-  amigaos* | sunos4*)
-    # On these operating systems, we should treat GNU ld like the system ld.
-    gnu_ld_acts_native=yes
-    ;;
-  *)
-    gnu_ld_acts_native=no
-    ;;
-esac
-
-if test "$cc_produces_so" = "yes"; then
-  dll_ld=$CC
-  case "$xehost_os" in
-    *darwin*)
-      dnl On Darwin, we test with xcldf, but we use xldf
-      dll_ldflags=$xldf 
-      ;;
-    *) 
-      dll_ldflags=$xcldf
-      ;;
-  esac
-  can_build_shared=yes
-  ld_shlibs=yes
-else
-  # OK - only NOW do we futz about with ld.
-  # See if the linker supports building shared libraries.
-  AC_MSG_CHECKING([whether the linker supports shared libraries])
-  dll_ld=$CC
-  dll_ldflags=$LDFLAGS
-  ld_shlibs=yes
-  can_build_shared=yes
-  if test "$xe_gnu_ld" = yes && test "$gnu_ld_acts_native" != yes; then
-    # See if GNU ld supports shared libraries.
-    if $LTLD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
-      dll_ld=$CC
-      dll_ldflags="-shared"
-      ld_shlibs=yes
-    else
-      ld_shlibs=no
-    fi
-  else
-    # PORTME fill in a description of your system's linker (not GNU ld)
-    case "$xehost_os" in
-    aix3*)
-      dll_ld=$LTLD
-      dll_ldflags=$xldf
-      ;;
-
-    aix[[4-9]]*)
-      dll_ldflags=$xcldf
-      ;;
-
-    # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
-    # support.  Future versions do this automatically, but an explicit c++rt0.o
-    # doesn't break anything, and helps significantly (at the cost of a little
-    # extra space).
-    freebsd2.2*)
-      dll_ld=$LTLD
-      dll_ldflags=$xldf
-      dll_post="/usr/lib/c++rt0.o"
-      ;;
-
-    # Unfortunately, older versions of FreeBSD 2 don't have this feature.
-    freebsd2*)
-      dll_ld=$LTLD
-      dll_ldflags="-Bshareable"
-      ;;
-
-    # FreeBSD 3, at last, uses gcc -shared to do shared libraries.
-    freebsd3*)
-      dll_ldflags="-shared"
-      ;;
-
-    hpux*)
-      dll_ld=$LTLD
-      dll_ldflags=$xldf
-      ;;
-
-    irix[[5-9]]*)
-      dll_ld=$LTLD
-      dll_ldflags=$xldf
-      ;;
-
-    netbsd*)
-      # Tested with NetBSD 1.2 ld
-      dll_ld=$LTLD
-      dll_ldflags=$xldf
-      ;;
-
-    openbsd*)
-      dll_ld=$LTLD
-      dll_ldflags=$xldf
-      ;;
-
-    osf3* | osf4*)
-      dll_ld=$LTLD
-      dll_ldflags=$xldf
-      ;;
-
-    # For both SCO and Solaris we MAY want to have LDFLAGS include -z text
-    sco3.2v5* | unixware* | sysv5* | sysv4* | solaris2* | solaris7*)
-      dll_ld=$LTLD
-      case "$dll_ld" in
-        *gcc*) dll_ldflags="-shared"
-               dll_ld=$CC
-               ;;
-        *)     dll_ldflags="-G"
-               ;;
-      esac
-      ;;
-
-    sunos4*)
-      if test "$XEGCC" = yes; then
-        dll_ld=$CC
-      else
-        dll_ld=$LTLD
-      fi
-      dll_ldflags=$xldf
-      ;;
-
-    uts4*)
-      dll_ld=$LTLD
-      dll_ldflags="-G"
-      ;;
-
-    bsdi*)
-      dll_ldflags="-r"
-      dll_ld="shlicc2"
-      ;;
-
-    *)
-      ld_shlibs=no
-      can_build_shared=no
-      ;;
-    esac
-  fi
-  AC_MSG_RESULT([${ld_shlibs}])
-  if test "$ld_shlibs" = "no"; then
-    can_build_shared=no
-  fi
-fi # End of if cc_produces_so = no
-
-dnl
-dnl Last thing, check how to get a linked executable to have its symbols
-dnl exported, so that the modules have access to them.
-dnl
-dnl XEmacs FIXME - we need to set ld_dynamic_link_flags properly for
-dnl most of these systems, which was missing from libtool. I know they
-dnl all have a way of doing this, but someone needs to look at this
-dnl for each OS and make sure it is correct. Remember that the arguments
-dnl are passed when temacs is linked, this is NOT for modules. The sole
-dnl purpose of the argument is to get the internal XEmacs symbols exposed
-dnl for modules to use. This means that the COMPILER (and NOT the linker)
-dnl is most often used to create temacs, so arguments to the linker will
-dnl usually need to be prefix with ${wl} or some other such thing.
-dnl
-
-if test "$xe_gnu_ld" = yes; then
-  if test "$ld_shlibs" = yes; then
-    ld_dynamic_link_flags="${wl}-export-dynamic"
-  fi
-fi
-
-if test -z "$ld_dynamic_link_flags"; then
-  case "$xehost_os" in
-  aix[[3-9]]*)
-    ld_dynamic_link_flags=
-    ;;
-
-  *darwin*)
-    ld_dynamic_link_flags=
-    ;;
-
-  freebsd2.2*)
-    ld_dynamic_link_flags=
-    ;;
-
-  freebsd2*)
-    ld_dynamic_link_flags=
-    ;;
-
-  freebsd3*)
-    ld_dynamic_link_flags=
-    ;;
-
-  hpux*)
-    ld_dynamic_link_flags="${wl}-E"
-    ;;
-
-  irix[[5-9]]*)
-    ld_dynamic_link_flags=
-    ;;
-
-  netbsd*)
-    ld_dynamic_link_flags=
-    ;;
-
-  openbsd*)
-    ld_dynamic_link_flags=
-    ;;
-
-  osf3* | osf4*)
-    ld_dynamic_link_flags=
-    ;;
-
-  solaris2* | solaris7*)
-    ld_dynamic_link_flags=
-    ;;
-
-  sco3.2v5* | unixware* | sysv5* | sysv4*)
-    ld_dynamic_link_flags="${wl}-Bexport"
-    ;;
-
-  sunos4*)
-    ld_dynamic_link_flags=
-    ;;
-
-  uts4*)
-    ld_dynamic_link_flags=
-    ;;
-
-  bsdi*)
-    ld_dynamic_link_flags=
-    ;;
-
-  esac
-fi # End of if -z ld_dynamic_link_flags
-fi # End of if test "$can_build_shared" = "yes"
-
-AC_SUBST(dll_ld)
-AC_SUBST(dll_cflags)
-AC_SUBST(dll_ldflags)
-AC_SUBST(dll_post)
-AC_SUBST(dll_ldo)
-AC_SUBST(ld_dynamic_link_flags)
-])dnl SXE_SHLIB_STUFF
+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])
@@ -632,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])
@@ -649,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