1# lib-prefix.m4 serial 7 (gettext-0.18)
2dnl Copyright (C) 2001-2005, 2008-2010 Free Software Foundation, Inc.
3dnl This file is free software; the Free Software Foundation
4dnl gives unlimited permission to copy and/or distribute it,
5dnl with or without modifications, as long as this notice is preserved.
6
7dnl From Bruno Haible.
8
9dnl AC_LIB_ARG_WITH is synonymous to AC_ARG_WITH in autoconf-2.13, and
10dnl similar to AC_ARG_WITH in autoconf 2.52...2.57 except that is doesn't
11dnl require excessive bracketing.
12ifdef([AC_HELP_STRING],
13[AC_DEFUN([AC_LIB_ARG_WITH], [AC_ARG_WITH([$1],[[$2]],[$3],[$4])])],
14[AC_DEFUN([AC_][LIB_ARG_WITH], [AC_ARG_WITH([$1],[$2],[$3],[$4])])])
15
16dnl AC_LIB_PREFIX adds to the CPPFLAGS and LDFLAGS the flags that are needed
17dnl to access previously installed libraries. The basic assumption is that
18dnl a user will want packages to use other packages he previously installed
19dnl with the same --prefix option.
20dnl This macro is not needed if only AC_LIB_LINKFLAGS is used to locate
21dnl libraries, but is otherwise very convenient.
22AC_DEFUN([AC_LIB_PREFIX],
23[
24  AC_BEFORE([$0], [AC_LIB_LINKFLAGS])
25  AC_REQUIRE([AC_PROG_CC])
26  AC_REQUIRE([AC_CANONICAL_HOST])
27  AC_REQUIRE([AC_LIB_PREPARE_MULTILIB])
28  AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
29  dnl By default, look in $includedir and $libdir.
30  use_additional=yes
31  AC_LIB_WITH_FINAL_PREFIX([
32    eval additional_includedir=\"$includedir\"
33    eval additional_libdir=\"$libdir\"
34  ])
35  AC_LIB_ARG_WITH([lib-prefix],
36[  --with-lib-prefix[=DIR] search for libraries in DIR/include and DIR/lib
37  --without-lib-prefix    don't search for libraries in includedir and libdir],
38[
39    if test "X$withval" = "Xno"; then
40      use_additional=no
41    else
42      if test "X$withval" = "X"; then
43        AC_LIB_WITH_FINAL_PREFIX([
44          eval additional_includedir=\"$includedir\"
45          eval additional_libdir=\"$libdir\"
46        ])
47      else
48        additional_includedir="$withval/include"
49        additional_libdir="$withval/$acl_libdirstem"
50      fi
51    fi
52])
53  if test $use_additional = yes; then
54    dnl Potentially add $additional_includedir to $CPPFLAGS.
55    dnl But don't add it
56    dnl   1. if it's the standard /usr/include,
57    dnl   2. if it's already present in $CPPFLAGS,
58    dnl   3. if it's /usr/local/include and we are using GCC on Linux,
59    dnl   4. if it doesn't exist as a directory.
60    if test "X$additional_includedir" != "X/usr/include"; then
61      haveit=
62      for x in $CPPFLAGS; do
63        AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
64        if test "X$x" = "X-I$additional_includedir"; then
65          haveit=yes
66          break
67        fi
68      done
69      if test -z "$haveit"; then
70        if test "X$additional_includedir" = "X/usr/local/include"; then
71          if test -n "$GCC"; then
72            case $host_os in
73              linux* | gnu* | k*bsd*-gnu) haveit=yes;;
74            esac
75          fi
76        fi
77        if test -z "$haveit"; then
78          if test -d "$additional_includedir"; then
79            dnl Really add $additional_includedir to $CPPFLAGS.
80            CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }-I$additional_includedir"
81          fi
82        fi
83      fi
84    fi
85    dnl Potentially add $additional_libdir to $LDFLAGS.
86    dnl But don't add it
87    dnl   1. if it's the standard /usr/lib,
88    dnl   2. if it's already present in $LDFLAGS,
89    dnl   3. if it's /usr/local/lib and we are using GCC on Linux,
90    dnl   4. if it doesn't exist as a directory.
91    if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then
92      haveit=
93      for x in $LDFLAGS; do
94        AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
95        if test "X$x" = "X-L$additional_libdir"; then
96          haveit=yes
97          break
98        fi
99      done
100      if test -z "$haveit"; then
101        if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then
102          if test -n "$GCC"; then
103            case $host_os in
104              linux*) haveit=yes;;
105            esac
106          fi
107        fi
108        if test -z "$haveit"; then
109          if test -d "$additional_libdir"; then
110            dnl Really add $additional_libdir to $LDFLAGS.
111            LDFLAGS="${LDFLAGS}${LDFLAGS:+ }-L$additional_libdir"
112          fi
113        fi
114      fi
115    fi
116  fi
117])
118
119dnl AC_LIB_PREPARE_PREFIX creates variables acl_final_prefix,
120dnl acl_final_exec_prefix, containing the values to which $prefix and
121dnl $exec_prefix will expand at the end of the configure script.
122AC_DEFUN([AC_LIB_PREPARE_PREFIX],
123[
124  dnl Unfortunately, prefix and exec_prefix get only finally determined
125  dnl at the end of configure.
126  if test "X$prefix" = "XNONE"; then
127    acl_final_prefix="$ac_default_prefix"
128  else
129    acl_final_prefix="$prefix"
130  fi
131  if test "X$exec_prefix" = "XNONE"; then
132    acl_final_exec_prefix='${prefix}'
133  else
134    acl_final_exec_prefix="$exec_prefix"
135  fi
136  acl_save_prefix="$prefix"
137  prefix="$acl_final_prefix"
138  eval acl_final_exec_prefix=\"$acl_final_exec_prefix\"
139  prefix="$acl_save_prefix"
140])
141
142dnl AC_LIB_WITH_FINAL_PREFIX([statement]) evaluates statement, with the
143dnl variables prefix and exec_prefix bound to the values they will have
144dnl at the end of the configure script.
145AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX],
146[
147  acl_save_prefix="$prefix"
148  prefix="$acl_final_prefix"
149  acl_save_exec_prefix="$exec_prefix"
150  exec_prefix="$acl_final_exec_prefix"
151  $1
152  exec_prefix="$acl_save_exec_prefix"
153  prefix="$acl_save_prefix"
154])
155
156dnl AC_LIB_PREPARE_MULTILIB creates
157dnl - a variable acl_libdirstem, containing the basename of the libdir, either
158dnl   "lib" or "lib64" or "lib/64",
159dnl - a variable acl_libdirstem2, as a secondary possible value for
160dnl   acl_libdirstem, either the same as acl_libdirstem or "lib/sparcv9" or
161dnl   "lib/amd64".
162AC_DEFUN([AC_LIB_PREPARE_MULTILIB],
163[
164  dnl There is no formal standard regarding lib and lib64.
165  dnl On glibc 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/lib64 and 32-bit libraries go under $prefix/lib. We determine
168  dnl the compiler's default mode by looking at the compiler's library search
169  dnl path. If at least one of its elements ends in /lib64 or points to a
170  dnl directory whose absolute pathname ends in /lib64, we assume a 64-bit ABI.
171  dnl Otherwise we use the default, namely "lib".
172  dnl On Solaris systems, the current practice is that on a system supporting
173  dnl 32-bit and 64-bit instruction sets or ABIs, 64-bit libraries go under
174  dnl $prefix/lib/64 (which is a symlink to either $prefix/lib/sparcv9 or
175  dnl $prefix/lib/amd64) and 32-bit libraries go under $prefix/lib.
176  AC_REQUIRE([AC_CANONICAL_HOST])
177  acl_libdirstem=lib
178  acl_libdirstem2=
179  case "$host_os" in
180    solaris*)
181      dnl See Solaris 10 Software Developer Collection > Solaris 64-bit Developer's Guide > The Development Environment
182      dnl <http://docs.sun.com/app/docs/doc/816-5138/dev-env?l=en&a=view>.
183      dnl "Portable Makefiles should refer to any library directories using the 64 symbolic link."
184      dnl But we want to recognize the sparcv9 or amd64 subdirectory also if the
185      dnl symlink is missing, so we set acl_libdirstem2 too.
186      AC_CACHE_CHECK([for 64-bit host], [gl_cv_solaris_64bit],
187        [AC_EGREP_CPP([sixtyfour bits], [
188#ifdef _LP64
189sixtyfour bits
190#endif
191           ], [gl_cv_solaris_64bit=yes], [gl_cv_solaris_64bit=no])
192        ])
193      if test $gl_cv_solaris_64bit = yes; then
194        acl_libdirstem=lib/64
195        case "$host_cpu" in
196          sparc*)        acl_libdirstem2=lib/sparcv9 ;;
197          i*86 | x86_64) acl_libdirstem2=lib/amd64 ;;
198        esac
199      fi
200      ;;
201    *)
202      searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'`
203      if test -n "$searchpath"; then
204        acl_save_IFS="${IFS= 	}"; IFS=":"
205        for searchdir in $searchpath; do
206          if test -d "$searchdir"; then
207            case "$searchdir" in
208              */lib64/ | */lib64 ) acl_libdirstem=lib64 ;;
209              */../ | */.. )
210                # Better ignore directories of this form. They are misleading.
211                ;;
212              *) searchdir=`cd "$searchdir" && pwd`
213                 case "$searchdir" in
214                   */lib64 ) acl_libdirstem=lib64 ;;
215                 esac ;;
216            esac
217          fi
218        done
219        IFS="$acl_save_IFS"
220      fi
221      ;;
222  esac
223  test -n "$acl_libdirstem2" || acl_libdirstem2="$acl_libdirstem"
224])
225