From efacd7487e49150be15d7d4dbe1f3bd3dcbe3005 Mon Sep 17 00:00:00 2001 From: Ralf Wildenhues Date: Thu, 17 Apr 2008 22:30:18 +0000 Subject: gen-classlist.sh.in: Avoid grepping each omission... libjava/classpath/ * 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. * configure: Regenerate. From-SVN: r134414 --- libjava/classpath/lib/gen-classlist.sh.in | 48 ++++++++++++++++++++++--------- 1 file changed, 35 insertions(+), 13 deletions(-) (limited to 'libjava/classpath/lib') diff --git a/libjava/classpath/lib/gen-classlist.sh.in b/libjava/classpath/lib/gen-classlist.sh.in index 1c70411..1768c15 100755 --- a/libjava/classpath/lib/gen-classlist.sh.in +++ b/libjava/classpath/lib/gen-classlist.sh.in @@ -82,26 +82,48 @@ 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.awk +sed "$sed_omit_main_loop" >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 +cat $vm_omitlist | sed "$sed_omit_hash" > tmp.awk +cat $vm_omitlist | sed "$sed_omit_main_loop" >> tmp.awk +@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 -- cgit v1.1