diff options
author | Andrew John Hughes <gnu_andrew@member.fsf.org> | 2008-06-02 01:37:27 +0000 |
---|---|---|
committer | Andrew John Hughes <gnu_andrew@member.fsf.org> | 2008-06-02 01:37:27 +0000 |
commit | 1099f184c14b0f15a777b8a44fbde9d1bf331521 (patch) | |
tree | adea044eccfa18e6fd741dd1ba210a198bffec05 | |
parent | 5e8b1cd07833bf83cd8624b4084ac25cf26d2261 (diff) | |
download | classpath-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-- | ChangeLog | 12 | ||||
-rw-r--r-- | configure.ac | 2 | ||||
-rwxr-xr-x | lib/gen-classlist.sh.in | 50 |
3 files changed, 50 insertions, 14 deletions
@@ -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 |