diff --git a/ChangeLog b/ChangeLog index 6e27c26a..854499ae 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,19 @@ 2004-02-06 Gary V. Vaughan + * m4/ltversion.in: New file to capture what version number macros + are being used. + * Makefile.am (m4/ltversion.m4): New rule to create it from + m4/ltversion.in. + (nodist_pkgmacro_DATA): Add m4/ltversion.m4. + (EXTRA_DIST): Add m4/ltversion.in. + * m4/libtool.m4 (AC_LIBTOOL_SETUP): AC_REQUIRE LTVERSION_VERSION + from ltversion.m4. + * bootstrap: Call the Makefile.am to create an initial + m4/ltversion.m4. + * ltmain.in: Diagnose version mismatches of various flavours. + * TODO: Remove mismatch item. + * NEWS: Updated. + * Makefile.am ($(top_builddir)/config.status): Removed. * configure.ac (CONFIG_STATUS_DEPENDENCIES): This substitution is how automake-1.8 now informs all Makefiles when config.status diff --git a/Makefile.am b/Makefile.am index 41d9127f..067aab2e 100644 --- a/Makefile.am +++ b/Makefile.am @@ -36,7 +36,25 @@ dist_pkgdata_DATA = config/config.guess config/config.sub config/ltmain.sh # We maintain our own macros to provent problems with ancient definitions. # lt~obsolete.m4 doesn't belong here, it's for bootstrapping us only pkgmacrodir = $(pkgdatadir)/m4 -pkgmacro_DATA = m4/libtool.m4 m4/ltdl.m4 m4/ltsugar.m4 +dist_pkgmacro_DATA = m4/libtool.m4 m4/ltdl.m4 m4/ltsugar.m4 +nodist_pkgmacro_DATA = m4/ltversion.m4 +EXTRA_DIST += m4/ltversion.in + +# We build ltversion.m4 here, instead of from config.status, +# because config.status is rerun each time one og configure's +# dependencies change and ltversion.m4 happens to be a configure +# dependency. configure and ltversion.m4 vould be rebuilt in +# a loop otherwise. +# Use `$(top_srcdir)/m4' for the benefit of non-GNU makes: this is +# how ltversion.m4 appears in our dependencies. +$(top_srcdir)/m4/ltversion.m4: $(top_srcdir)/m4/ltversion.in stamp-vcl + set `$(MKSTAMP) < $(top_srcdir)/ChangeLog`; \ + sed -e "s,[@]MACRO_VERSION[@],$(VERSION),g" \ + -e "s,[@]MACRO_REVISION[@],$$1,g" \ + -e "s,[@]configure_input[@],Generated from ltversion.in; do not edit by hand.,g" \ + $(top_srcdir)/m4/ltversion.in > $@t + chmod a-w $@t + mv -f $@t $@ # The standalone libtool script, and the libtool distributor. bin_SCRIPTS = libtool libtoolize diff --git a/NEWS b/NEWS index 68fc53c0..5e628562 100644 --- a/NEWS +++ b/NEWS @@ -1,7 +1,13 @@ NEWS - list of user-visible changes between releases of GNU Libtool New in 1.5b: 2004-??-??; CVS version 1.5a, Libtool team: +* The /^_?LT_[A-Z_]+$/ namespace is now reserved for Libtool's own macros. + If you have any shell variables in this namespace they will need to be + renamed. If you have any macros in this namespace please rename them to + prevent any possible future clash with libtool supplied macros. * New LT_PREREQ macro for specifying minimum libtool requirement. +* The libtool script will complain if it was built from mismatched ltmain.sh + and libtool m4 macro versions. * Like automake, libtoolize no longer installs config.guess and config.sub by default. Use new --install option to get the old behaviour. * libtool script is now created by config.status. Instead of interrogating diff --git a/TODO b/TODO index f38bf159..e6b119d3 100644 --- a/TODO +++ b/TODO @@ -15,10 +15,6 @@ to ltconfig. or if a specific module type can only be loaded by one of them, how report its dlerror? Also report dlerror() for dlclose and dlsym if available - Make sure that the dependency_libs of a dlpreopened module won't be loaded. - -* Check whether the version of libtool.m4 is compatible with -ltconfig/ltmain.sh. Meanwhile, the recommended approach for -developers using automake is to insert libtool.m4 in acinclude.m4. * We could have an option to hardcode paths into libraries, as well as binaries: `... -Wl,-soname -Wl,/tmp/libtest.so.0 ...'. This is not @@ -63,8 +59,8 @@ respective ltdl.m4 macros. * Godmar Back writes: libltdl uses such stdio functions as fopen, fgets, feof, fclose, and others. - These functions are not async-signal-safe. While this does not make - libltdl unusable, it restricts its usefulness and puts an + These functions are not async-signal-safe. While this does not make + libltdl unusable, it restricts its usefulness and puts an unnecessary burden on the user. As a remedy, I'd recommend to replace those functions with functions @@ -74,7 +70,7 @@ respective ltdl.m4 macros. out from which you can steal the latter. I believe relying on async-signal-safe functions to the greatest extent - possible would greatly improve libltdl's ability to be embedded in and + possible would greatly improve libltdl's ability to be embedded in and used by other systems. * Arrange that EXEEXT suffixes are stripped from wrapper script names diff --git a/bootstrap b/bootstrap index 428cf6e2..07c3e5bd 100755 --- a/bootstrap +++ b/bootstrap @@ -41,6 +41,8 @@ if test -z "$reconfdirs"; then reconfdirs=". `ls -1d tests/*demo tests/*demo[0-9]`" fi +make top_srcdir=. -f Makefile.am ./m4/ltversion.m4 + for file in $fakes; do cat > $file <<'EOF' #! /bin/sh diff --git a/ltmain.in b/ltmain.in index 30a20e3c..d41cb070 100644 --- a/ltmain.in +++ b/ltmain.in @@ -65,6 +65,74 @@ mkdir="mkdir" mv="mv -f" rm="rm -f" +# Ensure that we are using m4 macros, and libtool script from the same +# release of libtool. +package_revision=`( set $TIMESTAMP; echo $1; )` +if test "$package_revision" != "$macro_revision"; then + if test "$VERSION" != "$macro_version"; then + if test -z "$macro_version"; then + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, but the +$progname: definition of this AC_PROG_LIBTOOL comes from an older release. +$progname: You should recreate aclocal.m4 with macro's from $PACKAGE $VERSION +$progname: and run autoconf again. +_LT_EOF + else + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, but the +$progname: definition of this AC_PROG_LIBTOOL comes from $PACKAGE $macro_version. +$progname: You should recreate aclocal.m4 with macro's from $PACKAGE $VERSION +$progname: and run autoconf again. +_LT_EOF + fi + else + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, +$progname: but the definition used by this AC_PROG_LIBTOOL comes from revision +$progname: $macro_revision. +$progname: You should recreate aclocal.m4 with macro's from revision $package_revision +$progname: of $PACKAGE $VERSION and run autoconf again. +_LT_EOF + fi + + # $? = 63 is used to indicate version mismatch to missing. + exit 63 +fi + +# Ensure that we are using m4 macros, and libtool script from the same +# release of libtool. +package_revision=`( set $TIMESTAMP; echo $1; )` +if test "$package_revision" != "$macro_revision"; then + if test "$VERSION" != "$macro_version"; then + if test -z "$macro_version"; then + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, but the +$progname: definition of this AC_PROG_LIBTOOL comes from an older release. +$progname: You should recreate aclocal.m4 with macro's from $PACKAGE $VERSION +$progname: and run autoconf again. +_LT_EOF + else + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, but the +$progname: definition of this AC_PROG_LIBTOOL comes from $PACKAGE $macro_version. +$progname: You should recreate aclocal.m4 with macro's from $PACKAGE $VERSION +$progname: and run autoconf again. +_LT_EOF + fi + else + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, +$progname: but the definition used by this AC_PROG_LIBTOOL comes from revision +$progname: $macro_revision. +$progname: You should recreate aclocal.m4 with macro's from revision $package_revision +$progname: of $PACKAGE $VERSION and run autoconf again. +_LT_EOF + fi + + # $? = 63 is used to indicate version mismatch to missing. + exit 63 +fi + # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. Xsed="${SED}"' -e 1s/^X//' @@ -571,7 +639,7 @@ exec_cmd= exit 1 ;; esac - + func_infer_tag $base_compile for arg in $later; do diff --git a/m4/libtool.m4 b/m4/libtool.m4 index 8a137646..7dfa6d03 100644 --- a/m4/libtool.m4 +++ b/m4/libtool.m4 @@ -97,6 +97,7 @@ dnl Autoconf doesn't catch unexpanded LT_ macros by default: m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW)$])dnl AC_REQUIRE([LTSUGAR_VERSION])dnl +AC_REQUIRE([LTVERSION_VERSION])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl _LT_DECL([], [host_alias], [0], [The host system])dnl diff --git a/m4/ltversion.in b/m4/ltversion.in new file mode 100644 index 00000000..82975077 --- /dev/null +++ b/m4/ltversion.in @@ -0,0 +1,14 @@ +# ltversion.m4 -- version numbers -*- Autoconf -*- +# @configure_input@ + +# This file is part of GNU Libtool + +m4_define([LT_PACKAGE_VERSION], [@MACRO_VERSION@]) +m4_define([LT_PACKAGE_REVISION], [@MACRO_REVISION@]) + +AC_DEFUN([LTVERSION_VERSION], +[macro_version='@MACRO_VERSION@' +macro_revision='@MACRO_REVISION@' +_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) +_LT_DECL(, macro_revision, 0) +])