Browse Source

Add lib-link

changes/91/636791/1
Monty Taylor 3 months ago
parent
commit
2068850455
1 changed files with 774 additions and 0 deletions
  1. 774
    0
      m4/lib-link.m4

+ 774
- 0
m4/lib-link.m4 View File

@@ -0,0 +1,774 @@
1
+# lib-link.m4 serial 21 (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
+    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_TRY_LINK([$3], [$4],
89
+      [ac_cv_lib[]Name=yes],
90
+      [ac_cv_lib[]Name='m4_if([$5], [], [no], [[$5]])'])
91
+    LIBS="$ac_save_LIBS"
92
+  ])
93
+  if test "$ac_cv_lib[]Name" = yes; then
94
+    HAVE_LIB[]NAME=yes
95
+    AC_DEFINE([HAVE_LIB]NAME, 1, [Define if you have the lib][$1 library.])
96
+    AC_MSG_CHECKING([how to link with lib[]$1])
97
+    AC_MSG_RESULT([$LIB[]NAME])
98
+  else
99
+    HAVE_LIB[]NAME=no
100
+    dnl If $LIB[]NAME didn't lead to a usable library, we don't need
101
+    dnl $INC[]NAME either.
102
+    CPPFLAGS="$ac_save_CPPFLAGS"
103
+    LIB[]NAME=
104
+    LTLIB[]NAME=
105
+    LIB[]NAME[]_PREFIX=
106
+  fi
107
+  AC_SUBST([HAVE_LIB]NAME)
108
+  AC_SUBST([LIB]NAME)
109
+  AC_SUBST([LTLIB]NAME)
110
+  AC_SUBST([LIB]NAME[_PREFIX])
111
+  popdef([NAME])
112
+  popdef([Name])
113
+])
114
+
115
+dnl Determine the platform dependent parameters needed to use rpath:
116
+dnl   acl_libext,
117
+dnl   acl_shlibext,
118
+dnl   acl_hardcode_libdir_flag_spec,
119
+dnl   acl_hardcode_libdir_separator,
120
+dnl   acl_hardcode_direct,
121
+dnl   acl_hardcode_minus_L.
122
+AC_DEFUN([AC_LIB_RPATH],
123
+[
124
+  dnl Tell automake >= 1.10 to complain if config.rpath is missing.
125
+  m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([config.rpath])])
126
+  AC_REQUIRE([AC_PROG_CC])                dnl we use $CC, $GCC, $LDFLAGS
127
+  AC_REQUIRE([AC_LIB_PROG_LD])            dnl we use $LD, $with_gnu_ld
128
+  AC_REQUIRE([AC_CANONICAL_HOST])         dnl we use $host
129
+  AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) dnl we use $ac_aux_dir
130
+  AC_CACHE_CHECK([for shared library run path origin], [acl_cv_rpath], [
131
+    CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \
132
+    ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh
133
+    . ./conftest.sh
134
+    rm -f ./conftest.sh
135
+    acl_cv_rpath=done
136
+  ])
137
+  wl="$acl_cv_wl"
138
+  acl_libext="$acl_cv_libext"
139
+  acl_shlibext="$acl_cv_shlibext"
140
+  acl_libname_spec="$acl_cv_libname_spec"
141
+  acl_library_names_spec="$acl_cv_library_names_spec"
142
+  acl_hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec"
143
+  acl_hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator"
144
+  acl_hardcode_direct="$acl_cv_hardcode_direct"
145
+  acl_hardcode_minus_L="$acl_cv_hardcode_minus_L"
146
+  dnl Determine whether the user wants rpath handling at all.
147
+  AC_ARG_ENABLE([rpath],
148
+    [  --disable-rpath         do not hardcode runtime library paths],
149
+    :, enable_rpath=yes)
150
+])
151
+
152
+dnl AC_LIB_FROMPACKAGE(name, package)
153
+dnl declares that libname comes from the given package. The configure file
154
+dnl will then not have a --with-libname-prefix option but a
155
+dnl --with-package-prefix option. Several libraries can come from the same
156
+dnl package. This declaration must occur before an AC_LIB_LINKFLAGS or similar
157
+dnl macro call that searches for libname.
158
+AC_DEFUN([AC_LIB_FROMPACKAGE],
159
+[
160
+  pushdef([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
161
+                                [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
162
+  define([acl_frompackage_]NAME, [$2])
163
+  popdef([NAME])
164
+  pushdef([PACK],[$2])
165
+  pushdef([PACKUP],[translit(PACK,[abcdefghijklmnopqrstuvwxyz./-],
166
+                                  [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
167
+  define([acl_libsinpackage_]PACKUP,
168
+    m4_ifdef([acl_libsinpackage_]PACKUP, [acl_libsinpackage_]PACKUP[[, ]],)[lib$1])
169
+  popdef([PACKUP])
170
+  popdef([PACK])
171
+])
172
+
173
+dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and
174
+dnl the libraries corresponding to explicit and implicit dependencies.
175
+dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables.
176
+dnl Also, sets the LIB${NAME}_PREFIX variable to nonempty if libname was found
177
+dnl in ${LIB${NAME}_PREFIX}/$acl_libdirstem.
178
+AC_DEFUN([AC_LIB_LINKFLAGS_BODY],
179
+[
180
+  AC_REQUIRE([AC_LIB_PREPARE_MULTILIB])
181
+  pushdef([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
182
+                                [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
183
+  pushdef([PACK],[m4_ifdef([acl_frompackage_]NAME, [acl_frompackage_]NAME, lib[$1])])
184
+  pushdef([PACKUP],[translit(PACK,[abcdefghijklmnopqrstuvwxyz./-],
185
+                                  [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
186
+  pushdef([PACKLIBS],[m4_ifdef([acl_frompackage_]NAME, [acl_libsinpackage_]PACKUP, lib[$1])])
187
+  dnl Autoconf >= 2.61 supports dots in --with options.
188
+  pushdef([P_A_C_K],[m4_if(m4_version_compare(m4_defn([m4_PACKAGE_VERSION]),[2.61]),[-1],[translit(PACK,[.],[_])],PACK)])
189
+  dnl By default, look in $includedir and $libdir.
190
+  use_additional=yes
191
+  AC_LIB_WITH_FINAL_PREFIX([
192
+    eval additional_includedir=\"$includedir\"
193
+    eval additional_libdir=\"$libdir\"
194
+  ])
195
+  AC_ARG_WITH(P_A_C_K[-prefix],
196
+[[  --with-]]P_A_C_K[[-prefix[=DIR]  search for ]PACKLIBS[ in DIR/include and DIR/lib
197
+  --without-]]P_A_C_K[[-prefix     don't search for ]PACKLIBS[ in includedir and libdir]],
198
+[
199
+    if test "X$withval" = "Xno"; then
200
+      use_additional=no
201
+    else
202
+      if test "X$withval" = "X"; then
203
+        AC_LIB_WITH_FINAL_PREFIX([
204
+          eval additional_includedir=\"$includedir\"
205
+          eval additional_libdir=\"$libdir\"
206
+        ])
207
+      else
208
+        additional_includedir="$withval/include"
209
+        additional_libdir="$withval/$acl_libdirstem"
210
+        if test "$acl_libdirstem2" != "$acl_libdirstem" \
211
+           && ! test -d "$withval/$acl_libdirstem"; then
212
+          additional_libdir="$withval/$acl_libdirstem2"
213
+        fi
214
+      fi
215
+    fi
216
+])
217
+  dnl Search the library and its dependencies in $additional_libdir and
218
+  dnl $LDFLAGS. Using breadth-first-seach.
219
+  LIB[]NAME=
220
+  LTLIB[]NAME=
221
+  INC[]NAME=
222
+  LIB[]NAME[]_PREFIX=
223
+  dnl HAVE_LIB${NAME} is an indicator that LIB${NAME}, LTLIB${NAME} have been
224
+  dnl computed. So it has to be reset here.
225
+  HAVE_LIB[]NAME=
226
+  rpathdirs=
227
+  ltrpathdirs=
228
+  names_already_handled=
229
+  names_next_round='$1 $2'
230
+  while test -n "$names_next_round"; do
231
+    names_this_round="$names_next_round"
232
+    names_next_round=
233
+    for name in $names_this_round; do
234
+      already_handled=
235
+      for n in $names_already_handled; do
236
+        if test "$n" = "$name"; then
237
+          already_handled=yes
238
+          break
239
+        fi
240
+      done
241
+      if test -z "$already_handled"; then
242
+        names_already_handled="$names_already_handled $name"
243
+        dnl See if it was already located by an earlier AC_LIB_LINKFLAGS
244
+        dnl or AC_LIB_HAVE_LINKFLAGS call.
245
+        uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'`
246
+        eval value=\"\$HAVE_LIB$uppername\"
247
+        if test -n "$value"; then
248
+          if test "$value" = yes; then
249
+            eval value=\"\$LIB$uppername\"
250
+            test -z "$value" || LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$value"
251
+            eval value=\"\$LTLIB$uppername\"
252
+            test -z "$value" || LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$value"
253
+          else
254
+            dnl An earlier call to AC_LIB_HAVE_LINKFLAGS has determined
255
+            dnl that this library doesn't exist. So just drop it.
256
+            :
257
+          fi
258
+        else
259
+          dnl Search the library lib$name in $additional_libdir and $LDFLAGS
260
+          dnl and the already constructed $LIBNAME/$LTLIBNAME.
261
+          found_dir=
262
+          found_la=
263
+          found_so=
264
+          found_a=
265
+          eval libname=\"$acl_libname_spec\"    # typically: libname=lib$name
266
+          if test -n "$acl_shlibext"; then
267
+            shrext=".$acl_shlibext"             # typically: shrext=.so
268
+          else
269
+            shrext=
270
+          fi
271
+          if test $use_additional = yes; then
272
+            dir="$additional_libdir"
273
+            dnl The same code as in the loop below:
274
+            dnl First look for a shared library.
275
+            if test -n "$acl_shlibext"; then
276
+              if test -f "$dir/$libname$shrext"; then
277
+                found_dir="$dir"
278
+                found_so="$dir/$libname$shrext"
279
+              else
280
+                if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
281
+                  ver=`(cd "$dir" && \
282
+                        for f in "$libname$shrext".*; do echo "$f"; done \
283
+                        | sed -e "s,^$libname$shrext\\\\.,," \
284
+                        | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
285
+                        | sed 1q ) 2>/dev/null`
286
+                  if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then
287
+                    found_dir="$dir"
288
+                    found_so="$dir/$libname$shrext.$ver"
289
+                  fi
290
+                else
291
+                  eval library_names=\"$acl_library_names_spec\"
292
+                  for f in $library_names; do
293
+                    if test -f "$dir/$f"; then
294
+                      found_dir="$dir"
295
+                      found_so="$dir/$f"
296
+                      break
297
+                    fi
298
+                  done
299
+                fi
300
+              fi
301
+            fi
302
+            dnl Then look for a static library.
303
+            if test "X$found_dir" = "X"; then
304
+              if test -f "$dir/$libname.$acl_libext"; then
305
+                found_dir="$dir"
306
+                found_a="$dir/$libname.$acl_libext"
307
+              fi
308
+            fi
309
+            if test "X$found_dir" != "X"; then
310
+              if test -f "$dir/$libname.la"; then
311
+                found_la="$dir/$libname.la"
312
+              fi
313
+            fi
314
+          fi
315
+          if test "X$found_dir" = "X"; then
316
+            for x in $LDFLAGS $LTLIB[]NAME; do
317
+              AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
318
+              case "$x" in
319
+                -L*)
320
+                  dir=`echo "X$x" | sed -e 's/^X-L//'`
321
+                  dnl First look for a shared library.
322
+                  if test -n "$acl_shlibext"; then
323
+                    if test -f "$dir/$libname$shrext"; then
324
+                      found_dir="$dir"
325
+                      found_so="$dir/$libname$shrext"
326
+                    else
327
+                      if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
328
+                        ver=`(cd "$dir" && \
329
+                              for f in "$libname$shrext".*; do echo "$f"; done \
330
+                              | sed -e "s,^$libname$shrext\\\\.,," \
331
+                              | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
332
+                              | sed 1q ) 2>/dev/null`
333
+                        if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then
334
+                          found_dir="$dir"
335
+                          found_so="$dir/$libname$shrext.$ver"
336
+                        fi
337
+                      else
338
+                        eval library_names=\"$acl_library_names_spec\"
339
+                        for f in $library_names; do
340
+                          if test -f "$dir/$f"; then
341
+                            found_dir="$dir"
342
+                            found_so="$dir/$f"
343
+                            break
344
+                          fi
345
+                        done
346
+                      fi
347
+                    fi
348
+                  fi
349
+                  dnl Then look for a static library.
350
+                  if test "X$found_dir" = "X"; then
351
+                    if test -f "$dir/$libname.$acl_libext"; then
352
+                      found_dir="$dir"
353
+                      found_a="$dir/$libname.$acl_libext"
354
+                    fi
355
+                  fi
356
+                  if test "X$found_dir" != "X"; then
357
+                    if test -f "$dir/$libname.la"; then
358
+                      found_la="$dir/$libname.la"
359
+                    fi
360
+                  fi
361
+                  ;;
362
+              esac
363
+              if test "X$found_dir" != "X"; then
364
+                break
365
+              fi
366
+            done
367
+          fi
368
+          if test "X$found_dir" != "X"; then
369
+            dnl Found the library.
370
+            LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$found_dir -l$name"
371
+            if test "X$found_so" != "X"; then
372
+              dnl Linking with a shared library. We attempt to hardcode its
373
+              dnl directory into the executable's runpath, unless it's the
374
+              dnl standard /usr/lib.
375
+              if test "$enable_rpath" = no \
376
+                 || test "X$found_dir" = "X/usr/$acl_libdirstem" \
377
+                 || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then
378
+                dnl No hardcoding is needed.
379
+                LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
380
+              else
381
+                dnl Use an explicit option to hardcode DIR into the resulting
382
+                dnl binary.
383
+                dnl Potentially add DIR to ltrpathdirs.
384
+                dnl The ltrpathdirs will be appended to $LTLIBNAME at the end.
385
+                haveit=
386
+                for x in $ltrpathdirs; do
387
+                  if test "X$x" = "X$found_dir"; then
388
+                    haveit=yes
389
+                    break
390
+                  fi
391
+                done
392
+                if test -z "$haveit"; then
393
+                  ltrpathdirs="$ltrpathdirs $found_dir"
394
+                fi
395
+                dnl The hardcoding into $LIBNAME is system dependent.
396
+                if test "$acl_hardcode_direct" = yes; then
397
+                  dnl Using DIR/libNAME.so during linking hardcodes DIR into the
398
+                  dnl resulting binary.
399
+                  LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
400
+                else
401
+                  if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then
402
+                    dnl Use an explicit option to hardcode DIR into the resulting
403
+                    dnl binary.
404
+                    LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
405
+                    dnl Potentially add DIR to rpathdirs.
406
+                    dnl The rpathdirs will be appended to $LIBNAME at the end.
407
+                    haveit=
408
+                    for x in $rpathdirs; do
409
+                      if test "X$x" = "X$found_dir"; then
410
+                        haveit=yes
411
+                        break
412
+                      fi
413
+                    done
414
+                    if test -z "$haveit"; then
415
+                      rpathdirs="$rpathdirs $found_dir"
416
+                    fi
417
+                  else
418
+                    dnl Rely on "-L$found_dir".
419
+                    dnl But don't add it if it's already contained in the LDFLAGS
420
+                    dnl or the already constructed $LIBNAME
421
+                    haveit=
422
+                    for x in $LDFLAGS $LIB[]NAME; do
423
+                      AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
424
+                      if test "X$x" = "X-L$found_dir"; then
425
+                        haveit=yes
426
+                        break
427
+                      fi
428
+                    done
429
+                    if test -z "$haveit"; then
430
+                      LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir"
431
+                    fi
432
+                    if test "$acl_hardcode_minus_L" != no; then
433
+                      dnl FIXME: Not sure whether we should use
434
+                      dnl "-L$found_dir -l$name" or "-L$found_dir $found_so"
435
+                      dnl here.
436
+                      LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
437
+                    else
438
+                      dnl We cannot use $acl_hardcode_runpath_var and LD_RUN_PATH
439
+                      dnl here, because this doesn't fit in flags passed to the
440
+                      dnl compiler. So give up. No hardcoding. This affects only
441
+                      dnl very old systems.
442
+                      dnl FIXME: Not sure whether we should use
443
+                      dnl "-L$found_dir -l$name" or "-L$found_dir $found_so"
444
+                      dnl here.
445
+                      LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name"
446
+                    fi
447
+                  fi
448
+                fi
449
+              fi
450
+            else
451
+              if test "X$found_a" != "X"; then
452
+                dnl Linking with a static library.
453
+                LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_a"
454
+              else
455
+                dnl We shouldn't come here, but anyway it's good to have a
456
+                dnl fallback.
457
+                LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir -l$name"
458
+              fi
459
+            fi
460
+            dnl Assume the include files are nearby.
461
+            additional_includedir=
462
+            case "$found_dir" in
463
+              */$acl_libdirstem | */$acl_libdirstem/)
464
+                basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'`
465
+                if test "$name" = '$1'; then
466
+                  LIB[]NAME[]_PREFIX="$basedir"
467
+                fi
468
+                additional_includedir="$basedir/include"
469
+                ;;
470
+              */$acl_libdirstem2 | */$acl_libdirstem2/)
471
+                basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'`
472
+                if test "$name" = '$1'; then
473
+                  LIB[]NAME[]_PREFIX="$basedir"
474
+                fi
475
+                additional_includedir="$basedir/include"
476
+                ;;
477
+            esac
478
+            if test "X$additional_includedir" != "X"; then
479
+              dnl Potentially add $additional_includedir to $INCNAME.
480
+              dnl But don't add it
481
+              dnl   1. if it's the standard /usr/include,
482
+              dnl   2. if it's /usr/local/include and we are using GCC on Linux,
483
+              dnl   3. if it's already present in $CPPFLAGS or the already
484
+              dnl      constructed $INCNAME,
485
+              dnl   4. if it doesn't exist as a directory.
486
+              if test "X$additional_includedir" != "X/usr/include"; then
487
+                haveit=
488
+                if test "X$additional_includedir" = "X/usr/local/include"; then
489
+                  if test -n "$GCC"; then
490
+                    case $host_os in
491
+                      linux* | gnu* | k*bsd*-gnu) haveit=yes;;
492
+                    esac
493
+                  fi
494
+                fi
495
+                if test -z "$haveit"; then
496
+                  for x in $CPPFLAGS $INC[]NAME; do
497
+                    AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
498
+                    if test "X$x" = "X-I$additional_includedir"; then
499
+                      haveit=yes
500
+                      break
501
+                    fi
502
+                  done
503
+                  if test -z "$haveit"; then
504
+                    if test -d "$additional_includedir"; then
505
+                      dnl Really add $additional_includedir to $INCNAME.
506
+                      INC[]NAME="${INC[]NAME}${INC[]NAME:+ }-I$additional_includedir"
507
+                    fi
508
+                  fi
509
+                fi
510
+              fi
511
+            fi
512
+            dnl Look for dependencies.
513
+            if test -n "$found_la"; then
514
+              dnl Read the .la file. It defines the variables
515
+              dnl dlname, library_names, old_library, dependency_libs, current,
516
+              dnl age, revision, installed, dlopen, dlpreopen, libdir.
517
+              save_libdir="$libdir"
518
+              case "$found_la" in
519
+                */* | *\\*) . "$found_la" ;;
520
+                *) . "./$found_la" ;;
521
+              esac
522
+              libdir="$save_libdir"
523
+              dnl We use only dependency_libs.
524
+              for dep in $dependency_libs; do
525
+                case "$dep" in
526
+                  -L*)
527
+                    additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'`
528
+                    dnl Potentially add $additional_libdir to $LIBNAME and $LTLIBNAME.
529
+                    dnl But don't add it
530
+                    dnl   1. if it's the standard /usr/lib,
531
+                    dnl   2. if it's /usr/local/lib and we are using GCC on Linux,
532
+                    dnl   3. if it's already present in $LDFLAGS or the already
533
+                    dnl      constructed $LIBNAME,
534
+                    dnl   4. if it doesn't exist as a directory.
535
+                    if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \
536
+                       && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then
537
+                      haveit=
538
+                      if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \
539
+                         || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then
540
+                        if test -n "$GCC"; then
541
+                          case $host_os in
542
+                            linux* | gnu* | k*bsd*-gnu) haveit=yes;;
543
+                          esac
544
+                        fi
545
+                      fi
546
+                      if test -z "$haveit"; then
547
+                        haveit=
548
+                        for x in $LDFLAGS $LIB[]NAME; do
549
+                          AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
550
+                          if test "X$x" = "X-L$additional_libdir"; then
551
+                            haveit=yes
552
+                            break
553
+                          fi
554
+                        done
555
+                        if test -z "$haveit"; then
556
+                          if test -d "$additional_libdir"; then
557
+                            dnl Really add $additional_libdir to $LIBNAME.
558
+                            LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$additional_libdir"
559
+                          fi
560
+                        fi
561
+                        haveit=
562
+                        for x in $LDFLAGS $LTLIB[]NAME; do
563
+                          AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
564
+                          if test "X$x" = "X-L$additional_libdir"; then
565
+                            haveit=yes
566
+                            break
567
+                          fi
568
+                        done
569
+                        if test -z "$haveit"; then
570
+                          if test -d "$additional_libdir"; then
571
+                            dnl Really add $additional_libdir to $LTLIBNAME.
572
+                            LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$additional_libdir"
573
+                          fi
574
+                        fi
575
+                      fi
576
+                    fi
577
+                    ;;
578
+                  -R*)
579
+                    dir=`echo "X$dep" | sed -e 's/^X-R//'`
580
+                    if test "$enable_rpath" != no; then
581
+                      dnl Potentially add DIR to rpathdirs.
582
+                      dnl The rpathdirs will be appended to $LIBNAME at the end.
583
+                      haveit=
584
+                      for x in $rpathdirs; do
585
+                        if test "X$x" = "X$dir"; then
586
+                          haveit=yes
587
+                          break
588
+                        fi
589
+                      done
590
+                      if test -z "$haveit"; then
591
+                        rpathdirs="$rpathdirs $dir"
592
+                      fi
593
+                      dnl Potentially add DIR to ltrpathdirs.
594
+                      dnl The ltrpathdirs will be appended to $LTLIBNAME at the end.
595
+                      haveit=
596
+                      for x in $ltrpathdirs; do
597
+                        if test "X$x" = "X$dir"; then
598
+                          haveit=yes
599
+                          break
600
+                        fi
601
+                      done
602
+                      if test -z "$haveit"; then
603
+                        ltrpathdirs="$ltrpathdirs $dir"
604
+                      fi
605
+                    fi
606
+                    ;;
607
+                  -l*)
608
+                    dnl Handle this in the next round.
609
+                    names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'`
610
+                    ;;
611
+                  *.la)
612
+                    dnl Handle this in the next round. Throw away the .la's
613
+                    dnl directory; it is already contained in a preceding -L
614
+                    dnl option.
615
+                    names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'`
616
+                    ;;
617
+                  *)
618
+                    dnl Most likely an immediate library name.
619
+                    LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$dep"
620
+                    LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$dep"
621
+                    ;;
622
+                esac
623
+              done
624
+            fi
625
+          else
626
+            dnl Didn't find the library; assume it is in the system directories
627
+            dnl known to the linker and runtime loader. (All the system
628
+            dnl directories known to the linker should also be known to the
629
+            dnl runtime loader, otherwise the system is severely misconfigured.)
630
+            LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name"
631
+            LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name"
632
+          fi
633
+        fi
634
+      fi
635
+    done
636
+  done
637
+  if test "X$rpathdirs" != "X"; then
638
+    if test -n "$acl_hardcode_libdir_separator"; then
639
+      dnl Weird platform: only the last -rpath option counts, the user must
640
+      dnl pass all path elements in one option. We can arrange that for a
641
+      dnl single library, but not when more than one $LIBNAMEs are used.
642
+      alldirs=
643
+      for found_dir in $rpathdirs; do
644
+        alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir"
645
+      done
646
+      dnl Note: acl_hardcode_libdir_flag_spec uses $libdir and $wl.
647
+      acl_save_libdir="$libdir"
648
+      libdir="$alldirs"
649
+      eval flag=\"$acl_hardcode_libdir_flag_spec\"
650
+      libdir="$acl_save_libdir"
651
+      LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag"
652
+    else
653
+      dnl The -rpath options are cumulative.
654
+      for found_dir in $rpathdirs; do
655
+        acl_save_libdir="$libdir"
656
+        libdir="$found_dir"
657
+        eval flag=\"$acl_hardcode_libdir_flag_spec\"
658
+        libdir="$acl_save_libdir"
659
+        LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag"
660
+      done
661
+    fi
662
+  fi
663
+  if test "X$ltrpathdirs" != "X"; then
664
+    dnl When using libtool, the option that works for both libraries and
665
+    dnl executables is -R. The -R options are cumulative.
666
+    for found_dir in $ltrpathdirs; do
667
+      LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir"
668
+    done
669
+  fi
670
+  popdef([P_A_C_K])
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
+])

Loading…
Cancel
Save