1
# lib-link.m4 serial 4 (gettext-0.12)
2
dnl Copyright (C) 2001-2003 Free Software Foundation, Inc.
3
dnl This file is free software, distributed under the terms of the GNU
4
dnl General Public License. As a special exception to the GNU General
5
dnl Public License, this file may be distributed as part of a program
6
dnl that contains a configuration script generated by Autoconf, under
7
dnl the same distribution terms as the rest of that program.
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
AC_DEFUN([AC_LIB_LINKFLAGS],
17
AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
18
AC_REQUIRE([AC_LIB_RPATH])
19
define([Name],[translit([$1],[./-], [___])])
20
define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
21
[ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
22
AC_CACHE_CHECK([how to link with lib[]$1], [ac_cv_lib[]Name[]_libs], [
23
AC_LIB_LINKFLAGS_BODY([$1], [$2])
24
ac_cv_lib[]Name[]_libs="$LIB[]NAME"
25
ac_cv_lib[]Name[]_ltlibs="$LTLIB[]NAME"
26
ac_cv_lib[]Name[]_cppflags="$INC[]NAME"
28
LIB[]NAME="$ac_cv_lib[]Name[]_libs"
29
LTLIB[]NAME="$ac_cv_lib[]Name[]_ltlibs"
30
INC[]NAME="$ac_cv_lib[]Name[]_cppflags"
31
AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME)
34
dnl Also set HAVE_LIB[]NAME so that AC_LIB_HAVE_LINKFLAGS can reuse the
35
dnl results of this search when this library appears as a dependency.
41
dnl AC_LIB_HAVE_LINKFLAGS(name, dependencies, includes, testcode)
42
dnl searches for libname and the libraries corresponding to explicit and
43
dnl implicit dependencies, together with the specified include files and
44
dnl the ability to compile and link the specified testcode. If found, it
45
dnl sets and AC_SUBSTs HAVE_LIB${NAME}=yes and the LIB${NAME} and
46
dnl LTLIB${NAME} variables and augments the CPPFLAGS variable, and
47
dnl #defines HAVE_LIB${NAME} to 1. Otherwise, it sets and AC_SUBSTs
48
dnl HAVE_LIB${NAME}=no and LIB${NAME} and LTLIB${NAME} to empty.
49
AC_DEFUN([AC_LIB_HAVE_LINKFLAGS],
51
AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
52
AC_REQUIRE([AC_LIB_RPATH])
53
define([Name],[translit([$1],[./-], [___])])
54
define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
55
[ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
57
dnl Search for lib[]Name and define LIB[]NAME, LTLIB[]NAME and INC[]NAME
59
AC_LIB_LINKFLAGS_BODY([$1], [$2])
61
dnl Add $INC[]NAME to CPPFLAGS before performing the following checks,
62
dnl because if the user has installed lib[]Name and not disabled its use
63
dnl via --without-lib[]Name-prefix, he wants to use it.
64
ac_save_CPPFLAGS="$CPPFLAGS"
65
AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME)
67
AC_CACHE_CHECK([for lib[]$1], [ac_cv_lib[]Name], [
69
LIBS="$LIBS $LIB[]NAME"
70
AC_TRY_LINK([$3], [$4], [ac_cv_lib[]Name=yes], [ac_cv_lib[]Name=no])
73
if test "$ac_cv_lib[]Name" = yes; then
75
AC_DEFINE([HAVE_LIB]NAME, 1, [Define if you have the $1 library.])
76
AC_MSG_CHECKING([how to link with lib[]$1])
77
AC_MSG_RESULT([$LIB[]NAME])
80
dnl If $LIB[]NAME didn't lead to a usable library, we don't need
81
dnl $INC[]NAME either.
82
CPPFLAGS="$ac_save_CPPFLAGS"
86
AC_SUBST([HAVE_LIB]NAME)
93
dnl Determine the platform dependent parameters needed to use rpath:
94
dnl libext, shlibext, hardcode_libdir_flag_spec, hardcode_libdir_separator,
95
dnl hardcode_direct, hardcode_minus_L.
96
AC_DEFUN([AC_LIB_RPATH],
98
AC_REQUIRE([AC_PROG_CC]) dnl we use $CC, $GCC, $LDFLAGS
99
AC_REQUIRE([AC_LIB_PROG_LD]) dnl we use $LD, $with_gnu_ld
100
AC_REQUIRE([AC_CANONICAL_HOST]) dnl we use $host
101
AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) dnl we use $ac_aux_dir
102
AC_CACHE_CHECK([for shared library run path origin], acl_cv_rpath, [
103
CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \
104
${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh
110
libext="$acl_cv_libext"
111
shlibext="$acl_cv_shlibext"
112
hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec"
113
hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator"
114
hardcode_direct="$acl_cv_hardcode_direct"
115
hardcode_minus_L="$acl_cv_hardcode_minus_L"
116
dnl Determine whether the user wants rpath handling at all.
118
[ --disable-rpath do not hardcode runtime library paths],
122
dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and
123
dnl the libraries corresponding to explicit and implicit dependencies.
124
dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables.
125
AC_DEFUN([AC_LIB_LINKFLAGS_BODY],
127
define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
128
[ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
129
dnl By default, look in $includedir and $libdir.
131
AC_LIB_WITH_FINAL_PREFIX([
132
eval additional_includedir=\"$includedir\"
133
eval additional_libdir=\"$libdir\"
135
AC_LIB_ARG_WITH([lib$1-prefix],
136
[ --with-lib$1-prefix[=DIR] search for lib$1 in DIR/include and DIR/lib
137
--without-lib$1-prefix don't search for lib$1 in includedir and libdir],
139
if test "X$withval" = "Xno"; then
142
if test "X$withval" = "X"; then
143
AC_LIB_WITH_FINAL_PREFIX([
144
eval additional_includedir=\"$includedir\"
145
eval additional_libdir=\"$libdir\"
148
additional_includedir="$withval/include"
149
additional_libdir="$withval/lib"
153
dnl Search the library and its dependencies in $additional_libdir and
154
dnl $LDFLAGS. Using breadth-first-seach.
160
names_already_handled=
161
names_next_round='$1 $2'
162
while test -n "$names_next_round"; do
163
names_this_round="$names_next_round"
165
for name in $names_this_round; do
167
for n in $names_already_handled; do
168
if test "$n" = "$name"; then
173
if test -z "$already_handled"; then
174
names_already_handled="$names_already_handled $name"
175
dnl See if it was already located by an earlier AC_LIB_LINKFLAGS
176
dnl or AC_LIB_HAVE_LINKFLAGS call.
177
uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'`
178
eval value=\"\$HAVE_LIB$uppername\"
179
if test -n "$value"; then
180
if test "$value" = yes; then
181
eval value=\"\$LIB$uppername\"
182
test -z "$value" || LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$value"
183
eval value=\"\$LTLIB$uppername\"
184
test -z "$value" || LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$value"
186
dnl An earlier call to AC_LIB_HAVE_LINKFLAGS has determined
187
dnl that this library doesn't exist. So just drop it.
191
dnl Search the library lib$name in $additional_libdir and $LDFLAGS
192
dnl and the already constructed $LIBNAME/$LTLIBNAME.
197
if test $use_additional = yes; then
198
if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then
199
found_dir="$additional_libdir"
200
found_so="$additional_libdir/lib$name.$shlibext"
201
if test -f "$additional_libdir/lib$name.la"; then
202
found_la="$additional_libdir/lib$name.la"
205
if test -f "$additional_libdir/lib$name.$libext"; then
206
found_dir="$additional_libdir"
207
found_a="$additional_libdir/lib$name.$libext"
208
if test -f "$additional_libdir/lib$name.la"; then
209
found_la="$additional_libdir/lib$name.la"
214
if test "X$found_dir" = "X"; then
215
for x in $LDFLAGS $LTLIB[]NAME; do
216
AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
219
dir=`echo "X$x" | sed -e 's/^X-L//'`
220
if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext"; then
222
found_so="$dir/lib$name.$shlibext"
223
if test -f "$dir/lib$name.la"; then
224
found_la="$dir/lib$name.la"
227
if test -f "$dir/lib$name.$libext"; then
229
found_a="$dir/lib$name.$libext"
230
if test -f "$dir/lib$name.la"; then
231
found_la="$dir/lib$name.la"
237
if test "X$found_dir" != "X"; then
242
if test "X$found_dir" != "X"; then
243
dnl Found the library.
244
LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$found_dir -l$name"
245
if test "X$found_so" != "X"; then
246
dnl Linking with a shared library. We attempt to hardcode its
247
dnl directory into the executable's runpath, unless it's the
248
dnl standard /usr/lib.
249
if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/lib"; then
250
dnl No hardcoding is needed.
251
LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
253
dnl Use an explicit option to hardcode DIR into the resulting
255
dnl Potentially add DIR to ltrpathdirs.
256
dnl The ltrpathdirs will be appended to $LTLIBNAME at the end.
258
for x in $ltrpathdirs; do
259
if test "X$x" = "X$found_dir"; then
264
if test -z "$haveit"; then
265
ltrpathdirs="$ltrpathdirs $found_dir"
267
dnl The hardcoding into $LIBNAME is system dependent.
268
if test "$hardcode_direct" = yes; then
269
dnl Using DIR/libNAME.so during linking hardcodes DIR into the
270
dnl resulting binary.
271
LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
273
if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then
274
dnl Use an explicit option to hardcode DIR into the resulting
276
LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
277
dnl Potentially add DIR to rpathdirs.
278
dnl The rpathdirs will be appended to $LIBNAME at the end.
280
for x in $rpathdirs; do
281
if test "X$x" = "X$found_dir"; then
286
if test -z "$haveit"; then
287
rpathdirs="$rpathdirs $found_dir"
290
dnl Rely on "-L$found_dir".
291
dnl But don't add it if it's already contained in the LDFLAGS
292
dnl or the already constructed $LIBNAME
294
for x in $LDFLAGS $LIB[]NAME; do
295
AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
296
if test "X$x" = "X-L$found_dir"; then
301
if test -z "$haveit"; then
302
LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir"
304
if test "$hardcode_minus_L" != no; then
305
dnl FIXME: Not sure whether we should use
306
dnl "-L$found_dir -l$name" or "-L$found_dir $found_so"
308
LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
310
dnl We cannot use $hardcode_runpath_var and LD_RUN_PATH
311
dnl here, because this doesn't fit in flags passed to the
312
dnl compiler. So give up. No hardcoding. This affects only
313
dnl very old systems.
314
dnl FIXME: Not sure whether we should use
315
dnl "-L$found_dir -l$name" or "-L$found_dir $found_so"
317
LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name"
323
if test "X$found_a" != "X"; then
324
dnl Linking with a static library.
325
LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_a"
327
dnl We shouldn't come here, but anyway it's good to have a
329
LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir -l$name"
332
dnl Assume the include files are nearby.
333
additional_includedir=
336
basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e 's,/lib/*$,,'`
337
additional_includedir="$basedir/include"
340
if test "X$additional_includedir" != "X"; then
341
dnl Potentially add $additional_includedir to $INCNAME.
343
dnl 1. if it's the standard /usr/include,
344
dnl 2. if it's /usr/local/include and we are using GCC on Linux,
345
dnl 3. if it's already present in $CPPFLAGS or the already
346
dnl constructed $INCNAME,
347
dnl 4. if it doesn't exist as a directory.
348
if test "X$additional_includedir" != "X/usr/include"; then
350
if test "X$additional_includedir" = "X/usr/local/include"; then
351
if test -n "$GCC"; then
357
if test -z "$haveit"; then
358
for x in $CPPFLAGS $INC[]NAME; do
359
AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
360
if test "X$x" = "X-I$additional_includedir"; then
365
if test -z "$haveit"; then
366
if test -d "$additional_includedir"; then
367
dnl Really add $additional_includedir to $INCNAME.
368
INC[]NAME="${INC[]NAME}${INC[]NAME:+ }-I$additional_includedir"
374
dnl Look for dependencies.
375
if test -n "$found_la"; then
376
dnl Read the .la file. It defines the variables
377
dnl dlname, library_names, old_library, dependency_libs, current,
378
dnl age, revision, installed, dlopen, dlpreopen, libdir.
379
save_libdir="$libdir"
381
*/* | *\\*) . "$found_la" ;;
382
*) . "./$found_la" ;;
384
libdir="$save_libdir"
385
dnl We use only dependency_libs.
386
for dep in $dependency_libs; do
389
additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'`
390
dnl Potentially add $additional_libdir to $LIBNAME and $LTLIBNAME.
392
dnl 1. if it's the standard /usr/lib,
393
dnl 2. if it's /usr/local/lib and we are using GCC on Linux,
394
dnl 3. if it's already present in $LDFLAGS or the already
395
dnl constructed $LIBNAME,
396
dnl 4. if it doesn't exist as a directory.
397
if test "X$additional_libdir" != "X/usr/lib"; then
399
if test "X$additional_libdir" = "X/usr/local/lib"; then
400
if test -n "$GCC"; then
406
if test -z "$haveit"; then
408
for x in $LDFLAGS $LIB[]NAME; do
409
AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
410
if test "X$x" = "X-L$additional_libdir"; then
415
if test -z "$haveit"; then
416
if test -d "$additional_libdir"; then
417
dnl Really add $additional_libdir to $LIBNAME.
418
LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$additional_libdir"
422
for x in $LDFLAGS $LTLIB[]NAME; do
423
AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
424
if test "X$x" = "X-L$additional_libdir"; then
429
if test -z "$haveit"; then
430
if test -d "$additional_libdir"; then
431
dnl Really add $additional_libdir to $LTLIBNAME.
432
LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$additional_libdir"
439
dir=`echo "X$dep" | sed -e 's/^X-R//'`
440
if test "$enable_rpath" != no; then
441
dnl Potentially add DIR to rpathdirs.
442
dnl The rpathdirs will be appended to $LIBNAME at the end.
444
for x in $rpathdirs; do
445
if test "X$x" = "X$dir"; then
450
if test -z "$haveit"; then
451
rpathdirs="$rpathdirs $dir"
453
dnl Potentially add DIR to ltrpathdirs.
454
dnl The ltrpathdirs will be appended to $LTLIBNAME at the end.
456
for x in $ltrpathdirs; do
457
if test "X$x" = "X$dir"; then
462
if test -z "$haveit"; then
463
ltrpathdirs="$ltrpathdirs $dir"
468
dnl Handle this in the next round.
469
names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'`
472
dnl Handle this in the next round. Throw away the .la's
473
dnl directory; it is already contained in a preceding -L
475
names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'`
478
dnl Most likely an immediate library name.
479
LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$dep"
480
LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$dep"
486
dnl Didn't find the library; assume it is in the system directories
487
dnl known to the linker and runtime loader. (All the system
488
dnl directories known to the linker should also be known to the
489
dnl runtime loader, otherwise the system is severely misconfigured.)
490
LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name"
491
LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name"
497
if test "X$rpathdirs" != "X"; then
498
if test -n "$hardcode_libdir_separator"; then
499
dnl Weird platform: only the last -rpath option counts, the user must
500
dnl pass all path elements in one option. We can arrange that for a
501
dnl single library, but not when more than one $LIBNAMEs are used.
503
for found_dir in $rpathdirs; do
504
alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir"
506
dnl Note: hardcode_libdir_flag_spec uses $libdir and $wl.
507
acl_save_libdir="$libdir"
509
eval flag=\"$hardcode_libdir_flag_spec\"
510
libdir="$acl_save_libdir"
511
LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag"
513
dnl The -rpath options are cumulative.
514
for found_dir in $rpathdirs; do
515
acl_save_libdir="$libdir"
517
eval flag=\"$hardcode_libdir_flag_spec\"
518
libdir="$acl_save_libdir"
519
LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag"
523
if test "X$ltrpathdirs" != "X"; then
524
dnl When using libtool, the option that works for both libraries and
525
dnl executables is -R. The -R options are cumulative.
526
for found_dir in $ltrpathdirs; do
527
LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir"
532
dnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR,
533
dnl unless already present in VAR.
534
dnl Works only for CPPFLAGS, not for LIB* variables because that sometimes
535
dnl contains two or three consecutive elements that belong together.
536
AC_DEFUN([AC_LIB_APPENDTOVAR],
538
for element in [$2]; do
541
AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
542
if test "X$x" = "X$element"; then
547
if test -z "$haveit"; then
548
[$1]="${[$1]}${[$1]:+ }$element"