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