Blame m4/lib-prefix.m4

Packit 8f70b4
# lib-prefix.m4 serial 11
Packit 8f70b4
dnl Copyright (C) 2001-2005, 2008-2018 Free Software Foundation, Inc.
Packit 8f70b4
dnl This file is free software; the Free Software Foundation
Packit 8f70b4
dnl gives unlimited permission to copy and/or distribute it,
Packit 8f70b4
dnl with or without modifications, as long as this notice is preserved.
Packit 8f70b4
Packit 8f70b4
dnl From Bruno Haible.
Packit 8f70b4
Packit 8f70b4
dnl AC_LIB_ARG_WITH is synonymous to AC_ARG_WITH in autoconf-2.13, and
Packit 8f70b4
dnl similar to AC_ARG_WITH in autoconf 2.52...2.57 except that is doesn't
Packit 8f70b4
dnl require excessive bracketing.
Packit 8f70b4
ifdef([AC_HELP_STRING],
Packit 8f70b4
[AC_DEFUN([AC_LIB_ARG_WITH], [AC_ARG_WITH([$1],[[$2]],[$3],[$4])])],
Packit 8f70b4
[AC_DEFUN([AC_][LIB_ARG_WITH], [AC_ARG_WITH([$1],[$2],[$3],[$4])])])
Packit 8f70b4
Packit 8f70b4
dnl AC_LIB_PREFIX adds to the CPPFLAGS and LDFLAGS the flags that are needed
Packit 8f70b4
dnl to access previously installed libraries. The basic assumption is that
Packit 8f70b4
dnl a user will want packages to use other packages he previously installed
Packit 8f70b4
dnl with the same --prefix option.
Packit 8f70b4
dnl This macro is not needed if only AC_LIB_LINKFLAGS is used to locate
Packit 8f70b4
dnl libraries, but is otherwise very convenient.
Packit 8f70b4
AC_DEFUN([AC_LIB_PREFIX],
Packit 8f70b4
[
Packit 8f70b4
  AC_BEFORE([$0], [AC_LIB_LINKFLAGS])
Packit 8f70b4
  AC_REQUIRE([AC_PROG_CC])
Packit 8f70b4
  AC_REQUIRE([AC_CANONICAL_HOST])
Packit 8f70b4
  AC_REQUIRE([AC_LIB_PREPARE_MULTILIB])
Packit 8f70b4
  AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
Packit 8f70b4
  dnl By default, look in $includedir and $libdir.
Packit 8f70b4
  use_additional=yes
Packit 8f70b4
  AC_LIB_WITH_FINAL_PREFIX([
Packit 8f70b4
    eval additional_includedir=\"$includedir\"
Packit 8f70b4
    eval additional_libdir=\"$libdir\"
Packit 8f70b4
  ])
Packit 8f70b4
  AC_LIB_ARG_WITH([lib-prefix],
Packit 8f70b4
[  --with-lib-prefix[=DIR] search for libraries in DIR/include and DIR/lib
Packit 8f70b4
  --without-lib-prefix    don't search for libraries in includedir and libdir],
Packit 8f70b4
[
Packit 8f70b4
    if test "X$withval" = "Xno"; then
Packit 8f70b4
      use_additional=no
Packit 8f70b4
    else
Packit 8f70b4
      if test "X$withval" = "X"; then
Packit 8f70b4
        AC_LIB_WITH_FINAL_PREFIX([
Packit 8f70b4
          eval additional_includedir=\"$includedir\"
Packit 8f70b4
          eval additional_libdir=\"$libdir\"
Packit 8f70b4
        ])
Packit 8f70b4
      else
Packit 8f70b4
        additional_includedir="$withval/include"
Packit 8f70b4
        additional_libdir="$withval/$acl_libdirstem"
Packit 8f70b4
      fi
Packit 8f70b4
    fi
Packit 8f70b4
])
Packit 8f70b4
  if test $use_additional = yes; then
Packit 8f70b4
    dnl Potentially add $additional_includedir to $CPPFLAGS.
Packit 8f70b4
    dnl But don't add it
Packit 8f70b4
    dnl   1. if it's the standard /usr/include,
Packit 8f70b4
    dnl   2. if it's already present in $CPPFLAGS,
Packit 8f70b4
    dnl   3. if it's /usr/local/include and we are using GCC on Linux,
Packit 8f70b4
    dnl   4. if it doesn't exist as a directory.
Packit 8f70b4
    if test "X$additional_includedir" != "X/usr/include"; then
Packit 8f70b4
      haveit=
Packit 8f70b4
      for x in $CPPFLAGS; do
Packit 8f70b4
        AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
Packit 8f70b4
        if test "X$x" = "X-I$additional_includedir"; then
Packit 8f70b4
          haveit=yes
Packit 8f70b4
          break
Packit 8f70b4
        fi
Packit 8f70b4
      done
Packit 8f70b4
      if test -z "$haveit"; then
Packit 8f70b4
        if test "X$additional_includedir" = "X/usr/local/include"; then
Packit 8f70b4
          if test -n "$GCC"; then
Packit 8f70b4
            case $host_os in
Packit 8f70b4
              linux* | gnu* | k*bsd*-gnu) haveit=yes;;
Packit 8f70b4
            esac
Packit 8f70b4
          fi
Packit 8f70b4
        fi
Packit 8f70b4
        if test -z "$haveit"; then
Packit 8f70b4
          if test -d "$additional_includedir"; then
Packit 8f70b4
            dnl Really add $additional_includedir to $CPPFLAGS.
Packit 8f70b4
            CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }-I$additional_includedir"
Packit 8f70b4
          fi
Packit 8f70b4
        fi
Packit 8f70b4
      fi
Packit 8f70b4
    fi
Packit 8f70b4
    dnl Potentially add $additional_libdir to $LDFLAGS.
Packit 8f70b4
    dnl But don't add it
Packit 8f70b4
    dnl   1. if it's the standard /usr/lib,
Packit 8f70b4
    dnl   2. if it's already present in $LDFLAGS,
Packit 8f70b4
    dnl   3. if it's /usr/local/lib and we are using GCC on Linux,
Packit 8f70b4
    dnl   4. if it doesn't exist as a directory.
Packit 8f70b4
    if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then
Packit 8f70b4
      haveit=
Packit 8f70b4
      for x in $LDFLAGS; do
Packit 8f70b4
        AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
Packit 8f70b4
        if test "X$x" = "X-L$additional_libdir"; then
Packit 8f70b4
          haveit=yes
Packit 8f70b4
          break
Packit 8f70b4
        fi
Packit 8f70b4
      done
Packit 8f70b4
      if test -z "$haveit"; then
Packit 8f70b4
        if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then
Packit 8f70b4
          if test -n "$GCC"; then
Packit 8f70b4
            case $host_os in
Packit 8f70b4
              linux*) haveit=yes;;
