1 # lib-prefix.m4 serial 14
2 dnl Copyright (C) 2001-2005, 2008-2019 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.
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],
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.
24 AC_LIB_WITH_FINAL_PREFIX([
25 eval additional_includedir=\"$includedir\"
26 eval additional_libdir=\"$libdir\"
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]],
32 if test "X$withval" = "Xno"; then
35 if test "X$withval" = "X"; then
36 AC_LIB_WITH_FINAL_PREFIX([
37 eval additional_includedir=\"$includedir\"
38 eval additional_libdir=\"$libdir\"
41 additional_includedir="$withval/include"
42 additional_libdir="$withval/$acl_libdirstem"
46 if test $use_additional = yes; then
47 dnl Potentially add $additional_includedir to $CPPFLAGS.
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
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
62 if test -z "$haveit"; then
63 if test "X$additional_includedir" = "X/usr/local/include"; then
64 if test -n "$GCC"; then
66 linux* | gnu* | k*bsd*-gnu) haveit=yes;;
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"
78 dnl Potentially add $additional_libdir to $LDFLAGS.
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
87 AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
88 if test "X$x" = "X-L$additional_libdir"; then
93 if test -z "$haveit"; then
94 if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then
95 if test -n "$GCC"; then
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"
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],
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"
122 acl_final_prefix="$prefix"
124 if test "X$exec_prefix" = "XNONE"; then
125 acl_final_exec_prefix='${prefix}'
127 acl_final_exec_prefix="$exec_prefix"
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"
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],
140 acl_save_prefix="$prefix"
141 prefix="$acl_final_prefix"
142 acl_save_exec_prefix="$exec_prefix"
143 exec_prefix="$acl_final_exec_prefix"
145 exec_prefix="$acl_save_exec_prefix"
146 prefix="$acl_save_prefix"
149 dnl AC_LIB_PREPARE_MULTILIB creates
150 dnl - a variable acl_libdirstem, containing the basename of the libdir, either
151 dnl "lib" or "lib64" or "lib/64",
152 dnl - a variable acl_libdirstem2, as a secondary possible value for
153 dnl acl_libdirstem, either the same as acl_libdirstem or "lib/sparcv9" or
155 AC_DEFUN([AC_LIB_PREPARE_MULTILIB],
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])
174 AC_CACHE_CHECK([for 64-bit host], [gl_cv_solaris_64bit],
183 [gl_cv_solaris_64bit=yes],
184 [gl_cv_solaris_64bit=no])
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],
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
203 sparc*) acl_libdirstem2=lib/sparcv9 ;;
204 i*86 | x86_64) acl_libdirstem2=lib/amd64 ;;
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; \
219 LC_ALL=C $CC -print-search-dirs; \
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
227 */lib64/ | */lib64 ) acl_libdirstem=lib64 ;;
229 # Better ignore directories of this form. They are misleading.
231 *) searchdir=`cd "$searchdir" && pwd`
233 */lib64 ) acl_libdirstem=lib64 ;;
243 test -n "$acl_libdirstem2" || acl_libdirstem2="$acl_libdirstem"
244 acl_cv_libdirstems="$acl_libdirstem,$acl_libdirstem2"
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/.*,//'`