| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551 | # lib-link.m4 serial 4 (gettext-0.12)dnl Copyright (C) 2001-2003 Free Software Foundation, Inc.dnl This file is free software, distributed under the terms of the GNUdnl General Public License.  As a special exception to the GNU Generaldnl Public License, this file may be distributed as part of a programdnl that contains a configuration script generated by Autoconf, underdnl the same distribution terms as the rest of that program.dnl From Bruno Haible.dnl AC_LIB_LINKFLAGS(name [, dependencies]) searches for libname anddnl the libraries corresponding to explicit and implicit dependencies.dnl Sets and AC_SUBSTs the LIB${NAME} and LTLIB${NAME} variables anddnl augments the CPPFLAGS variable.AC_DEFUN([AC_LIB_LINKFLAGS],[  AC_REQUIRE([AC_LIB_PREPARE_PREFIX])  AC_REQUIRE([AC_LIB_RPATH])  define([Name],[translit([$1],[./-], [___])])  define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],                               [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])  AC_CACHE_CHECK([how to link with lib[]$1], [ac_cv_lib[]Name[]_libs], [    AC_LIB_LINKFLAGS_BODY([$1], [$2])    ac_cv_lib[]Name[]_libs="$LIB[]NAME"    ac_cv_lib[]Name[]_ltlibs="$LTLIB[]NAME"    ac_cv_lib[]Name[]_cppflags="$INC[]NAME"  ])  LIB[]NAME="$ac_cv_lib[]Name[]_libs"  LTLIB[]NAME="$ac_cv_lib[]Name[]_ltlibs"  INC[]NAME="$ac_cv_lib[]Name[]_cppflags"  AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME)  AC_SUBST([LIB]NAME)  AC_SUBST([LTLIB]NAME)  dnl Also set HAVE_LIB[]NAME so that AC_LIB_HAVE_LINKFLAGS can reuse the  dnl results of this search when this library appears as a dependency.  HAVE_LIB[]NAME=yes  undefine([Name])  undefine([NAME])])dnl AC_LIB_HAVE_LINKFLAGS(name, dependencies, includes, testcode)dnl searches for libname and the libraries corresponding to explicit anddnl implicit dependencies, together with the specified include files anddnl the ability to compile and link the specified testcode. If found, itdnl sets and AC_SUBSTs HAVE_LIB${NAME}=yes and the LIB${NAME} anddnl LTLIB${NAME} variables and augments the CPPFLAGS variable, anddnl #defines HAVE_LIB${NAME} to 1. Otherwise, it sets and AC_SUBSTsdnl HAVE_LIB${NAME}=no and LIB${NAME} and LTLIB${NAME} to empty.AC_DEFUN([AC_LIB_HAVE_LINKFLAGS],[  AC_REQUIRE([AC_LIB_PREPARE_PREFIX])  AC_REQUIRE([AC_LIB_RPATH])  define([Name],[translit([$1],[./-], [___])])  define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],                               [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])  dnl Search for lib[]Name and define LIB[]NAME, LTLIB[]NAME and INC[]NAME  dnl accordingly.  AC_LIB_LINKFLAGS_BODY([$1], [$2])  dnl Add $INC[]NAME to CPPFLAGS before performing the following checks,  dnl because if the user has installed lib[]Name and not disabled its use  dnl via --without-lib[]Name-prefix, he wants to use it.  ac_save_CPPFLAGS="$CPPFLAGS"  AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME)  AC_CACHE_CHECK([for lib[]$1], [ac_cv_lib[]Name], [    ac_save_LIBS="$LIBS"    LIBS="$LIBS $LIB[]NAME"    AC_TRY_LINK([$3], [$4], [ac_cv_lib[]Name=yes], [ac_cv_lib[]Name=no])    LIBS="$ac_save_LIBS"  ])  if test "$ac_cv_lib[]Name" = yes; then    HAVE_LIB[]NAME=yes    AC_DEFINE([HAVE_LIB]NAME, 1, [Define if you have the $1 library.])    AC_MSG_CHECKING([how to link with lib[]$1])    AC_MSG_RESULT([$LIB[]NAME])  else    HAVE_LIB[]NAME=no    dnl If $LIB[]NAME didn't lead to a usable library, we don't need    dnl $INC[]NAME either.    CPPFLAGS="$ac_save_CPPFLAGS"    LIB[]NAME=    LTLIB[]NAME=  fi  AC_SUBST([HAVE_LIB]NAME)  AC_SUBST([LIB]NAME)  AC_SUBST([LTLIB]NAME)  undefine([Name])  undefine([NAME])])dnl Determine the platform dependent parameters needed to use rpath:dnl libext, shlibext, hardcode_libdir_flag_spec, hardcode_libdir_separator,dnl hardcode_direct, hardcode_minus_L.AC_DEFUN([AC_LIB_RPATH],[  AC_REQUIRE([AC_PROG_CC])                dnl we use $CC, $GCC, $LDFLAGS  AC_REQUIRE([AC_LIB_PROG_LD])            dnl we use $LD, $with_gnu_ld  AC_REQUIRE([AC_CANONICAL_HOST])         dnl we use $host  AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) dnl we use $ac_aux_dir  AC_CACHE_CHECK([for shared library run path origin], acl_cv_rpath, [    CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \    ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh    . ./conftest.sh    rm -f ./conftest.sh    acl_cv_rpath=done  ])  wl="$acl_cv_wl"  libext="$acl_cv_libext"  shlibext="$acl_cv_shlibext"  hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec"  hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator"  hardcode_direct="$acl_cv_hardcode_direct"  hardcode_minus_L="$acl_cv_hardcode_minus_L"  dnl Determine whether the user wants rpath handling at all.  AC_ARG_ENABLE(rpath,    [  --disable-rpath         do not hardcode runtime library paths],    :, enable_rpath=yes)])dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname anddnl the libraries corresponding to explicit and implicit dependencies.dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables.AC_DEFUN([AC_LIB_LINKFLAGS_BODY],[  define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],                               [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])  dnl By default, look in $includedir and $libdir.  use_additional=yes  AC_LIB_WITH_FINAL_PREFIX([    eval additional_includedir=\"$includedir\"    eval additional_libdir=\"$libdir\"  ])  AC_LIB_ARG_WITH([lib$1-prefix],[  --with-lib$1-prefix[=DIR]  search for lib$1 in DIR/include and DIR/lib  --without-lib$1-prefix     don't search for lib$1 in includedir and libdir],[    if test "X$withval" = "Xno"; then      use_additional=no    else      if test "X$withval" = "X"; then        AC_LIB_WITH_FINAL_PREFIX([          eval additional_includedir=\"$includedir\"          eval additional_libdir=\"$libdir\"        ])      else        additional_includedir="$withval/include"        additional_libdir="$withval/lib"      fi    fi])  dnl Search the library and its dependencies in $additional_libdir and  dnl $LDFLAGS. Using breadth-first-seach.  LIB[]NAME=  LTLIB[]NAME=  INC[]NAME=  rpathdirs=  ltrpathdirs=  names_already_handled=  names_next_round='$1 $2'  while test -n "$names_next_round"; do    names_this_round="$names_next_round"    names_next_round=    for name in $names_this_round; do      already_handled=      for n in $names_already_handled; do        if test "$n" = "$name"; then          already_handled=yes          break        fi      done      if test -z "$already_handled"; then        names_already_handled="$names_already_handled $name"        dnl See if it was already located by an earlier AC_LIB_LINKFLAGS        dnl or AC_LIB_HAVE_LINKFLAGS call.        uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'`        eval value=\"\$HAVE_LIB$uppername\"        if test -n "$value"; then          if test "$value" = yes; then            eval value=\"\$LIB$uppername\"            test -z "$value" || LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$value"            eval value=\"\$LTLIB$uppername\"            test -z "$value" || LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$value"          else            dnl An earlier call to AC_LIB_HAVE_LINKFLAGS has determined            dnl that this library doesn't exist. So just drop it.            :          fi        else          dnl Search the library lib$name in $additional_libdir and $LDFLAGS          dnl and the already constructed $LIBNAME/$LTLIBNAME.          found_dir=          found_la=          found_so=          found_a=          if test $use_additional = yes; then            if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then              found_dir="$additional_libdir"              found_so="$additional_libdir/lib$name.$shlibext"              if test -f "$additional_libdir/lib$name.la"; then                found_la="$additional_libdir/lib$name.la"              fi            else              if test -f "$additional_libdir/lib$name.$libext"; then                found_dir="$additional_libdir"                found_a="$additional_libdir/lib$name.$libext"                if test -f "$additional_libdir/lib$name.la"; then                  found_la="$additional_libdir/lib$name.la"                fi              fi            fi          fi          if test "X$found_dir" = "X"; then            for x in $LDFLAGS $LTLIB[]NAME; do              AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])              case "$x" in                -L*)                  dir=`echo "X$x" | sed -e 's/^X-L//'`                  if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext"; then                    found_dir="$dir"                    found_so="$dir/lib$name.$shlibext"                    if test -f "$dir/lib$name.la"; then                      found_la="$dir/lib$name.la"                    fi                  else                    if test -f "$dir/lib$name.$libext"; then                      found_dir="$dir"                      found_a="$dir/lib$name.$libext"                      if test -f "$dir/lib$name.la"; then                        found_la="$dir/lib$name.la"                      fi                    fi                  fi                  ;;              esac              if test "X$found_dir" != "X"; then                break              fi            done          fi          if test "X$found_dir" != "X"; then            dnl Found the library.            LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$found_dir -l$name"            if test "X$found_so" != "X"; then              dnl Linking with a shared library. We attempt to hardcode its              dnl directory into the executable's runpath, unless it's the              dnl standard /usr/lib.              if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/lib"; then                dnl No hardcoding is needed.                LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"              else                dnl Use an explicit option to hardcode DIR into the resulting                dnl binary.                dnl Potentially add DIR to ltrpathdirs.                dnl The ltrpathdirs will be appended to $LTLIBNAME at the end.                haveit=                for x in $ltrpathdirs; do                  if test "X$x" = "X$found_dir"; then                    haveit=yes                    break                  fi                done                if test -z "$haveit"; then                  ltrpathdirs="$ltrpathdirs $found_dir"                fi                dnl The hardcoding into $LIBNAME is system dependent.                if test "$hardcode_direct" = yes; then                  dnl Using DIR/libNAME.so during linking hardcodes DIR into the                  dnl resulting binary.                  LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"                else                  if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then                    dnl Use an explicit option to hardcode DIR into the resulting                    dnl binary.                    LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"                    dnl Potentially add DIR to rpathdirs.                    dnl The rpathdirs will be appended to $LIBNAME at the end.                    haveit=                    for x in $rpathdirs; do                      if test "X$x" = "X$found_dir"; then                        haveit=yes                        break                      fi                    done                    if test -z "$haveit"; then                      rpathdirs="$rpathdirs $found_dir"                    fi                  else                    dnl Rely on "-L$found_dir".                    dnl But don't add it if it's already contained in the LDFLAGS                    dnl or the already constructed $LIBNAME                    haveit=                    for x in $LDFLAGS $LIB[]NAME; do                      AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])                      if test "X$x" = "X-L$found_dir"; then                        haveit=yes                        break                      fi                    done                    if test -z "$haveit"; then                      LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir"                    fi                    if test "$hardcode_minus_L" != no; then                      dnl FIXME: Not sure whether we should use                      dnl "-L$found_dir -l$name" or "-L$found_dir $found_so"                      dnl here.                      LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"                    else                      dnl We cannot use $hardcode_runpath_var and LD_RUN_PATH                      dnl here, because this doesn't fit in flags passed to the                      dnl compiler. So give up. No hardcoding. This affects only                      dnl very old systems.                      dnl FIXME: Not sure whether we should use                      dnl "-L$found_dir -l$name" or "-L$found_dir $found_so"                      dnl here.                      LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name"                    fi                  fi                fi              fi            else              if test "X$found_a" != "X"; then                dnl Linking with a static library.                LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_a"              else                dnl We shouldn't come here, but anyway it's good to have a                dnl fallback.                LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir -l$name"              fi            fi            dnl Assume the include files are nearby.            additional_includedir=            case "$found_dir" in              */lib | */lib/)                basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e 's,/lib/*$,,'`                additional_includedir="$basedir/include"                ;;            esac            if test "X$additional_includedir" != "X"; then              dnl Potentially add $additional_includedir to $INCNAME.              dnl But don't add it              dnl   1. if it's the standard /usr/include,              dnl   2. if it's /usr/local/include and we are using GCC on Linux,              dnl   3. if it's already present in $CPPFLAGS or the already              dnl      constructed $INCNAME,              dnl   4. if it doesn't exist as a directory.              if test "X$additional_includedir" != "X/usr/include"; then                haveit=                if test "X$additional_includedir" = "X/usr/local/include"; then                  if test -n "$GCC"; then                    case $host_os in                      linux*) haveit=yes;;                    esac                  fi                fi                if test -z "$haveit"; then                  for x in $CPPFLAGS $INC[]NAME; do                    AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])                    if test "X$x" = "X-I$additional_includedir"; then                      haveit=yes                      break                    fi                  done                  if test -z "$haveit"; then                    if test -d "$additional_includedir"; then                      dnl Really add $additional_includedir to $INCNAME.                      INC[]NAME="${INC[]NAME}${INC[]NAME:+ }-I$additional_includedir"                    fi                  fi                fi              fi            fi            dnl Look for dependencies.            if test -n "$found_la"; then              dnl Read the .la file. It defines the variables              dnl dlname, library_names, old_library, dependency_libs, current,              dnl age, revision, installed, dlopen, dlpreopen, libdir.              save_libdir="$libdir"              case "$found_la" in                */* | *\\*) . "$found_la" ;;                *) . "./$found_la" ;;              esac              libdir="$save_libdir"              dnl We use only dependency_libs.              for dep in $dependency_libs; do                case "$dep" in                  -L*)                    additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'`                    dnl Potentially add $additional_libdir to $LIBNAME and $LTLIBNAME.                    dnl But don't add it                    dnl   1. if it's the standard /usr/lib,                    dnl   2. if it's /usr/local/lib and we are using GCC on Linux,                    dnl   3. if it's already present in $LDFLAGS or the already                    dnl      constructed $LIBNAME,                    dnl   4. if it doesn't exist as a directory.                    if test "X$additional_libdir" != "X/usr/lib"; then                      haveit=                      if test "X$additional_libdir" = "X/usr/local/lib"; then                        if test -n "$GCC"; then                          case $host_os in                            linux*) haveit=yes;;                          esac                        fi                      fi                      if test -z "$haveit"; then                        haveit=                        for x in $LDFLAGS $LIB[]NAME; do                          AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])                          if test "X$x" = "X-L$additional_libdir"; then                            haveit=yes                            break                          fi                        done                        if test -z "$haveit"; then                          if test -d "$additional_libdir"; then                            dnl Really add $additional_libdir to $LIBNAME.                            LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$additional_libdir"                          fi                        fi                        haveit=                        for x in $LDFLAGS $LTLIB[]NAME; do                          AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])                          if test "X$x" = "X-L$additional_libdir"; then                            haveit=yes                            break                          fi                        done                        if test -z "$haveit"; then                          if test -d "$additional_libdir"; then                            dnl Really add $additional_libdir to $LTLIBNAME.                            LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$additional_libdir"                          fi                        fi                      fi                    fi                    ;;                  -R*)                    dir=`echo "X$dep" | sed -e 's/^X-R//'`                    if test "$enable_rpath" != no; then                      dnl Potentially add DIR to rpathdirs.                      dnl The rpathdirs will be appended to $LIBNAME at the end.                      haveit=                      for x in $rpathdirs; do                        if test "X$x" = "X$dir"; then                          haveit=yes                          break                        fi                      done                      if test -z "$haveit"; then                        rpathdirs="$rpathdirs $dir"                      fi                      dnl Potentially add DIR to ltrpathdirs.                      dnl The ltrpathdirs will be appended to $LTLIBNAME at the end.                      haveit=                      for x in $ltrpathdirs; do                        if test "X$x" = "X$dir"; then                          haveit=yes                          break                        fi                      done                      if test -z "$haveit"; then                        ltrpathdirs="$ltrpathdirs $dir"                      fi                    fi                    ;;                  -l*)                    dnl Handle this in the next round.                    names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'`                    ;;                  *.la)                    dnl Handle this in the next round. Throw away the .la's                    dnl directory; it is already contained in a preceding -L                    dnl option.                    names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'`                    ;;                  *)                    dnl Most likely an immediate library name.                    LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$dep"                    LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$dep"                    ;;                esac              done            fi          else            dnl Didn't find the library; assume it is in the system directories            dnl known to the linker and runtime loader. (All the system            dnl directories known to the linker should also be known to the            dnl runtime loader, otherwise the system is severely misconfigured.)            LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name"            LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name"          fi        fi      fi    done  done  if test "X$rpathdirs" != "X"; then    if test -n "$hardcode_libdir_separator"; then      dnl Weird platform: only the last -rpath option counts, the user must      dnl pass all path elements in one option. We can arrange that for a      dnl single library, but not when more than one $LIBNAMEs are used.      alldirs=      for found_dir in $rpathdirs; do        alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir"      done      dnl Note: hardcode_libdir_flag_spec uses $libdir and $wl.      acl_save_libdir="$libdir"      libdir="$alldirs"      eval flag=\"$hardcode_libdir_flag_spec\"      libdir="$acl_save_libdir"      LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag"    else      dnl The -rpath options are cumulative.      for found_dir in $rpathdirs; do        acl_save_libdir="$libdir"        libdir="$found_dir"        eval flag=\"$hardcode_libdir_flag_spec\"        libdir="$acl_save_libdir"        LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag"      done    fi  fi  if test "X$ltrpathdirs" != "X"; then    dnl When using libtool, the option that works for both libraries and    dnl executables is -R. The -R options are cumulative.    for found_dir in $ltrpathdirs; do      LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir"    done  fi])dnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR,dnl unless already present in VAR.dnl Works only for CPPFLAGS, not for LIB* variables because that sometimesdnl contains two or three consecutive elements that belong together.AC_DEFUN([AC_LIB_APPENDTOVAR],[  for element in [$2]; do    haveit=    for x in $[$1]; do      AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])      if test "X$x" = "X$element"; then        haveit=yes        break      fi    done    if test -z "$haveit"; then      [$1]="${[$1]}${[$1]:+ }$element"    fi  done])
 |