Packit 8f70b4
            esac
Packit 8f70b4
          fi
Packit 8f70b4
        fi
Packit 8f70b4
        if test -z "$haveit"; then
Packit 8f70b4
          if test -d "$additional_libdir"; then
Packit 8f70b4
            dnl Really add $additional_libdir to $LDFLAGS.
Packit 8f70b4
            LDFLAGS="${LDFLAGS}${LDFLAGS:+ }-L$additional_libdir"
Packit 8f70b4
          fi
Packit 8f70b4
        fi
Packit 8f70b4
      fi
Packit 8f70b4
    fi
Packit 8f70b4
  fi
Packit 8f70b4
])
Packit 8f70b4
Packit 8f70b4
dnl AC_LIB_PREPARE_PREFIX creates variables acl_final_prefix,
Packit 8f70b4
dnl acl_final_exec_prefix, containing the values to which $prefix and
Packit 8f70b4
dnl $exec_prefix will expand at the end of the configure script.
Packit 8f70b4
AC_DEFUN([AC_LIB_PREPARE_PREFIX],
Packit 8f70b4
[
Packit 8f70b4
  dnl Unfortunately, prefix and exec_prefix get only finally determined
Packit 8f70b4
  dnl at the end of configure.
Packit 8f70b4
  if test "X$prefix" = "XNONE"; then
Packit 8f70b4
    acl_final_prefix="$ac_default_prefix"
Packit 8f70b4
  else
Packit 8f70b4
    acl_final_prefix="$prefix"
Packit 8f70b4
  fi
Packit 8f70b4
  if test "X$exec_prefix" = "XNONE"; then
Packit 8f70b4
    acl_final_exec_prefix='${prefix}'
Packit 8f70b4
  else
Packit 8f70b4
    acl_final_exec_prefix="$exec_prefix"
Packit 8f70b4
  fi
Packit 8f70b4
  acl_save_prefix="$prefix"
Packit 8f70b4
  prefix="$acl_final_prefix"
Packit 8f70b4
  eval acl_final_exec_prefix=\"$acl_final_exec_prefix\"
Packit 8f70b4
  prefix="$acl_save_prefix"
Packit 8f70b4
])
Packit 8f70b4
Packit 8f70b4
dnl AC_LIB_WITH_FINAL_PREFIX([statement]) evaluates statement, with the
Packit 8f70b4
dnl variables prefix and exec_prefix bound to the values they will have
Packit 8f70b4
dnl at the end of the configure script.
Packit 8f70b4
AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX],
Packit 8f70b4
[
Packit 8f70b4
  acl_save_prefix="$prefix"
Packit 8f70b4
  prefix="$acl_final_prefix"
Packit 8f70b4
  acl_save_exec_prefix="$exec_prefix"
Packit 8f70b4
  exec_prefix="$acl_final_exec_prefix"
Packit 8f70b4
  $1
Packit 8f70b4
  exec_prefix="$acl_save_exec_prefix"
Packit 8f70b4
  prefix="$acl_save_prefix"
Packit 8f70b4
])
Packit 8f70b4
Packit 8f70b4
dnl AC_LIB_PREPARE_MULTILIB creates
Packit 8f70b4
dnl - a variable acl_libdirstem, containing the basename of the libdir, either
Packit 8f70b4
dnl   "lib" or "lib64" or "lib/64",
Packit 8f70b4
dnl - a variable acl_libdirstem2, as a secondary possible value for
Packit 8f70b4
dnl   acl_libdirstem, either the same as acl_libdirstem or "lib/sparcv9" or
Packit 8f70b4
dnl   "lib/amd64".
Packit 8f70b4
AC_DEFUN([AC_LIB_PREPARE_MULTILIB],
Packit 8f70b4
[
Packit 8f70b4
  dnl There is no formal standard regarding lib and lib64.
Packit 8f70b4
  dnl On glibc systems, the current practice is that on a system supporting
Packit 8f70b4
  dnl 32-bit and 64-bit instruction sets or ABIs, 64-bit libraries go under
Packit 8f70b4
  dnl $prefix/lib64 and 32-bit libraries go under $prefix/lib. We determine
Packit 8f70b4
  dnl the compiler's default mode by looking at the compiler's library search
Packit 8f70b4
  dnl path. If at least one of its elements ends in /lib64 or points to a
Packit 8f70b4
  dnl directory whose absolute pathname ends in /lib64, we assume a 64-bit ABI.
Packit 8f70b4
  dnl Otherwise we use the default, namely "lib".
Packit 8f70b4
  dnl On Solaris systems, the current practice is that on a system supporting
Packit 8f70b4
  dnl 32-bit and 64-bit instruction sets or ABIs, 64-bit libraries go under
Packit 8f70b4
  dnl $prefix/lib/64 (which is a symlink to either $prefix/lib/sparcv9 or
Packit 8f70b4
  dnl $prefix/lib/amd64) and 32-bit libraries go under $prefix/lib.
Packit 8f70b4
  AC_REQUIRE([AC_CANONICAL_HOST])
Packit 8f70b4
  AC_REQUIRE([gl_HOST_CPU_C_ABI])
Packit 8f70b4
  dnl Allow the user to override the result by setting acl_cv_libdirstems.
Packit 8f70b4
  AC_CACHE_CHECK([for the common suffixes of directories in the library search path],
Packit 8f70b4
    [acl_cv_libdirstems],
Packit 8f70b4
    [acl_libdirstem=lib
Packit 8f70b4
     acl_libdirstem2=
Packit 8f70b4
     case "$host_os" in
Packit 8f70b4
       solaris*)
Packit 8f70b4
         dnl See Solaris 10 Software Developer Collection > Solaris 64-bit Developer's Guide > The Development Environment
Packit 8f70b4
         dnl <https://docs.oracle.com/cd/E19253-01/816-5138/dev-env/index.html>.
Packit 8f70b4
         dnl "Portable Makefiles should refer to any library directories using the 64 symbolic link."
Packit 8f70b4
         dnl But we want to recognize the sparcv9 or amd64 subdirectory also if the
Packit 8f70b4
         dnl symlink is missing, so we set acl_libdirstem2 too.
Packit 8f70b4
         AC_CACHE_CHECK([for 64-bit host], [gl_cv_solaris_64bit],
Packit 8f70b4
           [AC_COMPILE_IFELSE(
Packit 8f70b4
              [AC_LANG_SOURCE(
Packit 8f70b4
                 [[#ifdef _LP64
Packit 8f70b4
                    int ok;
Packit 8f70b4
                   #else
Packit 8f70b4
                    error fail
Packit 8f70b4
                   #endif
Packit 8f70b4
                 ]])],
Packit 8f70b4
              [gl_cv_solaris_64bit=yes],
Packit 8f70b4
              [gl_cv_solaris_64bit=no])
Packit 8f70b4
           ])
Packit 8f70b4
         if test $gl_cv_solaris_64bit = yes; then
Packit 8f70b4
           acl_libdirstem=lib/64
Packit 8f70b4
           case "$host_cpu" in
Packit 8f70b4
             sparc*)        acl_libdirstem2=lib/sparcv9 ;;
Packit 8f70b4
             i*86 | x86_64) acl_libdirstem2=lib/amd64 ;;
Packit 8f70b4
           esac
Packit 8f70b4
         fi
Packit 8f70b4
         ;;
Packit 8f70b4
       *)
