[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
10-gary-rewrite-libtoolize.patch
From: |
Gary V. Vaughan |
Subject: |
10-gary-rewrite-libtoolize.patch |
Date: |
Thu, 02 Oct 2003 15:55:55 +0100 |
User-agent: |
Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.5) Gecko/20030925 Thunderbird/0.3 |
Mostly, I just wanted libtoolize to install libtool.m4 and ltdl.m4 like
autopoint installs its macros, so that aclocal-1.8 will be able to m4_include
them.
Then I noticed how noisy libtoolize is when autoreconf runs it, and wanted to
sort that out.
Once I'd started, I realised that we will need to support macros outside
configure.ac, and that we would need to scan m4_included files, and use
autoconf --trace.
It was easier to rewrite the whole of libtoolize.in.
Okay to commit?
--
())_. Gary V. Vaughan gary@(lilith.warpmail.net|gnu.org)
( '/ Research Scientist http://www.oranda.demon.co.uk ,_())____
/ )= GNU Hacker http://www.gnu.org/software/libtool \' `&
`(_~)_ Tech' Author http://sources.redhat.com/autobook =`---d__/
Index: ChangeLog
from Gary V. Vaughan <address@hidden>
* libtoolize.in: Completely rewritten.
* NEWS: Updated.
Index: NEWS
===================================================================
RCS file: /cvsroot/libtool/libtool/NEWS,v
retrieving revision 1.111
diff -u -p -u -r1.111 NEWS
--- NEWS 5 Aug 2003 16:05:00 -0000 1.111
+++ NEWS 2 Oct 2003 14:41:48 -0000
@@ -1,6 +1,10 @@
NEWS - list of user-visible changes between releases of GNU Libtool
New in 1.5b: 2003-??-??; CVS version 1.5a, Libtool team:
+* Requires Automake 1.8.
+* libtoolize will run autopoint, aclocal and autoconf for the user
+ if necessary.
+* libtoolize installs libtool.m4 (and ltdl.m4 if used) to AC_CONFIG_M4_DIR.
* Bug fixes.
New in 1.5.1: 2003-??-??; CVS version 1.5.0a, Libtool team:
Index: libtoolize.in
===================================================================
RCS file: /cvsroot/libtool/libtool/libtoolize.in,v
retrieving revision 1.21
diff -u -p -u -r1.21 libtoolize.in
--- libtoolize.in 23 Feb 2003 16:15:49 -0000 1.21
+++ libtoolize.in 2 Oct 2003 14:41:49 -0000
@@ -1,10 +1,11 @@
#! /bin/sh
-# libtoolize - Prepare a package to use libtool.
-# @configure_input@
-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003
-# Free Software Foundation, Inc.
-# Originally by Gordon Matzigkeit <address@hidden>, 1996
-#
+# libtoolize (GNU @PACKAGE@) @VERSION@@TIMESTAMP@
+# Written by Gary V. Vaughan <address@hidden>
+
+# Copyright (C) 2003 Free Software Foundation, Inc.
+# This is free software; see the source for copying conditions. There is NO
+# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
@@ -16,339 +17,592 @@
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# along with this program; if not, a copy can be downloaded from
+# http://www.gnu.org/copyleft/gpl.html, or by writing to the Free
+# Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
+# MA 02111-1307, USA.
#
# As a special exception to the GNU General Public License, if you
# distribute this file as part of a program that contains a
# configuration script generated by Autoconf, you may include it under
# the same distribution terms that you use for the rest of that program.
-# The name of this program.
-progname=`echo "$0" | sed 's%^.*/%%'`
+# Usage: $progname [OPTION]...
+#
+# Prepare a package to use libtool.
+#
+# -c, --copy copy files rather than symlinking them
+# --debug enable verbose shell tracing
+# -n, --dry-run print commands rather than running them
+# -f, --force replace existing files
+# --help display this message and exit
+# -i, --install copy missing auxiliary files
+# --ltdl install libltdl in a subdirectory
+# --ltdl-tar install the libltdl tarball
+# -q, --quiet work silently
+# -v, --verbose verbosely report processing
+# --version print version information and exit
+#
+# You must `cd' to the top directory of your package before you run
+# `$progname'.
+#
+# Report bugs to <address@hidden>.
+
+: ${ACLOCAL="aclocal"}
+: ${AUTOCONF="autoconf"}
+: ${AUTOPOINT="autopoint"}
+: ${CP="cp -f"}
+: ${LN_S="@LN_S@"}
+: ${MKDIR="mkdir"}
+: ${RM="rm -f"}
-# Constants.
+# The name of this program:
+progname=`echo "$0" | sed 's%^.*/%%'`
PROGRAM=libtoolize
address@hidden@
address@hidden@
-# Directory names.
+# Global variables.
+dry_run_opt=false
+force_opt=false
+install_opt=false
+link_opt=:
+ltdl_opt=false
+ltdl_tar_opt=false
+quiet_opt=false
+verbose_opt=false
+
+seen_gettext=false
+seen_libtool=false
+seen_ltdl=false
+uses_aclocal=:
+
+exit_status=0
+
+# Locations for important files:
address@hidden@
address@hidden@
address@hidden@
address@hidden@
-
+auxdir=
+m4dir=
+configure_ac=configure.in
libtool_m4="$aclocaldir/libtool.m4"
ltdl_m4="$aclocaldir/ltdl.m4"
-dry_run=no
-help="Try \`$progname --help' for more information."
-rm="rm -f"
-ln_s="@LN_S@"
-cp="cp -f"
-mkdir="mkdir"
-
-# Global variables.
-automake=
-copy=
-force=
-ltdl=
-ltdl_tar=
-configure_ac=
-status=0
-
-for arg
-do
- case "$arg" in
- --help)
- cat <<EOF
-Usage: $progname [OPTION]...
-
-Prepare a package to use libtool.
-
- --automake work silently, and assume that Automake is in use
--c, --copy copy files rather than symlinking them
- --debug enable verbose shell tracing
--n, --dry-run print commands rather than running them
--f, --force replace existing files
- --help display this message and exit
- --ltdl install libltdl in a subdirectory
- --ltdl-tar install the libltdl tarball
- --version print version information and exit
-
-You must \`cd' to the top directory of your package before you run
-\`$progname'.
-
-Report bugs to <address@hidden>.
-EOF
- exit 0
- ;;
-
- --version)
- echo "$PROGRAM (GNU $PACKAGE) $VERSION"
- echo
- echo "Copyright (C) 2003 Free Software Foundation, Inc."
- echo "This is free software; see the source for copying conditions. There
is NO"
- echo "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE."
- exit 0
- ;;
-
- --automake)
- automake=yes
- ;;
-
- -c | --copy)
- ln_s=
- ;;
-
- --debug)
- echo "$progname: enabling shell trace mode"
- set -x
- ;;
-
- -n | --dry-run)
- if test "$dry_run" != yes; then
- dry_run=yes
- rm="echo $rm"
- test -n "$ln_s" && ln_s="echo $ln_s"
- cp="echo $cp"
- mkdir="echo mkdir"
- fi
- ;;
-
- -f | --force)
- force=yes
- ;;
-
- --ltdl)
- ltdl=yes
- ;;
-
- --ltdl-tar)
- ltdl_tar=yes
- ;;
-
- -*)
- echo "$progname: unrecognized option \`$arg'" 1>&2
- echo "$help" 1>&2
+# func_echo arg...
+# Echo program name prefixed message.
+func_echo ()
+{
+ echo $progname: ${1+"$@"}
+}
+
+# func_verbose arg...
+# Echo program name prefixed message in verbose mode only.
+func_verbose ()
+{
+ $verbose_opt && func_echo ${1+"$@"}
+}
+
+# func_error arg...
+# Echo program name prefixed message to standard error.
+func_error ()
+{
+ echo $progname: ${1+"$@"} 1>&2
+}
+
+# func_fatal_error arg...
+# Echo program name prefixed message to standard error, and exit.
+func_fatal_error ()
+{
+ func_error ${1+"$@"}
exit 1
- ;;
+}
- *)
- echo "$progname: too many arguments" 1>&2
- echo "$help" 1>&2
- exit 1
- ;;
- esac
-done
-
-if test -f configure.ac; then
- configure_ac=configure.ac
-elif test -f configure.in; then
- configure_ac=configure.in
-else
- echo "$progname: \`configure.ac' does not exist" 1>&2
- echo "$help" 1>&2
- exit 1
-fi
-
-
-files=`cd $pkgdatadir && ls`
-if test -z "$files"; then
- echo "$progname: cannot list files in \`$pkgdatadir'" 1>&2
- exit 1
-fi
-files='config.guess config.sub ltmain.sh'
-
-auxdir=.
-auxdirline=`grep '^AC_CONFIG_AUX_DIR' $configure_ac 2>/dev/null`
-if test -n "$auxdirline"; then
- # Handle explicit AC_CONFIG_AUX_DIR settings.
- auxdir=`echo "$auxdirline" | sed 's/^AC_CONFIG_AUX_DIR(\([^)]*\)).*$/\1/'`
-
- if test "$auxdir" = "$auxdirline"; then
- echo "$progname: invalid AC_CONFIG_AUX_DIR syntax: $auxdirline" 1>&2
- exit 1
- else
- # Strip any quote brackets.
- auxdir=`echo "$auxdir" | sed 's/^\[\(.*\)\]$/\1/g'`
- case "$auxdir" in
- *\$*)
- echo "$progname: cannot handle variables in AC_CONFIG_AUX_DIR" 1>&2
- exit 1
- ;;
- *)
- ;;
+# func_fatal_help arg...
+# Echo program name prefixed message to standard error, followed by
+# a help hint, and exit.
+func_fatal_help ()
+{
+ func_error ${1+"$@"}
+ func_fatal_error "Try \`$progname --help' for more information."
+}
+
+
+# Parse options once, thoroughly. This comes as soon as possible in
+# the script to make things like `libtoolize --version' happen quickly.
+{
+ # sed scripts:
+ my_sed_single_opt='1s/^\(..\).*$/\1/;q'
+ my_sed_single_rest='1s/^..\(.*\)$/\1/;q'
+ my_sed_help='/^# Usage:/,/# Report bugs to/ {
+ s/^# //; s/^# *$//;
+ s/\$progname/'$progname'/;
+ p;
+ }; d'
+ my_sed_version='/^# '$PROGRAM' (GNU /,/# warranty; / {
+ s/^# //; s/^# *$//;
+ s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/;
+ p;
+ }; d'
+
+
+ while test $# -gt 0; do
+ case "$1" in
+ --copy | -c) shift; link_opt=false ;;
+
+ --debug) shift
+ func_echo "enabling shell trace mode"
+ set -x
+ ;;
+
+ --dry-run | -n) shift
+ if $dry_run_opt; then :; else
+ dry_run_opt=:
+ RM="echo $RM"
+ test -n "$LN_S" && LN_S="echo $LN_S"
+ CP="echo $CP"
+ MKDIR="echo $MKDIR"
+ AUTOPOINT=": $AUTOPOINT"
+ ACLOCAL=": $ACLOCAL"
+ AUTOCONF=": $AUTOCONF"
+ fi
+ ;;
+
+ --force | -f) shift; force_opt=: ;;
+ --install | -i) shift; install_opt=: ;;
+ --ltdl) shift; ltdl_opt=: ;;
+ --ltdl-tar) shift; ltdl_tar_opt=: ;;
+ --quiet | --automake | -q) # --automake is for 1.5 compatibility
+ shift; quiet_opt=: ;;
+ --verbose | -v) shift; verbose_opt=: ;;
+
+ -c*|-i*|-f*|-n*|-q*|-v*)
+ opt=`echo "$1" |sed "$my_sed_single_opt"`
+ rest=`echo "$1" |sed "$my_sed_single_rest"`
+ shift
+ set -- "$opt" "-$rest" ${1+"$@"}
+ ;;
+
+ --version) sed "$my_sed_version" < $0; exit 0 ;;
+ --help) sed "$my_sed_help" < $0; exit 0 ;;
+ --) shift ;;
+ -*) func_fatal_help "unrecognized option \`$1'" ;;
+ *) func_fatal_help "too many arguments" ;;
esac
- fi
-else
- # Try to discover auxdir the same way it is discovered by configure.
- # Note that we default to the current directory.
- for dir in . .. ../..; do
- if test -f $dir/install-sh; then
- auxdir=$dir
- break
- elif test -f $dir/install.sh; then
- auxdir=$dir
- break
- fi
done
-fi
-
-if test -z "$automake"; then
- if grep '^A[MC]_PROG_LIBTOOL' $configure_ac >/dev/null 2>&1; then :
- else
- echo "Remember to add \`AC_PROG_LIBTOOL' to \`$configure_ac'."
- fi
- if grep '^AC_PROG_RANLIB' $configure_ac >/dev/null 2>&1; then
- echo "Using \`AC_PROG_RANLIB' is rendered obsolete by \`AC_PROG_LIBTOOL'"
- fi
+ $force_opt && AUTOPOINT="$AUTOPOINT --force"
+}
- if grep 'generated automatically by aclocal' aclocal.m4 >/dev/null 2>&1; then
- updatemsg="update your \`aclocal.m4' by running aclocal"
- else
- updatemsg="add the contents of \`$libtool_m4' to \`aclocal.m4'"
- fi
+# func_copy srcfile destfile
+# If --copy was specified, or soft-linking SRCFILE to DESTFILE fails,
+# then try to copy SRCFILE to DESTFILE.
+func_copy ()
+{
+ my_srcfile="$1"
+ my_destfile="$2"
+ my_return_status=1
+
+ $RM "$my_destfile"
+ if $link_opt && $LN_S "$my_srcfile" "$my_destfile"; then
+ $quiet_opt || func_echo "copying file \`$my_destfile'"
+ my_return_status=0
+ elif $CP "$my_srcfile" "$my_destfile"; then
+ $quiet_opt || func_echo "copying file \`$my_destfile'"
+ my_return_status=0
+ else
+ func_error "can not copy \`$my_srcfile' to \`$my_destfile'"
+ exit_status=1
+ fi
- if grep '^AC_DEFUN(\[A[MC]_PROG_LIBTOOL' aclocal.m4 >/dev/null 2>&1; then
- # Check the version number on libtool.m4 and the one used in aclocal.m4.
- instserial=`grep '^# serial ' $libtool_m4 | grep 'A[MC]_PROG_LIBTOOL' |
sed -e 's/^# serial \([0-9][0-9]*\).*$/\1/; q'`
+ return $my_return_status
+}
- if test -z "$instserial"; then
- echo "$progname: warning: no serial number on \`$libtool_m4'" 1>&2
- else
- # If the local macro has no serial number, we assume it's ancient.
- localserial=`grep '^# serial ' aclocal.m4 | grep 'A[MC]_PROG_LIBTOOL' |
sed -e 's/^# serial \([0-9][0-9]*\).*$/\1/; q'`
+# func_copy_all_files srcdir destdir
+# For each file in SRCDIR, if --copy was specified, or soft-linking the
+# file to DESTDIR fails, then try to copy the file to DESTDIR.
+func_copy_all_files ()
+{
+ my_srcdir="$1"
+ my_destdir="$2"
+
+ test -d "$my_destdir" || $MKDIR "$my_destdir"
+
+ for my_filename in `cd "$my_srcdir" && ls`; do
+ if test -f "$my_srcdir/$my_filename"; then
+ $force_opt || if test -e "$my_destdir/$my_filename"; then
+ $quiet_opt \
+ || func_error "\`$my_destdir/$my_filename' exists: use \`--force'
to overwrite"
+ continue
+ fi
+ else
+ # Not a regular file
+ continue
+ fi
- test -z "$localserial" && localserial=0
+ func_copy "$my_srcdir/$my_filename" "$my_destdir/$my_filename"
+ done
+}
- if test "$localserial" -lt "$instserial"; then
- echo "You should $updatemsg."
- elif test "$localserial" -gt "$instserial"; then
- echo "$progname: \`$libtool_m4' is serial $instserial, less than
$localserial in \`aclocal.m4'" 1>&2
- if test -z "$force"; then
- echo "Use \`--force' to replace newer libtool files with this
version." 1>&2
- exit 1
- fi
- echo "To remain compatible, you should $updatemsg."
+# func_grep expression filename
+# Check whether EXPRESSION matches any line of FILENAME, without output.
+func_grep ()
+{
+ grep "$1" "$2" >/dev/null 2>&1
+}
+
+# func_scan_files
+# Trace configure.(ac|in) for use of autoconf, gettext, aclocal, automake,
+# libltdl and libtool. Possibly running some of these tools if necessary.
+func_scan_files ()
+{
+ # Prefer configure.ac to configure.in
+ test -f configure.ac && configure_ac=configure.ac
+ test -f "$configure_ac" \
+ || func_fatal_help "\`$configure_ac' does not exist"
+
+ test -z "`cd $pkgdatadir && ls`" \
+ && func_fatal_error "can not list files in \`$pkgdatadir'"
+
+
+ # Set local variables to reflect contents of configure.ac
+ # We can't trace for these macros, because aclocal may not have
+ # run yet.
+ my_uses_autoconf=false
+ my_uses_gettext=false
+ my_sed_scan_configure_ac='s,#.*$,,; s,^dnl .*$,,; s, dnl .*$,,;
+ /AC_INIT/ { s,^.*$,my_uses_autoconf=:,; p; };
+ /AM_GNU_GETTEXT_VERSION/ { s,^.*$,my_uses_gettext=:,; p; };
+ d'
+ eval `sed "$my_sed_scan_configure_ac" "$configure_ac"`
+
+ $my_uses_autoconf || {
+ func_verbose "$configure_ac: not using Autoconf"
+ return
+ }
+
+ # ------------------ #
+ # Running autopoint. #
+ # ------------------ #
+
+ # Autoreconf should do this anyway, but if we run libtoolize from
+ # a fresh CVS checkout, running `aclocal' may fail if the Gettext
+ # macros are missing. Worse, we can't trace configure.ac until we
+ # have run `aclocal' successfully, so we provide the option to run
+ # `autopoint' if `--install' was given to give `aclocal' the best
+ # chance of success.
+
+ if $my_uses_gettext; then
+ if $install_opt; then
+ func_verbose "running: $AUTOPOINT"
+ eval $AUTOPOINT || exit 1
+ else
+ func_verbose "not running autopoint: --install not given"
fi
+ else
+ func_verbose "$configure_ac: not using Gettext"
fi
- else
- echo "You should $updatemsg."
- fi
- if grep '^AC_LIB_LTDL' $configure_ac >/dev/null 2>&1; then
- if grep 'generated automatically by aclocal' aclocal.m4 >/dev/null 2>&1;
then
- updatemsg="update your \`aclocal.m4' by running aclocal"
+ # ---------------- #
+ # Running aclocal. #
+ # ---------------- #
+
+ # Provided `aclocal.m4' is missing, or was generated by `aclocal',
+ # we need to rerun it so that we can trace `configure.ac' to discover
+ # whether the Libtool macros need installing.
+
+ if test -f aclocal.m4; then
+ func_grep 'generated .*by aclocal' aclocal.m4 \
+ || uses_aclocal=false
+ fi
+
+ # Use aclocal flags from `Makefile.am' if available
+ my_sed_aclocal_flags='/^[ ]*ACLOCAL_[A-Z_]*FLAGS[ ]*=/ {
+ s,^[^=]*=[ ]*\(.*\), \1,; q; }; d'
+ test -f Makefile.am \
+ && ACLOCAL="$ACLOCAL"`sed "$my_sed_aclocal_flags" Makefile.am`
+
+ if $uses_aclocal; then
+ func_verbose "running: $ACLOCAL"
+ eval $ACLOCAL || exit 1
else
- updatemsg="add the contents of \`$ltdl_m4' to \`aclocal.m4'"
+ func_verbose "$configure_ac: not using aclocal"
fi
- if grep '^AC_DEFUN(AC_LIB_LTDL' aclocal.m4 >/dev/null 2>&1; then
- # Check the version number on ltdl.m4 and the one used in aclocal.m4.
- instserial=`grep '^# serial ' $ltdl_m4 | grep 'AC_LIB_LTDL' | sed -e
's/^# serial \([0-9][0-9]*\).*$/\1/; q'`
- if test -z "$instserial"; then
- echo "$progname: warning: no serial number on \`$ltdl_m4'" 1>&2
- else
- # If the local macro has no serial number, we assume it's ancient.
- localserial=`grep '^# serial ' aclocal.m4 | grep 'AC_LIB_LTDL' | sed -e
's/^# serial \([0-9][0-9]*\).*$/\1/; q'`
+ # ---------------------------------- #
+ # Trace macro usage in configure.ac. #
+ # ---------------------------------- #
+
+ my_trace_macros='
+ AC_CONFIG_AUX_DIR
+ AC_CONFIG_M4_DIR
+ AC_LIB_LTDL
+ AC_PROG_LIBTOOL
+ AM_PROG_LIBTOOL'
+ my_sed_traces='
+ /:AC_CONFIG_AUX_DIR/ { s,^.*:\([^:][^:]*\)$,auxdir=\1,; p; };
+ /:AC_CONFIG_M4_DIR/ { s,^.*:\([^:][^:]*\)$,m4dir=\1,; p; };
+ /:A[CM]_PROG_LIBTOOL/ { s,^.*$,seen_libtool=:,; p; };
+ /:AC_LIB_LTDL/ { s,^.*$,seen_ltdl=:,; p; };
+ d;'
+ for my_macro_name in $my_trace_macros; do
+ AUTOCONF="$AUTOCONF --trace=$my_macro_name"
+ done
+ func_verbose "running: $AUTOCONF"
+ eval `$AUTOCONF | sed "$my_sed_traces"`
- test -z "$localserial" && localserial=0
- if test "$localserial" -lt "$instserial"; then
- echo "You should $updatemsg."
- elif test "$localserial" -gt "$instserial"; then
- echo "$progname: \`$ltld_m4' is serial $instserial, less than
$localserial in \`aclocal.m4'" 1>&2
- if test -z "$force"; then
- echo "Use \`--force' to replace newer libtool files with this
version." 1>&2
- exit 1
- fi
- echo "To remain compatible, you should $updatemsg."
- fi
- fi
+ # ---------------- #
+ # Validate auxdir. #
+ # ---------------- #
+
+ if test -n "$auxdir"; then
+ # If $configure_ac contains AC_CONFIG_AUX_DIR, check that it was
+ # not given in terms of a shell variable!
+ case "$auxdir" in
+ *\$*)
+ func_fatal_error "can not handle variables in AC_CONFIG_AUX_DIR"
+ ;;
+ *);;
+ esac
else
- echo "You should $updatemsg."
+ # Try to discover auxdir the same way it is discovered by configure.
+ # Note that we default to the current directory.
+ for dir in . .. ../..; do
+ if test -f $dir/install-sh; then
+ auxdir=$dir
+ break
+ elif test -f $dir/install.sh; then
+ auxdir=$dir
+ break
+ fi
+ done
fi
- fi
-fi
-if test "x$ltdl" = xyes; then
- test -d libltdl || $mkdir libltdl
- ltdlfiles=`cd $pkgdatadir && ls libltdl/*`
-else
- ltdlfiles=
-fi
-
-for file in $ltdlfiles; do
- if test -f "$file" && test -z "$force"; then
- test -z "$automake" && echo "$progname: \`$file' exists: use \`--force' to
overwrite" 1>&2
- continue
- fi
+ # ------------------------------ #
+ # Find local m4 macro directory. #
+ # ------------------------------ #
+
+ # If autoconf --trace=AC_CONFIG_M4_DIR turned nothing up, we hunt
+ # for ACLOCAL_AMFLAGS in `Makefile.am' for a `-I' argument.
+
+ if test -z "$m4dir" && test -f Makefile.am; then
+ my_m4dir_is_next=false
+ for arg in `sed "$my_sed_aclocal_flags" Makefile.am`; do
+ if $my_m4dir_is_next; then
+ m4dir="$arg"
+ break
+ else
+ if test "X$arg" = "X-I"; then
+ my_m4dir_is_next=:
+ else
+ my_m4dir_is_next=false
+ fi
+ fi
+ done
+ fi
- $rm $file
- if test -n "$ln_s" && $ln_s $pkgdatadir/$file $file; then :
- elif $cp $pkgdatadir/$file $file; then :
- else
- echo "$progname: cannot copy \`$pkgdatadir/$file' to \`$file'" 1>&2
- status=1
- fi
-done
+ # Just use the current directory if all else fails.
+ test -n "$m4dir" || m4dir=.
+}
+
+# func_included_files searchfile
+# Output INCLUDEFILE if SEARCHFILE m4_includes it, else output SEARCHFILE.
+func_included_files ()
+{
+ my_searchfile="$1"
+
+ my_include_regex=
+ my_sed_include='
+ /^m4_include(\[.*\])$/ { s,^m4_include(\[\(.*\)\])$,\1,; p; };
+ d'
+
+ test -f $my_searchfile && echo $my_searchfile
+
+ # Only recurse when we don't care if all the variables we use get
+ # trashed, since they are in global scope.
+ for my_filename in `sed "$my_sed_include" "$my_searchfile"`; do
+ func_included_files $my_filename
+ done
+}
-if test "x$ltdl_tar" = x"yes"; then
- if test "x$dry_run" = x"yes"; then
- echo "tar -cf - libltdl | gzip --best > libltdl.tar.gz"
- elif test -f libltdl.tar.gz && test -z "$force"; then
- test -z "$automake" && echo "$progname: \`libltdl.tar.gz' exists: use
\`--force' to overwrite" 1>&2
- else
- test -d libltdl && ${rm}r libltdl
- $mkdir libltdl
- ltdlfiles=`cd $pkgdatadir && ls libltdl/*`
- for file in $ltdlfiles; do
- if $cp $pkgdatadir/$file $file; then :
- else
- echo "$progname: cannot copy \`$pkgdatadir/$file' to \`$file'" 1>&2
- status=1
+# func_serial macro_regex filename
+# Output the value of the serial number comment in FILENAME, where the
+# comment line must also match MACRO_REGEX.
+func_serial ()
+{
+ my_macro_regex="$1"
+ my_filename="$2"
+ my_sed_serial='/^# serial [1-9][0-9]* '"$my_macro_regex"'[ ]*$/ {
+ s,^# serial \([1-9][0-9]*\) .*$,\1,; q;
+ }; d'
+
+ # Search FILENAME and all the files it m4_includes for a serial number
+ # in the file that AC_DEFUNs MACRO_REGEX.
+ my_serial=
+ for my_file in `func_included_files "$my_filename"`; do
+ if func_grep '^AC_DEFUN(\['"$my_macro_regex" "$my_file"; then
+ my_serial=`sed -e "$my_sed_serial" "$my_file"`
break
fi
done
- for file in $files; do
- if $cp $pkgdatadir/$file libltdl/$file; then :
- else
- echo "$progname: cannot copy \`$pkgdatadir/$file' to \`libltdl/$file'"
1>&2
- status=1
- break
+
+ # If the file has no serial number, we assume it's ancient.
+ test -z "$my_serial" && my_serial=0
+
+ echo $my_serial
+}
+
+# func_serial_update macro_regex srcfile destfile
+# Copy SRCFILE to DESTFILE provided SRCFILE has a newer serial number, or
+# DESTFILE does not yet exist, or the user specified `--force'.
+func_serial_update ()
+{
+ my_macro_regex="$1"
+ my_srcfile="$2"
+ my_destfile="$3"
+
+ my_return_status=1
+ my_update_p=:
+
+ if test -f "$my_destfile"; then
+ my_src_serial=`func_serial "$my_macro_regex" "$my_srcfile"`
+ my_dest_serial=`func_serial "$my_macro_regex" "$my_destfile"`
+
+ test $my_src_serial = 0 && {
+ func_error "warning: no serial number on \`$my_srcfile', not copying."
+ return
+ }
+
+ # Only perform the file update if the destination has an older serial.
+ test $my_src_serial -gt $my_dest_serial || my_update_p=false
+
+ test $my_src_serial -gt $my_dest_serial \
+ && func_verbose "\`$my_srcfile' is serial $my_srcserial, greater than
$my_destserial in \`$my_destfile'"
+
+ if test $my_src_serial -lt $my_dest_serial; then
+ func_error "\`$my_srcfile' is serial $my_srcserial, less than
$my_destserial in \`$my_destfile'"
+ $force_opt \
+ || func_fatal_error "Use \`--force' to replace newer libtool files
with this version."
fi
- done
- tar -cf - libltdl | gzip --best > libltdl.tar.gz
- ${rm}r libltdl
- fi
-fi
+ fi
+
+ if $my_update_p || $force_opt; then
+ func_copy "$my_srcfile" "$my_destfile"
+ my_return_status=$?
+ else
+ $quiet_opt \
+ || func_echo "\`$my_destfile' is already up to date."
+ fi
+
+ # Do this after the copy for hand maintained `aclocal.m4', incase
+ # it has `m4_include([DESTFILE])', so the copy effectively already
+ # updated `aclocal.m4'.
+ $use_aclocal || if test -f aclocal.m4; then
+ test $my_src_serial -gt `func_serial "$my_macro_regex" aclocal.m4` \
+ && func_echo "You should add the contents of \'$my_destfile' to
\`aclocal.m4'."
+ fi
-# Change to the auxiliary directory.
-if test "$auxdir" != .; then
- test -z "$automake" && echo "Putting files in AC_CONFIG_AUX_DIR, \`$auxdir'."
- cd $auxdir || exit 1
-fi
-
-for file in $files; do
- if test -f "$file" && test -z "$force"; then
- test -z "$automake" && echo "$progname: \`$file' exists: use \`--force' to
overwrite" 1>&2
- continue
+ return $my_return_status
+}
+
+# func_check_macros
+# Sanity check macros from aclocal.m4 against installed versions.
+func_check_macros ()
+{
+ # Don't trace for this, we're just checking the user didn't invoke it
+ # directly from configure.ac.
+ sed 's,dnl .*$,,; s,# .*$,,' "$configure_ac" | grep AC_PROG_RANLIB \
+ && func_echo "\`AC_PROG_RANLIB' is rendered obsolete by
\`AC_PROG_LIBTOOL'"
+
+ $seen_libtool \
+ || func_echo "Remember to add \`AC_PROG_LIBTOOL' to \`$configure_ac'."
+
+ # FIXME: Ensure ltmain.sh, libtool.m4 and ltdl.m4 are from the same release
+}
+
+# func_ltmain_update srcfile destfile
+# Copy SRCFILE to DESTFILE provided SRCFILE has a newer VERSION/TIMESTAMP,
+# or DESTFILE does not yet exist, or the user specified `--force'.
+func_ltmain_update ()
+{
+ my_srcfile="$1"
+ my_destfile="$2"
+ my_sed_ltmain='
+ s,^VERSION=[^0-9]*\(.*\)[ ]*$,\1,; t
+ s,^TIMESTAMP=[^0-9]*\([.0-9]*\) .*$,\1,; t
+ d'
+ # FIXME
+}
+
+# func_config_update srcfile destfile
+# Copy SRCFILE to DESTFILE provided SRCFILE has a newer TIMESTAMP,
+# or DESTFILE does not yet exist, or the user specified `--force'.
+func_config_update ()
+{
+ my_srcfile="$1"
+ my_destfile="$2"
+ my_sed_config='s,^timestamp=[^0-9]*\([.0-9-]*\)[^0-9].*$,\1,; t; d'
+ # FIXME
+}
+
+
+
+## ----------- ##
+## Main. ##
+## ----------- ##
+
+{
+ rerun_aclocal=false
+
+ func_scan_files
+ $quiet_opt || func_check_macros
+
+ # Copy all the files from installed libltdl to this project, if the
+ # user specified `--with-ltdl'.
+ $ltdl_opt && eval func_copy_all_files "$pkgdatadir/libltdl" libltdl
+
+ # Copy all the files from installed libltdl to a tarball in this project,
+ # if the user specified `--with-ltdl-tar'.
+ $ltdl_tar_opt && {
+ if test -f libltdl.tar.gz; then
+ if $force_opt; then
+ test -d libltdl && ${RM}r libltdl
+ func_copy_all_files "$pkgdatadir/libltdl" libltdl
+ tar -chof - libltdl | gzip --best > libltdl.tar.gz
+ ${RM}r libltdl
+ else
+ func_error "\`libltdl.tar.gz' exists: use \`--force' to overwrite"
+ fi
+ fi
+ }
+
+ # Copy all the installed utility files to the auxiliary directory.
+ $quiet_opt || if test "$auxdir" != .; then
+ func_echo "putting files in AC_CONFIG_AUX_DIR, \`$auxdir'."
fi
+ func_copy_all_files "$pkgdatadir" "$auxdir"
+
+ # Copy libtool's m4 macros to the macro directory, if they are newer.
+ func_serial_update 'A[CM]_PROG_LIBTOOL' "$aclocaldir/libtool.m4"
"$m4dir/libtool.m4" \
+ && rerun_aclocal=:
- $rm $file
- if test -n "$ln_s" && $ln_s $pkgdatadir/$file $file; then :
- elif $cp $pkgdatadir/$file $file; then :
+ if $seen_ltdl; then
+ func_serial_update 'AC_LIB_LTDL' "$aclocaldir/ltdl.m4" "$m4dir/ltdl.m4" \
+ && rerun_aclocal=:
else
- echo "$progname: cannot copy \`$pkgdatadir/$file' to \`$file'" 1>&2
- status=1
+ func_verbose "Not copying \`$aclocaldir/ltdl.m4', AC_LIB_LTDL not used."
+ fi
+
+ # If we updated any macro files, rerun aclocal.
+ if $rerun_aclocal; then
+ func_verbose "running: $ACLOCAL"
+ eval $ACLOCAL || exit 1
fi
-done
+}
-exit $status
+exit $exit_status
# Local Variables:
# mode:shell-script
- 10-gary-rewrite-libtoolize.patch,
Gary V. Vaughan <=
- Re: 10-gary-rewrite-libtoolize.patch, Alexandre Duret-Lutz, 2003/10/02
- Re: 10-gary-rewrite-libtoolize.patch, Akim Demaille, 2003/10/02
- Re: 10-gary-rewrite-libtoolize.patch, Gary V. Vaughan, 2003/10/03
- Re: 10-gary-rewrite-libtoolize.patch, Akim Demaille, 2003/10/03
- Re: 10-gary-rewrite-libtoolize.patch, Gary V. Vaughan, 2003/10/03
- Re: 10-gary-rewrite-libtoolize.patch, Alexandre Duret-Lutz, 2003/10/03
- Re: 10-gary-rewrite-libtoolize.patch, Gary V. Vaughan, 2003/10/07