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