[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Bug-gnulib] Re: gnulib-tool --import
From: |
Simon Josefsson |
Subject: |
[Bug-gnulib] Re: gnulib-tool --import |
Date: |
Mon, 16 Aug 2004 18:49:26 +0200 |
User-agent: |
Gnus/5.110003 (No Gnus v0.3) Emacs/21.3.50 (gnu/linux) |
"Gary V. Vaughan" <address@hidden> writes:
> For the record, I hit the same problem when I rewrote libtoolize: the
> autotools start to break in mysterious ways if you use autoconf --trace
> from any tool that may change the contents of aclocal.m4 (e.g. autopoint,
> libtoolize, gnulib-tool). Here is what the new libtoolize does in lieu
> of autoconf --trace:
Thanks for inspiration. Patch against gnulib CVS below.
For my use (in gsasl, shishi, gss and gnutls) of gnulib-tool, the only
remaining feature I would want is that the Makefile.am snippet could
be stored in 'gnulib.mk', and that my hand written Makefile.am can
include it. However, this require some changes to automake, that I'm
not sure when/if it will happen.
I guess gnulib-tool could update AC_CONFIG_FILES in configure.ac (to
include $sourcebase/Makefile) and SUBDIRS in the Makefile.am above
$sourcebase (to include $sourcebase), but that can be unreliable
(think of ordering issues for SUBDIRS). The gnulib-tool below merely
print a reminder.
Thanks,
Simon
2004-08-16 Simon Josefsson <address@hidden>
* gnulib-tool: Use sed instead of autoconf --trace, inspired by
libtoolize behaviour by "Gary V. Vaughan" <address@hidden>.
Add --dry-run for --import.
Let user provided command line parameters override configure.ac
settings.
Index: gnulib-tool
===================================================================
RCS file: /cvsroot/gnulib/gnulib/gnulib-tool,v
retrieving revision 1.14
diff -u -p -u -w -r1.14 gnulib-tool
--- gnulib-tool 12 Aug 2004 20:47:12 -0000 1.14
+++ gnulib-tool 16 Aug 2004 16:45:06 -0000
@@ -90,6 +90,7 @@ Options:
placed (default \"m4\"), for --import.
--libtool Use libtool rules, for --import.
--no-changelog don't update or create ChangeLog files
+ --dry-run For --import, only print what would have been done.
Report bugs to <address@hidden>."
}
@@ -123,14 +124,18 @@ func_fatal_error ()
# - m4base from --m4-base
# - libtool true if --libtool was given, blank otherwise
# - do_changelog false if --no-changelog was given, : otherwise
+# - dry_run true if --dry-run was given, blank otherwise
{
mode=
destdir=
libname=libgnu
- sourcebase=lib
- m4base=m4
+ sourcebase=
+ m4base=
libtool=
do_changelog=:
+ dry_run=
+
+ supplied_opts="$@"
while test $# -gt 0; do
case "$1" in
@@ -171,9 +176,11 @@ func_fatal_error ()
func_fatal_error "missing argument for --lib"
fi
libname=$1
+ supplied_libname=true
shift ;;
--lib=* )
libname=`echo "X$1" | sed -e 's/^X--lib=//'`
+ supplied_libname=true
shift ;;
--source-base )
shift
@@ -201,6 +208,9 @@ func_fatal_error ()
--no-changelog | --no-changelo | --no-changel | --no-change | --no-chang
| --no-chan | --no-cha | --no-ch | --no-c )
do_changelog=false
shift ;;
+ --dry-run )
+ dry_run=true
+ shift ;;
--help | --hel | --he | --h )
func_usage
exit 0 ;;
@@ -572,28 +582,67 @@ case $mode in
;;
import )
+ # Where to import.
if test -z "$destdir"; then
destdir=.
fi
test -d "$destdir" \
|| func_fatal_error "destination directory does not exist: $destdir"
- sourcebase=`cd $destdir; $AUTOCONF --trace=gl_SOURCE_BASE | sed
's,^.*:,,g'`
+
+ # Prefer configure.ac to configure.in
+ test -f $destdir/configure.in && configure_ac=$destdir/configure.in
+ test -f $destdir/configure.ac && configure_ac=$destdir/configure.ac
+ test -f "$configure_ac" \
+ || func_fatal_error "cannot find $destdir/configure.ac"
+
+ # Get settings.
+ my_sed_traces='s,#.*$,,; s,^dnl .*$,,; s, dnl .*$,,;
+ /gl_MODULES[^_]/ {
+ s,^.*gl_MODULES([[ ]*\([^])]*\).*$,ac_modules="\1",; p;
+ };
+ /gl_SOURCE_BASE/ {
+ s,^.*gl_SOURCE_BASE([[
]*\([^])]*\).*$,ac_sourcebase="\1",; p;
+ };
+ /gl_M4_BASE/ {
+ s,^.*gl_M4_BASE([[ ]*\([^])]*\).*$,ac_m4base="\1",; p;
+ };
+ /gl_LIB/ {
+ s,^.*gl_LIB([[ ]*\([^])]*\).*$,ac_libname="\1",; p;
+ };
+ /A[CM]_PROG_LIBTOOL/ { s,^.*$,seen_libtool=:,; p; };
+ /LT_INIT/ { s,^.*$,seen_libtool=:,; p; };
+ d;'
+ eval `cat $configure_ac | sed "$my_sed_traces"`
+
+ # Override libname?
+ if test -z "$supplied_libname" && test -n "$ac_libname"; then
+ libname="$ac_libname"
+ fi
+
+ # Set up source base.
+ test -z "$sourcebase" && sourcebase="$ac_sourcebase"
+ test -z "$sourcebase" && sourcebase="lib"
test -d "$destdir/$sourcebase" || \
- mkdir "$destdir/$sourcebase" || \
- func_fatal_error \
- "could not create source base directory: $destdir/$sourcebase"
- m4base=`cd $destdir; $AUTOCONF --trace=gl_M4_BASE | sed 's,^.*:,,g'`
+ (test -z "$dry_run" && mkdir "$destdir/$sourcebase") || \
+ func_fatal_error "source base $destdir/$sourcebase doesn't exist"
+
+ # Set up m4 base.
+ test -z "$m4base" && m4base="$ac_m4base"
+ test -z "$sourcebase" && m4base="m4"
test -d "$destdir/$m4base" || \
- mkdir "$destdir/$m4base" || \
- func_fatal_error \
- "could not create m4 base directory: $destdir/$m4base"
+ (test -z "$dry_run" && mkdir "$destdir/$m4base") || \
+ func_fatal_error "m4 base $destdir/$m4base doesn't exist"
+
+ # Using libtool?
+ if test x$seen_libtool != x; then
+ libtool=true
+ fi
+
+ # What modules to extract.
supplied_modules="$*"
modules=`for m in $supplied_modules; do echo $m; done | sort | uniq`
if test -z "$modules"; then
- modules=`cd $destdir; $AUTOCONF --trace=gl_MODULES | sed
's,^.*:,,g'`
- fi
- if test x`cd $destdir; $AUTOCONF --trace=AC_PROG_LIBTOOL` != x; then
- libtool=true
+ modules="$ac_modules"
fi
# Determine final module list.
@@ -631,6 +680,9 @@ case $mode in
echo "File list:"
echo "$files" | sed -e 's/^/ /'
+ test -n "$files" \
+ || func_fatal_error "refusing to do nothing"
+
# Copy files.
for f in $files; do
case "$f" in
@@ -639,10 +691,20 @@ case $mode in
m4/*) g=`echo "$f" | sed -e "s,^m4/,$m4base/,"` ;;
*) g="$f" ;;
esac
- cp -p "$gnulib_dir/$f" "$destdir/$g"
+ test -n "$dry_run" && dry=echo
+ $dry cp -p "$gnulib_dir/$f" "$destdir/$g"
done
+ # Commands printed in a comment in generated files.
+ cmd="gnulib-tool $supplied_opts"
+ opt_libtool=
+ if test -n "$libtool"; then
+ opt_libtool="--libtool"
+ fi
+ actioncmd="gnulib-tool --import --dir=$destdir --lib=$libname
--source-base=$sourcebase --m4-base=$m4base $opt_libtool `echo $modules`"
+
# Create lib/Makefile.am.
+ echo "Creating $destdir/$sourcebase/Makefile.am..."
if test -n "$libtool"; then
libext=la
perhapsLT=LT
@@ -650,7 +712,13 @@ case $mode in
libext=a
perhapsLT=
fi
- (echo "## Process this file with automake to produce Makefile.in."
+ (
+ if test -z "$dry_run"; then
+ exec > $destdir/$sourcebase/Makefile.am
+ else
+ echo "# $destdir/$sourcebase/Makefile.am"
+ fi
+ echo "## Process this file with automake to produce Makefile.in."
echo "# Copyright (C) 2004 Free Software Foundation, Inc."
echo "#"
echo "# This file is free software, distributed under the terms of
the GNU"
@@ -661,11 +729,8 @@ case $mode in
echo "#"
echo "# Generated by gnulib-tool."
echo "#"
- opt_libtool=
- if test -n "$libtool"; then
- opt_libtool="--libtool"
- fi
- echo "# gnulib-tool --import --dir=$destdir --lib=$libname
--source-base=$sourcebase --m4-base=$m4base $opt_libtool $supplied_modules"
+ echo "# Invoked as: $cmd"
+ echo "# Reproduce by: $actioncmd"
echo
echo "AUTOMAKE_OPTIONS = 1.8 gnits"
echo
@@ -689,10 +754,19 @@ case $mode in
fi
fi
done
- ) > "$destdir/$sourcebase/Makefile.am"
+ echo
+ echo "# Makefile.am ends here"
+ )
# Create gnulib.m4.
- (echo "# Copyright (C) 2004 Free Software Foundation, Inc."
+ echo "Creating $destdir/$m4base/gnulib.m4..."
+ (
+ if test -z "$dry_run"; then
+ exec > $destdir/$m4base/gnulib.m4
+ else
+ echo "# $destdir/$m4base/gnulib.m4"
+ fi
+ echo "# Copyright (C) 2004 Free Software Foundation, Inc."
echo "# This file is free software, distributed under the terms of
the GNU"
echo "# General Public License. As a special exception to the GNU
General"
echo "# Public License, this file may be distributed as part of a
program"
@@ -701,11 +775,8 @@ case $mode in
echo "#"
echo "# Generated by gnulib-tool."
echo "#"
- opt_libtool=
- if test -n "$libtool"; then
- opt_libtool="--libtool"
- fi
- echo "# gnulib-tool --import --dir=$destdir --lib=$libname
--source-base=$sourcebase --m4-base=$m4base $opt_libtool $supplied_modules"
+ echo "# Invoked as: $cmd"
+ echo "# Reproduce by: $actioncmd"
echo
echo "AC_DEFUN([gl_EARLY],"
echo "["
@@ -735,7 +806,14 @@ case $mode in
echo
echo "dnl Usage: gl_M4_BASE(DIR)"
echo "AC_DEFUN([gl_M4_BASE], [])"
- ) > "$destdir/$m4base/gnulib.m4"
+ echo
+ echo "# gnulib.m4 ends here"
+ )
+ echo "Finished."
+ echo
+ echo "Don't forget to add \"$sourcebase/Makefile\""
+ echo "to AC_CONFIG_FILES in \"$configure_ac\" and to mention"
+ echo "\"`basename $sourcebase`\" in SUBDIRS in some Makefile.am."
;;
create-testdir )