Blame m4/lib-ld.m4

Packit Service 4684c1
# lib-ld.m4 serial 9
Packit Service 4684c1
dnl Copyright (C) 1996-2003, 2009-2020 Free Software Foundation, Inc.
Packit Service 4684c1
dnl This file is free software; the Free Software Foundation
Packit Service 4684c1
dnl gives unlimited permission to copy and/or distribute it,
Packit Service 4684c1
dnl with or without modifications, as long as this notice is preserved.
Packit Service 4684c1
Packit Service 4684c1
dnl Subroutines of libtool.m4,
Packit Service 4684c1
dnl with replacements s/_*LT_PATH/AC_LIB_PROG/ and s/lt_/acl_/ to avoid
Packit Service 4684c1
dnl collision with libtool.m4.
Packit Service 4684c1
Packit Service 4684c1
dnl From libtool-2.4. Sets the variable with_gnu_ld to yes or no.
Packit Service 4684c1
AC_DEFUN([AC_LIB_PROG_LD_GNU],
Packit Service 4684c1
[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], [acl_cv_prog_gnu_ld],
Packit Service 4684c1
[# I'd rather use --version here, but apparently some GNU lds only accept -v.
Packit Service 4684c1
case `$LD -v 2>&1 
Packit Service 4684c1
*GNU* | *'with BFD'*)
Packit Service 4684c1
  acl_cv_prog_gnu_ld=yes
Packit Service 4684c1
  ;;
Packit Service 4684c1
*)
Packit Service 4684c1
  acl_cv_prog_gnu_ld=no
Packit Service 4684c1
  ;;
Packit Service 4684c1
esac])
Packit Service 4684c1
with_gnu_ld=$acl_cv_prog_gnu_ld
Packit Service 4684c1
])
Packit Service 4684c1
Packit Service 4684c1
dnl From libtool-2.4. Sets the variable LD.
Packit Service 4684c1
AC_DEFUN([AC_LIB_PROG_LD],
Packit Service 4684c1
[AC_REQUIRE([AC_PROG_CC])dnl
Packit Service 4684c1
AC_REQUIRE([AC_CANONICAL_HOST])dnl
Packit Service 4684c1
Packit Service 4684c1
AC_ARG_WITH([gnu-ld],
Packit Service 4684c1
    [AS_HELP_STRING([--with-gnu-ld],
Packit Service 4684c1
        [assume the C compiler uses GNU ld [default=no]])],
Packit Service 4684c1
    [test "$withval" = no || with_gnu_ld=yes],
Packit Service 4684c1
    [with_gnu_ld=no])dnl
Packit Service 4684c1
Packit Service 4684c1
# Prepare PATH_SEPARATOR.
Packit Service 4684c1
# The user is always right.
Packit Service 4684c1
if test "${PATH_SEPARATOR+set}" != set; then
Packit Service 4684c1
  # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which
Packit Service 4684c1
  # contains only /bin. Note that ksh looks also at the FPATH variable,
Packit Service 4684c1
  # so we have to set that as well for the test.
Packit Service 4684c1
  PATH_SEPARATOR=:
Packit Service 4684c1
  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \
Packit Service 4684c1
    && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \
Packit Service 4684c1
           || PATH_SEPARATOR=';'
Packit Service 4684c1
       }
Packit Service 4684c1
fi
Packit Service 4684c1
Packit Service 4684c1
if test -n "$LD"; then
Packit Service 4684c1
  AC_MSG_CHECKING([for ld])
Packit Service 4684c1
elif test "$GCC" = yes; then
Packit Service 4684c1
  AC_MSG_CHECKING([for ld used by $CC])
Packit Service 4684c1
elif test "$with_gnu_ld" = yes; then
Packit Service 4684c1
  AC_MSG_CHECKING([for GNU ld])
Packit Service 4684c1
else
Packit Service 4684c1
  AC_MSG_CHECKING([for non-GNU ld])
Packit Service 4684c1
fi
Packit Service 4684c1
if test -n "$LD"; then
Packit Service 4684c1
  # Let the user override the test with a path.
Packit Service 4684c1
  :
Packit Service 4684c1
else
Packit Service 4684c1
  AC_CACHE_VAL([acl_cv_path_LD],
Packit Service 4684c1
  [
Packit Service 4684c1
    acl_cv_path_LD= # Final result of this test
Packit Service 4684c1
    ac_prog=ld # Program to search in $PATH
Packit Service 4684c1
    if test "$GCC" = yes; then
Packit Service 4684c1
      # Check if gcc -print-prog-name=ld gives a path.
Packit Service 4684c1
      case $host in
Packit Service 4684c1
        *-*-mingw*)
Packit Service 4684c1
          # gcc leaves a trailing carriage return which upsets mingw
Packit Service 4684c1
          acl_output=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
Packit Service 4684c1
        *)
Packit Service 4684c1
          acl_output=`($CC -print-prog-name=ld) 2>&5` ;;
Packit Service 4684c1
      esac
Packit Service 4684c1
      case $acl_output in
Packit Service 4684c1
        # Accept absolute paths.
Packit Service 4684c1
        [[\\/]]* | ?:[[\\/]]*)
Packit Service 4684c1
          re_direlt='/[[^/]][[^/]]*/\.\./'
Packit Service 4684c1
          # Canonicalize the pathname of ld
Packit Service 4684c1
          acl_output=`echo "$acl_output" | sed 's%\\\\%/%g'`
Packit Service 4684c1
          while echo "$acl_output" | grep "$re_direlt" > /dev/null 2>&1; do
Packit Service 4684c1
            acl_output=`echo $acl_output | sed "s%$re_direlt%/%"`
Packit Service 4684c1
          done
Packit Service 4684c1
          # Got the pathname. No search in PATH is needed.
Packit Service 4684c1
          acl_cv_path_LD="$acl_output"
Packit Service 4684c1
          ac_prog=
Packit Service 4684c1
          ;;
Packit Service 4684c1
        "")
Packit Service 4684c1
          # If it fails, then pretend we aren't using GCC.
Packit Service 4684c1
          ;;
Packit Service 4684c1
        *)
Packit Service 4684c1
          # If it is relative, then search for the first ld in PATH.
Packit Service 4684c1
          with_gnu_ld=unknown
Packit Service 4684c1
          ;;
Packit Service 4684c1
      esac
Packit Service 4684c1
    fi
Packit Service 4684c1
    if test -n "$ac_prog"; then
Packit Service 4684c1
      # Search for $ac_prog in $PATH.
Packit Service 4684c1
      acl_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
Packit Service 4684c1
      for ac_dir in $PATH; do
Packit Service 4684c1
        IFS="$acl_save_ifs"
Packit Service 4684c1
        test -z "$ac_dir" && ac_dir=.
Packit Service 4684c1
        if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
Packit Service 4684c1
          acl_cv_path_LD="$ac_dir/$ac_prog"
Packit Service 4684c1
          # Check to see if the program is GNU ld.  I'd rather use --version,
Packit Service 4684c1
          # but apparently some variants of GNU ld only accept -v.
Packit Service 4684c1
          # Break only if it was the GNU/non-GNU ld that we prefer.
Packit Service 4684c1
          case `"$acl_cv_path_LD" -v 2>&1 
Packit Service 4684c1
            *GNU* | *'with BFD'*)
Packit Service 4684c1
              test "$with_gnu_ld" != no && break
Packit Service 4684c1
              ;;
Packit Service 4684c1
            *)
