tlib-prefix.m4 - vaccinewars - be a doctor and try to vaccinate the world
 (HTM) git clone git://src.adamsgaard.dk/vaccinewars
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
       tlib-prefix.m4 (11944B)
       ---
            1 # lib-prefix.m4 serial 17
            2 dnl Copyright (C) 2001-2005, 2008-2020 Free Software Foundation, Inc.
            3 dnl This file is free software; the Free Software Foundation
            4 dnl gives unlimited permission to copy and/or distribute it,
            5 dnl with or without modifications, as long as this notice is preserved.
            6 
            7 dnl From Bruno Haible.
            8 
            9 dnl AC_LIB_PREFIX adds to the CPPFLAGS and LDFLAGS the flags that are needed
           10 dnl to access previously installed libraries. The basic assumption is that
           11 dnl a user will want packages to use other packages he previously installed
           12 dnl with the same --prefix option.
           13 dnl This macro is not needed if only AC_LIB_LINKFLAGS is used to locate
           14 dnl libraries, but is otherwise very convenient.
           15 AC_DEFUN([AC_LIB_PREFIX],
           16 [
           17   AC_BEFORE([$0], [AC_LIB_LINKFLAGS])
           18   AC_REQUIRE([AC_PROG_CC])
           19   AC_REQUIRE([AC_CANONICAL_HOST])
           20   AC_REQUIRE([AC_LIB_PREPARE_MULTILIB])
           21   AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
           22   dnl By default, look in $includedir and $libdir.
           23   use_additional=yes
           24   AC_LIB_WITH_FINAL_PREFIX([
           25     eval additional_includedir=\"$includedir\"
           26     eval additional_libdir=\"$libdir\"
           27   ])
           28   AC_ARG_WITH([lib-prefix],
           29 [[  --with-lib-prefix[=DIR] search for libraries in DIR/include and DIR/lib
           30   --without-lib-prefix    don't search for libraries in includedir and libdir]],
           31 [
           32     if test "X$withval" = "Xno"; then
           33       use_additional=no
           34     else
           35       if test "X$withval" = "X"; then
           36         AC_LIB_WITH_FINAL_PREFIX([
           37           eval additional_includedir=\"$includedir\"
           38           eval additional_libdir=\"$libdir\"
           39         ])
           40       else
           41         additional_includedir="$withval/include"
           42         additional_libdir="$withval/$acl_libdirstem"
           43       fi
           44     fi
           45 ])
           46   if test $use_additional = yes; then
           47     dnl Potentially add $additional_includedir to $CPPFLAGS.
           48     dnl But don't add it
           49     dnl   1. if it's the standard /usr/include,
           50     dnl   2. if it's already present in $CPPFLAGS,
           51     dnl   3. if it's /usr/local/include and we are using GCC on Linux,
           52     dnl   4. if it doesn't exist as a directory.
           53     if test "X$additional_includedir" != "X/usr/include"; then
           54       haveit=
           55       for x in $CPPFLAGS; do
           56         AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
           57         if test "X$x" = "X-I$additional_includedir"; then
           58           haveit=yes
           59           break
           60         fi
           61       done
           62       if test -z "$haveit"; then
           63         if test "X$additional_includedir" = "X/usr/local/include"; then
           64           if test -n "$GCC"; then
           65             case $host_os in
           66               linux* | gnu* | k*bsd*-gnu) haveit=yes;;
           67             esac
           68           fi
           69         fi
           70         if test -z "$haveit"; then
           71           if test -d "$additional_includedir"; then
           72             dnl Really add $additional_includedir to $CPPFLAGS.
           73             CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }-I$additional_includedir"
           74           fi
           75         fi
           76       fi
           77     fi
           78     dnl Potentially add $additional_libdir to $LDFLAGS.
           79     dnl But don't add it
           80     dnl   1. if it's the standard /usr/lib,
           81     dnl   2. if it's already present in $LDFLAGS,
           82     dnl   3. if it's /usr/local/lib and we are using GCC on Linux,
           83     dnl   4. if it doesn't exist as a directory.
           84     if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then
           85       haveit=
           86       for x in $LDFLAGS; do
           87         AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
           88         if test "X$x" = "X-L$additional_libdir"; then
           89           haveit=yes
           90           break
           91         fi
           92       done
           93       if test -z "$haveit"; then
           94         if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then
           95           if test -n "$GCC"; then
           96             case $host_os in
           97               linux*) haveit=yes;;
           98             esac
           99           fi
          100         fi
          101         if test -z "$haveit"; then
          102           if test -d "$additional_libdir"; then
          103             dnl Really add $additional_libdir to $LDFLAGS.
          104             LDFLAGS="${LDFLAGS}${LDFLAGS:+ }-L$additional_libdir"
          105           fi
          106         fi
          107       fi
          108     fi
          109   fi
          110 ])
          111 
          112 dnl AC_LIB_PREPARE_PREFIX creates variables acl_final_prefix,
          113 dnl acl_final_exec_prefix, containing the values to which $prefix and
          114 dnl $exec_prefix will expand at the end of the configure script.
          115 AC_DEFUN([AC_LIB_PREPARE_PREFIX],
          116 [
          117   dnl Unfortunately, prefix and exec_prefix get only finally determined
          118   dnl at the end of configure.
          119   if test "X$prefix" = "XNONE"; then
          120     acl_final_prefix="$ac_default_prefix"
          121   else
          122     acl_final_prefix="$prefix"
          123   fi
          124   if test "X$exec_prefix" = "XNONE"; then
          125     acl_final_exec_prefix='${prefix}'
          126   else
          127     acl_final_exec_prefix="$exec_prefix"
          128   fi
          129   acl_save_prefix="$prefix"
          130   prefix="$acl_final_prefix"
          131   eval acl_final_exec_prefix=\"$acl_final_exec_prefix\"
          132   prefix="$acl_save_prefix"
          133 ])
          134 
          135 dnl AC_LIB_WITH_FINAL_PREFIX([statement]) evaluates statement, with the
          136 dnl variables prefix and exec_prefix bound to the values they will have
          137 dnl at the end of the configure script.
          138 AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX],
          139 [
          140   acl_save_prefix="$prefix"
          141   prefix="$acl_final_prefix"
          142   acl_save_exec_prefix="$exec_prefix"
          143   exec_prefix="$acl_final_exec_prefix"
          144   $1
          145   exec_prefix="$acl_save_exec_prefix"
          146   prefix="$acl_save_prefix"
          147 ])
          148 
          149 dnl AC_LIB_PREPARE_MULTILIB creates
          150 dnl - a function acl_is_expected_elfclass, that tests whether standard input
          151 dn;   has a 32-bit or 64-bit ELF header, depending on the host CPU ABI,
          152 dnl - 3 variables acl_libdirstem, acl_libdirstem2, acl_libdirstem3, containing
          153 dnl   the basename of the libdir to try in turn, either "lib" or "lib64" or
          154 dnl   "lib/64" or "lib32" or "lib/sparcv9" or "lib/amd64" or similar.
          155 AC_DEFUN([AC_LIB_PREPARE_MULTILIB],
          156 [
          157   dnl There is no formal standard regarding lib, lib32, and lib64.
          158   dnl On most glibc systems, the current practice is that on a system supporting
          159   dnl 32-bit and 64-bit instruction sets or ABIs, 64-bit libraries go under
          160   dnl $prefix/lib64 and 32-bit libraries go under $prefix/lib. However, on
          161   dnl Arch Linux based distributions, it's the opposite: 32-bit libraries go
          162   dnl under $prefix/lib32 and 64-bit libraries go under $prefix/lib.
          163   dnl We determine the compiler's default mode by looking at the compiler's
          164   dnl library search path. If at least one of its elements ends in /lib64 or
          165   dnl points to a directory whose absolute pathname ends in /lib64, we use that
          166   dnl for 64-bit ABIs. Similarly for 32-bit ABIs. Otherwise we use the default,
          167   dnl namely "lib".
          168   dnl On Solaris systems, the current practice is that on a system supporting
          169   dnl 32-bit and 64-bit instruction sets or ABIs, 64-bit libraries go under
          170   dnl $prefix/lib/64 (which is a symlink to either $prefix/lib/sparcv9 or
          171   dnl $prefix/lib/amd64) and 32-bit libraries go under $prefix/lib.
          172   AC_REQUIRE([AC_CANONICAL_HOST])
          173   AC_REQUIRE([gl_HOST_CPU_C_ABI_32BIT])
          174 
          175   AC_CACHE_CHECK([for ELF binary format], [gl_cv_elf],
          176     [AC_EGREP_CPP([Extensible Linking Format],
          177        [#ifdef __ELF__
          178         Extensible Linking Format
          179         #endif
          180        ],
          181        [gl_cv_elf=yes],
          182        [gl_cv_elf=no])
          183      ])
          184   if test $gl_cv_elf; then
          185     # Extract the ELF class of a file (5th byte) in decimal.
          186     # Cf. https://en.wikipedia.org/wiki/Executable_and_Linkable_Format#File_header
          187     if od -A x < /dev/null >/dev/null 2>/dev/null; then
          188       # Use POSIX od.
          189       func_elfclass ()
          190       {
          191         od -A n -t d1 -j 4 -N 1
          192       }
          193     else
          194       # Use BSD hexdump.
          195       func_elfclass ()
          196       {
          197         dd bs=1 count=1 skip=4 2>/dev/null | hexdump -e '1/1 "%3d "'
          198         echo
          199       }
          200     fi
          201 changequote(,)dnl
          202     case $HOST_CPU_C_ABI_32BIT in
          203       yes)
          204         # 32-bit ABI.
          205         acl_is_expected_elfclass ()
          206         {
          207           test "`func_elfclass | sed -e 's/[         ]//g'`" = 1
          208         }
          209         ;;
          210       no)
          211         # 64-bit ABI.
          212         acl_is_expected_elfclass ()
          213         {
          214           test "`func_elfclass | sed -e 's/[         ]//g'`" = 2
          215         }
          216         ;;
          217       *)
          218         # Unknown.
          219         acl_is_expected_elfclass ()
          220         {
          221           :
          222         }
          223         ;;
          224     esac
          225 changequote([,])dnl
          226   else
          227     acl_is_expected_elfclass ()
          228     {
          229       :
          230     }
          231   fi
          232 
          233   dnl Allow the user to override the result by setting acl_cv_libdirstems.
          234   AC_CACHE_CHECK([for the common suffixes of directories in the library search path],
          235     [acl_cv_libdirstems],
          236     [dnl Try 'lib' first, because that's the default for libdir in GNU, see
          237      dnl <https://www.gnu.org/prep/standards/html_node/Directory-Variables.html>.
          238      acl_libdirstem=lib
          239      acl_libdirstem2=
          240      acl_libdirstem3=
          241      case "$host_os" in
          242        solaris*)
          243          dnl See Solaris 10 Software Developer Collection > Solaris 64-bit Developer's Guide > The Development Environment
          244          dnl <https://docs.oracle.com/cd/E19253-01/816-5138/dev-env/index.html>.
          245          dnl "Portable Makefiles should refer to any library directories using the 64 symbolic link."
          246          dnl But we want to recognize the sparcv9 or amd64 subdirectory also if the
          247          dnl symlink is missing, so we set acl_libdirstem2 too.
          248          if test $HOST_CPU_C_ABI_32BIT = no; then
          249            acl_libdirstem2=lib/64
          250            case "$host_cpu" in
          251              sparc*)        acl_libdirstem3=lib/sparcv9 ;;
          252              i*86 | x86_64) acl_libdirstem3=lib/amd64 ;;
          253            esac
          254          fi
          255          ;;
          256        *)
          257          dnl If $CC generates code for a 32-bit ABI, the libraries are
          258          dnl surely under $prefix/lib or $prefix/lib32, not $prefix/lib64.
          259          dnl Similarly, if $CC generates code for a 64-bit ABI, the libraries
          260          dnl are surely under $prefix/lib or $prefix/lib64, not $prefix/lib32.
          261          dnl Find the compiler's search path. However, non-system compilers
          262          dnl sometimes have odd library search paths. But we can't simply invoke
          263          dnl '/usr/bin/gcc -print-search-dirs' because that would not take into
          264          dnl account the -m32/-m31 or -m64 options from the $CC or $CFLAGS.
          265          searchpath=`(LC_ALL=C $CC $CPPFLAGS $CFLAGS -print-search-dirs) 2>/dev/null \
          266                      | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'`
          267          if test $HOST_CPU_C_ABI_32BIT != no; then
          268            # 32-bit or unknown ABI.
          269            if test -d /usr/lib32; then
          270              acl_libdirstem2=lib32
          271            fi
          272          fi
          273          if test $HOST_CPU_C_ABI_32BIT != yes; then
          274            # 64-bit or unknown ABI.
          275            if test -d /usr/lib64; then
          276              acl_libdirstem3=lib64
          277            fi
          278          fi
          279          if test -n "$searchpath"; then
          280            acl_save_IFS="${IFS=         }"; IFS=":"
          281            for searchdir in $searchpath; do
          282              if test -d "$searchdir"; then
          283                case "$searchdir" in
          284                  */lib32/ | */lib32 ) acl_libdirstem2=lib32 ;;
          285                  */lib64/ | */lib64 ) acl_libdirstem3=lib64 ;;
          286                  */../ | */.. )
          287                    # Better ignore directories of this form. They are misleading.
          288                    ;;
          289                  *) searchdir=`cd "$searchdir" && pwd`
          290                     case "$searchdir" in
          291                       */lib32 ) acl_libdirstem2=lib32 ;;
          292                       */lib64 ) acl_libdirstem3=lib64 ;;
          293                     esac ;;
          294                esac
          295              fi
          296            done
          297            IFS="$acl_save_IFS"
          298            if test $HOST_CPU_C_ABI_32BIT = yes; then
          299              # 32-bit ABI.
          300              acl_libdirstem3=
          301            fi
          302            if test $HOST_CPU_C_ABI_32BIT = no; then
          303              # 64-bit ABI.
          304              acl_libdirstem2=
          305            fi
          306          fi
          307          ;;
          308      esac
          309      test -n "$acl_libdirstem2" || acl_libdirstem2="$acl_libdirstem"
          310      test -n "$acl_libdirstem3" || acl_libdirstem3="$acl_libdirstem"
          311      acl_cv_libdirstems="$acl_libdirstem,$acl_libdirstem2,$acl_libdirstem3"
          312     ])
          313   dnl Decompose acl_cv_libdirstems into acl_libdirstem, acl_libdirstem2, and
          314   dnl acl_libdirstem3.
          315 changequote(,)dnl
          316   acl_libdirstem=`echo "$acl_cv_libdirstems" | sed -e 's/,.*//'`
          317   acl_libdirstem2=`echo "$acl_cv_libdirstems" | sed -e 's/^[^,]*,//' -e 's/,.*//'`
          318   acl_libdirstem3=`echo "$acl_cv_libdirstems" | sed -e 's/^[^,]*,[^,]*,//' -e 's/,.*//'`
          319 changequote([,])dnl
          320 ])