Packit 8f70b4
         dnl If $CC generates code for a 32-bit ABI, the libraries are
Packit 8f70b4
         dnl surely under $prefix/lib, not $prefix/lib64.
Packit 8f70b4
         case "$gl_cv_host_cpu_c_abi" in
Packit 8f70b4
           i386 | arm | armhf | arm64-ilp32 | hppa | ia64-ilp32 | mips | mipsn32 | powerpc | s390 | sparc)
Packit 8f70b4
             ;;
Packit 8f70b4
           *) # x86_64 | arm64 | hppa64 | ia64 | mips64 | powerpc64* | s390x | sparc64 | ...
Packit 8f70b4
             dnl The result is a property of the system. However, non-system
Packit 8f70b4
             dnl compilers sometimes have odd library search paths. Therefore
Packit 8f70b4
             dnl prefer asking /usr/bin/gcc, if available, rather than $CC.
Packit 8f70b4
             searchpath=`(if test -f /usr/bin/gcc \
Packit 8f70b4
                             && LC_ALL=C /usr/bin/gcc -print-search-dirs >/dev/null 2>/dev/null; then \
Packit 8f70b4
                            LC_ALL=C /usr/bin/gcc -print-search-dirs; \
Packit 8f70b4
                          else \
Packit 8f70b4
                            LC_ALL=C $CC -print-search-dirs; \
Packit 8f70b4
                          fi) 2>/dev/null \
Packit 8f70b4
                         | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'`