Packit Service 4684c1
              test "$with_gnu_ld" != yes && break
Packit Service 4684c1
              ;;
Packit Service 4684c1
          esac
Packit Service 4684c1
        fi
Packit Service 4684c1
      done
Packit Service 4684c1
      IFS="$acl_save_ifs"
Packit Service 4684c1
    fi
Packit Service 4684c1
    case $host in
Packit Service 4684c1
      *-*-aix*)
Packit Service 4684c1
        AC_COMPILE_IFELSE(
Packit Service 4684c1
          [AC_LANG_SOURCE(
Packit Service 4684c1
             [[#if defined __powerpc64__ || defined _ARCH_PPC64
Packit Service 4684c1
                int ok;
Packit Service 4684c1
               #else
Packit Service 4684c1
                error fail
Packit Service 4684c1
               #endif
Packit Service 4684c1
             ]])],
Packit Service 4684c1
          [# The compiler produces 64-bit code. Add option '-b64' so that the
Packit Service 4684c1
           # linker groks 64-bit object files.
Packit Service 4684c1
           case "$acl_cv_path_LD " in
Packit Service 4684c1
             *" -b64 "*) ;;
Packit Service 4684c1
             *) acl_cv_path_LD="$acl_cv_path_LD -b64" ;;
Packit Service 4684c1
           esac
Packit Service 4684c1
          ], [])
Packit Service 4684c1
        ;;
Packit Service 4684c1
      sparc64-*-netbsd*)
Packit Service 4684c1
        AC_COMPILE_IFELSE(
Packit Service 4684c1
          [AC_LANG_SOURCE(
Packit Service 4684c1
             [[#if defined __sparcv9 || defined __arch64__
Packit Service 4684c1
                int ok;
Packit Service 4684c1
               #else
Packit Service 4684c1
                error fail
Packit Service 4684c1
               #endif
Packit Service 4684c1
             ]])],
Packit Service 4684c1
          [],
Packit Service 4684c1
          [# The compiler produces 32-bit code. Add option '-m elf32_sparc'
Packit Service 4684c1
           # so that the linker groks 32-bit object files.
Packit Service 4684c1
           case "$acl_cv_path_LD " in
Packit Service 4684c1
             *" -m elf32_sparc "*) ;;
Packit Service 4684c1
             *) acl_cv_path_LD="$acl_cv_path_LD -m elf32_sparc" ;;
Packit Service 4684c1
           esac
Packit Service 4684c1
          ])
Packit Service 4684c1
        ;;
Packit Service 4684c1
    esac
Packit Service 4684c1
  ])
Packit Service 4684c1
  LD="$acl_cv_path_LD"
Packit Service 4684c1
fi
Packit Service 4684c1
if test -n "$LD"; then
Packit Service 4684c1
  AC_MSG_RESULT([$LD])
Packit Service 4684c1
else
Packit Service 4684c1
  AC_MSG_RESULT([no])
Packit Service 4684c1
  AC_MSG_ERROR([no acceptable ld found in \$PATH])
Packit Service 4684c1
fi
Packit Service 4684c1
AC_LIB_PROG_LD_GNU
Packit Service 4684c1
])