1# lib-link.m4 serial 31 2dnl Copyright (C) 2001-2020 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 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 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 eval additional_libdir2=\"$exec_prefix/$acl_libdirstem2\" 196 eval additional_libdir3=\"$exec_prefix/$acl_libdirstem3\" 197 ]) 198 AC_ARG_WITH(PACK[-prefix], 199[[ --with-]]PACK[[-prefix[=DIR] search for ]PACKLIBS[ in DIR/include and DIR/lib 200 --without-]]PACK[[-prefix don't search for ]PACKLIBS[ in includedir and libdir]], 201[ 202 if test "X$withval" = "Xno"; then 203 use_additional=no 204 else 205 if test "X$withval" = "X"; then 206 AC_LIB_WITH_FINAL_PREFIX([ 207 eval additional_includedir=\"$includedir\" 208 eval additional_libdir=\"$libdir\" 209 eval additional_libdir2=\"$exec_prefix/$acl_libdirstem2\" 210 eval additional_libdir3=\"$exec_prefix/$acl_libdirstem3\" 211 ]) 212 else 213 additional_includedir="$withval/include" 214 additional_libdir="$withval/$acl_libdirstem" 215 additional_libdir2="$withval/$acl_libdirstem2" 216 additional_libdir3="$withval/$acl_libdirstem3" 217 fi 218 fi 219]) 220 if test "X$additional_libdir2" = "X$additional_libdir"; then 221 additional_libdir2= 222 fi 223 if test "X$additional_libdir3" = "X$additional_libdir"; then 224 additional_libdir3= 225 fi 226 dnl Search the library and its dependencies in $additional_libdir and 227 dnl $LDFLAGS. Using breadth-first-seach. 228 LIB[]NAME= 229 LTLIB[]NAME= 230 INC[]NAME= 231 LIB[]NAME[]_PREFIX= 232 dnl HAVE_LIB${NAME} is an indicator that LIB${NAME}, LTLIB${NAME} have been 233 dnl computed. So it has to be reset here. 234 HAVE_LIB[]NAME= 235 rpathdirs= 236 ltrpathdirs= 237 names_already_handled= 238 names_next_round='$1 $2' 239 while test -n "$names_next_round"; do 240 names_this_round="$names_next_round" 241 names_next_round= 242 for name in $names_this_round; do 243 already_handled= 244 for n in $names_already_handled; do 245 if test "$n" = "$name"; then 246 already_handled=yes 247 break 248 fi 249 done 250 if test -z "$already_handled"; then 251 names_already_handled="$names_already_handled $name" 252 dnl See if it was already located by an earlier AC_LIB_LINKFLAGS 253 dnl or AC_LIB_HAVE_LINKFLAGS call. 254 uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./+-|ABCDEFGHIJKLMNOPQRSTUVWXYZ____|'` 255 eval value=\"\$HAVE_LIB$uppername\" 256 if test -n "$value"; then 257 if test "$value" = yes; then 258 eval value=\"\$LIB$uppername\" 259 test -z "$value" || LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$value" 260 eval value=\"\$LTLIB$uppername\" 261 test -z "$value" || LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$value" 262 else 263 dnl An earlier call to AC_LIB_HAVE_LINKFLAGS has determined 264 dnl that this library doesn't exist. So just drop it. 265 : 266 fi 267 else 268 dnl Search the library lib$name in $additional_libdir and $LDFLAGS 269 dnl and the already constructed $LIBNAME/$LTLIBNAME. 270 found_dir= 271 found_la= 272 found_so= 273 found_a= 274 eval libname=\"$acl_libname_spec\" # typically: libname=lib$name 275 if test -n "$acl_shlibext"; then 276 shrext=".$acl_shlibext" # typically: shrext=.so 277 else 278 shrext= 279 fi 280 if test $use_additional = yes; then 281 for additional_libdir_variable in additional_libdir additional_libdir2 additional_libdir3; do 282 if test "X$found_dir" = "X"; then 283 eval dir=\$$additional_libdir_variable 284 if test -n "$dir"; then 285 dnl The same code as in the loop below: 286 dnl First look for a shared library. 287 if test -n "$acl_shlibext"; then 288 if test -f "$dir/$libname$shrext" && acl_is_expected_elfclass < "$dir/$libname$shrext"; then 289 found_dir="$dir" 290 found_so="$dir/$libname$shrext" 291 else 292 if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then 293 ver=`(cd "$dir" && \ 294 for f in "$libname$shrext".*; do echo "$f"; done \ 295 | sed -e "s,^$libname$shrext\\\\.,," \ 296 | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ 297 | sed 1q ) 2>/dev/null` 298 if test -n "$ver" && test -f "$dir/$libname$shrext.$ver" && acl_is_expected_elfclass < "$dir/$libname$shrext.$ver"; then 299 found_dir="$dir" 300 found_so="$dir/$libname$shrext.$ver" 301 fi 302 else 303 eval library_names=\"$acl_library_names_spec\" 304 for f in $library_names; do 305 if test -f "$dir/$f" && acl_is_expected_elfclass < "$dir/$f"; then 306 found_dir="$dir" 307 found_so="$dir/$f" 308 break 309 fi 310 done 311 fi 312 fi 313 fi 314 dnl Then look for a static library. 315 if test "X$found_dir" = "X"; then 316 if test -f "$dir/$libname.$acl_libext" && ${AR-ar} -p "$dir/$libname.$acl_libext" | acl_is_expected_elfclass; then 317 found_dir="$dir" 318 found_a="$dir/$libname.$acl_libext" 319 fi 320 fi 321 if test "X$found_dir" != "X"; then 322 if test -f "$dir/$libname.la"; then 323 found_la="$dir/$libname.la" 324 fi 325 fi 326 fi 327 fi 328 done 329 fi 330 if test "X$found_dir" = "X"; then 331 for x in $LDFLAGS $LTLIB[]NAME; do 332 AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) 333 case "$x" in 334 -L*) 335 dir=`echo "X$x" | sed -e 's/^X-L//'` 336 dnl First look for a shared library. 337 if test -n "$acl_shlibext"; then 338 if test -f "$dir/$libname$shrext" && acl_is_expected_elfclass < "$dir/$libname$shrext"; then 339 found_dir="$dir" 340 found_so="$dir/$libname$shrext" 341 else 342 if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then 343 ver=`(cd "$dir" && \ 344 for f in "$libname$shrext".*; do echo "$f"; done \ 345 | sed -e "s,^$libname$shrext\\\\.,," \ 346 | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ 347 | sed 1q ) 2>/dev/null` 348 if test -n "$ver" && test -f "$dir/$libname$shrext.$ver" && acl_is_expected_elfclass < "$dir/$libname$shrext.$ver"; then 349 found_dir="$dir" 350 found_so="$dir/$libname$shrext.$ver" 351 fi 352 else 353 eval library_names=\"$acl_library_names_spec\" 354 for f in $library_names; do 355 if test -f "$dir/$f" && acl_is_expected_elfclass < "$dir/$f"; then 356 found_dir="$dir" 357 found_so="$dir/$f" 358 break 359 fi 360 done 361 fi 362 fi 363 fi 364 dnl Then look for a static library. 365 if test "X$found_dir" = "X"; then 366 if test -f "$dir/$libname.$acl_libext" && ${AR-ar} -p "$dir/$libname.$acl_libext" | acl_is_expected_elfclass; then 367 found_dir="$dir" 368 found_a="$dir/$libname.$acl_libext" 369 fi 370 fi 371 if test "X$found_dir" != "X"; then 372 if test -f "$dir/$libname.la"; then 373 found_la="$dir/$libname.la" 374 fi 375 fi 376 ;; 377 esac 378 if test "X$found_dir" != "X"; then 379 break 380 fi 381 done 382 fi 383 if test "X$found_dir" != "X"; then 384 dnl Found the library. 385 LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$found_dir -l$name" 386 if test "X$found_so" != "X"; then 387 dnl Linking with a shared library. We attempt to hardcode its 388 dnl directory into the executable's runpath, unless it's the 389 dnl standard /usr/lib. 390 if test "$enable_rpath" = no \ 391 || test "X$found_dir" = "X/usr/$acl_libdirstem" \ 392 || test "X$found_dir" = "X/usr/$acl_libdirstem2" \ 393 || test "X$found_dir" = "X/usr/$acl_libdirstem3"; then 394 dnl No hardcoding is needed. 395 LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" 396 else 397 dnl Use an explicit option to hardcode DIR into the resulting 398 dnl binary. 399 dnl Potentially add DIR to ltrpathdirs. 400 dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. 401 haveit= 402 for x in $ltrpathdirs; do 403 if test "X$x" = "X$found_dir"; then 404 haveit=yes 405 break 406 fi 407 done 408 if test -z "$haveit"; then 409 ltrpathdirs="$ltrpathdirs $found_dir" 410 fi 411 dnl The hardcoding into $LIBNAME is system dependent. 412 if test "$acl_hardcode_direct" = yes; then 413 dnl Using DIR/libNAME.so during linking hardcodes DIR into the 414 dnl resulting binary. 415 LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" 416 else 417 if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then 418 dnl Use an explicit option to hardcode DIR into the resulting 419 dnl binary. 420 LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" 421 dnl Potentially add DIR to rpathdirs. 422 dnl The rpathdirs will be appended to $LIBNAME at the end. 423 haveit= 424 for x in $rpathdirs; do 425 if test "X$x" = "X$found_dir"; then 426 haveit=yes 427 break 428 fi 429 done 430 if test -z "$haveit"; then 431 rpathdirs="$rpathdirs $found_dir" 432 fi 433 else 434 dnl Rely on "-L$found_dir". 435 dnl But don't add it if it's already contained in the LDFLAGS 436 dnl or the already constructed $LIBNAME 437 haveit= 438 for x in $LDFLAGS $LIB[]NAME; do 439 AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) 440 if test "X$x" = "X-L$found_dir"; then 441 haveit=yes 442 break 443 fi 444 done 445 if test -z "$haveit"; then 446 LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir" 447 fi 448 if test "$acl_hardcode_minus_L" != no; then 449 dnl FIXME: Not sure whether we should use 450 dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" 451 dnl here. 452 LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" 453 else 454 dnl We cannot use $acl_hardcode_runpath_var and LD_RUN_PATH 455 dnl here, because this doesn't fit in flags passed to the 456 dnl compiler. So give up. No hardcoding. This affects only 457 dnl very old systems. 458 dnl FIXME: Not sure whether we should use 459 dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" 460 dnl here. 461 LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" 462 fi 463 fi 464 fi 465 fi 466 else 467 if test "X$found_a" != "X"; then 468 dnl Linking with a static library. 469 LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_a" 470 else 471 dnl We shouldn't come here, but anyway it's good to have a 472 dnl fallback. 473 LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir -l$name" 474 fi 475 fi 476 dnl Assume the include files are nearby. 477 additional_includedir= 478 case "$found_dir" in 479 */$acl_libdirstem | */$acl_libdirstem/) 480 basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` 481 if test "$name" = '$1'; then 482 LIB[]NAME[]_PREFIX="$basedir" 483 fi 484 additional_includedir="$basedir/include" 485 ;; 486 */$acl_libdirstem2 | */$acl_libdirstem2/) 487 basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'` 488 if test "$name" = '$1'; then 489 LIB[]NAME[]_PREFIX="$basedir" 490 fi 491 additional_includedir="$basedir/include" 492 ;; 493 */$acl_libdirstem3 | */$acl_libdirstem3/) 494 basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem3/"'*$,,'` 495 if test "$name" = '$1'; then 496 LIB[]NAME[]_PREFIX="$basedir" 497 fi 498 additional_includedir="$basedir/include" 499 ;; 500 esac 501 if test "X$additional_includedir" != "X"; then 502 dnl Potentially add $additional_includedir to $INCNAME. 503 dnl But don't add it 504 dnl 1. if it's the standard /usr/include, 505 dnl 2. if it's /usr/local/include and we are using GCC on Linux, 506 dnl 3. if it's already present in $CPPFLAGS or the already 507 dnl constructed $INCNAME, 508 dnl 4. if it doesn't exist as a directory. 509 if test "X$additional_includedir" != "X/usr/include"; then 510 haveit= 511 if test "X$additional_includedir" = "X/usr/local/include"; then 512 if test -n "$GCC"; then 513 case $host_os in 514 linux* | gnu* | k*bsd*-gnu) haveit=yes;; 515 esac 516 fi 517 fi 518 if test -z "$haveit"; then 519 for x in $CPPFLAGS $INC[]NAME; do 520 AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) 521 if test "X$x" = "X-I$additional_includedir"; then 522 haveit=yes 523 break 524 fi 525 done 526 if test -z "$haveit"; then 527 if test -d "$additional_includedir"; then 528 dnl Really add $additional_includedir to $INCNAME. 529 INC[]NAME="${INC[]NAME}${INC[]NAME:+ }-I$additional_includedir" 530 fi 531 fi 532 fi 533 fi 534 fi 535 dnl Look for dependencies. 536 if test -n "$found_la"; then 537 dnl Read the .la file. It defines the variables 538 dnl dlname, library_names, old_library, dependency_libs, current, 539 dnl age, revision, installed, dlopen, dlpreopen, libdir. 540 save_libdir="$libdir" 541 case "$found_la" in 542 */* | *\\*) . "$found_la" ;; 543 *) . "./$found_la" ;; 544 esac 545 libdir="$save_libdir" 546 dnl We use only dependency_libs. 547 for dep in $dependency_libs; do 548 case "$dep" in 549 -L*) 550 dependency_libdir=`echo "X$dep" | sed -e 's/^X-L//'` 551 dnl Potentially add $dependency_libdir to $LIBNAME and $LTLIBNAME. 552 dnl But don't add it 553 dnl 1. if it's the standard /usr/lib, 554 dnl 2. if it's /usr/local/lib and we are using GCC on Linux, 555 dnl 3. if it's already present in $LDFLAGS or the already 556 dnl constructed $LIBNAME, 557 dnl 4. if it doesn't exist as a directory. 558 if test "X$dependency_libdir" != "X/usr/$acl_libdirstem" \ 559 && test "X$dependency_libdir" != "X/usr/$acl_libdirstem2" \ 560 && test "X$dependency_libdir" != "X/usr/$acl_libdirstem3"; then 561 haveit= 562 if test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem" \ 563 || test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem2" \ 564 || test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem3"; then 565 if test -n "$GCC"; then 566 case $host_os in 567 linux* | gnu* | k*bsd*-gnu) haveit=yes;; 568 esac 569 fi 570 fi 571 if test -z "$haveit"; then 572 haveit= 573 for x in $LDFLAGS $LIB[]NAME; do 574 AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) 575 if test "X$x" = "X-L$dependency_libdir"; then 576 haveit=yes 577 break 578 fi 579 done 580 if test -z "$haveit"; then 581 if test -d "$dependency_libdir"; then 582 dnl Really add $dependency_libdir to $LIBNAME. 583 LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$dependency_libdir" 584 fi 585 fi 586 haveit= 587 for x in $LDFLAGS $LTLIB[]NAME; do 588 AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) 589 if test "X$x" = "X-L$dependency_libdir"; then 590 haveit=yes 591 break 592 fi 593 done 594 if test -z "$haveit"; then 595 if test -d "$dependency_libdir"; then 596 dnl Really add $dependency_libdir to $LTLIBNAME. 597 LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$dependency_libdir" 598 fi 599 fi 600 fi 601 fi 602 ;; 603 -R*) 604 dir=`echo "X$dep" | sed -e 's/^X-R//'` 605 if test "$enable_rpath" != no; then 606 dnl Potentially add DIR to rpathdirs. 607 dnl The rpathdirs will be appended to $LIBNAME at the end. 608 haveit= 609 for x in $rpathdirs; do 610 if test "X$x" = "X$dir"; then 611 haveit=yes 612 break 613 fi 614 done 615 if test -z "$haveit"; then 616 rpathdirs="$rpathdirs $dir" 617 fi 618 dnl Potentially add DIR to ltrpathdirs. 619 dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. 620 haveit= 621 for x in $ltrpathdirs; do 622 if test "X$x" = "X$dir"; then 623 haveit=yes 624 break 625 fi 626 done 627 if test -z "$haveit"; then 628 ltrpathdirs="$ltrpathdirs $dir" 629 fi 630 fi 631 ;; 632 -l*) 633 dnl Handle this in the next round. 634 names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` 635 ;; 636 *.la) 637 dnl Handle this in the next round. Throw away the .la's 638 dnl directory; it is already contained in a preceding -L 639 dnl option. 640 names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` 641 ;; 642 *) 643 dnl Most likely an immediate library name. 644 LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$dep" 645 LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$dep" 646 ;; 647 esac 648 done 649 fi 650 else 651 dnl Didn't find the library; assume it is in the system directories 652 dnl known to the linker and runtime loader. (All the system 653 dnl directories known to the linker should also be known to the 654 dnl runtime loader, otherwise the system is severely misconfigured.) 655 LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" 656 LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name" 657 fi 658 fi 659 fi 660 done 661 done 662 if test "X$rpathdirs" != "X"; then 663 if test -n "$acl_hardcode_libdir_separator"; then 664 dnl Weird platform: only the last -rpath option counts, the user must 665 dnl pass all path elements in one option. We can arrange that for a 666 dnl single library, but not when more than one $LIBNAMEs are used. 667 alldirs= 668 for found_dir in $rpathdirs; do 669 alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" 670 done 671 dnl Note: acl_hardcode_libdir_flag_spec uses $libdir and $wl. 672 acl_save_libdir="$libdir" 673 libdir="$alldirs" 674 eval flag=\"$acl_hardcode_libdir_flag_spec\" 675 libdir="$acl_save_libdir" 676 LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" 677 else 678 dnl The -rpath options are cumulative. 679 for found_dir in $rpathdirs; do 680 acl_save_libdir="$libdir" 681 libdir="$found_dir" 682 eval flag=\"$acl_hardcode_libdir_flag_spec\" 683 libdir="$acl_save_libdir" 684 LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" 685 done 686 fi 687 fi 688 if test "X$ltrpathdirs" != "X"; then 689 dnl When using libtool, the option that works for both libraries and 690 dnl executables is -R. The -R options are cumulative. 691 for found_dir in $ltrpathdirs; do 692 LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir" 693 done 694 fi 695 popdef([PACKLIBS]) 696 popdef([PACKUP]) 697 popdef([PACK]) 698 popdef([NAME]) 699]) 700 701dnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR, 702dnl unless already present in VAR. 703dnl Works only for CPPFLAGS, not for LIB* variables because that sometimes 704dnl contains two or three consecutive elements that belong together. 705AC_DEFUN([AC_LIB_APPENDTOVAR], 706[ 707 for element in [$2]; do 708 haveit= 709 for x in $[$1]; do 710 AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) 711 if test "X$x" = "X$element"; then 712 haveit=yes 713 break 714 fi 715 done 716 if test -z "$haveit"; then 717 [$1]="${[$1]}${[$1]:+ }$element" 718 fi 719 done 720]) 721 722dnl For those cases where a variable contains several -L and -l options 723dnl referring to unknown libraries and directories, this macro determines the 724dnl necessary additional linker options for the runtime path. 725dnl AC_LIB_LINKFLAGS_FROM_LIBS([LDADDVAR], [LIBSVALUE], [USE-LIBTOOL]) 726dnl sets LDADDVAR to linker options needed together with LIBSVALUE. 727dnl If USE-LIBTOOL evaluates to non-empty, linking with libtool is assumed, 728dnl otherwise linking without libtool is assumed. 729AC_DEFUN([AC_LIB_LINKFLAGS_FROM_LIBS], 730[ 731 AC_REQUIRE([AC_LIB_RPATH]) 732 AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) 733 $1= 734 if test "$enable_rpath" != no; then 735 if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then 736 dnl Use an explicit option to hardcode directories into the resulting 737 dnl binary. 738 rpathdirs= 739 next= 740 for opt in $2; do 741 if test -n "$next"; then 742 dir="$next" 743 dnl No need to hardcode the standard /usr/lib. 744 if test "X$dir" != "X/usr/$acl_libdirstem" \ 745 && test "X$dir" != "X/usr/$acl_libdirstem2" \ 746 && test "X$dir" != "X/usr/$acl_libdirstem3"; then 747 rpathdirs="$rpathdirs $dir" 748 fi 749 next= 750 else 751 case $opt in 752 -L) next=yes ;; 753 -L*) dir=`echo "X$opt" | sed -e 's,^X-L,,'` 754 dnl No need to hardcode the standard /usr/lib. 755 if test "X$dir" != "X/usr/$acl_libdirstem" \ 756 && test "X$dir" != "X/usr/$acl_libdirstem2" \ 757 && test "X$dir" != "X/usr/$acl_libdirstem3"; then 758 rpathdirs="$rpathdirs $dir" 759 fi 760 next= ;; 761 *) next= ;; 762 esac 763 fi 764 done 765 if test "X$rpathdirs" != "X"; then 766 if test -n ""$3""; then 767 dnl libtool is used for linking. Use -R options. 768 for dir in $rpathdirs; do 769 $1="${$1}${$1:+ }-R$dir" 770 done 771 else 772 dnl The linker is used for linking directly. 773 if test -n "$acl_hardcode_libdir_separator"; then 774 dnl Weird platform: only the last -rpath option counts, the user 775 dnl must pass all path elements in one option. 776 alldirs= 777 for dir in $rpathdirs; do 778 alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$dir" 779 done 780 acl_save_libdir="$libdir" 781 libdir="$alldirs" 782 eval flag=\"$acl_hardcode_libdir_flag_spec\" 783 libdir="$acl_save_libdir" 784 $1="$flag" 785 else 786 dnl The -rpath options are cumulative. 787 for dir in $rpathdirs; do 788 acl_save_libdir="$libdir" 789 libdir="$dir" 790 eval flag=\"$acl_hardcode_libdir_flag_spec\" 791 libdir="$acl_save_libdir" 792 $1="${$1}${$1:+ }$flag" 793 done 794 fi 795 fi 796 fi 797 fi 798 fi 799 AC_SUBST([$1]) 800]) 801