Merge branch 'master' into wip-manual-2
[bpt/guile.git] / m4 / lib-link.m4
1 # lib-link.m4 serial 20 (gettext-0.18)
2 dnl Copyright (C) 2001-2010 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 ])