1# SPDX-License-Identifier: FSFULLR 2# lib-prefix.m4 serial 14 3dnl Copyright (C) 2001-2005, 2008-2019 Free Software Foundation, Inc. 4dnl This file is free software; the Free Software Foundation 5dnl gives unlimited permission to copy and/or distribute it, 6dnl with or without modifications, as long as this notice is preserved. 7 8dnl From Bruno Haible. 9 10dnl AC_LIB_PREFIX adds to the CPPFLAGS and LDFLAGS the flags that are needed 11dnl to access previously installed libraries. The basic assumption is that 12dnl packages should use other packages that are installed with the same 13dnl --prefix option. This macro is not needed if only AC_LIB_LINKFLAGS is 14dnl used to locate libraries, but is otherwise very convenient. 15AC_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 112dnl AC_LIB_PREPARE_PREFIX creates variables acl_final_prefix, 113dnl acl_final_exec_prefix, containing the values to which $prefix and 114dnl $exec_prefix will expand at the end of the configure script. 115AC_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 135dnl AC_LIB_WITH_FINAL_PREFIX([statement]) evaluates statement, with the 136dnl variables prefix and exec_prefix bound to the values they will have 137dnl at the end of the configure script. 138AC_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 149dnl AC_LIB_PREPARE_MULTILIB creates 150dnl - a variable acl_libdirstem, containing the basename of the libdir, either 151dnl "lib" or "lib64" or "lib/64", 152dnl - a variable acl_libdirstem2, as a secondary possible value for 153dnl acl_libdirstem, either the same as acl_libdirstem or "lib/sparcv9" or 154dnl "lib/amd64". 155AC_DEFUN([AC_LIB_PREPARE_MULTILIB], 156[ 157 dnl There is no formal standard regarding lib and lib64. 158 dnl On 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. We determine 161 dnl the compiler's default mode by looking at the compiler's library search 162 dnl path. If at least one of its elements ends in /lib64 or points to a 163 dnl directory whose absolute pathname ends in /lib64, we assume a 64-bit ABI. 164 dnl Otherwise we use the default, namely "lib". 165 dnl On Solaris systems, the current practice is that on a system supporting 166 dnl 32-bit and 64-bit instruction sets or ABIs, 64-bit libraries go under 167 dnl $prefix/lib/64 (which is a symlink to either $prefix/lib/sparcv9 or 168 dnl $prefix/lib/amd64) and 32-bit libraries go under $prefix/lib. 169 AC_REQUIRE([AC_CANONICAL_HOST]) 170 AC_REQUIRE([gl_HOST_CPU_C_ABI_32BIT]) 171 172 case "$host_os" in 173 solaris*) 174 AC_CACHE_CHECK([for 64-bit host], [gl_cv_solaris_64bit], 175 [AC_COMPILE_IFELSE( 176 [AC_LANG_SOURCE( 177 [[#ifdef _LP64 178 int ok; 179 #else 180 error fail 181 #endif 182 ]])], 183 [gl_cv_solaris_64bit=yes], 184 [gl_cv_solaris_64bit=no]) 185 ]);; 186 esac 187 188 dnl Allow the user to override the result by setting acl_cv_libdirstems. 189 AC_CACHE_CHECK([for the common suffixes of directories in the library search path], 190 [acl_cv_libdirstems], 191 [acl_libdirstem=lib 192 acl_libdirstem2= 193 case "$host_os" in 194 solaris*) 195 dnl See Solaris 10 Software Developer Collection > Solaris 64-bit Developer's Guide > The Development Environment 196 dnl <https://docs.oracle.com/cd/E19253-01/816-5138/dev-env/index.html>. 197 dnl "Portable Makefiles should refer to any library directories using the 64 symbolic link." 198 dnl But we want to recognize the sparcv9 or amd64 subdirectory also if the 199 dnl symlink is missing, so we set acl_libdirstem2 too. 200 if test $gl_cv_solaris_64bit = yes; then 201 acl_libdirstem=lib/64 202 case "$host_cpu" in 203 sparc*) acl_libdirstem2=lib/sparcv9 ;; 204 i*86 | x86_64) acl_libdirstem2=lib/amd64 ;; 205 esac 206 fi 207 ;; 208 *) 209 dnl If $CC generates code for a 32-bit ABI, the libraries are 210 dnl surely under $prefix/lib, not $prefix/lib64. 211 if test "$HOST_CPU_C_ABI_32BIT" != yes; then 212 dnl The result is a property of the system. However, non-system 213 dnl compilers sometimes have odd library search paths. Therefore 214 dnl prefer asking /usr/bin/gcc, if available, rather than $CC. 215 searchpath=`(if test -f /usr/bin/gcc \ 216 && LC_ALL=C /usr/bin/gcc -print-search-dirs >/dev/null 2>/dev/null; then \ 217 LC_ALL=C /usr/bin/gcc -print-search-dirs; \ 218 else \ 219 LC_ALL=C $CC -print-search-dirs; \ 220 fi) 2>/dev/null \ 221 | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'` 222 if test -n "$searchpath"; then 223 acl_save_IFS="${IFS= }"; IFS=":" 224 for searchdir in $searchpath; do 225 if test -d "$searchdir"; then 226 case "$searchdir" in 227 */lib64/ | */lib64 ) acl_libdirstem=lib64 ;; 228 */../ | */.. ) 229 # Better ignore directories of this form. They are misleading. 230 ;; 231 *) searchdir=`cd "$searchdir" && pwd` 232 case "$searchdir" in 233 */lib64 ) acl_libdirstem=lib64 ;; 234 esac ;; 235 esac 236 fi 237 done 238 IFS="$acl_save_IFS" 239 fi 240 fi 241 ;; 242 esac 243 test -n "$acl_libdirstem2" || acl_libdirstem2="$acl_libdirstem" 244 acl_cv_libdirstems="$acl_libdirstem,$acl_libdirstem2" 245 ]) 246 # Decompose acl_cv_libdirstems into acl_libdirstem and acl_libdirstem2. 247 acl_libdirstem=`echo "$acl_cv_libdirstems" | sed -e 's/,.*//'` 248 acl_libdirstem2=`echo "$acl_cv_libdirstems" | sed -e '/,/s/.*,//'` 249]) 250