Getting ready for a release (it's been almost a year!), here are some
changes I'll push shortly:
From 81ca497366a639364ff2e0f159f7ce61b7dafff7 Mon Sep 17 00:00:00 2001
From: Jim Meyering <[email protected]>
Date: Mon, 29 Jul 2013 02:36:44 +0200
Subject: [PATCH 1/3] doc: NEWS: mention the DFA segfault fix
* NEWS (Bug fixes): List the DFA segfault fix.
---
NEWS | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/NEWS b/NEWS
index 407e0b0..8796a1b 100644
--- a/NEWS
+++ b/NEWS
@@ -4,6 +4,11 @@ GNU grep NEWS -*- outline
-*-
** Bug fixes
+ grep -E would segfault when given a regexp like '([^.]*[M]){1,2}'
+ for any multibyte character M. [bug introduced in grep-2.6, which would
+ segfault, but 2.7 and 2.8 had no problem, and 2.9 through 2.14 would
+ hit a failed assertion. ]
+
grep -F would get stuck in an infinite loop when given a search string
that is an invalid byte sequence in the current locale and that matches
the bytes of the input twice on a line. Now grep fails with exit status 1.
--
1.8.4.rc0.11.g35f5eaa
From 94acf00027bda73423197e371ac9185c7246deec Mon Sep 17 00:00:00 2001
From: Jim Meyering <[email protected]>
Date: Mon, 29 Jul 2013 22:10:18 -0700
Subject: [PATCH 2/3] tests: simplify and factor newest test
* tests/char-class-multibyte2: Simplify file names.
Factor out $e_acute, so that the grep argument representation
is ascii (though the value is still UTF8).
---
tests/char-class-multibyte2 | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/tests/char-class-multibyte2 b/tests/char-class-multibyte2
index a4bcc18..6cdada5 100755
--- a/tests/char-class-multibyte2
+++ b/tests/char-class-multibyte2
@@ -5,13 +5,15 @@
require_en_utf8_locale_
require_compiled_in_MB_support
-printf 'é\n' > exp1 || framework_failure_
+e_acute=$(printf '\303\251')
+printf "$e_acute\n" > exp || framework_failure_
fail=0
for LOC in en_US.UTF-8 $LOCALE_FR_UTF8; do
- out=out4-$LOC
- printf 'á\nç\né\n' | LC_ALL=$LOC grep -E '([^.]*[é]){1,2}' > $out || fail=1
- compare exp1 $out || fail=1
+ out=out-$LOC
+ printf "á\nç\n$e_acute\n" | LC_ALL=$LOC grep -E "([^.]*[$e_acute]){1,2}" \
+ > $out || fail=1
+ compare exp $out || fail=1
done
Exit $fail
--
1.8.4.rc0.11.g35f5eaa
From 22d6436e0fc77cf238acddc74c19d373d7222b58 Mon Sep 17 00:00:00 2001
From: Jim Meyering <[email protected]>
Date: Mon, 29 Jul 2013 02:20:43 +0200
Subject: [PATCH 3/3] build: update gnulib-related code
* gnulib: Update submodule to latest.
* bootstrap: Update from gnulib.
* gl/lib/regex_internal.h.diff: Update to reflect gnulib changes.
* bootstrap.conf: Partial sync from coreutils.
---
bootstrap | 111 ++++++++++++++++++++++++-------------------
bootstrap.conf | 22 +++++----
gl/lib/regex_internal.h.diff | 16 +++----
gnulib | 2 +-
4 files changed, 85 insertions(+), 66 deletions(-)
diff --git a/bootstrap b/bootstrap
index 48181c9..a37fb8a 100755
--- a/bootstrap
+++ b/bootstrap
@@ -1,6 +1,6 @@
#! /bin/sh
# Print a version string.
-scriptversion=2012-07-19.14; # UTC
+scriptversion=2013-07-03.20; # UTC
# Bootstrap this package from checked-out sources.
@@ -140,20 +140,21 @@ po_download_command_format2=\
"wget --mirror -nd -q -np -A.po -P '%s' \
http://translationproject.org/latest/%s/"
+# Prefer a non-empty tarname (4th argument of AC_INIT if given), else
+# fall back to the package name (1st argument with munging)
extract_package_name='
- /^AC_INIT(/{
- /.*,.*,.*, */{
- s///
- s/[][]//g
- s/)$//
+ /^AC_INIT(\[*/{
+ s///
+ /^[^,]*,[^,]*,[^,]*,[ []*\([^][ ,)]\)/{
+ s//\1/
+ s/[],)].*//
p
q
}
- s/AC_INIT(\[*//
- s/]*,.*//
+ s/[],)].*//
s/^GNU //
y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/
- s/[^A-Za-z0-9_]/-/g
+ s/[^abcdefghijklmnopqrstuvwxyz0123456789_]/-/g
p
}
'
@@ -255,12 +256,12 @@ esac
# Extra files from gnulib, which override files from other sources.
test -z "${gnulib_extra_files}" && \
gnulib_extra_files="
- $build_aux/install-sh
- $build_aux/mdate-sh
- $build_aux/texinfo.tex
- $build_aux/depcomp
- $build_aux/config.guess
- $build_aux/config.sub
+ build-aux/install-sh
+ build-aux/mdate-sh
+ build-aux/texinfo.tex
+ build-aux/depcomp
+ build-aux/config.guess
+ build-aux/config.sub
doc/INSTALL
"
@@ -306,34 +307,34 @@ if test -n "$checkout_only_file" && test ! -r
"$checkout_only_file"; then
die "Bootstrapping from a non-checked-out distribution is risky."
fi
-# Ensure that lines starting with ! sort last, per gitignore conventions
-# for whitelisting exceptions after a more generic blacklist pattern.
-sort_patterns() {
- sort -u "$@" | sed '/^!/ {
- H
- d
- }
- $ {
- P
- x
- s/^\n//
- }' | sed '/^$/d'
+# Strip blank and comment lines to leave significant entries.
+gitignore_entries() {
+ sed '/^#/d; /^$/d' "$@"
}
-# If $STR is not already on a line by itself in $FILE, insert it,
-# sorting the new contents of the file and replacing $FILE with the result.
-insert_sorted_if_absent() {
+# If $STR is not already on a line by itself in $FILE, insert it at the start.
+# Entries are inserted at the start of the ignore list to ensure existing
+# entries starting with ! are not overridden. Such entries support
+# whitelisting exceptions after a more generic blacklist pattern.
+insert_if_absent() {
file=$1
str=$2
test -f $file || touch $file
- echo "$str" | sort_patterns - $file | cmp -s - $file > /dev/null \
- || { echo "$str" | sort_patterns - $file > $file.bak \
- && mv $file.bak $file; } \
- || die "insert_sorted_if_absent $file $str: failed"
+ test -r $file || die "Error: failed to read ignore file: $file"
+ duplicate_entries=$(gitignore_entries $file | sort | uniq -d)
+ if [ "$duplicate_entries" ] ; then
+ die "Error: Duplicate entries in $file: " $duplicate_entries
+ fi
+ linesold=$(gitignore_entries $file | wc -l)
+ linesnew=$(echo "$str" | gitignore_entries - $file | sort -u | wc -l)
+ if [ $linesold != $linesnew ] ; then
+ { echo "$str" | cat - $file > $file.bak && mv $file.bak $file; } \
+ || die "insert_if_absent $file $str: failed"
+ fi
}
# Adjust $PATTERN for $VC_IGNORE_FILE and insert it with
-# insert_sorted_if_absent.
+# insert_if_absent.
insert_vc_ignore() {
vc_ignore_file="$1"
pattern="$2"
@@ -344,7 +345,7 @@ insert_vc_ignore() {
# .gitignore entry.
pattern=$(echo "$pattern" | sed s,^,/,);;
esac
- insert_sorted_if_absent "$vc_ignore_file" "$pattern"
+ insert_if_absent "$vc_ignore_file" "$pattern"
}
# Die if there is no AC_CONFIG_AUX_DIR($build_aux) line in configure.ac.
@@ -550,7 +551,7 @@ fi
echo "$0: Bootstrapping from checked-out $package sources..."
# See if we can use gnulib's git-merge-changelog merge driver.
-if test -d .git && (git --version) >/dev/null 2>/dev/null ; then
+if $use_git && test -d .git && (git --version) >/dev/null 2>/dev/null ; then
if git config merge.merge-changelog.driver >/dev/null ; then
:
elif (git-merge-changelog --version) >/dev/null 2>/dev/null ; then
@@ -573,13 +574,17 @@ git_modules_config () {
test -f .gitmodules && git config --file .gitmodules "$@"
}
-gnulib_path=$(git_modules_config submodule.gnulib.path)
-test -z "$gnulib_path" && gnulib_path=gnulib
+if $use_git; then
+ gnulib_path=$(git_modules_config submodule.gnulib.path)
+ test -z "$gnulib_path" && gnulib_path=gnulib
+fi
-# Get gnulib files.
+# Get gnulib files. Populate $GNULIB_SRCDIR, possibly updating a
+# submodule, for use in the rest of the script.
case ${GNULIB_SRCDIR--} in
-)
+ # Note that $use_git is necessarily true in this case.
if git_modules_config submodule.gnulib.url >/dev/null; then
echo "$0: getting gnulib files..."
git submodule init || exit $?
@@ -600,8 +605,8 @@ case ${GNULIB_SRCDIR--} in
GNULIB_SRCDIR=$gnulib_path
;;
*)
- # Use GNULIB_SRCDIR as a reference.
- if test -d "$GNULIB_SRCDIR"/.git && \
+ # Use GNULIB_SRCDIR directly or as a reference.
+ if $use_git && test -d "$GNULIB_SRCDIR"/.git && \
git_modules_config submodule.gnulib.url >/dev/null; then
echo "$0: getting gnulib files..."
if git submodule -h|grep -- --reference > /dev/null; then
@@ -627,12 +632,19 @@ case ${GNULIB_SRCDIR--} in
;;
esac
+# $GNULIB_SRCDIR now points to the version of gnulib to use, and
+# we no longer need to use git or $gnulib_path below here.
+
if $bootstrap_sync; then
cmp -s "$0" "$GNULIB_SRCDIR/build-aux/bootstrap" || {
echo "$0: updating bootstrap and restarting..."
+ case $(sh -c 'echo "$1"' -- a) in
+ a) ignored=--;;
+ *) ignored=ignored;;
+ esac
exec sh -c \
'cp "$1" "$2" && shift && exec "${CONFIG_SHELL-/bin/sh}" "$@"' \
- -- "$GNULIB_SRCDIR/build-aux/bootstrap" \
+ $ignored "$GNULIB_SRCDIR/build-aux/bootstrap" \
"$0" "$@" --no-bootstrap-sync
}
fi
@@ -889,20 +901,21 @@ find "$m4_base" "$source_base" \
-depth \( -name '*.m4' -o -name '*.[ch]' \) \
-type l -xtype l -delete > /dev/null 2>&1
+# Invoke autoreconf with --force --install to ensure upgrades of tools
+# such as ylwrap.
+AUTORECONFFLAGS="--verbose --install --force -I $m4_base $ACLOCAL_FLAGS"
+
# Some systems (RHEL 5) are using ancient autotools, for which the
# --no-recursive option had not been invented. Detect that lack and
# omit the option when it's not supported. FIXME in 2017: remove this
# hack when RHEL 5 autotools are updated, or when they become irrelevant.
-no_recursive=
case $($AUTORECONF --help) in
- *--no-recursive*) no_recursive=--no-recursive;;
+ *--no-recursive*) AUTORECONFFLAGS="$AUTORECONFFLAGS --no-recursive";;
esac
# Tell autoreconf not to invoke autopoint or libtoolize; they were run above.
-echo "running: AUTOPOINT=true LIBTOOLIZE=true " \
- "$AUTORECONF --verbose --install $no_recursive -I $m4_base $ACLOCAL_FLAGS"
-AUTOPOINT=true LIBTOOLIZE=true \
- $AUTORECONF --verbose --install $no_recursive -I $m4_base $ACLOCAL_FLAGS \
+echo "running: AUTOPOINT=true LIBTOOLIZE=true $AUTORECONF $AUTORECONFFLAGS"
+AUTOPOINT=true LIBTOOLIZE=true $AUTORECONF $AUTORECONFFLAGS \
|| die "autoreconf failed"
# Get some extra files from gnulib, overriding existing files.
diff --git a/bootstrap.conf b/bootstrap.conf
index 1fb757b..ff61fd6 100644
--- a/bootstrap.conf
+++ b/bootstrap.conf
@@ -98,16 +98,16 @@ [email protected]
# Additional xgettext options to use. Use "\\\newline" to break lines.
XGETTEXT_OPTIONS=$XGETTEXT_OPTIONS'\\\
- --from-code=UTF-8\\\
- --flag=asprintf:2:c-format --flag=vasprintf:2:c-format\\\
- --flag=asnprintf:3:c-format --flag=vasnprintf:3:c-format\\\
+ --flag=asnprintf:3:c-format\\\
+ --flag=asprintf:2:c-format\\\
+ --flag=error:3:c-format\\\
+ --flag=error_at_line:5:c-format\\\
+ --flag=vasnprintf:3:c-format\\\
+ --flag=vasprintf:2:c-format\\\
--flag=wrapf:1:c-format\\\
- --flag=error:3:c-format --flag=error_at_line:5:c-format\\\
+ --from-code=UTF-8\\\
'
-# Automake requires that ChangeLog exist.
-test -f ChangeLog || touch ChangeLog || exit 1
-
gnulib_tool_option_extras="--tests-base=gnulib-tests --with-tests --symlink\
--makefile-name=gnulib.mk
$avoided_gnulib_modules
@@ -126,6 +126,12 @@ rsync -
tar -
"
+bootstrap_post_import_hook ()
+{
+ # Automake requires that ChangeLog exist.
+ touch ChangeLog || return 1
+}
+
bootstrap_epilogue()
{
perl -pi -e "s/\@PACKAGE\@/$package/g" README-release
@@ -138,6 +144,6 @@ bootstrap_epilogue()
# Why? That pipeline searches all files in $(top_srcdir), and if you
# happen to have large files (or apparently large sparse files), the
# first grep may well run out of memory.
- perl -pi -e 's/ LC_ALL=C grep .GNU .PACKAGE.*; then/ true; then/' \
+ perl -pi -e 's/if LC_ALL=C grep .GNU .PACKAGE.*; then/if true; then/' \
po/Makefile.in.in
}
diff --git a/gl/lib/regex_internal.h.diff b/gl/lib/regex_internal.h.diff
index d1506a6..f410882 100644
--- a/gl/lib/regex_internal.h.diff
+++ b/gl/lib/regex_internal.h.diff
@@ -1,14 +1,14 @@
-diff --git i/lib/regex_internal.h w/lib/regex_internal.h
-index 859832f..3c7fe06 100644
---- i/lib/regex_internal.h
-+++ w/lib/regex_internal.h
-@@ -826,7 +826,8 @@ re_string_wchar_at (const re_string_t *pstr, Idx idx)
-
+diff --git a/lib/regex_internal.h b/lib/regex_internal.h
+index 439444c..7242084 100644
+--- a/lib/regex_internal.h
++++ b/lib/regex_internal.h
+@@ -827,7 +827,8 @@ re_string_wchar_at (const re_string_t *pstr, Idx idx)
+ # ifndef NOT_IN_libc
static int
- internal_function __attribute ((pure))
+ internal_function __attribute__ ((pure, unused))
-re_string_elem_size_at (const re_string_t *pstr, Idx idx)
+re_string_elem_size_at (const re_string_t *pstr _UNUSED_PARAMETER_,
+ Idx idx _UNUSED_PARAMETER_)
{
- # ifdef _LIBC
+ # ifdef _LIBC
const unsigned char *p, *extra;
diff --git a/gnulib b/gnulib
index 2542b2e..c1118d1 160000
--- a/gnulib
+++ b/gnulib
@@ -1 +1 @@
-Subproject commit 2542b2eebd19665f5223548fe7f789a4d37c851e
+Subproject commit c1118d1ccfa785a0f3bbfc7316bde06c938ade8b
--
1.8.4.rc0.11.g35f5eaa