summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew John Hughes <gnu_andrew@member.fsf.org>2008-06-02 01:37:27 +0000
committerAndrew John Hughes <gnu_andrew@member.fsf.org>2008-06-02 01:37:27 +0000
commit1099f184c14b0f15a777b8a44fbde9d1bf331521 (patch)
treeadea044eccfa18e6fd741dd1ba210a198bffec05
parent5e8b1cd07833bf83cd8624b4084ac25cf26d2261 (diff)
downloadclasspath-1099f184c14b0f15a777b8a44fbde9d1bf331521.tar.gz
Backport list generation fix.
2008-04-18 Tom Tromey <tromey@redhat.com> * lib/gen-classlist.sh.in: Skip 'sed' steps if no vm_omitlist found. 2008-04-17 Ralf Wildenhues <Ralf.Wildenhues@gmx.de> * lib/gen-classlist.sh.in: Avoid grepping each omission, by building an awk script with a hash for literal files, and awk regular expressions for the rest. * configure.ac: Call AC_PROG_AWK.
-rw-r--r--ChangeLog12
-rw-r--r--configure.ac2
-rwxr-xr-xlib/gen-classlist.sh.in50
3 files changed, 50 insertions, 14 deletions
diff --git a/ChangeLog b/ChangeLog
index 92a316280..0628a8262 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+2008-04-18 Tom Tromey <tromey@redhat.com>
+
+ * lib/gen-classlist.sh.in: Skip 'sed' steps if no vm_omitlist
+ found.
+
+2008-04-17 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/gen-classlist.sh.in: Avoid grepping each omission, by
+ building an awk script with a hash for literal files, and
+ awk regular expressions for the rest.
+ * configure.ac: Call AC_PROG_AWK.
+
2008-03-27 Mario Torre <neugens@aicas.com>
* gnu/xml/stream/SAXParser.java (getProperty): throw
diff --git a/configure.ac b/configure.ac
index 34f0757b9..391e4c486 100644
--- a/configure.ac
+++ b/configure.ac
@@ -332,7 +332,7 @@ AC_PROG_CXX
dnl Initialize libtool
AC_DISABLE_STATIC
AC_PROG_LIBTOOL
-dnl AC_PROG_AWK
+AC_PROG_AWK
AC_PROG_CC
AM_PROG_CC_C_O
AC_PROG_CPP
diff --git a/lib/gen-classlist.sh.in b/lib/gen-classlist.sh.in
index ba540cfcc..fe5a5f882 100755
--- a/lib/gen-classlist.sh.in
+++ b/lib/gen-classlist.sh.in
@@ -82,26 +82,50 @@ for dir in $vm_dirlist; do
fi
done
-# FIXME: could be more efficient by constructing a series of greps.
-for filexp in `cat tmp.omit`; do
- grep -v ${filexp} < ${top_builddir}/lib/classes.1 > ${top_builddir}/lib/classes.tmp
- mv ${top_builddir}/lib/classes.tmp ${top_builddir}/lib/classes.1
-done
+# Mangle the omit expressions into a script suitable for old awk.
+# Exploit the fact that many omissions are not regular expressions:
+# assume a single file is listed if it does not contain '*', '$',
+# and ends in '.java'.
+sed_omit_hash='
+1i\
+ BEGIN {\
+ omit[""] = 1
+$a\
+ }
+/[*$]/d
+/\.java$/!d
+s|^| omit["|
+s|$|"] = 1|'
+sed_omit_main_loop='
+1i\
+ {\
+ if (omit[$3]) next
+$a\
+ print\
+ }
+/^[^*$]*\.java$/d
+s|/|\\/|g
+s|^| if ($3 ~ /|
+s|$|/) next|'
+sed "$sed_omit_hash" <tmp.omit >tmp.awk
+sed "$sed_omit_main_loop" <tmp.omit >>tmp.awk
+@AWK@ -f tmp.awk < ${top_builddir}/lib/classes.1 > ${top_builddir}/lib/classes.tmp
+mv ${top_builddir}/lib/classes.tmp ${top_builddir}/lib/classes.1
+vm_omitlist=
for dir in $vm_dirlist; do
if test -f $dir/$1.omit; then
- for filexp in `cat $dir/$1.omit`; do
- grep -v $filexp < vm.add > vm.add.1
- mv vm.add.1 vm.add
- done
+ vm_omitlist="$vm_omitlist $dir/$1.omit"
fi
done
-cat vm.add >> classes.1
+if test -n "$vm_omitlist"; then
+ cat $vm_omitlist | sed "$sed_omit_hash" > tmp.awk
+ cat $vm_omitlist | sed "$sed_omit_main_loop" >> tmp.awk
+fi
+@AWK@ -f tmp.awk < vm.add >>${top_builddir}/lib/classes.1
-rm vm.omit
-rm vm.add
-rm tmp.omit
+rm -f vm.omit vm.add tmp.omit tmp.awk
new=
if test -f ${top_builddir}/lib/classes.2; then