Blame m4/lib-prefix.m4

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