1 # lib-link.m4 serial 20 (gettext-0.18) 2 dnl Copyright (C) 2001-2009 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 AC_PREREQ([2.54]) 10 11 dnl AC_LIB_LINKFLAGS(name [, dependencies]) searches for libname and 12 dnl the libraries corresponding to explicit and implicit dependencies. 13 dnl Sets and AC_SUBSTs the LIB${NAME} and LTLIB${NAME} variables and 14 dnl augments the CPPFLAGS variable. 15 dnl Sets and AC_SUBSTs the LIB${NAME}_PREFIX variable to nonempty if libname 16 dnl was found in ${LIB${NAME}_PREFIX}/$acl_libdirstem. 17 AC_DEFUN([AC_LIB_LINKFLAGS], 18 [ 19 AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) 20 AC_REQUIRE([AC_LIB_RPATH]) 21 pushdef([Name],[translit([$1],[./-], [___])]) 22 pushdef([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], 23 [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) 24 AC_CACHE_CHECK([how to link with lib[]$1], [ac_cv_lib[]Name[]_libs], [ 25 AC_LIB_LINKFLAGS_BODY([$1], [$2]) 26 ac_cv_lib[]Name[]_libs="$LIB[]NAME" 27 ac_cv_lib[]Name[]_ltlibs="$LTLIB[]NAME" 28 ac_cv_lib[]Name[]_cppflags="$INC[]NAME" 29 ac_cv_lib[]Name[]_prefix="$LIB[]NAME[]_PREFIX" 30 ]) 31 LIB[]NAME="$ac_cv_lib[]Name[]_libs" 32 LTLIB[]NAME="$ac_cv_lib[]Name[]_ltlibs" 33 INC[]NAME="$ac_cv_lib[]Name[]_cppflags" 34 LIB[]NAME[]_PREFIX="$ac_cv_lib[]Name[]_prefix" 35 AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME) 36 AC_SUBST([LIB]NAME) 37 AC_SUBST([LTLIB]NAME) 38 AC_SUBST([LIB]NAME[_PREFIX]) 39 dnl Also set HAVE_LIB[]NAME so that AC_LIB_HAVE_LINKFLAGS can reuse the 40 dnl results of this search when this library appears as a dependency. 41 HAVE_LIB[]NAME=yes 42 popdef([NAME]) 43 popdef([Name]) 44 ]) 45 46 dnl AC_LIB_HAVE_LINKFLAGS(name, dependencies, includes, testcode, [missing-message]) 47 dnl searches for libname and the libraries corresponding to explicit and 48 dnl implicit dependencies, together with the specified include files and 49 dnl the ability to compile and link the specified testcode. The missing-message 50 dnl defaults to 'no' and may contain additional hints for the user. 51 dnl If found, it sets and AC_SUBSTs HAVE_LIB${NAME}=yes and the LIB${NAME} 52 dnl and LTLIB${NAME} variables and augments the CPPFLAGS variable, and 53 dnl #defines HAVE_LIB${NAME} to 1. Otherwise, it sets and AC_SUBSTs 54 dnl HAVE_LIB${NAME}=no and LIB${NAME} and LTLIB${NAME} to empty. 55 dnl Sets and AC_SUBSTs the LIB${NAME}_PREFIX variable to nonempty if libname 56 dnl was found in ${LIB${NAME}_PREFIX}/$acl_libdirstem. 57 AC_DEFUN([AC_LIB_HAVE_LINKFLAGS], 58 [ 59 AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) 60 AC_REQUIRE([AC_LIB_RPATH]) 61 pushdef([Name],[translit([$1],[./-], [___])]) 62 pushdef([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], 63 [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) 64 65 dnl Search for lib[]Name and define LIB[]NAME, LTLIB[]NAME and INC[]NAME 66 dnl accordingly. 67 AC_LIB_LINKFLAGS_BODY([$1], [$2]) 68 69 dnl Add $INC[]NAME to CPPFLAGS before performing the following checks, 70 dnl because if the user has installed lib[]Name and not disabled its use 71 dnl via --without-lib[]Name-prefix, he wants to use it. 72 ac_save_CPPFLAGS="$CPPFLAGS" 73 AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME) 74 75 AC_CACHE_CHECK([for lib[]$1], [ac_cv_lib[]Name], [ 76 ac_save_LIBS="$LIBS" 77 LIBS="$LIBS $LIB[]NAME" 78 AC_TRY_LINK([$3], [$4], 79 [ac_cv_lib[]Name=yes], 80 [ac_cv_lib[]Name='m4_if([$5], [], [no], [[$5]])']) 81 LIBS="$ac_save_LIBS" 82 ]) 83 if test "$ac_cv_lib[]Name" = yes; then 84 HAVE_LIB[]NAME=yes 85 AC_DEFINE([HAVE_LIB]NAME, 1, [Define if you have the lib][$1 library.]) 86 AC_MSG_CHECKING([how to link with lib[]$1]) 87 AC_MSG_RESULT([$LIB[]NAME]) 88 else 89 HAVE_LIB[]NAME=no 90 dnl If $LIB[]NAME didn't lead to a usable library, we don't need 91 dnl $INC[]NAME either. 92 CPPFLAGS="$ac_save_CPPFLAGS" 93 LIB[]NAME= 94 LTLIB[]NAME= 95 LIB[]NAME[]_PREFIX= 96 fi 97 AC_SUBST([HAVE_LIB]NAME) 98 AC_SUBST([LIB]NAME) 99 AC_SUBST([LTLIB]NAME) 100 AC_SUBST([LIB]NAME[_PREFIX]) 101 popdef([NAME]) 102 popdef([Name]) 103 ]) 104 105 dnl Determine the platform dependent parameters needed to use rpath: 106 dnl acl_libext, 107 dnl acl_shlibext, 108 dnl acl_hardcode_libdir_flag_spec, 109 dnl acl_hardcode_libdir_separator, 110 dnl acl_hardcode_direct, 111 dnl acl_hardcode_minus_L. 112 AC_DEFUN([AC_LIB_RPATH], 113 [ 114 dnl Tell automake >= 1.10 to complain if config.rpath is missing. 115 m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([config.rpath])]) 116 AC_REQUIRE([AC_PROG_CC]) dnl we use $CC, $GCC, $LDFLAGS 117 AC_REQUIRE([AC_LIB_PROG_LD]) dnl we use $LD, $with_gnu_ld 118 AC_REQUIRE([AC_CANONICAL_HOST]) dnl we use $host 119 AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) dnl we use $ac_aux_dir 120 AC_CACHE_CHECK([for shared library run path origin], [acl_cv_rpath], [ 121 CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ 122 ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh 123 . ./conftest.sh 124 rm -f ./conftest.sh 125 acl_cv_rpath=done 126 ]) 127 wl="$acl_cv_wl" 128 acl_libext="$acl_cv_libext" 129 acl_shlibext="$acl_cv_shlibext" 130 acl_libname_spec="$acl_cv_libname_spec" 131 acl_library_names_spec="$acl_cv_library_names_spec" 132 acl_hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" 133 acl_hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" 134 acl_hardcode_direct="$acl_cv_hardcode_direct" 135 acl_hardcode_minus_L="$acl_cv_hardcode_minus_L" 136 dnl Determine whether the user wants rpath handling at all. 137 AC_ARG_ENABLE([rpath], 138 [ --disable-rpath do not hardcode runtime library paths], 139 :, enable_rpath=yes) 140 ]) 141 142 dnl AC_LIB_FROMPACKAGE(name, package) 143 dnl declares that libname comes from the given package. The configure file 144 dnl will then not have a --with-libname-prefix option but a 145 dnl --with-package-prefix option. Several libraries can come from the same 146 dnl package. This declaration must occur before an AC_LIB_LINKFLAGS or similar 147 dnl macro call that searches for libname. 148 AC_DEFUN([AC_LIB_FROMPACKAGE], 149 [ 150 pushdef([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], 151 [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) 152 define([acl_frompackage_]NAME, [$2]) 153 popdef([NAME]) 154 pushdef([PACK],[$2]) 155 pushdef([PACKUP],[translit(PACK,[abcdefghijklmnopqrstuvwxyz./-], 156 [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) 157 define([acl_libsinpackage_]PACKUP, 158 m4_ifdef([acl_libsinpackage_]PACKUP, [acl_libsinpackage_]PACKUP[[, ]],)[lib$1]) 159 popdef([PACKUP]) 160 popdef([PACK]) 161 ]) 162 163 dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and 164 dnl the libraries corresponding to explicit and implicit dependencies. 165 dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables. 166 dnl Also, sets the LIB${NAME}_PREFIX variable to nonempty if libname was found 167 dnl in ${LIB${NAME}_PREFIX}/$acl_libdirstem. 168 AC_DEFUN([AC_LIB_LINKFLAGS_BODY], 169 [ 170 AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) 171 pushdef([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], 172 [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) 173 pushdef([PACK],[m4_ifdef([acl_frompackage_]NAME, [acl_frompackage_]NAME, lib[$1])]) 174 pushdef([PACKUP],[translit(PACK,[abcdefghijklmnopqrstuvwxyz./-], 175 [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) 176 pushdef([PACKLIBS],[m4_ifdef([acl_frompackage_]NAME, [acl_libsinpackage_]PACKUP, lib[$1])]) 177 dnl Autoconf >= 2.61 supports dots in --with options. 178 pushdef([P_A_C_K],[m4_if(m4_version_compare(m4_defn([m4_PACKAGE_VERSION]),[2.61]),[-1],[translit(PACK,[.],[_])],PACK)]) 179 dnl By default, look in $includedir and $libdir. 180 use_additional=yes 181 AC_LIB_WITH_FINAL_PREFIX([ 182 eval additional_includedir=\"$includedir\" 183 eval additional_libdir=\"$libdir\" 184 ]) 185 AC_ARG_WITH(P_A_C_K[-prefix], 186 [[ --with-]]P_A_C_K[[-prefix[=DIR] search for ]PACKLIBS[ in DIR/include and DIR/lib 187 --without-]]P_A_C_K[[-prefix don't search for ]PACKLIBS[ in includedir and libdir]], 188 [ 189 if test "X$withval" = "Xno"; then 190 use_additional=no 191 else 192 if test "X$withval" = "X"; then 193 AC_LIB_WITH_FINAL_PREFIX([ 194 eval additional_includedir=\"$includedir\" 195 eval additional_libdir=\"$libdir\" 196 ]) 197 else 198 additional_includedir="$withval/include" 199 additional_libdir="$withval/$acl_libdirstem" 200 if test "$acl_libdirstem2" != "$acl_libdirstem" \ 201 && ! test -d "$withval/$acl_libdirstem"; then 202 additional_libdir="$withval/$acl_libdirstem2" 203 fi 204 fi 205 fi 206 ]) 207 dnl Search the library and its dependencies in $additional_libdir and 208 dnl $LDFLAGS. Using breadth-first-seach. 209 LIB[]NAME= 210 LTLIB[]NAME= 211 INC[]NAME= 212 LIB[]NAME[]_PREFIX= 213 dnl HAVE_LIB${NAME} is an indicator that LIB${NAME}, LTLIB${NAME} have been 214 dnl computed. So it has to be reset here. 215 HAVE_LIB[]NAME= 216 rpathdirs= 217 ltrpathdirs= 218 names_already_handled= 219 names_next_round='$1 $2' 220 while test -n "$names_next_round"; do 221 names_this_round="$names_next_round" 222 names_next_round= 223 for name in $names_this_round; do 224 already_handled= 225 for n in $names_already_handled; do 226 if test "$n" = "$name"; then 227 already_handled=yes 228 break 229 fi 230 done 231 if test -z "$already_handled"; then 232 names_already_handled="$names_already_handled $name" 233 dnl See if it was already located by an earlier AC_LIB_LINKFLAGS 234 dnl or AC_LIB_HAVE_LINKFLAGS call. 235 uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'` 236 eval value=\"\$HAVE_LIB$uppername\" 237 if test -n "$value"; then 238 if test "$value" = yes; then 239 eval value=\"\$LIB$uppername\" 240 test -z "$value" || LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$value" 241 eval value=\"\$LTLIB$uppername\" 242 test -z "$value" || LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$value" 243 else 244 dnl An earlier call to AC_LIB_HAVE_LINKFLAGS has determined 245 dnl that this library doesn't exist. So just drop it. 246 : 247 fi 248 else 249 dnl Search the library lib$name in $additional_libdir and $LDFLAGS 250 dnl and the already constructed $LIBNAME/$LTLIBNAME. 251 found_dir= 252 found_la= 253 found_so= 254 found_a= 255 eval libname=\"$acl_libname_spec\" # typically: libname=lib$name 256 if test -n "$acl_shlibext"; then 257 shrext=".$acl_shlibext" # typically: shrext=.so 258 else 259 shrext= 260 fi 261 if test $use_additional = yes; then 262 dir="$additional_libdir" 263 dnl The same code as in the loop below: 264 dnl First look for a shared library. 265 if test -n "$acl_shlibext"; then 266 if test -f "$dir/$libname$shrext"; then 267 found_dir="$dir" 268 found_so="$dir/$libname$shrext" 269 else 270 if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then 271 ver=`(cd "$dir" && \ 272 for f in "$libname$shrext".*; do echo "$f"; done \ 273 | sed -e "s,^$libname$shrext\\\\.,," \ 274 | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ 275 | sed 1q ) 2>/dev/null` 276 if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then 277 found_dir="$dir" 278 found_so="$dir/$libname$shrext.$ver" 279 fi 280 else 281 eval library_names=\"$acl_library_names_spec\" 282 for f in $library_names; do 283 if test -f "$dir/$f"; then 284 found_dir="$dir" 285 found_so="$dir/$f" 286 break 287 fi 288 done 289 fi 290 fi 291 fi 292 dnl Then look for a static library. 293 if test "X$found_dir" = "X"; then 294 if test -f "$dir/$libname.$acl_libext"; then 295 found_dir="$dir" 296 found_a="$dir/$libname.$acl_libext" 297 fi 298 fi 299 if test "X$found_dir" != "X"; then 300 if test -f "$dir/$libname.la"; then 301 found_la="$dir/$libname.la" 302 fi 303 fi 304 fi 305 if test "X$found_dir" = "X"; then 306 for x in $LDFLAGS $LTLIB[]NAME; do 307 AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) 308 case "$x" in 309 -L*) 310 dir=`echo "X$x" | sed -e 's/^X-L//'` 311 dnl First look for a shared library. 312 if test -n "$acl_shlibext"; then 313 if test -f "$dir/$libname$shrext"; then 314 found_dir="$dir" 315 found_so="$dir/$libname$shrext" 316 else 317 if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then 318 ver=`(cd "$dir" && \ 319 for f in "$libname$shrext".*; do echo "$f"; done \ 320 | sed -e "s,^$libname$shrext\\\\.,," \ 321 | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ 322 | sed 1q ) 2>/dev/null` 323 if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then 324 found_dir="$dir" 325 found_so="$dir/$libname$shrext.$ver" 326 fi 327 else 328 eval library_names=\"$acl_library_names_spec\" 329 for f in $library_names; do 330 if test -f "$dir/$f"; then 331 found_dir="$dir" 332 found_so="$dir/$f" 333 break 334 fi 335 done 336 fi 337 fi 338 fi 339 dnl Then look for a static library. 340 if test "X$found_dir" = "X"; then 341 if test -f "$dir/$libname.$acl_libext"; then 342 found_dir="$dir" 343 found_a="$dir/$libname.$acl_libext" 344 fi 345 fi 346 if test "X$found_dir" != "X"; then 347 if test -f "$dir/$libname.la"; then 348 found_la="$dir/$libname.la" 349 fi 350 fi 351 ;; 352 esac 353 if test "X$found_dir" != "X"; then 354 break 355 fi 356 done 357 fi 358 if test "X$found_dir" != "X"; then 359 dnl Found the library. 360 LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$found_dir -l$name" 361 if test "X$found_so" != "X"; then 362 dnl Linking with a shared library. We attempt to hardcode its 363 dnl directory into the executable's runpath, unless it's the 364 dnl standard /usr/lib. 365 if test "$enable_rpath" = no \ 366 || test "X$found_dir" = "X/usr/$acl_libdirstem" \ 367 || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then 368 dnl No hardcoding is needed. 369 LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" 370 else 371 dnl Use an explicit option to hardcode DIR into the resulting 372 dnl binary. 373 dnl Potentially add DIR to ltrpathdirs. 374 dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. 375 haveit= 376 for x in $ltrpathdirs; do 377 if test "X$x" = "X$found_dir"; then 378 haveit=yes 379 break 380 fi 381 done 382 if test -z "$haveit"; then 383 ltrpathdirs="$ltrpathdirs $found_dir" 384 fi 385 dnl The hardcoding into $LIBNAME is system dependent. 386 if test "$acl_hardcode_direct" = yes; then 387 dnl Using DIR/libNAME.so during linking hardcodes DIR into the 388 dnl resulting binary. 389 LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" 390 else 391 if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then 392 dnl Use an explicit option to hardcode DIR into the resulting 393 dnl binary. 394 LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" 395 dnl Potentially add DIR to rpathdirs. 396 dnl The rpathdirs will be appended to $LIBNAME at the end. 397 haveit= 398 for x in $rpathdirs; do 399 if test "X$x" = "X$found_dir"; then 400 haveit=yes 401 break 402 fi 403 done 404 if test -z "$haveit"; then 405 rpathdirs="$rpathdirs $found_dir" 406 fi 407 else 408 dnl Rely on "-L$found_dir". 409 dnl But don't add it if it's already contained in the LDFLAGS 410 dnl or the already constructed $LIBNAME 411 haveit= 412 for x in $LDFLAGS $LIB[]NAME; do 413 AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) 414 if test "X$x" = "X-L$found_dir"; then 415 haveit=yes 416 break 417 fi 418 done 419 if test -z "$haveit"; then 420 LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir" 421 fi 422 if test "$acl_hardcode_minus_L" != no; then 423 dnl FIXME: Not sure whether we should use 424 dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" 425 dnl here. 426 LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" 427 else 428 dnl We cannot use $acl_hardcode_runpath_var and LD_RUN_PATH 429 dnl here, because this doesn't fit in flags passed to the 430 dnl compiler. So give up. No hardcoding. This affects only 431 dnl very old systems. 432 dnl FIXME: Not sure whether we should use 433 dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" 434 dnl here. 435 LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" 436 fi 437 fi 438 fi 439 fi 440 else 441 if test "X$found_a" != "X"; then 442 dnl Linking with a static library. 443 LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_a" 444 else 445 dnl We shouldn't come here, but anyway it's good to have a 446 dnl fallback. 447 LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir -l$name" 448 fi 449 fi 450 dnl Assume the include files are nearby. 451 additional_includedir= 452 case "$found_dir" in 453 */$acl_libdirstem | */$acl_libdirstem/) 454 basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` 455 if test "$name" = '$1'; then 456 LIB[]NAME[]_PREFIX="$basedir" 457 fi 458 additional_includedir="$basedir/include" 459 ;; 460 */$acl_libdirstem2 | */$acl_libdirstem2/) 461 basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'` 462 if test "$name" = '$1'; then 463 LIB[]NAME[]_PREFIX="$basedir" 464 fi 465 additional_includedir="$basedir/include" 466 ;; 467 esac 468 if test "X$additional_includedir" != "X"; then 469 dnl Potentially add $additional_includedir to $INCNAME. 470 dnl But don't add it 471 dnl 1. if it's the standard /usr/include, 472 dnl 2. if it's /usr/local/include and we are using GCC on Linux, 473 dnl 3. if it's already present in $CPPFLAGS or the already 474 dnl constructed $INCNAME, 475 dnl 4. if it doesn't exist as a directory. 476 if test "X$additional_includedir" != "X/usr/include"; then 477 haveit= 478 if test "X$additional_includedir" = "X/usr/local/include"; then 479 if test -n "$GCC"; then 480 case $host_os in 481 linux* | gnu* | k*bsd*-gnu) haveit=yes;; 482 esac 483 fi 484 fi 485 if test -z "$haveit"; then 486 for x in $CPPFLAGS $INC[]NAME; do 487 AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) 488 if test "X$x" = "X-I$additional_includedir"; then 489 haveit=yes 490 break 491 fi 492 done 493 if test -z "$haveit"; then 494 if test -d "$additional_includedir"; then 495 dnl Really add $additional_includedir to $INCNAME. 496 INC[]NAME="${INC[]NAME}${INC[]NAME:+ }-I$additional_includedir" 497 fi 498 fi 499 fi 500 fi 501 fi 502 dnl Look for dependencies. 503 if test -n "$found_la"; then 504 dnl Read the .la file. It defines the variables 505 dnl dlname, library_names, old_library, dependency_libs, current, 506 dnl age, revision, installed, dlopen, dlpreopen, libdir. 507 save_libdir="$libdir" 508 case "$found_la" in 509 */* | *\\*) . "$found_la" ;; 510 *) . "./$found_la" ;; 511 esac 512 libdir="$save_libdir" 513 dnl We use only dependency_libs. 514 for dep in $dependency_libs; do 515 case "$dep" in 516 -L*) 517 additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` 518 dnl Potentially add $additional_libdir to $LIBNAME and $LTLIBNAME. 519 dnl But don't add it 520 dnl 1. if it's the standard /usr/lib, 521 dnl 2. if it's /usr/local/lib and we are using GCC on Linux, 522 dnl 3. if it's already present in $LDFLAGS or the already 523 dnl constructed $LIBNAME, 524 dnl 4. if it doesn't exist as a directory. 525 if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \ 526 && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then 527 haveit= 528 if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \ 529 || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then 530 if test -n "$GCC"; then 531 case $host_os in 532 linux* | gnu* | k*bsd*-gnu) haveit=yes;; 533 esac 534 fi 535 fi 536 if test -z "$haveit"; then 537 haveit= 538 for x in $LDFLAGS $LIB[]NAME; do 539 AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) 540 if test "X$x" = "X-L$additional_libdir"; then 541 haveit=yes 542 break 543 fi 544 done 545 if test -z "$haveit"; then 546 if test -d "$additional_libdir"; then 547 dnl Really add $additional_libdir to $LIBNAME. 548 LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$additional_libdir" 549 fi 550 fi 551 haveit= 552 for x in $LDFLAGS $LTLIB[]NAME; do 553 AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) 554 if test "X$x" = "X-L$additional_libdir"; then 555 haveit=yes 556 break 557 fi 558 done 559 if test -z "$haveit"; then 560 if test -d "$additional_libdir"; then 561 dnl Really add $additional_libdir to $LTLIBNAME. 562 LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$additional_libdir" 563 fi 564 fi 565 fi 566 fi 567 ;; 568 -R*) 569 dir=`echo "X$dep" | sed -e 's/^X-R//'` 570 if test "$enable_rpath" != no; then 571 dnl Potentially add DIR to rpathdirs. 572 dnl The rpathdirs will be appended to $LIBNAME at the end. 573 haveit= 574 for x in $rpathdirs; do 575 if test "X$x" = "X$dir"; then 576 haveit=yes 577 break 578 fi 579 done 580 if test -z "$haveit"; then 581 rpathdirs="$rpathdirs $dir" 582 fi 583 dnl Potentially add DIR to ltrpathdirs. 584 dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. 585 haveit= 586 for x in $ltrpathdirs; do 587 if test "X$x" = "X$dir"; then 588 haveit=yes 589 break 590 fi 591 done 592 if test -z "$haveit"; then 593 ltrpathdirs="$ltrpathdirs $dir" 594 fi 595 fi 596 ;; 597 -l*) 598 dnl Handle this in the next round. 599 names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` 600 ;; 601 *.la) 602 dnl Handle this in the next round. Throw away the .la's 603 dnl directory; it is already contained in a preceding -L 604 dnl option. 605 names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` 606 ;; 607 *) 608 dnl Most likely an immediate library name. 609 LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$dep" 610 LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$dep" 611 ;; 612 esac 613 done 614 fi 615 else 616 dnl Didn't find the library; assume it is in the system directories 617 dnl known to the linker and runtime loader. (All the system 618 dnl directories known to the linker should also be known to the 619 dnl runtime loader, otherwise the system is severely misconfigured.) 620 LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" 621 LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name" 622 fi 623 fi 624 fi 625 done 626 done 627 if test "X$rpathdirs" != "X"; then 628 if test -n "$acl_hardcode_libdir_separator"; then 629 dnl Weird platform: only the last -rpath option counts, the user must 630 dnl pass all path elements in one option. We can arrange that for a 631 dnl single library, but not when more than one $LIBNAMEs are used. 632 alldirs= 633 for found_dir in $rpathdirs; do 634 alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" 635 done 636 dnl Note: acl_hardcode_libdir_flag_spec uses $libdir and $wl. 637 acl_save_libdir="$libdir" 638 libdir="$alldirs" 639 eval flag=\"$acl_hardcode_libdir_flag_spec\" 640 libdir="$acl_save_libdir" 641 LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" 642 else 643 dnl The -rpath options are cumulative. 644 for found_dir in $rpathdirs; do 645 acl_save_libdir="$libdir" 646 libdir="$found_dir" 647 eval flag=\"$acl_hardcode_libdir_flag_spec\" 648 libdir="$acl_save_libdir" 649 LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" 650 done 651 fi 652 fi 653 if test "X$ltrpathdirs" != "X"; then 654 dnl When using libtool, the option that works for both libraries and 655 dnl executables is -R. The -R options are cumulative. 656 for found_dir in $ltrpathdirs; do 657 LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir" 658 done 659 fi 660 popdef([P_A_C_K]) 661 popdef([PACKLIBS]) 662 popdef([PACKUP]) 663 popdef([PACK]) 664 popdef([NAME]) 665 ]) 666 667 dnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR, 668 dnl unless already present in VAR. 669 dnl Works only for CPPFLAGS, not for LIB* variables because that sometimes 670 dnl contains two or three consecutive elements that belong together. 671 AC_DEFUN([AC_LIB_APPENDTOVAR], 672 [ 673 for element in [$2]; do 674 haveit= 675 for x in $[$1]; do 676 AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) 677 if test "X$x" = "X$element"; then 678 haveit=yes 679 break 680 fi 681 done 682 if test -z "$haveit"; then 683 [$1]="${[$1]}${[$1]:+ }$element" 684 fi 685 done 686 ]) 687 688 dnl For those cases where a variable contains several -L and -l options 689 dnl referring to unknown libraries and directories, this macro determines the 690 dnl necessary additional linker options for the runtime path. 691 dnl AC_LIB_LINKFLAGS_FROM_LIBS([LDADDVAR], [LIBSVALUE], [USE-LIBTOOL]) 692 dnl sets LDADDVAR to linker options needed together with LIBSVALUE. 693 dnl If USE-LIBTOOL evaluates to non-empty, linking with libtool is assumed, 694 dnl otherwise linking without libtool is assumed. 695 AC_DEFUN([AC_LIB_LINKFLAGS_FROM_LIBS], 696 [ 697 AC_REQUIRE([AC_LIB_RPATH]) 698 AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) 699 $1= 700 if test "$enable_rpath" != no; then 701 if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then 702 dnl Use an explicit option to hardcode directories into the resulting 703 dnl binary. 704 rpathdirs= 705 next= 706 for opt in $2; do 707 if test -n "$next"; then 708 dir="$next" 709 dnl No need to hardcode the standard /usr/lib. 710 if test "X$dir" != "X/usr/$acl_libdirstem" \ 711 && test "X$dir" != "X/usr/$acl_libdirstem2"; then 712 rpathdirs="$rpathdirs $dir" 713 fi 714 next= 715 else 716 case $opt in 717 -L) next=yes ;; 718 -L*) dir=`echo "X$opt" | sed -e 's,^X-L,,'` 719 dnl No need to hardcode the standard /usr/lib. 720 if test "X$dir" != "X/usr/$acl_libdirstem" \ 721 && test "X$dir" != "X/usr/$acl_libdirstem2"; then 722 rpathdirs="$rpathdirs $dir" 723 fi 724 next= ;; 725 *) next= ;; 726 esac 727 fi 728 done 729 if test "X$rpathdirs" != "X"; then 730 if test -n ""$3""; then 731 dnl libtool is used for linking. Use -R options. 732 for dir in $rpathdirs; do 733 $1="${$1}${$1:+ }-R$dir" 734 done 735 else 736 dnl The linker is used for linking directly. 737 if test -n "$acl_hardcode_libdir_separator"; then 738 dnl Weird platform: only the last -rpath option counts, the user 739 dnl must pass all path elements in one option. 740 alldirs= 741 for dir in $rpathdirs; do 742 alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$dir" 743 done 744 acl_save_libdir="$libdir" 745 libdir="$alldirs" 746 eval flag=\"$acl_hardcode_libdir_flag_spec\" 747 libdir="$acl_save_libdir" 748 $1="$flag" 749 else 750 dnl The -rpath options are cumulative. 751 for dir in $rpathdirs; do 752 acl_save_libdir="$libdir" 753 libdir="$dir" 754 eval flag=\"$acl_hardcode_libdir_flag_spec\" 755 libdir="$acl_save_libdir" 756 $1="${$1}${$1:+ }$flag" 757 done 758 fi 759 fi 760 fi 761 fi 762 fi 763 AC_SUBST([$1]) 764 ]) 765