1
# lib-link.m4 serial 2 (gettext-0.11.2)
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"
121
dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and
122
dnl the libraries corresponding to explicit and implicit dependencies.
123
dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables.
124
AC_DEFUN([AC_LIB_LINKFLAGS_BODY],
126
define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
127
[ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
128
dnl By default, look in $includedir and $libdir.
130
AC_LIB_WITH_FINAL_PREFIX([
131
eval additional_includedir=\"$includedir\"
132
eval additional_libdir=\"$libdir\"
134
AC_ARG_WITH([lib$1-prefix],
135
[ --with-lib$1-prefix[=DIR] search for lib$1 in DIR/include and DIR/lib
136
--without-lib$1-prefix don't search for lib$1 in includedir and libdir],
138
if test "X$withval" = "Xno"; then
141
if test "X$withval" = "X"; then
142
AC_LIB_WITH_FINAL_PREFIX([
143
eval additional_includedir=\"$includedir\"
144
eval additional_libdir=\"$libdir\"
147
additional_includedir="$withval/include"
148
additional_libdir="$withval/lib"
152
dnl Search the library and its dependencies in $additional_libdir and
153
dnl $LDFLAGS. Using breadth-first-seach.
159
names_already_handled=
160
names_next_round='$1 $2'
161
while test -n "$names_next_round"; do
162
names_this_round="$names_next_round"
164
for name in $names_this_round; do
166
for n in $names_already_handled; do
167
if test "$n" = "$name"; then
172
if test -z "$already_handled"; then
173
names_already_handled="$names_already_handled $name"
174
dnl See if it was already located by an earlier AC_LIB_LINKFLAGS
175
dnl or AC_LIB_HAVE_LINKFLAGS call.
176
uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'`
177
eval value=\"\$HAVE_LIB$uppername\"
178
if test -n "$value"; then
179
if test "$value" = yes; then
180
eval value=\"\$LIB$uppername\"
181
test -z "$value" || LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$value"
182
eval value=\"\$LTLIB$uppername\"
183
test -z "$value" || LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$value"
185
dnl An earlier call to AC_LIB_HAVE_LINKFLAGS has determined
186
dnl that this library doesn't exist. So just drop it.
190
dnl Search the library lib$name in $additional_libdir and $LDFLAGS
191
dnl and the already constructed $LIBNAME/$LTLIBNAME.
196
if test $use_additional = yes; then
197
if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then
198
found_dir="$additional_libdir"
199
found_so="$additional_libdir/lib$name.$shlibext"
200
if test -f "$additional_libdir/lib$name.la"; then
201
found_la="$additional_libdir/lib$name.la"
204
if test -f "$additional_libdir/lib$name.$libext"; then
205
found_dir="$additional_libdir"
206
found_a="$additional_libdir/lib$name.$libext"
207
if test -f "$additional_libdir/lib$name.la"; then
208
found_la="$additional_libdir/lib$name.la"
213
if test "X$found_dir" = "X"; then
214
for x in $LDFLAGS $LTLIB[]NAME; do
215
AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
218
dir=`echo "X$x" | sed -e 's/^X-L//'`
219
if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext"; then
221
found_so="$dir/lib$name.$shlibext"
222
if test -f "$dir/lib$name.la"; then
223
found_la="$dir/lib$name.la"
226
if test -f "$dir/lib$name.$libext"; then
228
found_a="$dir/lib$name.$libext"
229
if test -f "$dir/lib$name.la"; then
230
found_la="$dir/lib$name.la"
236
if test "X$found_dir" != "X"; then
241
if test "X$found_dir" != "X"; then
242
dnl Found the library.
243
LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$found_dir -l$name"
244
if test "X$found_so" != "X"; then
245
dnl Linking with a shared library. We attempt to hardcode its
246
dnl directory into the executable's runpath, unless it's the
247
dnl standard /usr/lib.
248
if test "X$found_dir" = "X/usr/lib"; then
249
dnl No hardcoding is needed.
250
LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
252
dnl Use an explicit option to hardcode DIR into the resulting
254
dnl Potentially add DIR to ltrpathdirs.
255
dnl The ltrpathdirs will be appended to $LTLIBNAME at the end.
257
for x in $ltrpathdirs; do
258
if test "X$x" = "X$found_dir"; then
263
if test -z "$haveit"; then
264
ltrpathdirs="$ltrpathdirs $found_dir"
266
dnl The hardcoding into $LIBNAME is system dependent.
267
if test "$hardcode_direct" = yes; then
268
dnl Using DIR/libNAME.so during linking hardcodes DIR into the
269
dnl resulting binary.
270
LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
272
if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then
273
dnl Use an explicit option to hardcode DIR into the resulting
275
LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
276
dnl Potentially add DIR to rpathdirs.
277
dnl The rpathdirs will be appended to $LIBNAME at the end.
279
for x in $rpathdirs; do
280
if test "X$x" = "X$found_dir"; then
285
if test -z "$haveit"; then
286
rpathdirs="$rpathdirs $found_dir"
289
dnl Rely on "-L$found_dir".
290
dnl But don't add it if it's already contained in the LDFLAGS
291
dnl or the already constructed $LIBNAME
293
for x in $LDFLAGS $LIB[]NAME; do
294
AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
295
if test "X$x" = "X-L$found_dir"; then
300
if test -z "$haveit"; then
301
LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir"
303
if test "$hardcode_minus_L" != no; then
304
dnl FIXME: Not sure whether we should use
305
dnl "-L$found_dir -l$name" or "-L$found_dir $found_so"
307
LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
309
dnl We cannot use $hardcode_runpath_var and LD_RUN_PATH
310
dnl here, because this doesn't fit in flags passed to the
311
dnl compiler. So give up. No hardcoding. This affects only
312
dnl very old systems.
313
dnl FIXME: Not sure whether we should use
314
dnl "-L$found_dir -l$name" or "-L$found_dir $found_so"
316
LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name"
322
if test "X$found_a" != "X"; then
323
dnl Linking with a static library.
324
LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_a"
326
dnl We shouldn't come here, but anyway it's good to have a
328
LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir -l$name"
331
dnl Assume the include files are nearby.
332
additional_includedir=
335
basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e 's,/lib/*$,,'`
336
additional_includedir="$basedir/include"
339
if test "X$additional_includedir" != "X"; then
340
dnl Potentially add $additional_includedir to $INCNAME.
342
dnl 1. if it's the standard /usr/include,
343
dnl 2. if it's /usr/local/include and we are using GCC on Linux,
344
dnl 3. if it's already present in $CPPFLAGS or the already
345
dnl constructed $INCNAME,
346
dnl 4. if it doesn't exist as a directory.
347
if test "X$additional_includedir" != "X/usr/include"; then
349
if test "X$additional_includedir" = "X/usr/local/include"; then
350
if test -n "$GCC"; then
356
if test -z "$haveit"; then
357
for x in $CPPFLAGS $INC[]NAME; do
358
AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
359
if test "X$x" = "X-I$additional_includedir"; then
364
if test -z "$haveit"; then
365
if test -d "$additional_includedir"; then
366
dnl Really add $additional_includedir to $INCNAME.
367
INC[]NAME="${INC[]NAME}${INC[]NAME:+ }-I$additional_includedir"
373
dnl Look for dependencies.
374
if test -n "$found_la"; then
375
dnl Read the .la file. It defines the variables
376
dnl dlname, library_names, old_library, dependency_libs, current,
377
dnl age, revision, installed, dlopen, dlpreopen, libdir.
378
save_libdir="$libdir"
380
*/* | *\\*) . "$found_la" ;;
381
*) . "./$found_la" ;;
383
libdir="$save_libdir"
384
dnl We use only dependency_libs.
385
for dep in $dependency_libs; do
388
additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'`
389
dnl Potentially add $additional_libdir to $LIBNAME and $LTLIBNAME.
391
dnl 1. if it's the standard /usr/lib,
392
dnl 2. if it's /usr/local/lib and we are using GCC on Linux,
393
dnl 3. if it's already present in $LDFLAGS or the already
394
dnl constructed $LIBNAME,
395
dnl 4. if it doesn't exist as a directory.
396
if test "X$additional_libdir" != "X/usr/lib"; then
398
if test "X$additional_libdir" = "X/usr/local/lib"; then
399
if test -n "$GCC"; then
405
if test -z "$haveit"; then
407
for x in $LDFLAGS $LIB[]NAME; do
408
AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
409
if test "X$x" = "X-L$additional_libdir"; then
414
if test -z "$haveit"; then
415
if test -d "$additional_libdir"; then
416
dnl Really add $additional_libdir to $LIBNAME.
417
LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$additional_libdir"
421
for x in $LDFLAGS $LTLIB[]NAME; do
422
AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
423
if test "X$x" = "X-L$additional_libdir"; then
428
if test -z "$haveit"; then
429
if test -d "$additional_libdir"; then
430
dnl Really add $additional_libdir to $LTLIBNAME.
431
LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$additional_libdir"
438
dir=`echo "X$dep" | sed -e 's/^X-R//'`
439
dnl Potentially add DIR to rpathdirs.
440
dnl The rpathdirs will be appended to $LIBNAME at the end.
442
for x in $rpathdirs; do
443
if test "X$x" = "X$dir"; then
448
if test -z "$haveit"; then
449
rpathdirs="$rpathdirs $dir"
451
dnl Potentially add DIR to ltrpathdirs.
452
dnl The ltrpathdirs will be appended to $LTLIBNAME at the end.
454
for x in $ltrpathdirs; do
455
if test "X$x" = "X$dir"; then
460
if test -z "$haveit"; then
461
ltrpathdirs="$ltrpathdirs $dir"
465
dnl Handle this in the next round.
466
names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'`
469
dnl Handle this in the next round. Throw away the .la's
470
dnl directory; it is already contained in a preceding -L
472
names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'`
475
dnl Most likely an immediate library name.
476
LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$dep"
477
LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$dep"
483
dnl Didn't find the library; assume it is in the system directories
484
dnl known to the linker and runtime loader. (All the system
485
dnl directories known to the linker should also be known to the
486
dnl runtime loader, otherwise the system is severely misconfigured.)
487
LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name"
488
LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name"
494
if test "X$rpathdirs" != "X"; then
495
if test -n "$hardcode_libdir_separator"; then
496
dnl Weird platform: only the last -rpath option counts, the user must
497
dnl pass all path elements in one option. We can arrange that for a
498
dnl single library, but not when more than one $LIBNAMEs are used.
500
for found_dir in $rpathdirs; do
501
alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir"
503
dnl Note: hardcode_libdir_flag_spec uses $libdir and $wl.
504
acl_save_libdir="$libdir"
506
eval flag=\"$hardcode_libdir_flag_spec\"
507
libdir="$acl_save_libdir"
508
LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag"
510
dnl The -rpath options are cumulative.
511
for found_dir in $rpathdirs; do
512
acl_save_libdir="$libdir"
514
eval flag=\"$hardcode_libdir_flag_spec\"
515
libdir="$acl_save_libdir"
516
LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag"
520
if test "X$ltrpathdirs" != "X"; then
521
dnl When using libtool, the option that works for both libraries and
522
dnl executables is -R. The -R options are cumulative.
523
for found_dir in $ltrpathdirs; do
524
LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir"
529
dnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR,
530
dnl unless already present in VAR.
531
dnl Works only for CPPFLAGS, not for LIB* variables because that sometimes
532
dnl contains two or three consecutive elements that belong together.
533
AC_DEFUN([AC_LIB_APPENDTOVAR],
535
for element in [$2]; do
538
AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
539
if test "X$x" = "X$element"; then
544
if test -z "$haveit"; then
545
[$1]="${[$1]}${[$1]:+ }$element"