1
# lib-link.m4 serial 3 (gettext-0.11.3)
2
dnl Copyright (C) 2001-2002 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
dnl sys_lib_search_path_spec, sys_lib_dlsearch_path_spec.
97
AC_DEFUN([AC_LIB_RPATH],
99
AC_REQUIRE([AC_PROG_CC]) dnl we use $CC, $GCC, $LDFLAGS
100
AC_REQUIRE([AC_LIB_PROG_LD]) dnl we use $LD, $with_gnu_ld
101
AC_REQUIRE([AC_CANONICAL_HOST]) dnl we use $host
102
AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) dnl we use $ac_aux_dir
103
AC_CACHE_CHECK([for shared library run path origin], acl_cv_rpath, [
104
CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \
105
${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh
111
libext="$acl_cv_libext"
112
shlibext="$acl_cv_shlibext"
113
hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec"
114
hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator"
115
hardcode_direct="$acl_cv_hardcode_direct"
116
hardcode_minus_L="$acl_cv_hardcode_minus_L"
117
sys_lib_search_path_spec="$acl_cv_sys_lib_search_path_spec"
118
sys_lib_dlsearch_path_spec="$acl_cv_sys_lib_dlsearch_path_spec"
119
dnl Determine whether the user wants rpath handling at all.
121
[ --disable-rpath do not hardcode runtime library paths],
125
dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and
126
dnl the libraries corresponding to explicit and implicit dependencies.
127
dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables.
128
AC_DEFUN([AC_LIB_LINKFLAGS_BODY],
130
define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
131
[ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
132
dnl By default, look in $includedir and $libdir.
134
AC_LIB_WITH_FINAL_PREFIX([
135
eval additional_includedir=\"$includedir\"
136
eval additional_libdir=\"$libdir\"
138
AC_ARG_WITH([lib$1-prefix],
139
[ --with-lib$1-prefix[=DIR] search for lib$1 in DIR/include and DIR/lib
140
--without-lib$1-prefix don't search for lib$1 in includedir and libdir],
142
if test "X$withval" = "Xno"; then
145
if test "X$withval" = "X"; then
146
AC_LIB_WITH_FINAL_PREFIX([
147
eval additional_includedir=\"$includedir\"
148
eval additional_libdir=\"$libdir\"
151
additional_includedir="$withval/include"
152
additional_libdir="$withval/lib"
156
dnl Search the library and its dependencies in $additional_libdir and
157
dnl $LDFLAGS. Using breadth-first-seach.
163
names_already_handled=
164
names_next_round='$1 $2'
165
while test -n "$names_next_round"; do
166
names_this_round="$names_next_round"
168
for name in $names_this_round; do
170
for n in $names_already_handled; do
171
if test "$n" = "$name"; then
176
if test -z "$already_handled"; then
177
names_already_handled="$names_already_handled $name"
178
dnl See if it was already located by an earlier AC_LIB_LINKFLAGS
179
dnl or AC_LIB_HAVE_LINKFLAGS call.
180
uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'`
181
eval value=\"\$HAVE_LIB$uppername\"
182
if test -n "$value"; then
183
if test "$value" = yes; then
184
eval value=\"\$LIB$uppername\"
185
test -z "$value" || LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$value"
186
eval value=\"\$LTLIB$uppername\"
187
test -z "$value" || LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$value"
189
dnl An earlier call to AC_LIB_HAVE_LINKFLAGS has determined
190
dnl that this library doesn't exist. So just drop it.
194
dnl Search the library lib$name in $additional_libdir and $LDFLAGS
195
dnl and the already constructed $LIBNAME/$LTLIBNAME.
200
if test $use_additional = yes; then
201
if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then
202
found_dir="$additional_libdir"
203
found_so="$additional_libdir/lib$name.$shlibext"
204
if test -f "$additional_libdir/lib$name.la"; then
205
found_la="$additional_libdir/lib$name.la"
208
if test -f "$additional_libdir/lib$name.$libext"; then
209
found_dir="$additional_libdir"
210
found_a="$additional_libdir/lib$name.$libext"
211
if test -f "$additional_libdir/lib$name.la"; then
212
found_la="$additional_libdir/lib$name.la"
217
if test "X$found_dir" = "X"; then
218
for x in $LDFLAGS $LTLIB[]NAME; do
219
AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
222
dir=`echo "X$x" | sed -e 's/^X-L//'`
223
if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext"; then
225
found_so="$dir/lib$name.$shlibext"
226
if test -f "$dir/lib$name.la"; then
227
found_la="$dir/lib$name.la"
230
if test -f "$dir/lib$name.$libext"; then
232
found_a="$dir/lib$name.$libext"
233
if test -f "$dir/lib$name.la"; then
234
found_la="$dir/lib$name.la"
240
if test "X$found_dir" != "X"; then
245
if test "X$found_dir" != "X"; then
246
dnl Found the library.
247
LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$found_dir -l$name"
248
if test "X$found_so" != "X"; then
249
dnl Linking with a shared library. We attempt to hardcode its
250
dnl directory into the executable's runpath, unless it's the
251
dnl standard /usr/lib.
252
if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/lib"; then
253
dnl No hardcoding is needed.
254
LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
256
dnl Use an explicit option to hardcode DIR into the resulting
258
dnl Potentially add DIR to ltrpathdirs.
259
dnl The ltrpathdirs will be appended to $LTLIBNAME at the end.
261
for x in $ltrpathdirs; do
262
if test "X$x" = "X$found_dir"; then
267
if test -z "$haveit"; then
268
ltrpathdirs="$ltrpathdirs $found_dir"
270
dnl The hardcoding into $LIBNAME is system dependent.
271
if test "$hardcode_direct" = yes; then
272
dnl Using DIR/libNAME.so during linking hardcodes DIR into the
273
dnl resulting binary.
274
LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
276
if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then
277
dnl Use an explicit option to hardcode DIR into the resulting
279
LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
280
dnl Potentially add DIR to rpathdirs.
281
dnl The rpathdirs will be appended to $LIBNAME at the end.
283
for x in $rpathdirs; do
284
if test "X$x" = "X$found_dir"; then
289
if test -z "$haveit"; then
290
rpathdirs="$rpathdirs $found_dir"
293
dnl Rely on "-L$found_dir".
294
dnl But don't add it if it's already contained in the LDFLAGS
295
dnl or the already constructed $LIBNAME
297
for x in $LDFLAGS $LIB[]NAME; do
298
AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
299
if test "X$x" = "X-L$found_dir"; then
304
if test -z "$haveit"; then
305
LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir"
307
if test "$hardcode_minus_L" != no; then
308
dnl FIXME: Not sure whether we should use
309
dnl "-L$found_dir -l$name" or "-L$found_dir $found_so"
311
LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
313
dnl We cannot use $hardcode_runpath_var and LD_RUN_PATH
314
dnl here, because this doesn't fit in flags passed to the
315
dnl compiler. So give up. No hardcoding. This affects only
316
dnl very old systems.
317
dnl FIXME: Not sure whether we should use
318
dnl "-L$found_dir -l$name" or "-L$found_dir $found_so"
320
LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name"
326
if test "X$found_a" != "X"; then
327
dnl Linking with a static library.
328
LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_a"
330
dnl We shouldn't come here, but anyway it's good to have a
332
LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir -l$name"
335
dnl Assume the include files are nearby.
336
additional_includedir=
339
basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e 's,/lib/*$,,'`
340
additional_includedir="$basedir/include"
343
if test "X$additional_includedir" != "X"; then
344
dnl Potentially add $additional_includedir to $INCNAME.
346
dnl 1. if it's the standard /usr/include,
347
dnl 2. if it's /usr/local/include and we are using GCC on Linux,
348
dnl 3. if it's already present in $CPPFLAGS or the already
349
dnl constructed $INCNAME,
350
dnl 4. if it doesn't exist as a directory.
351
if test "X$additional_includedir" != "X/usr/include"; then
353
if test "X$additional_includedir" = "X/usr/local/include"; then
354
if test -n "$GCC"; then
360
if test -z "$haveit"; then
361
for x in $CPPFLAGS $INC[]NAME; do
362
AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
363
if test "X$x" = "X-I$additional_includedir"; then
368
if test -z "$haveit"; then
369
if test -d "$additional_includedir"; then
370
dnl Really add $additional_includedir to $INCNAME.
371
INC[]NAME="${INC[]NAME}${INC[]NAME:+ }-I$additional_includedir"
377
dnl Look for dependencies.
378
if test -n "$found_la"; then
379
dnl Read the .la file. It defines the variables
380
dnl dlname, library_names, old_library, dependency_libs, current,
381
dnl age, revision, installed, dlopen, dlpreopen, libdir.
382
save_libdir="$libdir"
384
*/* | *\\*) . "$found_la" ;;
385
*) . "./$found_la" ;;
387
libdir="$save_libdir"
388
dnl We use only dependency_libs.
389
for dep in $dependency_libs; do
392
additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'`
393
dnl Potentially add $additional_libdir to $LIBNAME and $LTLIBNAME.
395
dnl 1. if it's the standard /usr/lib,
396
dnl 2. if it's /usr/local/lib and we are using GCC on Linux,
397
dnl 3. if it's already present in $LDFLAGS or the already
398
dnl constructed $LIBNAME,
399
dnl 4. if it doesn't exist as a directory.
400
if test "X$additional_libdir" != "X/usr/lib"; then
402
if test "X$additional_libdir" = "X/usr/local/lib"; then
403
if test -n "$GCC"; then
409
if test -z "$haveit"; then
411
for x in $LDFLAGS $LIB[]NAME; do
412
AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
413
if test "X$x" = "X-L$additional_libdir"; then
418
if test -z "$haveit"; then
419
if test -d "$additional_libdir"; then
420
dnl Really add $additional_libdir to $LIBNAME.
421
LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$additional_libdir"
425
for x in $LDFLAGS $LTLIB[]NAME; do
426
AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
427
if test "X$x" = "X-L$additional_libdir"; then
432
if test -z "$haveit"; then
433
if test -d "$additional_libdir"; then
434
dnl Really add $additional_libdir to $LTLIBNAME.
435
LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$additional_libdir"
442
dir=`echo "X$dep" | sed -e 's/^X-R//'`
443
if test "$enable_rpath" != no; then
444
dnl Potentially add DIR to rpathdirs.
445
dnl The rpathdirs will be appended to $LIBNAME at the end.
447
for x in $rpathdirs; do
448
if test "X$x" = "X$dir"; then
453
if test -z "$haveit"; then
454
rpathdirs="$rpathdirs $dir"
456
dnl Potentially add DIR to ltrpathdirs.
457
dnl The ltrpathdirs will be appended to $LTLIBNAME at the end.
459
for x in $ltrpathdirs; do
460
if test "X$x" = "X$dir"; then
465
if test -z "$haveit"; then
466
ltrpathdirs="$ltrpathdirs $dir"
471
dnl Handle this in the next round.
472
names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'`
475
dnl Handle this in the next round. Throw away the .la's
476
dnl directory; it is already contained in a preceding -L
478
names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'`
481
dnl Most likely an immediate library name.
482
LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$dep"
483
LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$dep"
489
dnl Didn't find the library; assume it is in the system directories
490
dnl known to the linker and runtime loader. (All the system
491
dnl directories known to the linker should also be known to the
492
dnl runtime loader, otherwise the system is severely misconfigured.)
493
LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name"
494
LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name"
500
if test "X$rpathdirs" != "X"; then
501
if test -n "$hardcode_libdir_separator"; then
502
dnl Weird platform: only the last -rpath option counts, the user must
503
dnl pass all path elements in one option. We can arrange that for a
504
dnl single library, but not when more than one $LIBNAMEs are used.
506
for found_dir in $rpathdirs; do
507
alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir"
509
dnl Note: hardcode_libdir_flag_spec uses $libdir and $wl.
510
acl_save_libdir="$libdir"
512
eval flag=\"$hardcode_libdir_flag_spec\"
513
libdir="$acl_save_libdir"
514
LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag"
516
dnl The -rpath options are cumulative.
517
for found_dir in $rpathdirs; do
518
acl_save_libdir="$libdir"
520
eval flag=\"$hardcode_libdir_flag_spec\"
521
libdir="$acl_save_libdir"
522
LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag"
526
if test "X$ltrpathdirs" != "X"; then
527
dnl When using libtool, the option that works for both libraries and
528
dnl executables is -R. The -R options are cumulative.
529
for found_dir in $ltrpathdirs; do
530
LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir"
535
dnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR,
536
dnl unless already present in VAR.
537
dnl Works only for CPPFLAGS, not for LIB* variables because that sometimes
538
dnl contains two or three consecutive elements that belong together.
539
AC_DEFUN([AC_LIB_APPENDTOVAR],
541
for element in [$2]; do
544
AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
545
if test "X$x" = "X$element"; then
550
if test -z "$haveit"; then
551
[$1]="${[$1]}${[$1]:+ }$element"