#! /bin/sh
#
-# Copyright (C) 2002-2008 Free Software Foundation, Inc.
+# Copyright (C) 2002-2009 Free Software Foundation, Inc.
#
# 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
AUTOPOINT="${GETTEXTPATH}autopoint"
fi
+# You can set MAKE.
+if test -z "${MAKE}"; then
+ MAKE=make
+fi
+
# When using GNU sed, turn off as many GNU extensions as possible,
# to minimize the risk of accidentally using non-portable features.
# However, do this only for gnulib-tool itself, not for the code that
# gnulib-tool generates, since we don't want "sed --posix" to leak
-# into makefiles.
-if (alias) > /dev/null 2>&1 && echo | sed --posix -e d >/dev/null 2>&1; then
+# into makefiles. And do it only for sed versions 4.2 or newer,
+# because "sed --posix" is buggy in GNU sed 4.1.5, see
+# <http://lists.gnu.org/archive/html/bug-gnulib/2009-02/msg00225.html>.
+if (alias) > /dev/null 2>&1 \
+ && echo | sed --posix -e d >/dev/null 2>&1 \
+ && case `sed --version | sed -e 's/^[^0-9]*//' -e 1q` in \
+ [1-3]* | 4.[01]*) false;; \
+ *) true;; \
+ esac \
+ ; then
# Define sed as an alias.
# It is not always possible to use aliases. Aliases are guaranteed to work
# if the executing shell is bash and either it is invoked as /bin/sh or
# is a version >= 2.0, supporting shopt. This is the common case.
# Two other approaches (use of a variable $sed or of a function func_sed
# instead of an alias) require massive, fragile code changes.
- # An other approach (use of function sed) requires `which sed` - but 'which'
- # is hard to emulate, due to missing "test -x" on some platforms.
+ # An other approach (use of function sed) requires `which sed` - but
+ # 'which' is hard to emulate, due to missing "test -x" on some platforms.
if test -n "$BASH_VERSION"; then
shopt -s expand_aliases >/dev/null 2>&1
fi
gnulib-tool --test --dir=directory module1 ... moduleN
gnulib-tool --megatest --dir=directory [module1 ... moduleN]
gnulib-tool --extract-description module
+ gnulib-tool --extract-status module
gnulib-tool --extract-notice module
gnulib-tool --extract-filelist module
gnulib-tool --extract-dependencies module
gnulib-tool --extract-license module
gnulib-tool --extract-maintainer module
gnulib-tool --extract-tests-module module
+ gnulib-tool --copy-file file [destination]
Operation modes:
--list print the available module names
--megatest test the given modules one by one and all together
(recommended to use CC=\"gcc -Wall\" here)
--extract-description extract the description
+ --extract-status extract the status (obsolete or not)
--extract-notice extract the notice or banner
--extract-filelist extract the list of files
--extract-dependencies extract the dependencies
under lib/
--extract-maintainer report the maintainer(s) inside gnulib
--extract-tests-module report the unit test module, if it exists
+ --copy-file copy a file that is not part of any module
General options:
--dir=DIRECTORY Specify the target directory.
--aux-dir=DIRECTORY Directory relative to --dir where auxiliary build
tools are placed (default \"build-aux\").
--with-tests Include unit tests for the included modules.
+ --with-obsolete Include obsolete modules when they occur among the
+ dependencies. By default, dependencies to obsolete
+ modules are ignored.
--avoid=MODULE Avoid including the given MODULE. Useful if you
have code that provides equivalent functionality.
This option can be repeated.
date=`echo "$date" | sed -e "$sed_year_before_time"`
# Use GNU date to compute the time in GMT.
date=`date -d "$date" -u +"%Y-%m-%d %H:%M:%S"`
- version=' '`"$gnulib_dir"/build-aux/git-version-gen /dev/null | sed -e 's/-dirty/-modified/'`
+ version=' '`cd "$gnulib_dir" && ./build-aux/git-version-gen /dev/null | sed -e 's/-dirty/-modified/'`
else
if test -d "$gnulib_dir"/CVS \
&& (cvs --version) >/dev/null 2>/dev/null; then
# func_gnulib_dir
# locates the directory where the gnulib repository lives
+# Input:
+# - progname name of this program
# Sets variables
# - self_abspathname absolute pathname of gnulib-tool
# - gnulib_dir absolute pathname of gnulib repository
func_gnulib_dir ()
{
- case "$0" in
- /*) self_abspathname="$0" ;;
- */*) self_abspathname=`pwd`/"$0" ;;
+ case "$progname" in
+ /*) self_abspathname="$progname" ;;
+ */*) self_abspathname=`pwd`/"$progname" ;;
*)
# Look in $PATH.
# Iterate through the elements of $PATH.
for d in $pathx; do
IFS="$save_IFS"
test -z "$d" && d=.
- if test -x "$d/$0" && test ! -d "$d/$0"; then
- self_abspathname="$d/$0"
+ if test -x "$d/$progname" && test ! -d "$d/$progname"; then
+ self_abspathname="$d/$progname"
break
fi
done
# func_tmpdir
# creates a temporary directory.
+# Input:
+# - progname name of this program
# Sets variable
# - tmp pathname of freshly created temporary directory
func_tmpdir ()
(umask 077 && mkdir "$tmp")
} ||
{
- echo "$0: cannot create a temporary directory in $TMPDIR" >&2
+ echo "$progname: cannot create a temporary directory in $TMPDIR" >&2
func_exit 1
}
}
{
eval "$1+=\"\$2\""
}
+ fast_func_append=true
else
func_append ()
{
eval "$1=\"\$$1\$2\""
}
+ fast_func_append=false
+fi
+
+# func_remove_prefix var prefix
+# removes the given prefix from the value of the shell variable var.
+# var should be the name of a shell variable.
+# Its value should not contain a newline and not start or end with whitespace.
+# prefix should not contain the characters "$`\{}[]^|.
+if ( foo=bar; eval 'test "${foo#b}" = ar' ) >/dev/null 2>&1; then
+ func_remove_prefix ()
+ {
+ eval "$1=\${$1#\$2}"
+ }
+ fast_func_remove_prefix=true
+else
+ func_remove_prefix ()
+ {
+ eval "value=\"\$$1\""
+ prefix="$2"
+ case "$prefix" in
+ *.*)
+ sed_escape_dots='s/\([.]\)/\\\1/g'
+ prefix=`echo "$prefix" | sed -e "$sed_escape_dots"`
+ ;;
+ esac
+ value=`echo "$value" | sed -e "s|^${prefix}||"`
+ eval "$1=\"\$value\""
+ }
+ fast_func_remove_prefix=false
+fi
+
+# func_remove_suffix var suffix
+# removes the given suffix from the value of the shell variable var.
+# var should be the name of a shell variable.
+# Its value should not contain a newline and not start or end with whitespace.
+# suffix should not contain the characters "$`\{}[]^|.
+if ( foo=bar; eval 'test "${foo%r}" = ba' ) >/dev/null 2>&1; then
+ func_remove_suffix ()
+ {
+ eval "$1=\${$1%\$2}"
+ }
+ fast_func_remove_suffix=true
+else
+ func_remove_suffix ()
+ {
+ eval "value=\"\$$1\""
+ suffix="$2"
+ case "$suffix" in
+ *.*)
+ sed_escape_dots='s/\([.]\)/\\\1/g'
+ suffix=`echo "$suffix" | sed -e "$sed_escape_dots"`
+ ;;
+ esac
+ value=`echo "$value" | sed -e "s|${suffix}\$||"`
+ eval "$1=\"\$value\""
+ }
+ fast_func_remove_suffix=false
fi
# func_fatal_error message
# outputs to stderr a fatal error message, and terminates the program.
+# Input:
+# - progname name of this program
func_fatal_error ()
{
- echo "gnulib-tool: *** $1" 1>&2
- echo "gnulib-tool: *** Stop." 1>&2
+ echo "$progname: *** $1" 1>&2
+ echo "$progname: *** Stop." 1>&2
func_exit 1
}
# will read from this pipe might prematurely exit or close its standard input
# descriptor.
if test -n "$BASH_VERSION"; then
- # The problem has only been reported with bash.
+ # The problem has only been reported with bash. Probably it occurs only with
+ # bash-3.2. For the reasons, see
+ # <http://lists.gnu.org/archive/html/bug-bash/2008-12/msg00050.html>.
# Note that Solaris sh does not understand "trap - SIGPIPE".
func_reset_sigpipe ()
{
# - testsbase from --tests-base
# - auxdir from --aux-dir
# - inctests true if --with-tests was given, blank otherwise
+# - incobsolete true if --with-obsolete was given, blank otherwise
# - avoidlist list of modules to avoid, from --avoid
# - lgpl yes or a number if --lgpl was given, blank otherwise
# - makefile_name from --makefile-name
testsbase=
auxdir=
inctests=
+ incobsolete=
avoidlist=
lgpl=
makefile_name=
--extract-* )
mode=`echo "X$1" | sed -e 's/^X--//'`
shift ;;
+ --copy-file | --copy-fil | --copy-fi | --copy-f | --copy- | --copy | --cop | --co )
+ mode=copy-file
+ shift ;;
--dir )
shift
if test $# = 0; then
--with-tests )
inctests=true
shift ;;
+ --with-obsolete )
+ incobsolete=true
+ shift ;;
--avoid )
shift
if test $# = 0; then
if test -n "$local_gnulib_dir" || test -n "$supplied_libname" \
|| test -n "$sourcebase" || test -n "$m4base" || test -n "$pobase" \
|| test -n "$docbase" || test -n "$testsbase" || test -n "$auxdir" \
- || test -n "$inctests" || test -n "$avoidlist" || test -n "$lgpl" \
- || test -n "$makefile_name" || test -n "$macro_prefix" \
- || test -n "$po_domain" || test -n "$vc_files"; then
+ || test -n "$inctests" || test -n "$incobsolete" \
+ || test -n "$avoidlist" || test -n "$lgpl" || test -n "$makefile_name" \
+ || test -n "$macro_prefix" || test -n "$po_domain" \
+ || test -n "$vc_files"; then
echo "gnulib-tool: invalid options for 'update' mode" 1>&2
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
:a
n
s/^Description:[ ]*$//
+ s/^Status:[ ]*$//
s/^Notice:[ ]*$//
s/^Files:[ ]*$//
s/^Depends-on:[ ]*$//
sed -n -e "/^Description$sed_extract_prog" < "$lookedup_file"
}
+# func_get_status module
+# Input:
+# - local_gnulib_dir from --local-dir
+func_get_status ()
+{
+ func_lookup_file "modules/$1"
+ sed -n -e "/^Status$sed_extract_prog" < "$lookedup_file"
+}
+
# func_get_notice module
# Input:
# - local_gnulib_dir from --local-dir
{
func_lookup_file "modules/$1"
sed -n -e "/^Files$sed_extract_prog" < "$lookedup_file"
+ echo m4/00gnulib.m4
echo m4/gnulib-common.m4
case "$autoconf_minversion" in
2.59)
esac
}
+# func_filter_filelist outputvar separator filelist prefix suffix removed_prefix removed_suffix [added_prefix [added_suffix]]
+# stores in outputvar the filtered and processed filelist. Filtering: Only the
+# elements starting with prefix and ending with suffix are considered.
+# Processing: removed_prefix and removed_suffix are removed from each element,
+# added_prefix and added_suffix are added to each element.
+# removed_prefix, removed_suffix should not contain the characters "$`\{}[]^|.
+# added_prefix, added_suffix should not contain the characters \|&.
+func_filter_filelist ()
+{
+ if test "$2" != "$nl" \
+ || { $fast_func_append \
+ && { test -z "$6" || $fast_func_remove_prefix; } \
+ && { test -z "$7" || $fast_func_remove_suffix; }; \
+ }; then
+ ffflist=
+ for fff in $3; do
+ case "$fff" in
+ "$4"*"$5")
+ if test -n "$6"; then
+ func_remove_prefix fff "$6"
+ fi
+ if test -n "$7"; then
+ func_remove_suffix fff "$7"
+ fi
+ fff="$8${fff}$9"
+ if test -z "$ffflist"; then
+ ffflist="${fff}"
+ else
+ func_append ffflist "$2${fff}"
+ fi
+ ;;
+ esac
+ done
+ else
+ sed_fff_filter="s|^$6\(.*\)$7\$|$8\\1$9|"
+ ffflist=`for fff in $3; do
+ case "$fff" in
+ "$4"*"$5") echo "$fff" ;;
+ esac
+ done | sed -e "$sed_fff_filter"`
+ fi
+ eval "$1=\"\$ffflist\""
+}
+
# func_get_dependencies module
# Input:
# - local_gnulib_dir from --local-dir
func_get_dependencies ()
{
# ${module}-tests always implicitly depends on ${module}.
- echo "$1" | sed -n -e 's/-tests$//p'
+ case "$1" in
+ *-tests)
+ fgd1="$1"
+ func_remove_suffix fgd1 '-tests'
+ echo "$fgd1"
+ ;;
+ esac
# Then the explicit dependencies listed in the module description.
func_lookup_file "modules/$1"
sed -n -e "/^Depends-on$sed_extract_prog" < "$lookedup_file"
# *-tests module live in tests/, not lib/.
# Synthesize an EXTRA_DIST augmentation.
all_files=`func_get_filelist $1`
- tests_files=`for f in $all_files; do \
- case $f in \
- tests/*) echo $f ;; \
- esac; \
- done | sed -e 's,^tests/,,'`
+ func_filter_filelist tests_files " " "$all_files" 'tests/' '' 'tests/' ''
extra_files="$tests_files"
if test -n "$extra_files"; then
echo "EXTRA_DIST +=" $extra_files
| sed -e "$sed_combine_lines" \
| sed -n -e "$sed_extract_mentioned_files" | sed -e 's/#.*//'`
all_files=`func_get_filelist $1`
- lib_files=`for f in $all_files; do \
- case $f in \
- lib/*) echo $f ;; \
- esac; \
- done | sed -e 's,^lib/,,'`
+ func_filter_filelist lib_files "$nl" "$all_files" 'lib/' '' 'lib/' ''
# Remove $already_mentioned_files from $lib_files.
echo "$lib_files" | LC_ALL=C sort -u > "$tmp"/lib-files
extra_files=`func_reset_sigpipe; \
case "$1" in
relocatable-prog-wrapper) ;;
*)
- sed_extract_c_files='/\.c$/p'
- extra_files=`echo "$extra_files" | sed -n -e "$sed_extract_c_files"`
+ func_filter_filelist extra_files "$nl" "$extra_files" '' '.c' '' ''
if test -n "$extra_files"; then
echo "EXTRA_lib_SOURCES +=" $extra_files
echo
;;
esac
# Synthesize an EXTRA_DIST augmentation also for the files in build-aux/.
- buildaux_files=`for f in $all_files; do \
- case $f in \
- build-aux/*) echo $f ;; \
- esac; \
- done | sed -e 's,^build-aux/,,'`
+ func_filter_filelist buildaux_files "$nl" "$all_files" 'build-aux/' '' 'build-aux/' ''
if test -n "$buildaux_files"; then
sed_prepend_auxdir='s,^,$(top_srcdir)/'"$auxdir"'/,'
echo "EXTRA_DIST += "`echo "$buildaux_files" | sed -e "$sed_prepend_auxdir"`
echo
fi
# Synthesize an EXTRA_DIST augmentation also for the files from top/.
- top_files=`for f in $all_files; do \
- case $f in \
- top/*) echo $f ;; \
- esac; \
- done | sed -e 's,^top/,,'`
+ func_filter_filelist top_files "$nl" "$all_files" 'top/' '' 'top/' ''
if test -n "$top_files"; then
sed_prepend_topdir='s,^,$(top_srcdir)/,'
echo "EXTRA_DIST += "`echo "$top_files" | sed -e "$sed_prepend_topdir"`
# - local_gnulib_dir from --local-dir
# - modules list of specified modules
# - inctests true if tests should be included, blank otherwise
+# - incobsolete true if obsolete modules among dependencies should be
+# included, blank otherwise
# - avoidlist list of modules to avoid
# - tmp pathname of a temporary directory
# Output:
if test -n "$duplicated_deps"; then
echo "warning: module $module has duplicated dependencies: "`echo $duplicated_deps` 1>&2
fi
- func_append inmodules " $deps"
+ for dep in $deps; do
+ if test -n "$incobsolete" \
+ || { status=`func_get_status $dep`; test "$status" != obsolete; }; then
+ func_append inmodules " $dep"
+ fi
+ done
if test -n "$inctests"; then
testsmodule=`func_get_tests_module $module`
if test -n "$testsmodule"; then
# - modules list of modules, including 'dummy' if needed
func_modules_add_dummy ()
{
+ # Determine whether any module provides a lib_SOURCES augmentation.
have_lib_SOURCES=
sed_remove_backslash_newline=':a
/\\$/{
# Ignore .h files since they are not compiled.
case "$file" in
*.h) ;;
- *) have_lib_SOURCES=yes ;;
+ *)
+ have_lib_SOURCES=yes
+ break 2
+ ;;
esac
done
fi
fi
}
+# func_dest_tmpfilename file
+# determines the name of a temporary file (file is relative to destdir).
+# Input:
+# - destdir target directory
+# - doit : if actions shall be executed, false if only to be printed
+# - tmp pathname of a temporary directory
+# Sets variable:
+# - tmpfile absolute filename of the temporary file
+func_dest_tmpfilename ()
+{
+ if $doit; then
+ # Put the new contents of $file in a file in the same directory (needed
+ # to guarantee that an 'mv' to "$destdir/$file" works).
+ tmpfile="$destdir/$1.tmp"
+ else
+ # Put the new contents of $file in a file in a temporary directory
+ # (because the directory of "$file" might not exist).
+ tmpfile="$tmp"/`basename "$1"`.tmp
+ fi
+}
+
+# func_add_file
+# copies a file from gnulib into the destination directory. The destination
+# is known to not exist.
+# Input:
+# - destdir target directory
+# - local_gnulib_dir from --local-dir
+# - f the original file name
+# - lookedup_file name of the merged (combined) file
+# - lookedup_tmp true if it is located in the tmp directory, blank otherwise
+# - g the rewritten file name
+# - tmpfile absolute filename of the temporary file
+# - doit : if actions shall be executed, false if only to be printed
+# - symbolic true if files should be symlinked, copied otherwise
+# - lsymbolic true if files from local_gnulib_dir should be symlinked,
+# copied otherwise
+func_add_file ()
+{
+ if $doit; then
+ echo "Copying file $g"
+ if { test -n "$symbolic" \
+ || { test -n "$lsymbolic" \
+ && test "$lookedup_file" = "$local_gnulib_dir/$f"; }; } \
+ && test -z "$lookedup_tmp" \
+ && cmp "$lookedup_file" "$tmpfile" > /dev/null; then
+ func_ln_if_changed "$lookedup_file" "$destdir/$g"
+ else
+ mv -f "$tmpfile" "$destdir/${g}" || func_fatal_error "failed"
+ fi
+ else
+ echo "Copy file $g"
+ fi
+}
+
+# func_update_file
+# copies a file from gnulib into the destination directory. The destination
+# is known to exist.
+# Input:
+# - destdir target directory
+# - local_gnulib_dir from --local-dir
+# - f the original file name
+# - lookedup_file name of the merged (combined) file
+# - lookedup_tmp true if it is located in the tmp directory, blank otherwise
+# - g the rewritten file name
+# - tmpfile absolute filename of the temporary file
+# - doit : if actions shall be executed, false if only to be printed
+# - symbolic true if files should be symlinked, copied otherwise
+# - lsymbolic true if files from local_gnulib_dir should be symlinked,
+# copied otherwise
+# - already_present nonempty if the file should already exist, empty otherwise
+func_update_file ()
+{
+ if cmp "$destdir/$g" "$tmpfile" > /dev/null; then
+ : # The file has not changed.
+ else
+ # Replace the file.
+ if $doit; then
+ if test -n "$already_present"; then
+ echo "Updating file $g (backup in ${g}~)"
+ else
+ echo "Replacing file $g (non-gnulib code backed up in ${g}~) !!"
+ fi
+ mv -f "$destdir/$g" "$destdir/${g}~" || func_fatal_error "failed"
+ if { test -n "$symbolic" \
+ || { test -n "$lsymbolic" \
+ && test "$lookedup_file" = "$local_gnulib_dir/$f"; }; } \
+ && test -z "$lookedup_tmp" \
+ && cmp "$lookedup_file" "$tmpfile" > /dev/null; then
+ func_ln_if_changed "$lookedup_file" "$destdir/$g"
+ else
+ mv -f "$tmpfile" "$destdir/${g}" || func_fatal_error "failed"
+ fi
+ else
+ if test -n "$already_present"; then
+ echo "Update file $g (backup in ${g}~)"
+ else
+ echo "Replace file $g (non-gnulib code backed up in ${g}~) !!"
+ fi
+ fi
+ fi
+}
+
# func_emit_lib_Makefile_am
# emits the contents of library makefile to standard output.
# Input:
echo "## Process this file with automake to produce Makefile.in."
func_emit_copyright_notice
if test -n "$actioncmd"; then
- echo "# Reproduce by: $actioncmd"
+ # The maximum line length (excluding the terminating newline) of any file
+ # that is to be preprocessed by config.status is 3070. config.status uses
+ # awk, and the HP-UX 11.00 awk fails if a line has length >= 3071;
+ # similarly, the IRIX 6.5 awk fails if a line has length >= 3072.
+ len=`echo "$actioncmd" | wc -c`
+ if test -n "$len" && test "$len" -le 3000; then
+ echo "# Reproduce by: $actioncmd"
+ fi
fi
echo
uses_subdirs=
# Test whether there are some source files in subdirectories.
for f in `func_get_filelist "$module"`; do
case $f in
- lib/*/*.c) uses_subdirs=yes ;;
+ lib/*/*.c)
+ uses_subdirs=yes
+ break
+ ;;
esac
done
fi
if test -z "$makefile_name"; then
echo
echo "AM_CPPFLAGS ="
+ echo "AM_CFLAGS ="
fi
echo
- if LC_ALL=C grep "^[a-zA-Z0-9_]*_${perhapsLT}LIBRARIES *+\{0,1\}= *$libname\\.$libext\$" allsnippets.tmp > /dev/null; then
- # One of the snippets already specifies an installation location for the
- # library. Don't confuse automake by saying it should not be installed.
+ if LC_ALL=C grep "^[a-zA-Z0-9_]*_${perhapsLT}LIBRARIES *+\{0,1\}= *$libname\\.$libext\$" allsnippets.tmp > /dev/null \
+ || { test -n "$makefile_name" \
+ && test -f "$sourcebase/Makefile.am" \
+ && LC_ALL=C grep "^[a-zA-Z0-9_]*_${perhapsLT}LIBRARIES *+\{0,1\}= *$libname\\.$libext\$" "$sourcebase/Makefile.am" > /dev/null; \
+ }; then
+ # One of the snippets or the user's Makefile.am already specifies an
+ # installation location for the library. Don't confuse automake by saying
+ # it should not be installed.
:
else
# By default, the generated library should not be installed.
# Test whether there are some source files in subdirectories.
for f in `func_get_filelist "$module"`; do
case $f in
- lib/*/*.c | tests/*/*.c) uses_subdirs=yes ;;
+ lib/*/*.c | tests/*/*.c)
+ uses_subdirs=yes
+ break
+ ;;
esac
done
fi
# - testsbase directory relative to destdir where to place unit test code
# - auxdir directory relative to destdir where to place build aux files
# - inctests true if --with-tests was given, blank otherwise
+# - incobsolete true if --with-obsolete was given, blank otherwise
# - avoidlist list of modules to avoid, from --avoid
# - lgpl yes or a number if library's license shall be LGPL,
# blank otherwise
# Get the cached settings.
cached_local_gnulib_dir=
cached_specified_modules=
+ cached_incobsolete=
cached_avoidlist=
cached_sourcebase=
cached_m4base=
s,^dnl .*$,,
s, dnl .*$,,
/gl_LOCAL_DIR(/ {
- s,^.*gl_LOCAL_DIR([[ ]*\([^])]*\).*$,cached_local_gnulib_dir="\1",p
+ s,^.*gl_LOCAL_DIR([[ ]*\([^]"$`\\)]*\).*$,cached_local_gnulib_dir="\1",p
}
/gl_MODULES(/ {
ta
N
ba
:b
- s,^.*gl_MODULES([[ ]*\([^])]*\).*$,cached_specified_modules="\1",p
+ s,^.*gl_MODULES([[ ]*\([^]"$`\\)]*\).*$,cached_specified_modules="\1",p
+ }
+ /gl_WITH_OBSOLETE/ {
+ s,^.*$,cached_incobsolete=true,p
}
/gl_AVOID(/ {
- s,^.*gl_AVOID([[ ]*\([^])]*\).*$,cached_avoidlist="\1",p
+ s,^.*gl_AVOID([[ ]*\([^]"$`\\)]*\).*$,cached_avoidlist="\1",p
}
/gl_SOURCE_BASE(/ {
- s,^.*gl_SOURCE_BASE([[ ]*\([^])]*\).*$,cached_sourcebase="\1",p
+ s,^.*gl_SOURCE_BASE([[ ]*\([^]"$`\\)]*\).*$,cached_sourcebase="\1",p
}
/gl_M4_BASE(/ {
- s,^.*gl_M4_BASE([[ ]*\([^])]*\).*$,cached_m4base="\1",p
+ s,^.*gl_M4_BASE([[ ]*\([^]"$`\\)]*\).*$,cached_m4base="\1",p
}
/gl_PO_BASE(/ {
- s,^.*gl_PO_BASE([[ ]*\([^])]*\).*$,cached_pobase="\1",p
+ s,^.*gl_PO_BASE([[ ]*\([^]"$`\\)]*\).*$,cached_pobase="\1",p
}
/gl_DOC_BASE(/ {
- s,^.*gl_DOC_BASE([[ ]*\([^])]*\).*$,cached_docbase="\1",p
+ s,^.*gl_DOC_BASE([[ ]*\([^]"$`\\)]*\).*$,cached_docbase="\1",p
}
/gl_TESTS_BASE(/ {
- s,^.*gl_TESTS_BASE([[ ]*\([^])]*\).*$,cached_testsbase="\1",p
+ s,^.*gl_TESTS_BASE([[ ]*\([^]"$`\\)]*\).*$,cached_testsbase="\1",p
}
/gl_WITH_TESTS/ {
s,^.*$,cached_inctests=true,p
}
/gl_LIB(/ {
- s,^.*gl_LIB([[ ]*\([^])]*\).*$,cached_libname="\1",p
+ s,^.*gl_LIB([[ ]*\([^]"$`\\)]*\).*$,cached_libname="\1",p
}
/gl_LGPL(/ {
- s,^.*gl_LGPL([[ ]*\([^])]*\).*$,cached_lgpl="\1",p
+ s,^.*gl_LGPL([[ ]*\([^]"$`\\)]*\).*$,cached_lgpl="\1",p
}
/gl_LGPL/ {
s,^.*$,cached_lgpl=yes,p
}
/gl_MAKEFILE_NAME(/ {
- s,^.*gl_MAKEFILE_NAME([[ ]*\([^])]*\).*$,cached_makefile_name="\1",p
+ s,^.*gl_MAKEFILE_NAME([[ ]*\([^]"$`\\)]*\).*$,cached_makefile_name="\1",p
}
/gl_LIBTOOL/ {
s,^.*$,cached_libtool=true,p
}
/gl_MACRO_PREFIX(/ {
- s,^.*gl_MACRO_PREFIX([[ ]*\([^])]*\).*$,cached_macro_prefix="\1",p
+ s,^.*gl_MACRO_PREFIX([[ ]*\([^]"$`\\)]*\).*$,cached_macro_prefix="\1",p
}
/gl_PO_DOMAIN(/ {
- s,^.*gl_PO_DOMAIN([[ ]*\([^])]*\).*$,cached_po_domain="\1",p
+ s,^.*gl_PO_DOMAIN([[ ]*\([^]"$`\\)]*\).*$,cached_po_domain="\1",p
}
/gl_VC_FILES(/ {
- s,^.*gl_VC_FILES([[ ]*\([^])]*\).*$,cached_vc_files="\1",p
+ s,^.*gl_VC_FILES([[ ]*\([^]"$`\\)]*\).*$,cached_vc_files="\1",p
}'
eval `sed -n -e "$my_sed_traces" < "$destdir"/$m4base/gnulib-cache.m4`
if test -f "$destdir"/$m4base/gnulib-comp.m4; then
:a
s,^\]).*$,",
tb
+ s,["$`\\],,g
p
n
ba
# Append the cached and the specified module names. So that
# "gnulib-tool --import foo" means to add the module foo.
specified_modules="$cached_specified_modules $1"
+ # Included obsolete modules among the dependencies if specified either way.
+ if test -z "$incobsolete"; then
+ incobsolete="$cached_incobsolete"
+ fi
# Append the cached and the specified avoidlist. This is probably better
# than dropping the cached one when --avoid is specified at least once.
avoidlist=`for m in $cached_avoidlist $avoidlist; do echo $m; done | LC_ALL=C sort -u`
func_verify_nontests_module
if test -n "$module"; then
all_files=`func_get_filelist $module`
- lib_files=`for f in $all_files; do \
- case $f in \
- lib/*) echo $f ;; \
- esac; \
- done | sed -e 's,^lib/,,'`
- if test -n "$lib_files"; then
- use_libtests=true
- break
- fi
+ # Test whether some file in $all_files lies in lib/.
+ for f in $all_files; do
+ case $f in
+ lib/*)
+ use_libtests=true
+ break 2
+ ;;
+ esac
+ done
fi
done
# If --lgpl, verify that the licenses of modules are compatible.
if test -n "$lgpl"; then
+ license_incompatibilities=
for module in $main_modules; do
license=`func_get_license $module`
case $license in
yes | 3)
case $license in
LGPL | LGPLv2+) ;;
- *) func_fatal_error "incompatible license on module $module: $license" ;;
+ *) func_append license_incompatibilities "$module $license$nl" ;;
esac
;;
2)
case $license in
LGPLv2+) ;;
- *) func_fatal_error "incompatible license on module $module: $license" ;;
+ *) func_append license_incompatibilities "$module $license$nl" ;;
esac
;;
*) func_fatal_error "invalid value lgpl=$lgpl" ;;
;;
esac
done
+ if test -n "$license_incompatibilities"; then
+ # Format the license incompatibilities as a table.
+ sed_expand_column1_width50_indent17='s,^\([^ ]*\) ,\1 ,
+s,^\(.................................................[^ ]*\) *, \1 ,'
+ license_incompatibilities=`echo "$license_incompatibilities" | sed -e "$sed_expand_column1_width50_indent17"`
+ func_fatal_error "incompatible license on modules:$nl$license_incompatibilities"
+ fi
fi
# Show banner notice of every module.
sed_transform_main_lib_file=$sed_transform_main_lib_file'
s/GNU Lesser General/GNU General/g
s/GNU Library General/GNU General/g
- s/version \(2\|2\.1\)\([ ,]\)/version 3\2/g
+ s/version 2\(.1\)\{0,1\}\([ ,]\)/version 3\2/g
'
fi
fi
+ # Determine script to apply to auxiliary files that go into $auxdir/.
+ sed_transform_build_aux_file=
+ if test -n "$do_copyrights"; then
+ # Update license.
+ sed_transform_build_aux_file=$sed_transform_build_aux_file'
+ s/GNU Lesser General/GNU General/g
+ s/GNU Library General/GNU General/g
+ s/version 2\(.1\)\{0,1\}\([ ,]\)/version 3\2/g
+ '
+ fi
+
# Determine script to apply to library files that go into $testsbase/.
sed_transform_testsrelated_lib_file="$sed_transform_lib_file"
if test -n "$do_copyrights"; then
sed_transform_testsrelated_lib_file=$sed_transform_testsrelated_lib_file'
s/GNU Lesser General/GNU General/g
s/GNU Library General/GNU General/g
- s/version \(2\|2\.1\)\([ ,]\)/version 3\2/g
+ s/version 2\(.1\)\{0,1\}\([ ,]\)/version 3\2/g
'
fi
func_append old_files " m4/gnulib-tool.m4"
fi
+ rewritten='%REWRITTEN%'
sed_rewrite_old_files="\
- s,^build-aux/,$auxdir/,
- s,^doc/,$cached_docbase/,
- s,^lib/,$cached_sourcebase/,
- s,^m4/,$cached_m4base/,
- s,^tests/,$cached_testsbase/,
- s,^tests=lib/,$cached_testsbase/,
- s,^top/,,"
+ s,^build-aux/,$rewritten$auxdir/,
+ s,^doc/,$rewritten$cached_docbase/,
+ s,^lib/,$rewritten$cached_sourcebase/,
+ s,^m4/,$rewritten$cached_m4base/,
+ s,^tests/,$rewritten$cached_testsbase/,
+ s,^tests=lib/,$rewritten$cached_testsbase/,
+ s,^top/,$rewritten,
+ s,^$rewritten,,"
sed_rewrite_new_files="\
- s,^build-aux/,$auxdir/,
- s,^doc/,$docbase/,
- s,^lib/,$sourcebase/,
- s,^m4/,$m4base/,
- s,^tests/,$testsbase/,
- s,^tests=lib/,$testsbase/,
- s,^top/,,"
+ s,^build-aux/,$rewritten$auxdir/,
+ s,^doc/,$rewritten$docbase/,
+ s,^lib/,$rewritten$sourcebase/,
+ s,^m4/,$rewritten$m4base/,
+ s,^tests/,$rewritten$testsbase/,
+ s,^tests=lib/,$rewritten$testsbase/,
+ s,^top/,$rewritten,
+ s,^$rewritten,,"
# Create directories.
{ echo "$sourcebase"
exec 0<&5 5<&-
}
- # func_dest_tmpfilename file
- # determines the name of a temporary file (file is relative to destdir).
- # Sets variable:
- # - tmpfile absolute filename of the temporary file
- func_dest_tmpfilename ()
- {
- if $doit; then
- # Put the new contents of $file in a file in the same directory (needed
- # to guarantee that an 'mv' to "$destdir/$file" works).
- tmpfile="$destdir/$1.tmp"
- else
- # Put the new contents of $file in a file in a temporary directory
- # (because the directory of "$file" might not exist).
- tmpfile="$tmp"/`basename "$1"`.tmp
- fi
- }
-
# Copy files or make symbolic links. Remove obsolete files.
added_files=''
removed_files=''
# Uses parameters
# - f the original file name
# - g the rewritten file name
- # - already_present nonempty if the file already exists, empty otherwise
+ # - already_present nonempty if the file should already exist, empty
+ # otherwise
func_add_or_update ()
{
of="$f"
;;
esac
fi
+ if test -n "$sed_transform_build_aux_file"; then
+ case "$of" in
+ build-aux/*)
+ sed -e "$sed_transform_build_aux_file" \
+ < "$lookedup_file" > "$tmpfile" || func_fatal_error "failed"
+ ;;
+ esac
+ fi
if test -n "$sed_transform_testsrelated_lib_file"; then
case "$of" in
tests=lib/*)
fi
if test -f "$destdir/$g"; then
# The file already exists.
- if cmp "$destdir/$g" "$tmpfile" > /dev/null; then
- : # The file has not changed.
- else
- # Replace the file.
- if $doit; then
- if test -n "$already_present"; then
- echo "Updating file $g (backup in ${g}~)"
- else
- echo "Replacing file $g (non-gnulib code backed up in ${g}~) !!"
- fi
- mv -f "$destdir/$g" "$destdir/${g}~" || func_fatal_error "failed"
- if { test -n "$symbolic" \
- || { test -n "$lsymbolic" \
- && test "$lookedup_file" = "$local_gnulib_dir/$f"; }; } \
- && test -z "$lookedup_tmp" \
- && cmp "$lookedup_file" "$tmpfile" > /dev/null; then
- func_ln_if_changed "$lookedup_file" "$destdir/$g"
- else
- mv -f "$tmpfile" "$destdir/${g}" || func_fatal_error "failed"
- fi
- else
- if test -n "$already_present"; then
- echo "Update file $g (backup in ${g}~)"
- else
- echo "Replace file $g (non-gnulib code backed up in ${g}~) !!"
- fi
- fi
- fi
+ func_update_file
else
# Install the file.
# Don't protest if the file should be there but isn't: it happens
# frequently that developers don't put autogenerated files into CVS.
- if $doit; then
- echo "Copying file $g"
- if { test -n "$symbolic" \
- || { test -n "$lsymbolic" \
- && test "$lookedup_file" = "$local_gnulib_dir/$f"; }; } \
- && test -z "$lookedup_tmp" \
- && cmp "$lookedup_file" "$tmpfile" > /dev/null; then
- func_ln_if_changed "$lookedup_file" "$destdir/$g"
- else
- mv -f "$tmpfile" "$destdir/${g}" || func_fatal_error "failed"
- fi
- else
- echo "Copy file $g"
- fi
+ func_add_file
func_append added_files "$g$nl"
fi
rm -f "$tmpfile"
if test -n "$inctests"; then
func_append actioncmd " --with-tests"
fi
+ if test -n "$incobsolete"; then
+ func_append actioncmd " --with-obsolete"
+ fi
for module in $avoidlist; do
func_append actioncmd " --avoid=$module"
done
echo "gl_MODULES(["
echo "$specified_modules" | sed 's/^/ /g'
echo "])"
+ test -z "$incobsolete" || echo "gl_WITH_OBSOLETE"
echo "gl_AVOID([$avoidlist])"
echo "gl_SOURCE_BASE([$sourcebase])"
echo "gl_M4_BASE([$m4base])"
if test -n "$uses_subdirs"; then
echo " AC_REQUIRE([AM_PROG_CC_C_O])"
fi
- if grep AC_GNU_SOURCE "$destdir"/$m4base/*.m4 >/dev/null 2>/dev/null; then
- echo " AC_REQUIRE([AC_GNU_SOURCE])"
- fi
for module in $final_modules; do
func_verify_module
if test -n "$module"; then
sed -e "s|^$anchor||" < "$destdir/$dir$ignore" | LC_ALL=C sort > "$tmp"/ignore
(func_reset_sigpipe
echo "$dir_added" | sed -e '/^$/d' | LC_ALL=C sort -u \
- | LC_ALL=C join -v 2 "$tmp"/ignore - > "$tmp"/ignore-added
+ | LC_ALL=C join -v 1 - "$tmp"/ignore > "$tmp"/ignore-added
echo "$dir_removed" | sed -e '/^$/d' | LC_ALL=C sort -u \
- | LC_ALL=C join -v 2 "$tmp"/ignore - > "$tmp"/ignore-removed
+ | LC_ALL=C join -v 1 - "$tmp"/ignore > "$tmp"/ignore-removed
)
if test -s "$tmp"/ignore-added || test -s "$tmp"/ignore-removed; then
if $doit; then
echo "Updating $destdir/$dir$ignore (backup in $destdir/$dir${ignore}~)"
mv -f "$destdir/$dir$ignore" "$destdir/$dir$ignore"~
- { sed -e 's,^,/^,' -e 's,$,\$/d,' < "$tmp"/ignore-removed
- if test -n "$anchor"; then sed -e "s,^,/^${doubly_escaped_anchor}," -e 's,$,\$/d,' < "$tmp"/ignore-removed; fi
+ { sed -e 's,/,\\/,g' -e 's,^,/^,' -e 's,$,\$/d,' < "$tmp"/ignore-removed
+ if test -n "$anchor"; then sed -e 's,/,\\/,g' -e "s,^,/^${doubly_escaped_anchor}," -e 's,$,$/d,' < "$tmp"/ignore-removed; fi
} > "$tmp"/sed-ignore-removed
{ cat "$destdir/$dir$ignore"~
sed -e "s|^|$anchor|" < "$tmp"/ignore-added
if test -z "$modules"; then
# All modules together.
# Except config-h, which breaks all modules which use HAVE_CONFIG_H.
- # Except fnmatch-posix, which conflicts with fnmatch-gnu. FIXME.
# Except ftruncate, mountlist, which abort the configuration on mingw. FIXME.
modules=`func_all_modules`
- modules=`for m in $modules; do case $m in config-h | fnmatch-posix | ftruncate | mountlist) ;; *) echo $m;; esac; done`
+ modules=`for m in $modules; do case $m in config-h | ftruncate | mountlist) ;; *) echo $m;; esac; done`
fi
modules=`for m in $modules; do echo $m; done | LC_ALL=C sort -u`
echo "$files" | sed -e 's/^/ /'
fi
+ rewritten='%REWRITTEN%'
sed_rewrite_files="\
- s,^build-aux/,$auxdir/,
- s,^doc/,$docbase/,
- s,^lib/,$sourcebase/,
- s,^m4/,$m4base/,
- s,^tests/,$testsbase/,
- s,^top/,,"
+ s,^build-aux/,$rewritten$auxdir/,
+ s,^doc/,$rewritten$docbase/,
+ s,^lib/,$rewritten$sourcebase/,
+ s,^m4/,$rewritten$m4base/,
+ s,^tests/,$rewritten$testsbase/,
+ s,^top/,$rewritten,
+ s,^$rewritten,,"
# Create directories.
for f in $files; do echo $f; done \
echo "AC_PROG_MAKE_SET"
echo "AC_PROG_RANLIB"
echo
- if grep AC_GNU_SOURCE "$testdir/$m4base"/*.m4 >/dev/null 2>/dev/null; then
- echo "AC_GNU_SOURCE"
- echo
- fi
for module in $modules; do
func_verify_module
if test -n "$module"; then
- func_get_autoconf_early_snippet "$module"
+ case $module in
+ gnumakefile | maintainer-makefile)
+ # These modules are meant to be used only in the top-level directory.
+ ;;
+ *)
+ func_get_autoconf_early_snippet "$module"
+ ;;
+ esac
fi
done \
| sed -e '/^$/d;' -e 's/AC_REQUIRE(\[\([^()]*\)\])/\1/'
for module in $modules; do
func_verify_nontests_module
if test -n "$module"; then
- func_get_autoconf_snippet "$module" \
- | sed -e "$sed_replace_build_aux"
+ case $module in
+ gnumakefile | maintainer-makefile)
+ # These modules are meant to be used only in the top-level directory.
+ ;;
+ *)
+ func_get_autoconf_snippet "$module" \
+ | sed -e "$sed_replace_build_aux"
+ ;;
+ esac
fi
done
echo "gl_source_base='.'"
echo "AM_PROG_CC_C_O"
echo
fi
- if grep AC_GNU_SOURCE "$testdir/$m4base"/*.m4 >/dev/null 2>/dev/null; then
- echo "AC_GNU_SOURCE"
- echo
- fi
for module in $modules; do
func_verify_nontests_module
if test -n "$module"; then
if test -f $m4base/gettext.m4; then
func_execute_command ${AUTOPOINT} --force || func_exit 1
for f in $m4base/*.m4~; do
- mv -f $f `echo $f | sed -e 's,~$,,'` || func_exit 1
+ if test -f $f; then
+ mv -f $f `echo $f | sed -e 's,~$,,'` || func_exit 1
+ fi
done
fi
func_execute_command ${ACLOCAL} -I $m4base || func_exit 1
if test -f ../$m4base/gettext.m4; then
func_execute_command ${AUTOPOINT} --force || func_exit 1
for f in ../$m4base/*.m4~; do
- mv -f $f `echo $f | sed -e 's,~$,,'` || func_exit 1
+ if test -f $f; then
+ mv -f $f `echo $f | sed -e 's,~$,,'` || func_exit 1
+ fi
done
fi
func_execute_command ${ACLOCAL} -I ../$m4base || func_exit 1
./configure || func_exit 1
cd "$sourcebase"
echo 'built_sources: $(BUILT_SOURCES)' >> Makefile
- make built_sources || func_exit 1
+ $MAKE built_sources || func_exit 1
cd ..
- make distclean || func_exit 1
+ $MAKE distclean || func_exit 1
) || func_exit 1
fi
}
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 != config-h && test $m != fnmatch-posix; then echo $m; fi; done`
+ allmodules=`for m in $allmodules; do if test $m != config-h; then echo $m; fi; done`
func_create_testdir "$megatestdir/ALL" "$allmodules"
func_append megasubdirs "ALL"
-e 's,^\([0-9]*\) \([0-9]*\) \([0-9]*\),\3\2\1,'`
(echo '#!/bin/sh'
echo "CVSDATE=$cvsdate"
+ echo ": \${MAKE=make}"
echo "test -d logs || mkdir logs"
echo "for module in $megasubdirs; do"
echo " echo \"Working on module \$module...\""
echo " : autobuild revision... cvs-\$CVSDATE-000000"
echo " : autobuild timestamp... \`date \"+%Y%m%d-%H%M%S\"\`"
echo " : autobuild hostname... \`hostname\`"
- echo " cd \$module && ./configure \$CONFIGURE_OPTIONS && make && make check && make distclean"
+ echo " cd \$module && ./configure \$CONFIGURE_OPTIONS && \$MAKE && \$MAKE check && \$MAKE distclean"
echo " echo rc=\$?"
echo " ) 2>&1 | { if test -n \"\$AUTOBUILD_SUBST\"; then sed -e \"\$AUTOBUILD_SUBST\"; else cat; fi; } > logs/\$safemodule"
echo "done"
s,^dnl .*$,,
s, dnl .*$,,
/AC_CONFIG_AUX_DIR/ {
- s,^.*AC_CONFIG_AUX_DIR([[ ]*\([^])]*\).*$,guessed_auxdir="\1",p
+ s,^.*AC_CONFIG_AUX_DIR([[ ]*\([^]"$`\\)]*\).*$,guessed_auxdir="\1",p
}
/A[CM]_PROG_LIBTOOL/ {
s,^.*$,guessed_libtool=true,p
for m4base in $m4dirs; do
# Perform func_import in a subshell, so that variable values
# such as
- # local_gnulib_dir, avoidlist, sourcebase, m4base, pobase,
- # docbase, testsbase, inctests, libname, lgpl, makefile_name,
- # libtool, macro_prefix, po_domain, vc_files
+ # local_gnulib_dir, incobsolete, avoidlist, sourcebase, m4base,
+ # pobase, docbase, testsbase, inctests, libname, lgpl,
+ # makefile_name, libtool, macro_prefix, po_domain, vc_files
# don't propagate from one directory to another.
(func_import) || func_exit 1
done
mkdir build
cd build
../configure || func_exit 1
- make || func_exit 1
- make check || func_exit 1
- make distclean || func_exit 1
+ $MAKE || func_exit 1
+ $MAKE check || func_exit 1
+ $MAKE distclean || func_exit 1
remaining=`find . -type f -print`
if test -n "$remaining"; then
echo "Remaining files:" $remaining 1>&2
mkdir build
cd build
../configure
- make
- make check
- make distclean
+ $MAKE
+ $MAKE check
+ $MAKE distclean
remaining=`find . -type f -print`
if test -n "$remaining"; then
echo "Remaining files:" $remaining 1>&2
done
;;
+ extract-status )
+ for module
+ do
+ func_verify_module
+ if test -n "$module"; then
+ func_get_status "$module"
+ fi
+ done
+ ;;
+
extract-notice )
for module
do
done
;;
+ copy-file )
+ # Verify the number of arguments.
+ if test $# -lt 1 || test $# -gt 2; then
+ func_fatal_error "invalid number of arguments for --$mode"
+ fi
+
+ # The first argument is the file to be copied.
+ f="$1"
+ # Verify the file exists.
+ func_lookup_file "$f"
+
+ # The second argument is the destination; either a directory ot a file.
+ # It defaults to the current directory.
+ dest="$2"
+ test -n "$dest" || dest='.'
+ test -n "$sourcebase" || sourcebase="lib"
+ test -n "$m4base" || m4base="m4"
+ test -n "$docbase" || docbase="doc"
+ test -n "$testsbase" || testsbase="tests"
+ test -n "$auxdir" || auxdir="build-aux"
+ rewritten='%REWRITTEN%'
+ sed_rewrite_files="\
+ s,^build-aux/,$rewritten$auxdir/,
+ s,^doc/,$rewritten$docbase/,
+ s,^lib/,$rewritten$sourcebase/,
+ s,^m4/,$rewritten$m4base/,
+ s,^tests/,$rewritten$testsbase/,
+ s,^top/,$rewritten,
+ s,^$rewritten,,"
+ if test -d "$dest"; then
+ destdir="$dest"
+ g=`echo "$f" | sed -e "$sed_rewrite_files"`
+ else
+ destdir=`dirname "$dest"`
+ g=`basename "$dest"`
+ fi
+
+ # Create the directory for destfile.
+ d=`dirname "$destdir/$g"`
+ if $doit; then
+ if test -n "$d" && test ! -d "$d"; then
+ mkdir -p "$d" || func_fatal_error "failed"
+ fi
+ fi
+ # Copy the file.
+ func_dest_tmpfilename "$g"
+ cp "$lookedup_file" "$tmpfile" || func_fatal_error "failed"
+ already_present=true
+ if test -f "$destdir/$g"; then
+ # The file already exists.
+ func_update_file
+ else
+ # Install the file.
+ # Don't protest if the file should be there but isn't: it happens
+ # frequently that developers don't put autogenerated files into CVS.
+ func_add_file
+ fi
+ rm -f "$tmpfile"
+ ;;
+
* )
func_fatal_error "unknown operation mode --$mode" ;;
esac