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