]> git.proxmox.com Git - mirror_zfs.git/blob - config/lib-link.m4
Linux 5.0 compat: ASM_BUG macro
[mirror_zfs.git] / config / lib-link.m4
1 # lib-link.m4 serial 28
2 dnl Copyright (C) 2001-2019 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.61])
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],[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
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],[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
116 dnl Determine the platform dependent parameters needed to use rpath:
117 dnl acl_libext,
118 dnl acl_shlibext,
119 dnl acl_libname_spec,
120 dnl acl_library_names_spec,
121 dnl acl_hardcode_libdir_flag_spec,
122 dnl acl_hardcode_libdir_separator,
123 dnl acl_hardcode_direct,
124 dnl acl_hardcode_minus_L.
125 AC_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
155 dnl AC_LIB_FROMPACKAGE(name, package)
156 dnl declares that libname comes from the given package. The configure file
157 dnl will then not have a --with-libname-prefix option but a
158 dnl --with-package-prefix option. Several libraries can come from the same
159 dnl package. This declaration must occur before an AC_LIB_LINKFLAGS or similar
160 dnl macro call that searches for libname.
161 AC_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
176 dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and
177 dnl the libraries corresponding to explicit and implicit dependencies.
178 dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables.
179 dnl Also, sets the LIB${NAME}_PREFIX variable to nonempty if libname was found
180 dnl in ${LIB${NAME}_PREFIX}/$acl_libdirstem.
181 AC_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-seach.
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
677 dnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR,
678 dnl unless already present in VAR.
679 dnl Works only for CPPFLAGS, not for LIB* variables because that sometimes
680 dnl contains two or three consecutive elements that belong together.
681 AC_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
698 dnl For those cases where a variable contains several -L and -l options
699 dnl referring to unknown libraries and directories, this macro determines the
700 dnl necessary additional linker options for the runtime path.
701 dnl AC_LIB_LINKFLAGS_FROM_LIBS([LDADDVAR], [LIBSVALUE], [USE-LIBTOOL])
702 dnl sets LDADDVAR to linker options needed together with LIBSVALUE.
703 dnl If USE-LIBTOOL evaluates to non-empty, linking with libtool is assumed,
704 dnl otherwise linking without libtool is assumed.
705 AC_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 ])