progname=$0
package=gnulib
-cvsdatestamp='$Date: 2006-09-18 12:55:35 $'
+cvsdatestamp='$Date: 2006-10-07 14:54:51 $'
last_checkin_date=`echo "$cvsdatestamp" | sed -e 's,^\$[D]ate: ,,'`
version=`echo "$last_checkin_date" | sed -e 's/ .*$//' -e 's,/,-,g'`
+nl='
+'
# You can set AUTOCONFPATH to empty if autoconf 2.57 is already in your PATH.
AUTOCONFPATH=
func_version ()
{
year=`echo "$last_checkin_date" | sed -e 's,/.*$,,'`
- echo "$progname (GNU $package) $version"
- echo "Copyright (C) $year Free Software Foundation, Inc.
+ echo "\
+$progname (GNU $package) $version
+Copyright (C) $year 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."
- echo "Written by" "Bruno Haible" "and" "Simon Josefsson"
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+Written by" "Bruno Haible" "and" "Simon Josefsson"
}
# func_emit_copyright_notice
echo "# Generated by gnulib-tool."
}
+# func_exit STATUS
+# exit with status
+func_exit ()
+{
+ (exit $1); exit $1
+}
+
# func_tmpdir
# creates a temporary directory.
# Sets variable
} ||
{
echo "$0: cannot create a temporary directory in $TMPDIR" >&2
- { (exit 1); exit 1; }
+ func_exit 1
}
}
+# func_append var value
+# appends the given value to the shell variable var.
+if ( foo=bar; foo+=baz && test "$foo" = barbaz ) >/dev/null 2>&1; then
+ # Use bash's += operator. It reduces complexity of appending repeatedly to
+ # a single variable from O(n^2) to O(n).
+ func_append ()
+ {
+ eval "$1+=\"\$2\""
+ }
+else
+ func_append ()
+ {
+ eval "$1=\"\$$1\$2\""
+ }
+fi
+
# func_fatal_error message
# outputs to stderr a fatal error message, and terminates the program.
func_fatal_error ()
{
echo "gnulib-tool: *** $1" 1>&2
echo "gnulib-tool: *** Stop." 1>&2
- exit 1
+ func_exit 1
}
# func_readlink SYMLINK
if test $# = 0; then
func_fatal_error "missing argument for --avoid"
fi
- avoidlist="$avoidlist $1"
+ func_append avoidlist " $1"
shift ;;
--avoid=* )
- avoidlist="$avoidlist "`echo "X$1" | sed -e 's/^X--avoid=//'`
+ arg=`echo "X$1" | sed -e 's/^X--avoid=//'`
+ func_append avoidlist " $arg"
shift ;;
--lgpl )
lgpl=true
shift ;;
--help | --hel | --he | --h )
func_usage
- exit 0 ;;
+ func_exit $? ;;
--version | --versio | --versi | --vers | --ver | --ve | --v )
func_version
- exit 0 ;;
+ func_exit $? ;;
-- )
# Stop option processing
shift
-* )
echo "gnulib-tool: unknown option $1" 1>&2
echo "Try 'gnulib-tool --help' for more information." 1>&2
- exit 1 ;;
+ func_exit 1 ;;
* )
break ;;
esac
echo "Try 'gnulib-tool --help' for more information." 1>&2
echo "If you really want to modify the gnulib configuration of your project," 1>&2
echo "you need to use 'gnulib --import' - at your own risk!" 1>&2
- exit 1
+ func_exit 1
fi
if test -n "$local_gnulib_dir" || test -n "$supplied_libname" \
|| test -n "$sourcebase" || test -n "$m4base" \
echo "Try 'gnulib-tool --help' for more information." 1>&2
echo "If you really want to modify the gnulib configuration of your project," 1>&2
echo "you need to use 'gnulib --import' - at your own risk!" 1>&2
- exit 1
+ func_exit 1
fi
do_changelog=false
fi
gnulib_dir=`echo "$self_abspathname" | sed -e 's,/[^/]*$,,'`
func_tmpdir
-trap 'rm -rf "$tmp"' 0 1 2 3 15
+trap 'exit_status=$?
+ if test "$signal" != 0; then
+ echo "caught signal $signal" >&2
+ fi
+ rm -rf "$tmp"
+ exit $exit_status' 0
+for signal in 1 2 3 13 15; do
+ trap '{ signal='$signal'; func_exit 1; }' $signal
+done
+signal=0
# func_lookup_file file
# looks up a file in $local_gnulib_dir or $gnulib_dir, or combines it through
func_verify_module
if test -n "$module"; then
if func_acceptable $module; then
- outmodules="$outmodules $module"
+ func_append outmodules " $module"
deps=`func_get_dependencies $module`
# Duplicate dependencies are harmless, but Jim wants a warning.
duplicated_deps=`echo "$deps" | LC_ALL=C sort | LC_ALL=C uniq -d`
if test -n "$duplicated_deps"; then
echo "warning: module $module has duplicated dependencies: "`echo $duplicated_deps` 1>&2
fi
- inmodules="$inmodules $deps"
+ func_append inmodules " $deps"
if test -n "$inctests"; then
testsmodule=`func_get_tests_module $module`
if test -n "$testsmodule"; then
- inmodules="$inmodules $testsmodule"
+ func_append inmodules " $testsmodule"
fi
fi
fi
done
# Add the dummy module, to make sure the library will be non-empty.
if test -z "$have_lib_SOURCES"; then
- modules="$modules dummy"
+ func_append modules " dummy"
fi
}
for module in $modules; do
func_verify_module
if test -n "$module"; then
- files="$files "`func_get_filelist $module`
+ fs=`func_get_filelist $module`
+ func_append files " $fs"
fi
done
files=`for f in $files; do echo $f; done | LC_ALL=C sort -u`
else
libext=a
perhapsLT=
- sed_eliminate_LDFLAGS='/^lib_LDFLAGS[ ]*+=/d'
+ sed_eliminate_LDFLAGS='/^lib_LDFLAGS[ ]*+=/d'
fi
+ echo "## DO NOT EDIT! GENERATED AUTOMATICALLY!"
echo "## Process this file with automake to produce Makefile.in."
func_emit_copyright_notice
if test -n "$actioncmd"; then
fi
echo
if test -z "$makefile_name"; then
- # No need to generate dependencies since the sources are in gnulib, not here.
- echo "AUTOMAKE_OPTIONS = 1.5 gnits no-dependencies"
+ echo "AUTOMAKE_OPTIONS = 1.5 gnits"
fi
echo
(
sed_eliminate_LDFLAGS=
else
libext=a
- sed_eliminate_LDFLAGS='/^lib_LDFLAGS[ ]*+=/d'
+ sed_eliminate_LDFLAGS='/^lib_LDFLAGS[ ]*+=/d'
fi
testsbase_inverse=`echo "$testsbase" | sed -e 's,/$,,' | sed -e 's,[^/][^/]*,..,g'`
+ echo "## DO NOT EDIT! GENERATED AUTOMATICALLY!"
echo "## Process this file with automake to produce Makefile.in."
func_emit_copyright_notice
echo
new_files="$files m4/gnulib-tool.m4"
old_files="$cached_files"
if test -f "$destdir"/$m4base/gnulib-tool.m4; then
- old_files="$old_files m4/gnulib-tool.m4"
+ func_append old_files " m4/gnulib-tool.m4"
fi
# Create directories.
# Copy files or make symbolic links. Remove obsolete files.
delimiter=' '
- for f in $old_files; do
- case "$f" in
- build-aux/*) g=`echo "$f" | sed -e "s,^build-aux/,$auxdir/,"` ;;
- doc/*) g=`echo "$f" | sed -e "s,^doc/,$cached_docbase/,"` ;;
- lib/*) g=`echo "$f" | sed -e "s,^lib/,$cached_sourcebase/,"` ;;
- m4/*) g=`echo "$f" | sed -e "s,^m4/,$cached_m4base/,"` ;;
- tests/*) g=`echo "$f" | sed -e "s,^tests/,$cached_testsbase/,"` ;;
- *) g="$f" ;;
- esac
- echo "$g""$delimiter""$f"
- done | LC_ALL=C sort > "$tmp"/old-files
- for f in $new_files; do
- case "$f" in
- build-aux/*) g=`echo "$f" | sed -e "s,^build-aux/,$auxdir/,"` ;;
- doc/*) g=`echo "$f" | sed -e "s,^doc/,$docbase/,"` ;;
- lib/*) g=`echo "$f" | sed -e "s,^lib/,$sourcebase/,"` ;;
- m4/*) g=`echo "$f" | sed -e "s,^m4/,$m4base/,"` ;;
- tests/*) g=`echo "$f" | sed -e "s,^tests/,$testsbase/,"` ;;
- *) g="$f" ;;
- esac
- echo "$g""$delimiter""$f"
- done | LC_ALL=C sort > "$tmp"/new-files
+ sed_rewrite_old_files="\
+ s,^build-aux/,$auxdir/,
+ s,^doc/,$cached_docbase/,
+ s,^lib/,$cached_sourcebase/,
+ s,^m4/,$cached_m4base/,
+ s,^tests/,$cached_testsbase/,"
+ sed_rewrite_new_files="\
+ s,^build-aux/,$auxdir/,
+ s,^doc/,$docbase/,
+ s,^lib/,$sourcebase/,
+ s,^m4/,$m4base/,
+ s,^tests/,$testsbase/,"
+ # Construct a table with 2 columns: rewritten-file-name original-file-name,
+ # representing the files according to the last gnulib-tool invocation.
+ for f in $old_files; do echo $f; done \
+ | sed -e "s,^.*\$,&$delimiter&," -e "$sed_rewrite_old_files" \
+ | LC_ALL=C sort \
+ > "$tmp"/old-files
+ # Construct a table with 2 columns: rewritten-file-name original-file-name,
+ # representing the files after this gnulib-tool invocation.
+ for f in $new_files; do echo $f; done \
+ | sed -e "s,^.*\$,&$delimiter&," -e "$sed_rewrite_new_files" \
+ | LC_ALL=C sort \
+ > "$tmp"/new-files
# First the files that are in old-files, but not in new-files:
sed_take_first_column='s,'"$delimiter"'.*,,'
for g in `LC_ALL=C join -t"$delimiter" -v1 "$tmp"/old-files "$tmp"/new-files | sed -e "$sed_take_first_column"`; do
fi
done
# func_add_or_update handles a file that ought to be present afterwards.
- # Uses parameters f, g, already_present.
+ # Uses parameters
+ # - f the original file name
+ # - g the rewritten file name
+ # - already_present nonempty if the file already exists, empty otherwise
func_add_or_update ()
{
func_dest_tmpfilename "$g"
# Then the files that are in new-files, but not in old-files:
sed_take_last_column='s,^.*'"$delimiter"',,'
already_present=
- for f in `LC_ALL=C join -t"$delimiter" -v2 "$tmp"/old-files "$tmp"/new-files | sed -e "$sed_take_last_column"`; do
- case "$f" in
- build-aux/*) g=`echo "$f" | sed -e "s,^build-aux/,$auxdir/,"` ;;
- doc/*) g=`echo "$f" | sed -e "s,^doc/,$docbase/,"` ;;
- lib/*) g=`echo "$f" | sed -e "s,^lib/,$sourcebase/,"` ;;
- m4/*) g=`echo "$f" | sed -e "s,^m4/,$m4base/,"` ;;
- tests/*) g=`echo "$f" | sed -e "s,^tests/,$testsbase/,"` ;;
- *) g="$f" ;;
- esac
- func_add_or_update
- done
+ LC_ALL=C join -t"$delimiter" -v2 "$tmp"/old-files "$tmp"/new-files \
+ | sed -e "$sed_take_last_column" \
+ | sed -e "s,^.*\$,&$delimiter&," -e "$sed_rewrite_new_files" > "$tmp"/added-files
+ { # Rearrange file descriptors. Needed because "while ... done < ..."
+ # constructs are executed in a subshell e.g. by Solaris 10 /bin/sh.
+ exec 5<&0 < "$tmp"/added-files
+ while read g f; do
+ func_add_or_update
+ done
+ exec 0<&5 5<&-
+ }
# Then the files that are in new-files and in old-files:
already_present=true
- for f in `LC_ALL=C join -t"$delimiter" "$tmp"/old-files "$tmp"/new-files | sed -e "$sed_take_last_column"`; do
- case "$f" in
- build-aux/*) g=`echo "$f" | sed -e "s,^build-aux/,$auxdir/,"` ;;
- doc/*) g=`echo "$f" | sed -e "s,^doc/,$docbase/,"` ;;
- lib/*) g=`echo "$f" | sed -e "s,^lib/,$sourcebase/,"` ;;
- m4/*) g=`echo "$f" | sed -e "s,^m4/,$m4base/,"` ;;
- tests/*) g=`echo "$f" | sed -e "s,^tests/,$testsbase/,"` ;;
- *) g="$f" ;;
- esac
- func_add_or_update
- done
+ LC_ALL=C join -t"$delimiter" "$tmp"/old-files "$tmp"/new-files \
+ | sed -e "$sed_take_last_column" \
+ | sed -e "s,^.*\$,&$delimiter&," -e "$sed_rewrite_new_files" > "$tmp"/kept-files
+ { # Rearrange file descriptors. Needed because "while ... done < ..."
+ # constructs are executed in a subshell e.g. by Solaris 10 /bin/sh.
+ exec 5<&0 < "$tmp"/kept-files
+ while read g f; do
+ func_add_or_update
+ done
+ exec 0<&5 5<&-
+ }
# Command-line invocation printed in a comment in generated gnulib-cache.m4.
actioncmd="gnulib-tool --import"
- actioncmd="$actioncmd --dir=$destdir"
+ func_append actioncmd " --dir=$destdir"
if test -n "$local_gnulib_dir"; then
- actioncmd="$actioncmd --local-dir=$local_gnulib_dir"
+ func_append actioncmd " --local-dir=$local_gnulib_dir"
fi
- actioncmd="$actioncmd --lib=$libname"
- actioncmd="$actioncmd --source-base=$sourcebase"
- actioncmd="$actioncmd --m4-base=$m4base"
- actioncmd="$actioncmd --doc-base=$docbase"
- actioncmd="$actioncmd --aux-dir=$auxdir"
+ func_append actioncmd " --lib=$libname"
+ func_append actioncmd " --source-base=$sourcebase"
+ func_append actioncmd " --m4-base=$m4base"
+ func_append actioncmd " --doc-base=$docbase"
+ func_append actioncmd " --aux-dir=$auxdir"
for module in $avoidlist; do
- actioncmd="$actioncmd --avoid=$module"
+ func_append actioncmd " --avoid=$module"
done
if test -n "$lgpl"; then
- actioncmd="$actioncmd --lgpl"
+ func_append actioncmd " --lgpl"
fi
if test -n "$makefile_name"; then
- actioncmd="$actioncmd --makefile_name=$makefile_name"
+ func_append actioncmd " --makefile_name=$makefile_name"
fi
if test "$libtool" = true; then
- actioncmd="$actioncmd --libtool"
+ func_append actioncmd " --libtool"
else
- actioncmd="$actioncmd --no-libtool"
+ func_append actioncmd " --no-libtool"
fi
- actioncmd="$actioncmd --macro-prefix=$macro_prefix"
- actioncmd="$actioncmd `echo $specified_modules`"
+ func_append actioncmd " --macro-prefix=$macro_prefix"
+ func_append actioncmd " `echo $specified_modules`"
# Default the makefile name to Makefile.am.
if test -n "$makefile_name"; then
# Create m4/gnulib-comp.m4.
func_dest_tmpfilename $m4base/gnulib-comp.m4
(
+ echo "# DO NOT EDIT! GENERATED AUTOMATICALLY!"
func_emit_copyright_notice
echo "#"
echo "# This file represents the compiled summary of the specification in"
echo " gl_libdeps="
echo " gl_ltlibdeps="
fi
+ echo " gl_source_base='$sourcebase'"
if test "$auxdir" != "build-aux"; then
sed_replace_build_aux='
:a
echo "Finished."
echo
echo "You may need to add #include directives for the following .h files."
+ # First the #include <...> directives without #ifs, sorted for convenience,
+ # then the #include "..." directives without #ifs, sorted for convenience,
+ # then the #include directives that are surrounded by #ifs. Not sorted.
+ for module in $modules; do
+ include_directive=`func_get_include_directive "$module"`
+ case "$nl$include_directive" in
+ *"$nl#if"*)
+ echo "$include_directive" 1>&5
+ ;;
+ *)
+ echo "$include_directive" | grep -v 'include "' 1>&6
+ echo "$include_directive" | grep 'include "' 1>&7
+ ;;
+ esac
+ done 5> "$tmp"/include-if 6> "$tmp"/include-angles 7> "$tmp"/include-quotes
(
- # First the #include <...> directives without #ifs, sorted for convenience.
- for module in $modules; do
- if func_get_include_directive "$module" | grep '^#if' >/dev/null; then
- :
- else
- func_get_include_directive "$module" | grep -v 'include "'
- fi
- done | LC_ALL=C sort -u
- # Then the #include "..." directives without #ifs, sorted for convenience.
- for module in $modules; do
- if func_get_include_directive "$module" | grep '^#if' >/dev/null; then
- :
- else
- func_get_include_directive "$module" | grep 'include "'
- fi
- done | LC_ALL=C sort -u
- # Then the #include directives that are surrounded by #ifs. Not sorted.
- for module in $modules; do
- if func_get_include_directive "$module" | grep '^#if' >/dev/null; then
- func_get_include_directive "$module"
- fi
- done
- ) | sed -e '/^$/d;' -e 's/^/ /'
+ LC_ALL=C sort -u "$tmp"/include-angles
+ LC_ALL=C sort -u "$tmp"/include-quotes
+ cat "$tmp"/include-if
+ ) | sed -e '/^$/d' -e 's/^/ /'
+ rm -f "$tmp"/include-angles "$tmp"/include-quotes "$tmp"/include-if
+
echo
echo "Don't forget to"
if test "$makefile_am" = Makefile.am; then
# Subdirectory names.
sourcebase=gllib
m4base=glm4
+ docbase=gldoc
testsbase=gltests
# Determine final module list.
for d in `echo "$files" | sed -n -e 's,^\(.*\)/[^/]*,\1,p'`; do
case "$d" in
build-aux) mkdir -p "$testdir/$auxdir" ;;
+ doc) mkdir -p "$testdir/$docbase" ;;
lib) mkdir -p "$testdir/$sourcebase" ;;
m4) mkdir -p "$testdir/$m4base" ;;
tests) mkdir -p "$testdir/$testsbase" ;;
done
# Copy files or make symbolic links.
- for f in $files; do
- func_lookup_file "$f"
- case "$f" in
- build-aux/*) g=`echo "$f" | sed -e "s,^build-aux/,$auxdir/,"` ;;
- lib/*) g=`echo "$f" | sed -e "s,^lib/,$sourcebase/,"` ;;
- m4/*) g=`echo "$f" | sed -e "s,^m4/,$m4base/,"` ;;
- tests/*) g=`echo "$f" | sed -e "s,^tests/,$testsbase/,"` ;;
- *) g="$f" ;;
- esac
- if test -n "$lookedup_tmp"; then
- cp -p "$lookedup_file" "$testdir/$g"
- else
- ln "$lookedup_file" "$testdir/$g" 2>/dev/null ||
- if test -z "$symbolic"; then
+ delimiter=' '
+ sed_rewrite_files="\
+ s,^build-aux/,$auxdir/,
+ s,^doc/,$docbase/,
+ s,^lib/,$sourcebase/,
+ s,^m4/,$m4base/,
+ s,^tests/,$testsbase/,"
+ for f in $files; do echo $f; done \
+ | sed -e "s,^.*\$,&$delimiter&," -e "$sed_rewrite_files" \
+ | LC_ALL=C sort \
+ > "$tmp"/files
+ { # Rearrange file descriptors. Needed because "while ... done < ..."
+ # constructs are executed in a subshell e.g. by Solaris 10 /bin/sh.
+ exec 5<&0 < "$tmp"/files
+ while read g f; do
+ func_lookup_file "$f"
+ if test -n "$lookedup_tmp"; then
cp -p "$lookedup_file" "$testdir/$g"
else
- ln -s "$lookedup_file" "$testdir/$g"
+ ln "$lookedup_file" "$testdir/$g" 2>/dev/null ||
+ if test -z "$symbolic"; then
+ cp -p "$lookedup_file" "$testdir/$g"
+ else
+ ln -s "$lookedup_file" "$testdir/$g"
+ fi
fi
- fi
- done
+ done
+ exec 0<&5 5<&-
+ }
# Create $sourcebase/Makefile.am.
mkdir -p "$testdir/$sourcebase"
mkdir -p "$testdir/po"
(echo "## Process this file with automake to produce Makefile.in."
) > "$testdir/po/Makefile.am"
- subdirs="$subdirs po"
+ func_append subdirs " po"
fi
if test -n "$inctests"; then
echo "gl_libdeps="
echo "gl_ltlibdeps="
fi
+ echo "gl_source_base='$testsbase'"
# Wrap the set of autoconf snippets into an autoconf macro that is then
# invoked. This is needed because autoconf does not support AC_REQUIRE
# at the top level:
echo
echo "AC_OUTPUT([Makefile])"
) > "$testdir/$testsbase/configure.ac"
- subdirs="$subdirs $testsbase"
+ func_append subdirs " $testsbase"
subdirs_with_configure_ac="$subdirs_with_configure_ac $testsbase"
fi
echo "gl_libdeps="
echo "gl_ltlibdeps="
fi
+ echo "gl_source_base='$sourcebase'"
# Wrap the set of autoconf snippets into an autoconf macro that is then
# invoked. This is needed because autoconf does not support AC_REQUIRE
# at the top level:
# configure.ac which creates the subdir's Makefile.am, not this one.
case " $subdirs_with_configure_ac " in
*" $d "*) ;;
- *) makefiles="$makefiles $d/Makefile" ;;
+ *) func_append makefiles " $d/Makefile" ;;
esac
done
echo "AC_OUTPUT([$makefiles])"
# First, all modules one by one.
for onemodule in $allmodules; do
func_create_testdir "$megatestdir/$onemodule" $onemodule
- megasubdirs="${megasubdirs}$onemodule "
+ func_append megasubdirs "$onemodule "
done
# Then, all modules all together.
+ # Except config-h, which breaks all modules which use HAVE_CONFIG_H.
# Except fnmatch-posix, which conflicts with fnmatch-gnu. FIXME.
- allmodules=`for m in $allmodules; do if test $m != fnmatch-posix; then echo $m; fi; done`
+ allmodules=`for m in $allmodules; do if test $m != config-h && test $m != fnmatch-posix; then echo $m; fi; done`
func_create_testdir "$megatestdir/ALL" "$allmodules"
- megasubdirs="${megasubdirs}ALL"
+ func_append megasubdirs "ALL"
# Create Makefile.am.
(echo "## Process this file with automake to produce Makefile.in."
/*) ;;
*)
if test -f "$destdir/$arg"/gnulib-cache.m4; then
- m4dirs="$m4dirs $arg"
+ func_append m4dirs " $arg"
m4dirs_count=`expr $m4dirs_count + 1`
fi
;;
# local_gnulib_dir, avoidlist, sourcebase, m4base, docbase,
# testsbase, libname, lgpl, makefile_name, libtool, macro_prefix
# don't propagate from one directory to another.
- (func_import) || exit 1
+ (func_import) || func_exit 1
done
else
# Really ambiguous.
if test -n "$remaining"; then
echo "Remaining files:" $remaining 1>&2
echo "gnulib-tool: *** Stop." 1>&2
- exit 1
+ func_exit 1
fi
cd ..
cd ..
if test -n "$remaining"; then
echo "Remaining files:" $remaining 1>&2
echo "gnulib-tool: *** Stop." 1>&2
- exit 1
+ func_exit 1
fi
cd ..
cd ..
rm -rf "$tmp"
# Undo the effect of the previous 'trap' command. Some shellology:
-# We cannot use "trap - 0 1 2 3 15", because Solaris sh would attempt to
+# We cannot use "trap - 0 1 2 3 13 15", because Solaris sh would attempt to
# execute the command "-". "trap '' ..." is fine only for signal 0 (= normal
# exit); for the others we need to call 'exit' explicitly. The value of $? is
# 128 + signal number and is set before the trap-registered command is run.
trap '' 0
-trap 'exit $?' 1 2 3 15
+trap 'func_exit $?' 1 2 3 13 15
exit 0