[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: 279-gary-LT_CONFIG_LTDL_DIR.diff
From: |
Ralf Wildenhues |
Subject: |
Re: 279-gary-LT_CONFIG_LTDL_DIR.diff |
Date: |
Wed, 28 Sep 2005 14:31:43 +0200 |
User-agent: |
Mutt/1.5.11 |
Hi Gary,
* Gary V. Vaughan wrote on Tue, Sep 27, 2005 at 03:36:43PM CEST:
>
> Thanks for the review. This fixes the inline LT_CONFIG_LTDL_DIR problem
> you report, but I'm not sure I understand how the aclocal.m4 problem came
> to be:
This patch looks much better, but still has a bug, see below
(The aclocal.m4 problem is orthogonal; let's discuss it elsewhere).
> This changeset brings some sanity to tracking the directory name for
> libltdl sources. Old syntax still works, but the documentation now
> talks only about using the new LT_CONFIG_LTDL_DIR. If any of the old
> macros are still given a directory argument, it is set as before, only
> now autoconf will stop with an error if there is a conflict.
First, LT_WITH_LTDL and --with-included-ltdl leads to
LIBLTDL = ${top_builddir}/ltdl//libltdlc.la
which is just a tad ugly (because of the doubled slash). Can we avoid
it, and just omit all those trailing slashes added?
Then, there's a bug: --without-included-ltdl leads to
| checking for ltdl.h... yes
| checking for lt_dlcaller_register in -lltdl... yes
| checking whether to use included libltdl... no
and
| LIBLTDL = -lltdl
...
| LTDLINCL = -I${top_srcdir}/ltdl/
which is wrong -- the include path should not be changed here.
I'll provide a few more data points to reproduce this (it's ok if you
want to fix this in a separate patch).
cat >configure.ac <<EOF
AC_INIT(a,1,b)
AM_INIT_AUTOMAKE
AC_PROG_CC
LT_CONFIG_LTDL_DIR(ltdl)
LT_WITH_LTDL
AC_LIB_LTDL
AM_PROG_LIBTOOL
AC_CONFIG_FILES(Makefile)
AC_OUTPUT
EOF
touch Makefile.am
libtoolize --ltdl
aclocal
automake -a --foreign
autoconf
# edit configure, add `set -x', `set +x' around sections that
# change LTDLINCL
./configure --with-included-ltdl=no
# then, LTDL_CONVENIENCE gets called, and thus:
| checking for ltdl.h... yes
| checking for lt_dlcaller_register in -lltdl... yes
| + test x '!=' xyes
| + case $enable_ltdl_convenience in
| + enable_ltdl_convenience=yes
| + ac_configure_args=''\''--with-included-ltdl=no'\''
--enable-ltdl-convenience'
| + LIBLTDL='${top_builddir}/ltdl//libltdlc.la'
| + LTDLINCL='-I${top_srcdir}/ltdl/'
| + INCLTDL='-I${top_srcdir}/ltdl/'
See inline for a few more nits.
Cheers, and thank you, this looks much nicer already!
Ralf
> Index: libtool--devo--1.0/ChangeLog
> from Gary V. Vaughan <address@hidden>
> * libltdl/m4/ltdl.m4: Bump serial as we are changing the
> interface.
> (LT_CONFIG_LTDL_DIR): New macro to centralise setting the
> subdirectory used for libltdl.
> (LTDL_CONVENIENCE): Continue backwards compatibility support for
> declaring the libltdl source subdirectory with an argument, but
> defer to LT_CONFIG_LTDL_DIR.
> (AC_LIBLTDL_CONVENIENCE): Adjust to upgrade to the new style.
> (LTDL_INSTALLABLE, AC_LIBLTDL_INSTALLABLE): Ditto.
> (LTDL_INIT): lt_ltdl_dir is set by LT_CONFIG_LTDL_DIR now, and
> even `./' needs trailing slashes trimming! If the user didn't
> upgrade their configure.ac yet, call LT_CONFIG_LTDL_DIR for them.
> * libtoolize.m4sh (func_scan_files): If --ltdl option is given
> without a directory argument, use the value from
> LT_CONFIG_LTDL_DIR; if the argument is given, and there is also a
> value in LT_CONFIG_LTDL_DIR, ensure they are the same.
> * libltdl/configure.ac: Use it.
> * NEWS: Updated.
>
> Index: libtool--devo--1.0/NEWS
> ===================================================================
> --- libtool--devo--1.0.orig/NEWS
> +++ libtool--devo--1.0/NEWS
> @@ -3,6 +3,7 @@ NEWS - list of user-visible changes betw
> New in 1.9h: 2005-??-??; CVS version 2.1a, Libtool team:
> * New tests for support of Automake subdir-objects.
> * Fix libltdl on static platforms.
> +* New LT_CONFIG_LTDL_DIR macro.
> * New multi-module-loader safe libltdl handle iteration APIs:
> lt_dlhandle_iterate, lt_dlhandle_fetch, lt_dlhandle_map.
> * New lt_dlinterface_register to maintain separation of concerns between
> Index: libtool--devo--1.0/doc/libtool.texi
> ===================================================================
> --- libtool--devo--1.0.orig/doc/libtool.texi
> +++ libtool--devo--1.0/doc/libtool.texi
> @@ -2243,12 +2243,11 @@ Display a help message and exit.
>
> @item --ltdl address@hidden
> Install libltdl in a the @var{TARGET-DIRECTORY-NAME} subdirectory of
> -your package. If you specify a subdirectory name, then you will need
> -to be careful to pass the same directory name to the autoconf macros:
> address@hidden; @code{LTDL_CONVENIENCE};
> address@hidden (@pxref{Distributing libltdl}). Without
> -an argument, @samp{libltdl} is used as the default target directory
> -name.
> +your package. Normally, the directory is extracted from the argument
> +to @code{LT_CONFIG_LTDL_DIR} in @file{configure.ac}, though you can
> +also specify a subdirectory name here if you are not using Autoconf
> +for example. If @command{libtoolize} can't determine the target
> +directory, @samp{libltdl} is used as the default.
>
> @item --quiet
> @itemx -q
> @@ -4133,34 +4132,39 @@ release of libltdl.
> }. Having made the macros available, you must add a call to the
> @samp{LT_WITH_LTDL} macro to your package's @file{configure.ac} to
> perform the configure time checks required to build the library
> -correctly. This method has problems if you then try to link the
> -package binaries with an installed libltdl, or a library that depends
> -on libltdl: you will have problems with duplicate symbol definitions.
> +correctly. Unfortunately, this method has problems if you then try to
> +link the package binaries with an installed libltdl, or a library that
> +depends on libltdl, because of the duplicate symbol definitions.
> +Ensuring that only one copy of the libltdl sources are linked into any
> +program is left as an exercise for the reader.
> +
Hmm. You meant "so don't do that then", right?
IOW: linking simultaneously against two different libltdl versions is
bad, and linking simultaneously against an installed and a local libltdl
(be that convenience or not) is bad, too.
Yes, I agree. I just wonder whether people understand this.
> address@hidden LT_CONFIG_LTDL_DIR (@var{DIRECTORY})
> +Declare @var{DIRECTORY} to be the location of the @code{libltdl}
> +source files, for @command{libtoolize --ltdl} to place
> +them. @xref{Invoking libtoolize}, for more details.
> address@hidden defmac
>
> address@hidden LT_WITH_LTDL (@var{DIRECTORY})
> address@hidden LT_WITH_LTDL
> Add the @option{--with-included-ltdl} option to the @file{configure}
> -script. By default, this macro will try to build @code{libltdl} in
> -a subdirectory named @file{libltdl}, which is where
> address@hidden --ltdl} will place the files unless directed
> -differently. @xref{Invoking libtoolize}, for how to do that.
> -Otherwise, use @var{DIRECTORY} to pass the location of the
> address@hidden source files.
> +script. This option will then allow the person who builds your
> +package to choose between linking against an already installed
> address@hidden (@option{--without-included-ltdl}), or the sources
> +shipped with the package in the subdirectory named by
> address@hidden (@option{--with-included-ltdl}).
> @end defmac
>
> address@hidden LTDL_INSTALLABLE (@var{DIRECTORY})
> address@hidden LTDL_INSTALLABLE
> If there is an installed @code{libltdl}, then set @code{LIBLTDL} to the
> link flags needed to use it, and @code{LTDLINCL} to the preprocessor
> flags needed to find the installed headers. Otherwise, set them to
> point into an included version of @code{libltdl}, and install that.
>
> -By default, this macro will pass options to the @file{libltdl}
> -subdirectory @file{configure} to cause it to be built as an
> -installable library. If you named the @code{libltdl} source directory
> -differently, then pass the directory name relative to
> address@hidden as @var{DIRECTORY}. If you're not using automake,
> -you will need to define @code{top_builddir} and @code{top_srcdir} in
> -your makefile so that @code{LIBLTDL} and @code{LTDLINCL} are expanded
> -properly.
> +By default, this macro will pass options to the @file{configure}
> +script in the subdirectory named by @code{LT_CONFIG_LTDL_DIR} in order
> +to cause it to be built as an installable library. If you're not
> +using automake, you will need to define @code{top_builddir} and
> address@hidden in your makefile so that @code{LIBLTDL} and
> address@hidden are expanded properly.
>
> If used in conjunction with @code{LT_WITH_LTDL}, this macro must
> appear @strong{before} the call to @code{LT_WITH_LTDL}. If you are
> @@ -4168,17 +4172,18 @@ not using @code{LT_WITH_LTDL}, then you
> @code{AC_CONFIG_SUBDIRS(@var{DIRECTORY})} to your @file{configure.ac}.
> @end defmac
>
> address@hidden LTDL_CONVENIENCE (@var{DIRECTORY})
> address@hidden LTDL_CONVENIENCE
> Unless you call @code{LTDL_INSTALLABLE} before hand,
> @code{LT_WITH_LTDL} calls this macro automatically, so you should only
> ever need to use it yourself if @code{LT_WITH_LTDL} doesn't do what
> you want.
>
> -By default, this macro will pass options to the @file{libltdl}
> -subdirectory @file{configure} to cause it to be built as a convenience
> -library. If you put the @code{libltdl} sources in a different
> -subdirectory, then you should tell @code{LTDL_CONVENIENCE} where
> -with the @var{DIRECTORY} parameter.
> +By default, this macro will pass options to the @file{configure}
> +script in the subdirectory named by @code{LT_CONFIG_LTDL_DIR} in order
> +to cause it to be built as a convenience library. If you're not
> +using automake, you will need to define @code{top_builddir} and
> address@hidden in your makefile so that @code{LIBLTDL} and
> address@hidden are expanded properly.
> @end defmac
>
> One advantage of the convenience library is that it is not installed,
> @@ -4211,8 +4216,8 @@ switch @option{--enable-ltdl-install}.
> Whatever macro you use, it is up to you to ensure that your
> @file{configure.ac} will configure libltdl by using
> @samp{LT_WITH_LTDL}. Both macros define the shell variables
> address@hidden, to the link flag that you should use to link with
> -libltdl, and @var{LTDLINCL}, to the preprocessor flag that you should
> address@hidden to the link flag that you should use to link with
> +libltdl, and @var{LTDLINCL} to the preprocessor flag that you should
> use to compile with programs that include @file{ltdl.h}.
>
> If you're using the convenience libltdl, @var{LIBLTDL} will be the
> @@ -4255,6 +4260,9 @@ assume that libltdl was embedded using @
> configure.ac:
> @example
> ...
> +# Name the subdirectory that contains libltdl sources
> +LT_CONFIG_LTDL_DIR([libltdl])
> +
> ## ------------------------------------------ ##
> ## Enable building of the installable library ##
> ## ------------------------------------------ ##
> Index: libtool--devo--1.0/libltdl/configure.ac
> ===================================================================
> --- libtool--devo--1.0.orig/libltdl/configure.ac
> +++ libtool--devo--1.0/libltdl/configure.ac
> @@ -33,6 +33,7 @@ AC_CONFIG_HEADERS([config.h:config-h.in]
> AC_CONFIG_SRCDIR([ltdl.c])
> AC_CONFIG_AUX_DIR([config])
> AC_CONFIG_MACRO_DIR([m4])
> +LT_CONFIG_LTDL_DIR([.]) # I am me!
>
>
> ## ---------------------------------------- ##
> Index: libtool--devo--1.0/libltdl/m4/ltdl.m4
> ===================================================================
> --- libtool--devo--1.0.orig/libltdl/m4/ltdl.m4
> +++ libtool--devo--1.0/libltdl/m4/ltdl.m4
> @@ -5,77 +5,58 @@
> # unlimited permission to copy and/or distribute it, with or without
> # modifications, as long as this notice is preserved.
>
> -# serial 8 LTDL_INIT
> +# serial 9 LTDL_INIT
>
> -# LT_WITH_LTDL([DIRECTORY])
> -# -------------------------
> -# Clients of libltdl can use this macro to allow the installer to
> -# choose between a shipped copy of the ltdl sources or a preinstalled
> -# version of the library.
> -AC_DEFUN([LT_WITH_LTDL],
> -[AC_ARG_WITH([included_ltdl],
> - [AS_HELP_STRING([--with-included-ltdl],
> - [use the GNU ltdl sources included here])])
> -
> -if test "x$with_included_ltdl" != xyes; then
> - # We are not being forced to use the included libltdl sources, so
> - # decide whether there is a useful installed version we can use.
> - AC_CHECK_HEADER([ltdl.h],
> - [AC_CHECK_LIB([ltdl], [lt_dlcaller_register],
> - [with_included_ltdl=no],
> - [with_included_ltdl=yes])],
> -
> - [],
> - [AC_INCLUDES_DEFAULT]
> - )
> -fi
> -
> -if test "x$enable_ltdl_install" != xyes; then
> - # If the user did not specify an installable libltdl, then default
> - # to a convenience lib.
> - LTDL_CONVENIENCE(m4_default([$1], [libltdl]))
> -fi
> -
> -if test "x$with_included_ltdl" = xno; then
> - # If the included ltdl is not to be used. then Use the
> - # preinstalled libltdl we found.
> - AC_DEFINE([HAVE_LTDL], [1],
> - [Define this if a modern libltdl is already installed])
> - LIBLTDL=-lltdl
> -fi
> +# LT_CONFIG_LTDL_DIR(DIRECTORY)
> +# -----------------------------
> +# DIRECTORY contains the libltdl sources. It is okay to call this
> +# function multiple times, as long as the same DIRECTORY is always given.
> +AC_DEFUN([LT_CONFIG_LTDL_DIR],
> +[AC_BEFORE([$0], [LT_WITH_LTDL])
> +_$0($*)
> +])# LT_CONFIG_LTDL_DIR
> +
> +# We break this out into a separate macro, so that we can call it safely
> +# internally without being caught accidentally by the sed scan in libtoolize.
> +m4_defun([_LT_CONFIG_LTDL_DIR],
> +[m4_case(_LTDL_DIR,
> + [], [m4_define([_LTDL_DIR], [$1])
> + _LT_SHELL_INIT([lt_ltdl_dir='$1'])],
> + [m4_if($1, _LTDL_DIR,
> + [],
> + [m4_fatal([multiple libltdl directories: `]_LTDL_DIR[', `$1`])])])
"quotes" don't match: `$1'.
> +])
>
> -# Report our decision...
> -AC_MSG_CHECKING([whether to use included libltdl])
> -AC_MSG_RESULT([$with_included_ltdl])
> +# Initialise:
> +m4_define([_LTDL_DIR], [])
>
> -AC_CONFIG_SUBDIRS(m4_default([$1], [libltdl]))
> -])# LT_WITH_LTDL
>
> -# Old name:
> -AU_ALIAS([AC_WITH_LTDL], [LT_WITH_LTDL])
> -dnl aclocal-1.4 backwards compatibility:
> -dnl AC_DEFUN([AC_WITH_LTDL], [])
> -
> -
> -# LTDL_CONVENIENCE([DIRECTORY])
> -# -----------------------------
> +# LTDL_CONVENIENCE
> +# ----------------
> # sets LIBLTDL to the link flags for the libltdl convenience library and
> # LTDLINCL to the include flags for the libltdl header and adds
> # --enable-ltdl-convenience to the configure arguments. Note that
> -# AC_CONFIG_SUBDIRS is not called here. If DIRECTORY is not provided,
> -# it is assumed to be `libltdl'. LIBLTDL will be prefixed with
> +# AC_CONFIG_SUBDIRS is not called here. LIBLTDL will be prefixed with
> # '${top_builddir}/' and LTDLINCL will be prefixed with '${top_srcdir}/'
> # (note the single quotes!). If your package is not flat and you're not
> # using automake, define top_builddir and top_srcdir appropriately in
> -# the Makefiles.
> +# your Makefiles.
> AC_DEFUN([LTDL_CONVENIENCE],
> -[case $enable_ltdl_convenience in
> +[AC_BEFORE([$0], [LT_WITH_LTDL])dnl
> +dnl Although the argument is deprecated and no longer documented,
> +dnl LTDL_CONVENIENCE used to take a DIRECTORY orgument, if we have one
> +dnl here make sure it is the same as any other declaration of libltdl's
> +dnl location! This also ensures lt_ltdl_dir is set when configure.ac is
> +dnl not yet using an explicit LT_CONFIG_LTDL_DIR.
> +m4_ifval([$1], [_LT_CONFIG_LTDL_DIR([$1])])dnl
> +
> +case $enable_ltdl_convenience in
> no) AC_MSG_ERROR([this package needs a convenience libltdl]) ;;
> "") enable_ltdl_convenience=yes
> ac_configure_args="$ac_configure_args --enable-ltdl-convenience" ;;
> esac
> -LIBLTDL='${top_builddir}/'m4_default([$1], [libltdl])/libltdlc.la
> -LTDLINCL='-I${top_srcdir}/'m4_default([$1], [libltdl])
> +LIBLTDL='${top_builddir}/'"$lt_ltdl_dir/libltdlc.la"
> +LTDLINCL='-I${top_srcdir}/'"$lt_ltdl_dir"
>
> AC_SUBST([LIBLTDL])
> AC_SUBST([LTDLINCL])
> @@ -85,26 +66,37 @@ INCLTDL="$LTDLINCL"
> AC_SUBST([INCLTDL])
> ])# LTDL_CONVENIENCE
>
> -# Old name:
> -AU_ALIAS([AC_LIBLTDL_CONVENIENCE], [LTDL_CONVENIENCE])
> +# AC_LIBLTDL_CONVENIENCE accepted a directory argument in older libtools,
> +# now we have LT_CONFIG_LTDL_DIR:
> +AU_DEFUN([AC_LIBLTDL_CONVENIENCE],
> +[_LT_CONFIG_LTDL_DIR([$1])
> +LTDL_CONVENIENCE])
> +
> dnl aclocal-1.4 backwards compatibility:
> dnl AC_DEFUN([AC_LIBLTDL_CONVENIENCE], [])
>
>
> -# LTDL_INSTALLABLE([DIRECTORY])
> -# -----------------------------
> -# sets LIBLTDL to the link flags for the libltdl installable library and
> -# LTDLINCL to the include flags for the libltdl header and adds
> -# --enable-ltdl-install to the configure arguments. Note that LIBLTDL
> -# and LTDLINCL are not AC_SUBSTed, nor is AC_CONFIG_SUBDIRS called. If
> -# DIRECTORY is not provided and an installed libltdl is not found, it is
> -# assumed to be `libltdl'. LIBLTDL will be prefixed with '${top_builddir}/'
> +# LTDL_INSTALLABLE
> +# ----------------
> +# sets LIBLTDL to the link flags for the libltdl installable library
> +# and LTDLINCL to the include flags for the libltdl header and adds
> +# --enable-ltdl-install to the configure arguments. Note that
> +# AC_CONFIG_SUBDIRS is not called from here. If an installed libltdl
> +# is not found, LIBLTDL will be prefixed with '${top_builddir}/'
> # and LTDLINCL will be prefixed with '${top_srcdir}/' (note the single
> # quotes!). If your package is not flat and you're not using automake,
> -# define top_builddir and top_srcdir appropriately in the Makefiles.
> +# define top_builddir and top_srcdir appropriately in your Makefiles.
> # In the future, this macro may have to be called after LT_INIT.
> AC_DEFUN([LTDL_INSTALLABLE],
> -[AC_CHECK_LIB(ltdl, lt_dlinit,
> +[AC_BEFORE([$0], [LT_WITH_LTDL])dnl
> +dnl Although the argument is deprecated and no longer documented,
> +dnl LTDL_INSTALLABLE used to take a DIRECTORY orgument, if we have one
> +dnl here make sure it is the same as any other declaration of libltdl's
> +dnl location! This also ensures lt_ltdl_dir is set when configure.ac is
> +dnl not yet using an explicit LT_CONFIG_LTDL_DIR.
> +m4_ifval([$1], [_LT_CONFIG_LTDL_DIR([$1])])dnl
> +
> +AC_CHECK_LIB(ltdl, lt_dlinit,
> [test x"$enable_ltdl_install" != xyes && enable_ltdl_install=no],
> [if test x"$enable_ltdl_install" = xno; then
> AC_MSG_WARN([libltdl not installed, but installation disabled])
> @@ -114,8 +106,8 @@ AC_DEFUN([LTDL_INSTALLABLE],
> ])
> if test x"$enable_ltdl_install" = x"yes"; then
> ac_configure_args="$ac_configure_args --enable-ltdl-install"
> - LIBLTDL='${top_builddir}/'m4_default([$1], [libltdl])/libltdl.la
> - LTDLINCL='-I${top_srcdir}/'m4_default([$1], [libltdl])
> + LIBLTDL='${top_builddir}/'"$lt_ltdl_dir/libltdl.la"
> + LTDLINCL='-I${top_srcdir}/'"$lt_ltdl_dir"
> else
> ac_configure_args="$ac_configure_args --enable-ltdl-install=no"
> LIBLTDL="-lltdl"
> @@ -130,23 +122,87 @@ INCLTDL="$LTDLINCL"
> AC_SUBST([INCLTDL])
> ])# LTDL_INSTALLABLE
>
> -# Old name:
> -AU_ALIAS([AC_LIBLTDL_INSTALLABLE], [LTDL_INSTALLABLE])
> +# AC_LIBLTDL_INSTALLABLE accepted a directory argument in older libtools,
> +# now we have LT_CONFIG_LTDL_DIR:
> +AU_DEFUN([AC_LIBLTDL_INSTALLABLE],
> +[_LT_CONFIG_LTDL_DIR([$1])
> +LTDL_INSTALLABLE])
> +
> dnl aclocal-1.4 backwards compatibility:
> dnl AC_DEFUN([AC_LIBLTDL_INSTALLABLE], [])
>
>
> -# LTDL_INIT([DIRECTORY])
> -# ----------------------
> +# LT_WITH_LTDL
> +# ------------
> +# Clients of libltdl can use this macro to allow the installer to
> +# choose between a shipped copy of the ltdl sources or a preinstalled
> +# version of the library. If the shipped ltdl sources are not in a
> +# subdirectory named libltdl, the directory name must be given by
> +# LT_CONFIG_LTDL_DIR.
> +AC_DEFUN([LT_WITH_LTDL],
> +[dnl If neither LT_CONFIG_LTDL_DIR, LTDL_CONVENIENCE nor LTDL_INSTALLABLE
> +dnl was called yet, then for old times' sake, we assume libltdl is in an
> +dnl eponymous directory:
> +AC_PROVIDE_IFELSE([LT_CONFIG_LTDL_DIR], [], [_LT_CONFIG_LTDL_DIR([libltdl])])
> +
> +AC_ARG_WITH([included_ltdl],
> + [AS_HELP_STRING([--with-included-ltdl],
> + [use the GNU ltdl sources included here])])
> +
> +if test "x$with_included_ltdl" != xyes; then
> + # We are not being forced to use the included libltdl sources, so
> + # decide whether there is a useful installed version we can use.
> + AC_CHECK_HEADER([ltdl.h],
> + [AC_CHECK_LIB([ltdl], [lt_dlcaller_register],
> + [with_included_ltdl=no],
> + [with_included_ltdl=yes])],
> +
> + [],
> + [AC_INCLUDES_DEFAULT]
> + )
> +fi
> +
> +if test "x$enable_ltdl_install" != xyes; then
> + # If the user did not specify an installable libltdl, then default
> + # to a convenience lib.
> + LTDL_CONVENIENCE
> +fi
> +
> +if test "x$with_included_ltdl" = xno; then
> + # If the included ltdl is not to be used. then Use the
wrong punctuation and capitalization.
> + # preinstalled libltdl we found.
> + AC_DEFINE([HAVE_LTDL], [1],
> + [Define this if a modern libltdl is already installed])
> + LIBLTDL=-lltdl
> +fi
> +
> +# Report our decision...
> +AC_MSG_CHECKING([whether to use included libltdl])
> +AC_MSG_RESULT([$with_included_ltdl])
> +
> +AC_CONFIG_SUBDIRS([_LTDL_DIR])
> +
> +dnl Be certain that LTDL_INIT is invoked:
> +AC_PROVIDE_IFELSE([LTDL_INIT],
> + [],
> + [LTDL_INIT
> + AC_DEFUN([LTDL_INIT], [])])
> +])# LT_WITH_LTDL
> +
> +# Old name:
> +AU_ALIAS([AC_WITH_LTDL], [LT_WITH_LTDL])
> +dnl aclocal-1.4 backwards compatibility:
> +dnl AC_DEFUN([AC_WITH_LTDL], [])
> +
> +
> +# LTDL_INIT
> +# ---------
> # Perform all the checks necessary for compilation of the ltdl objects
> -# -- including compiler checks and header checks.
> +# -- including compiler checks and header checks. This is a public
> +# interface mainly for the benefit of libltdl's own configure.ac, most
> +# other users should call LT_WITH_LTDL instead.
> AC_DEFUN([LTDL_INIT],
> -[m4_ifval([$1], [m4_divert_push([DEFAULTS])dnl
> -# libltdl will be built in the named DIRECTORY, relative to $top_builddir.
> -lt_ltdl_dir='$1'
> -m4_divert_pop([DEFAULTS])])dnl
> -
> -AC_REQUIRE([AC_PROG_CC])dnl
> +[AC_REQUIRE([AC_PROG_CC])dnl
> AC_REQUIRE([AC_C_CONST])dnl
> AC_REQUIRE([AC_HEADER_STDC])dnl
> AC_REQUIRE([AC_HEADER_DIRENT])dnl
> @@ -164,6 +220,16 @@ m4_require([_LT_HEADER_DLFCN])dnl
> m4_require([_LT_ENABLE_INSTALL])dnl
> m4_require([_LT_CHECK_DLPREOPEN])dnl
>
> +dnl Although deprecated and no longer documented, alpha releases of
> +dnl libtool used to define an LTDL_INIT to take a DIRECTORY orgument.
> +dnl If LT_CONFIG_LTDL_DIR was called already, but LTDL_INIT was given a
> +dnl DIRECTORY argument, check it is the same as previous invocations. If
> +dnl it still hasn't been called, then do it now, defaulting to `libltdl'
> +dnl if no DIRECTORY argument was passed.
> +m4_provide_if([_LT_CONFIG_LTDL_DIR],
> + [m4_ifval([$1], [_LT_CONFIG_LTDL_DIR([$1])])],
> + [_LT_CONFIG_LTDL_DIR(m4_default([$1], [libltdl]))])dnl
> +
> # In order that ltdl.c can compile, run AC_CONFIG_HEADERS for the user
> # if they did not call it themself. This is so that ltdl.h can pick up
> # the parent projects config.h file, The first file in AC_CONFIG_HEADERS
> @@ -393,8 +459,7 @@ AC_DEFUN([LT_LIB_DLLOAD],
> LT_DLLOADERS=
> AC_SUBST([LT_DLLOADERS])
>
> -test "X${lt_ltdl_dir-.}" != X. &&
> - lt_ltdl_dir=`echo "$lt_ltdl_dir/" | sed 's,/*$,/,'`
> +lt_ltdl_dir=`echo "${lt_ltdl_dir-.}/" | sed 's,/*$,/,'`
>
> AC_LANG_PUSH([C])
>
> Index: libtool--devo--1.0/libtoolize.m4sh
> ===================================================================
> --- libtool--devo--1.0.orig/libtoolize.m4sh
> +++ libtool--devo--1.0/libtoolize.m4sh
> @@ -39,7 +39,7 @@ m4_divert_push([SCRIPT])#! /bin/sh
> # -n, --dry-run print commands rather than running them
> # -f, --force replace existing files
> # -i, --install copy missing auxiliary files
> -# --ltdl[=DIR] install libltdl in a subdirectory [default: libltdl]
> +# -l, --ltdl[=DIR] install libltdl sources [[default: libltdl]]
AFAICS the double quotes are superfluous.
Also, I'm not so sure `-l' as abbreviation is such a good idea for
`--ltdl'. What if we later want to --list something, or have an idea
of something local or long? --ltdl is not much to type, and the list
of short option abbreviations in GCS does not list a similar precedent.
> # -q, --quiet work silently
> # -v, --verbose verbosely report processing
> # --version print version information and exit
> @@ -68,10 +68,11 @@ $as_unset CDPATH
> m4_include([getopt.m4sh])
>
> # Command line options:
> +opt_debug=:
> opt_force=false
> opt_install=false
> opt_link=:
> -opt_debug=:
> +opt_ltdl=false
>
> seen_autoconf=false
> seen_libtool=false
> @@ -123,7 +124,7 @@ configure_ac=configure.in
>
> --install|-i) opt_install=: ;;
>
> - --ltdl) ltdldir=libltdl
> + --ltdl|-l) opt_ltdl=:
> if test "$#" -gt 0; then
> case $1 in
> -*) ;;
> @@ -146,8 +147,16 @@ configure_ac=configure.in
> shift
> ;;
>
> + # Separate optargs to short options:
> + -l*)
> + arg=`$ECHO "X$opt" | $Xsed -e "$my_sed_single_rest"`
> + opt=`$ECHO "X$opt" | $Xsed -e "$my_sed_single_opt"`
> + set dummy "$opt" "$arg" ${1+"$@"}
> + shift
> + ;;
> +
> # Separate non-argument short options:
> - -c*|-i*|-f*|-n*|-q*|-v*)
> + -c*|-f*|-i*|-n*|-q*|-v*)
> rest=`$ECHO "X$opt" | $Xsed -e "$my_sed_single_rest"`
> opt=`$ECHO "X$opt" | $Xsed -e "$my_sed_single_opt"`
> set dummy "$opt" "-$rest" ${1+"$@"}
> @@ -354,6 +363,9 @@ func_scan_files ()
> my_configure_ac=
> test -n "$configure_ac" && my_configure_ac="$configure_ac: "
> func_verbose "${my_configure_ac}not using Autoconf"
> +
> + # Make sure ltdldir is set, even though we return early here:
> + test -n "$ltdldir" || ltdldir=libltdl
> return
> }
>
> @@ -370,6 +382,10 @@ func_scan_files ()
> /AC_CONFIG_MACRO_DIR(/ {
> s,^.*AC_CONFIG_MACRO_DIR([[[ ]*\([^])]]*\).*$,macrodir=\1,;
> p;
> };
> + /_LT_CONFIG_LTDL_DIR(/d;
> + /LT_CONFIG_LTDL_DIR(/ {
> + s,^.*LT_CONFIG_LTDL_DIR([[[ ]*\([^])]]*\).*$,ac_ltdldir=\1,; p;
> + };
> /A[[CM]]_PROG_LIBTOOL/ { s,^.*$,seen_libtool=:,; p; };
> /LT_INIT/ { s,^.*$,seen_libtool=:,; p; };
> /LTDL_INIT/ { s,^.*$,seen_ltdl=:,; p; };
> @@ -380,6 +396,33 @@ func_scan_files ()
> eval `cat aclocal.m4 "$configure_ac" 2>/dev/null | $SED "$my_sed_traces"`
>
>
> + # ----------------- #
> + # Validate ltdldir. #
> + # ----------------- #
> +
> + # If $configure_ac contains AC_CONFIG_AUX_DIR, check that it was
> + # not given in terms of a shell variable!
> + case "$ac_ltdldir" in
> + *\$*)
> + func_fatal_error "can not handle variables in LT_CONFIG_LTDL_DIR"
> + ;;
> + esac
> +
> + # If neither --ltdl nor LT_CONFIG_LTDL_DIR are specified, default to
> + # `libltdl'. If both are specified, they must be the same. Otherwise,
> + # take the one that is given! (If LT_CONFIG_LTDL_DIR is not specified
> + # we suggest adding it later in this code.)
> + case x$ac_ltdldir,x$ltdldir in
> + x,x) ltdldir=libltdl ;;
> + x*,x) ltdldir=$ac_ltdldir ;;
> + x,x*) ltdldir=$ltdldir ;;
> + *)
> + test x"$ac_ltdldir" = x"$ltdldir" || \
> + func_fatal_error "--ltdl='$ltdldir' does not match
> LT_CONFIG_LTDL_DIR($ac_ltdldir)"
Hmm. If I
LT_CONFIG_LTDL_DIR(ltdl/)
and
libtoolize --ltdl=ltdl/
then it'll barf. Probably ok, I just noticed it.
> + ;;
> + esac
> +
> +
> # ---------------- #
> # Validate auxdir. #
> # ---------------- #
> @@ -899,7 +942,7 @@ func_nonemptydir_p ()
>
> # Copy all the files from installed libltdl to this project, if the
> # user specified `--ltdl'.
> - if test -n "$ltdldir"; then
> + if $opt_ltdl; then
> func_copy_some_files "$pkgltdl_files" "$pkgltdldir/libltdl" "$ltdldir"
>
> # Unless we share CONFIG_MACRO_DIR with our parent project,
> @@ -962,14 +1005,20 @@ func_nonemptydir_p ()
> fi
> fi
>
> - # Offer some suggestions for avoiding duplicate files in a project
> - # that uses libltdl:
> - if test -n "$ltdldir" && $seen_autoconf; then
> - $opt_quiet || test "$ltdldir/config" = "$auxdir" || \
> - func_echo "consider using \`AC_CONFIG_AUX_DIR([[$ltdldir/config]])' in
> $configure_ac"
> - $opt_quiet || test "$ltdldir/m4" = "$m4dir" || \
> - func_echo "consider using \`AC_CONFIG_MACRO_DIR([[$ltdldir/m4]])' in
> $configure_ac"
> - fi
> + $opt_quiet || \
> + if $opt_ltdl && $seen_autoconf; then
> +
> + # Remind the user to call LT_CONFIG_LTDL_DIR:
> + test -n "$ac_ltdldir" || \
> + func_echo "Remember to add \`LT_CONFIG_LTDL_DIR([[$ltdldir]])' to
> \`$configure_ac'"
> +
> + # Offer some suggestions for avoiding duplicate files in a project
> + # that uses libltdl:
> + test "$ltdldir/config" = "$auxdir" || \
> + func_echo "consider using \`AC_CONFIG_AUX_DIR([[$ltdldir/config]])'
> in $configure_ac"
> + test "$ltdldir/m4" = "$m4dir" || \
> + func_echo "consider using \`AC_CONFIG_MACRO_DIR([[$ltdldir/m4]])' in
> $configure_ac"
> + fi
> }
>
> exit $exit_status