alias sed='sed --posix'
fi
+# sed_noop is a sed expression that does nothing.
+# An empty expression does not work with the native 'sed' on AIX 6.1.
+sed_noop='s,x,x,'
+
# func_usage
# outputs to stdout the --help usage message.
func_usage ()
fi
}
+# func_reset_sigpipe
+# Resets SIGPIPE to its default behaviour. SIGPIPE is signalled when a process
+# writes into a pipe with no readers, i.e. a pipe where all readers have
+# already closed their file descriptor that read from it or exited entirely.
+# The default behaviour is to terminate the current process without an error
+# message.
+# When "trap '' SIGPIPE" is in effect, the behaviour (at least with bash) is to
+# terminate the current process with an error message.
+# This function should be called at the beginning of a command that only
+# produces output to stdout (i.e. no side effects!), when the command that
+# 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.
+ # Note that Solaris sh does not understand "trap - SIGPIPE".
+ func_reset_sigpipe ()
+ {
+ trap - SIGPIPE
+ }
+else
+ func_reset_sigpipe ()
+ {
+ :
+ }
+fi
+
# Ensure an 'echo' command that does not interpret backslashes.
# Test cases:
# echo '\n' | wc -l prints 1 when OK, 2 when KO
done | sed -e 's,^lib/,,'`
# Remove $already_mentioned_files from $lib_files.
echo "$lib_files" | LC_ALL=C sort -u > "$tmp"/lib-files
- extra_files=`for f in $already_mentioned_files; do echo $f; done \
+ extra_files=`func_reset_sigpipe; \
+ for f in $already_mentioned_files; do echo $f; done \
| LC_ALL=C sort -u | LC_ALL=C join -v 2 - "$tmp"/lib-files`
if test -n "$extra_files"; then
echo "EXTRA_DIST +=" $extra_files
handledmodules=`for m in $handledmodules $inmodules_this_round; do echo $m; done | LC_ALL=C sort -u`
# Remove $handledmodules from $inmodules.
for m in $inmodules; do echo $m; done | LC_ALL=C sort -u > "$tmp"/queued-modules
- inmodules=`echo "$handledmodules" | LC_ALL=C join -v 2 - "$tmp"/queued-modules`
+ inmodules=`func_reset_sigpipe; echo "$handledmodules" | LC_ALL=C join -v 2 - "$tmp"/queued-modules`
done
modules=`for m in $outmodules; do echo $m; done | LC_ALL=C sort -u`
rm -f "$tmp"/queued-modules
if test "$libtool" = true; then
libext=la
perhapsLT=LT
- sed_eliminate_LDFLAGS=
+ sed_eliminate_LDFLAGS="$sed_noop"
else
libext=a
perhapsLT=
# situation. Turn check_PROGRAMS into noinst_PROGRAMS.
sed_transform_check_PROGRAMS='s,check_PROGRAMS,noinst_PROGRAMS,g'
else
- sed_transform_check_PROGRAMS=
+ sed_transform_check_PROGRAMS="$sed_noop"
fi
echo "## DO NOT EDIT! GENERATED AUTOMATICALLY!"
echo "## Process this file with automake to produce Makefile.in."
echo "AM_CPPFLAGS ="
fi
echo
- if LC_ALL=C grep "^[a-zA-Z0-9_]*_${perhapsLT}LIBRARIES *= *$libname\\.$libext\$" allsnippets.tmp > /dev/null; then
+ 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 test "$libtool" = true; then
libext=la
- sed_eliminate_LDFLAGS=
+ sed_eliminate_LDFLAGS="$sed_noop"
else
libext=a
sed_eliminate_LDFLAGS='/^lib_LDFLAGS[ ]*+=/d'
# situation. Turn check_PROGRAMS into noinst_PROGRAMS.
sed_transform_check_PROGRAMS='s,check_PROGRAMS,noinst_PROGRAMS,g'
else
- sed_transform_check_PROGRAMS=
+ sed_transform_check_PROGRAMS="$sed_noop"
fi
testsbase_inverse=`echo "$testsbase" | sed -e 's,/$,,' | sed -e 's,[^/][^/]*,..,g'`
echo "## DO NOT EDIT! GENERATED AUTOMATICALLY!"
# the configure.ac resides; if it is run from a different directory, the
# check is skipped.
echo " m4_ifval(${macro_prefix_arg}_LIBSOURCES_LIST, ["
- echo " m4_syscmd([test ! -d ]${macro_prefix_arg}_LIBSOURCES_DIR[ ||"
+ echo " m4_syscmd([test ! -d ]m4_defn([${macro_prefix_arg}_LIBSOURCES_DIR])[ ||"
echo " for gl_file in ]${macro_prefix_arg}_LIBSOURCES_LIST[ ; do"
- echo " if test ! -r ]${macro_prefix_arg}_LIBSOURCES_DIR[/\$gl_file ; then"
- echo " echo \"missing file ]${macro_prefix_arg}_LIBSOURCES_DIR[/\$gl_file\" >&2"
+ echo " if test ! -r ]m4_defn([${macro_prefix_arg}_LIBSOURCES_DIR])[/\$gl_file ; then"
+ echo " echo \"missing file ]m4_defn([${macro_prefix_arg}_LIBSOURCES_DIR])[/\$gl_file\" >&2"
echo " exit 1"
echo " fi"
echo " done])dnl"
s,^.*gl_LOCAL_DIR([[ ]*\([^])]*\).*$,cached_local_gnulib_dir="\1",p
}
/gl_MODULES(/ {
+ ta
+ :a
+ s/)/)/
+ tb
+ N
+ ba
+ :b
s,^.*gl_MODULES([[ ]*\([^])]*\).*$,cached_specified_modules="\1",p
}
/gl_AVOID(/ {
fi
# Determine tests-related module list.
echo "$final_modules" | LC_ALL=C sort -u > "$tmp"/final-modules
- testsrelated_modules=`echo "$main_modules" | LC_ALL=C sort -u | LC_ALL=C join -v 2 - "$tmp"/final-modules`
+ testsrelated_modules=`func_reset_sigpipe; echo "$main_modules" | LC_ALL=C sort -u | LC_ALL=C join -v 2 - "$tmp"/final-modules`
if test $verbose -ge 1; then
echo "Tests-related module list:"
echo "$testsrelated_modules" | sed -e 's/^/ /'
esac ;;
esac
echo "gl_LOCAL_DIR([$relative_local_gnulib_dir])"
- echo "gl_MODULES(["`echo $specified_modules`"])"
+ echo "gl_MODULES(["
+ echo "$specified_modules" | sed 's/^/ /g'
+ echo "])"
echo "gl_AVOID([$avoidlist])"
echo "gl_SOURCE_BASE([$sourcebase])"
echo "gl_M4_BASE([$m4base])"
ba
}'
else
- sed_replace_build_aux=
+ sed_replace_build_aux="$sed_noop"
fi
func_emit_initmacro_start $macro_prefix
echo " gl_source_base='$sourcebase'"
# Update the .cvsignore and .gitignore files.
{ echo "$added_files" | sed -e '/^$/d' -e 's,\([^/]*\)$,|A|\1,'
echo "$removed_files" | sed -e '/^$/d' -e 's,\([^/]*\)$,|R|\1,'
+ # Treat gnulib-comp.m4 like an added file, even if it already existed.
+ echo "$m4base/|A|gnulib-comp.m4"
} | LC_ALL=C sort -t'|' -k1,1 > "$tmp"/fileset-changes
{ # Rearrange file descriptors. Needed because "while ... done < ..."
# constructs are executed in a subshell e.g. by Solaris 10 /bin/sh.
func_update_ignorelist ()
{
ignore="$1"
+ if test "$ignore" = .gitignore; then
+ # In a .gitignore file, "foo" applies to the current directory and all
+ # subdirectories, whereas "/foo" applies to the current directory only.
+ anchor='/'
+ escaped_anchor='\/'
+ doubly_escaped_anchor='\\/'
+ else
+ anchor=''
+ escaped_anchor=''
+ doubly_escaped_anchor=''
+ fi
if test -f "$destdir/$dir$ignore"; then
if test -n "$dir_added" || test -n "$dir_removed"; then
- LC_ALL=C sort "$destdir/$dir$ignore" > "$tmp"/ignore
- echo "$dir_added" | sed -e '/^$/d' | LC_ALL=C sort -u \
- | LC_ALL=C join -v 2 "$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
+ 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
+ echo "$dir_removed" | sed -e '/^$/d' | LC_ALL=C sort -u \
+ | LC_ALL=C join -v 2 "$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 > "$tmp"/sed-ignore-removed
- cat "$destdir/$dir$ignore"~ "$tmp"/ignore-added \
- | sed -f "$tmp"/sed-ignore-removed \
+ { 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
+ } > "$tmp"/sed-ignore-removed
+ { cat "$destdir/$dir$ignore"~
+ sed -e "s|^|$anchor|" < "$tmp"/ignore-added
+ } | sed -f "$tmp"/sed-ignore-removed \
> "$destdir/$dir$ignore"
else
echo "Update $destdir/$dir$ignore (backup in $destdir/$dir${ignore}~)"
# Automake generates Makefile rules that create .dirstamp files.
echo ".dirstamp"
fi
- echo "$dir_added" | sed -e '/^$/d' | LC_ALL=C sort -u
+ echo "$dir_added" | sed -e '/^$/d' -e "s|^|$anchor|" | LC_ALL=C sort -u
} > "$destdir/$dir$ignore"
else
echo "Create $destdir/$dir$ignore"
fi
fi
echo " - mention \"-I ${m4base}\" in ACLOCAL_AMFLAGS in Makefile.am,"
+ {
+ # Find the first parent directory of $m4base that contains a Makefile.am.
+ sed_last='s,^.*/\([^/][^/]*\)//*$,\1/,
+s,//*$,/,'
+ sed_butlast='s,[^/][^/]*//*$,,'
+ dir1="${m4base}/"; dir2=""
+ while test -n "$dir1" && test ! -f "${destdir}/${dir1}Makefile.am"; do
+ dir2=`echo "$dir1" | sed -e "$sed_last"`"$dir2"
+ dir1=`echo "$dir1" | sed -e "$sed_butlast"`
+ done
+ echo " - mention ${dir2}gnulib-cache.m4 in EXTRA_DIST in ${dir1}Makefile.am."
+ }
echo " - invoke ${macro_prefix}_EARLY in $configure_ac, right after AC_PROG_CC,"
echo " - invoke ${macro_prefix}_INIT in $configure_ac."
}
ba
}'
else
- sed_replace_build_aux=
+ sed_replace_build_aux="$sed_noop"
fi
func_emit_initmacro_start $macro_prefix
echo "gl_source_base='$sourcebase'"