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