Packit 8f70b4
             if test -n "$searchpath"; then
Packit 8f70b4
               acl_save_IFS="${IFS= 	}"; IFS=":"
Packit 8f70b4
               for searchdir in $searchpath; do
Packit 8f70b4
                 if test -d "$searchdir"; then
Packit 8f70b4
                   case "$searchdir" in
Packit 8f70b4
                     */lib64/ | */lib64 ) acl_libdirstem=lib64 ;;
Packit 8f70b4
                     */../ | */.. )
Packit 8f70b4
                       # Better ignore directories of this form. They are misleading.
Packit 8f70b4
                       ;;
Packit 8f70b4
                     *) searchdir=`cd "$searchdir" && pwd`
Packit 8f70b4
                        case "$searchdir" in
Packit 8f70b4
                          */lib64 ) acl_libdirstem=lib64 ;;
Packit 8f70b4
                        esac ;;
Packit 8f70b4
                   esac
Packit 8f70b4
                 fi
Packit 8f70b4
               done
Packit 8f70b4
               IFS="$acl_save_IFS"
Packit 8f70b4
             fi
Packit 8f70b4
             ;;
Packit 8f70b4
         esac
Packit 8f70b4
         ;;
Packit 8f70b4
     esac
Packit 8f70b4
     test -n "$acl_libdirstem2" || acl_libdirstem2="$acl_libdirstem"
Packit 8f70b4
     acl_cv_libdirstems="$acl_libdirstem,$acl_libdirstem2"
Packit 8f70b4
    ])
Packit 8f70b4
  # Decompose acl_cv_libdirstems into acl_libdirstem and acl_libdirstem2.
Packit 8f70b4
  acl_libdirstem=`echo "$acl_cv_libdirstems" | sed -e 's/,.*//'`
Packit 8f70b4
  acl_libdirstem2=`echo "$acl_cv_libdirstems" | sed -e '/,/s/.*,//'`
Packit 8f70b4
])