Mitigate a flush+reload cache attack on RSA secret exponents.
[gnupg.git] / m4 / lib-link.m4
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 ])