summaryrefslogtreecommitdiff
path: root/libtoolize.in
diff options
context:
space:
mode:
authorGary V. Vaughan <gary@gnu.org>2003-10-07 11:12:16 +0000
committerGary V. Vaughan <gary@gnu.org>2003-10-07 11:12:16 +0000
commit29b9bc885ba18509d916e3753365a6010b8fd9a6 (patch)
tree4d8e7f8b7ea4fdb4bc01d0fa16111ee61bb5cef4 /libtoolize.in
parenteb8a008f1256c9d1cf46cd7a59b35eb2663bc23c (diff)
downloadlibtool-29b9bc885ba18509d916e3753365a6010b8fd9a6.tar.gz
* libtoolize.in: Completely rewritten.
* Makefile.am (AUTOMAKE_OPTIONS): Reduced to 1.7. The 1.8 requirement just made the distribution much smaller due to m4_includes. 1.7 will bootstrap libtool just fine. * NEWS: Updated.
Diffstat (limited to 'libtoolize.in')
-rw-r--r--libtoolize.in822
1 files changed, 532 insertions, 290 deletions
diff --git a/libtoolize.in b/libtoolize.in
index 0896b2ef..4ffa90ba 100644
--- a/libtoolize.in
+++ b/libtoolize.in
@@ -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 <gord@gnu.ai.mit.edu>, 1996
-#
+# libtoolize (GNU @PACKAGE@) @VERSION@@TIMESTAMP@
+# Written by Gary V. Vaughan <gary@gnu.org>
+
+# 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,580 @@
# 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 <bug-libtool@gnu.org>.
+
+: ${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
-PACKAGE=@PACKAGE@
-VERSION=@VERSION@
-# 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
+
+exit_status=0
+
+# Locations for important files:
prefix=@prefix@
datadir=@datadir@
pkgdatadir=@pkgdatadir@
aclocaldir=@aclocaldir@
-
+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 <bug-libtool@gnu.org>.
-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"
+sed_dirname='s,/[^/]*$,,'
+
+# 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
+}
+
+# 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"
+ 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
+ done
+}
+
+# func_mkdir_p dir
+# Make sure the entire path to DIR is available.
+func_mkdir_p ()
+{
+ my_dir=$1
+ my_dirs=
+
+ while test ! -d "$my_dir"; do
+ my_dirs="$my_dir $my_dirs"
+ my_dir=`echo "$my_dir" | sed "$sed_dirname"`
+ done
+ test ! -n "$my_dirs" || $MKDIR $my_dirs
+}
+
+# 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
+
+ func_mkdir_p `echo "$my_destfile" | sed "$sed_dirname"`
+
+ $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
- ;;
- -f | --force)
- force=yes
- ;;
+ return $my_return_status
+}
- --ltdl)
- ltdl=yes
- ;;
+# func_copy_all_files srcdir destdir [glob_exclude]
+# 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. If
+# GLOB_EXCLUDE is given, exclude any matching filenames from the copy.
+func_copy_all_files ()
+{
+ my_srcdir="$1"
+ my_destdir="$2"
+ my_glob_exclude="$3"
- --ltdl-tar)
- ltdl_tar=yes
- ;;
+ for my_filename in `cd "$my_srcdir" && ls`; do
- -*)
- echo "$progname: unrecognized option \`$arg'" 1>&2
- echo "$help" 1>&2
- exit 1
- ;;
+ # ignore excluded filenames
+ if test -n "$my_glob_exclude"; then
+ eval 'case $my_filename in '$my_glob_exclude') continue ;; esac'
+ fi
- *)
- 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
- ;;
- *)
- ;;
- 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
+ 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
+
+ func_copy "$my_srcdir/$my_filename" "$my_destdir/$my_filename"
+ done
+}
+
+# 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 -n "`cd $pkgdatadir && ls`" \
+ || func_fatal_error "can not list files in \`$pkgdatadir'"
+
+
+ # Set local variables to reflect contents of configure.ac
+ my_uses_autoconf=false
+ my_sed_scan_configure_ac='s,#.*$,,; s,^dnl .*$,,; s, dnl .*$,,;
+ /AC_INIT/ { s,^.*$,my_uses_autoconf=:,; p; };
+ d'
+ eval `sed "$my_sed_scan_configure_ac" "$configure_ac"`
+
+ $my_uses_autoconf || {
+ func_verbose "$configure_ac: not using Autoconf"
+ return
+ }
+
+ # ---------------------------------------------------- #
+ # Probe macro usage in configure.ac and/or aclocal.m4. #
+ # ---------------------------------------------------- #
+
+ my_sed_traces='s,#.*$,,; s,^dnl .*$,,; s, dnl .*$,,;
+ /AC_CONFIG_AUX_DIR/ {
+ s,^.*AC_CONFIG_AUX_DIR([[ ]*\([^])]*\).*$,auxdir=\1,; p;
+ };
+ /AC_CONFIG_M4_DIR/ {
+ s,^.*AC_CONFIG_M4_DIR([[ ]*\([^])]*\).*$,m4dir=\1,; p;
+ };
+ /A[CM]_PROG_LIBTOOL/ { s,^.*$,seen_libtool=:,; p; };
+ /AC_LIB_LTDL/ { s,^.*$,seen_ltdl=:,; p; };
+ d;'
+ eval `cat aclocal.m4 "$configure_ac" | sed "$my_sed_traces"`
+
+
+ # ---------------- #
+ # 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
+ # 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
- 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
+ # ------------------------------ #
+ # Find local m4 macro directory. #
+ # ------------------------------ #
+
+ # If AC_CONFIG_M4_DIR turned nothing up, we hunt for ACLOCAL_AMFLAGS
+ # in `Makefile.am' for a `-I' argument.
+
+ my_sed_aclocal_flags='/^[ ]*ACLOCAL_[A-Z_]*FLAGS[ ]*=/ {
+ s,^[^=]*=[ ]*\(.*\), \1,; q; }; d'
+ if test ! -n "$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
- 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
+ # Just use the current directory if all else fails.
+ test -n "$m4dir" || m4dir=.
+}
- 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'`
+# func_included_files searchfile
+# Output INCLUDEFILE if SEARCHFILE m4_includes it, else output SEARCHFILE.
+func_included_files ()
+{
+ my_searchfile="$1"
- 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'`
-
- test -z "$localserial" && localserial=0
-
- 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."
+ 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
+}
+
+# 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
+
+ # If the file has no serial number, we assume it's ancient.
+ test -n "$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
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"
+ if $my_update_p || $force_opt; then
+ func_copy "$my_srcfile" "$my_destfile"
+ my_return_status=$?
else
- updatemsg="add the contents of \`$ltdl_m4' to \`aclocal.m4'"
+ $quiet_opt \
+ || func_echo "\`$my_destfile' is already up to date."
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'`
+ # 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
- 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'`
-
- 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
+ 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'
+
+ if test -f "$my_srcfile"; then :
else
- echo "You should $updatemsg."
+ func_error "\`$my_srcfile' does not exist."
+ return
+ fi
+
+ # FIXME: check versions, and only downgrade with --force
+ cmp -s "$my_srcfile" "$my_destfile"
+ if test $? != 0 || $force_opt; then
+ func_copy "$my_srcfile" "$my_destfile"
+ else
+ $quiet_opt \
+ || func_echo "\`$my_destfile' is already up to date."
+ fi
+}
+
+# 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'
+
+ if test -f "$my_srcfile"; then :
+ else
+ func_error "\`$my_srcfile' does not exist."
+ return
fi
- fi
-fi
+ # FIXME: check versions, and only downgrade with --force
+ cmp -s "$my_srcfile" "$my_destfile"
+ if test $? != 0 || $force_opt; then
+ func_copy "$my_srcfile" "$my_destfile"
+ else
+ $quiet_opt \
+ || func_echo "\`$my_destfile' is already up to date."
+ 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
- $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
+## ----------- ##
+## Main. ##
+## ----------- ##
-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
- 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
+{
+ 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
- done
- tar -cf - libltdl | gzip --best > libltdl.tar.gz
- ${rm}r libltdl
+ }
+
+ # Copy all the installed utility files to the auxiliary directory if
+ # `--install' was passed, or else copy just ltmain.sh.
+ $quiet_opt || if test "$auxdir" != .; then
+ func_echo "putting files in AC_CONFIG_AUX_DIR, \`$auxdir'."
fi
-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
+ if $install_opt || $force_opt; then
+ func_copy_all_files "$pkgdatadir" "$auxdir" 'config.guess|config.sub|ltmain.sh'
+ func_config_update "$pkgdatadir/config.guess" "$auxdir/config.guess"
+ test -f "$pkgdatadir/config.sub" \
+ && func_config_update "$pkgdatadir/config.guess" "$auxdir/config.sub"
+ fi
+ func_ltmain_update "$pkgdatadir/ltmain.sh" "$auxdir/ltmain.sh"
+
+ # Copy libtool's m4 macros to the macro directory, if they are newer.
+ $quiet_opt || if test "$m4dir" != .; then
+ func_echo "putting macros in AC_CONFIG_M4_DIR, \`$m4dir'."
fi
+ func_serial_update 'A[CM]_PROG_LIBTOOL' "$aclocaldir/libtool.m4" "$m4dir/libtool.m4"
- $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"
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
-done
+}
-exit $status
+exit $exit_status
# Local Variables:
# mode:shell-script