changeset 1039:f2a1e7f88c53

Fix the issue with Spp.java and allow multiple ECJ patches. 2008-09-12 Andrew John Hughes <gnu_andrew@member.fsf.org> * Makefile.am: Turn ICEDTEA_ECJ_PATCH into ICEDTEA_ECJ_PATCHES and add an equivalent rule to that for PATCHES and FSG_PATCHES. * patches/icedtea-ecj-spp.patch: New patch to fix the use of java.util.Scanner and avoid the use of reset() in Spp.java.
author andrew
date Fri, 12 Sep 2008 23:30:45 +0100
parents a26c5e78d8f4
children c46e727121a8
files ChangeLog Makefile.am patches/icedtea-ecj-spp.patch
diffstat 3 files changed, 118 insertions(+), 16 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Fri Sep 12 23:25:49 2008 +0200
+++ b/ChangeLog	Fri Sep 12 23:30:45 2008 +0100
@@ -1,3 +1,13 @@
+2008-09-12  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+
+	* Makefile.am:
+	Turn ICEDTEA_ECJ_PATCH into
+	ICEDTEA_ECJ_PATCHES and add an equivalent
+	rule to that for PATCHES and FSG_PATCHES.
+	* patches/icedtea-ecj-spp.patch:
+	New patch to fix the use of java.util.Scanner
+	and avoid the use of reset() in Spp.java.
+
 2008-09-12  Matthias Klose  <doko@ubuntu.com>
 
 	* fsg.sh: Update for b12 code drop.
--- a/Makefile.am	Fri Sep 12 23:25:49 2008 +0200
+++ b/Makefile.am	Fri Sep 12 23:30:45 2008 +0100
@@ -694,29 +694,56 @@
 	touch stamps/ports-ecj.stamp
 
 # Patch OpenJDK for plug replacements and ecj.
-ICEDTEA_ECJ_PATCH = $(srcdir)/patches/icedtea-ecj.patch
+ICEDTEA_ECJ_PATCHES = patches/icedtea-ecj.patch \
+	patches/icedtea-ecj-spp.patch
 
 stamps/patch-ecj.stamp: stamps/extract-ecj.stamp
-	echo Checking $(ICEDTEA_ECJ_PATCH) ; \
-	if $(PATCH) -p0 -l --dry-run -s -t -f < $(ICEDTEA_ECJ_PATCH) ; \
-	then \
-	  echo Applying $(ICEDTEA_ECJ_PATCH) ; \
-	  $(PATCH) -p0 -l < $(ICEDTEA_ECJ_PATCH) ; \
-	  mkdir -p stamps; \
-	  touch stamps/patch-ecj.stamp; \
-	else \
+	mkdir -p stamps; \
+	rm -f stamps/patch-ecj.stamp.tmp ; \
+	touch stamps/patch-ecj.stamp.tmp ; \
+	all_patches_ok=yes; \
+	for p in $(ICEDTEA_ECJ_PATCHES) ; \
+	do \
+	  if test x$${all_patches_ok} = "xyes" \
+	    && echo Checking $$p \
+	    && $(PATCH) -l -p0 --dry-run -s -t -f \
+	      -F 0 < $(abs_top_srcdir)/$$p ; \
+	  then \
+	    echo Applying $$p ; \
+	    $(PATCH) -l -p0 < $(abs_top_srcdir)/$$p ; \
+	    if ! grep "^\* $$(basename $$p)" $(abs_top_srcdir)/HACKING \
+	      >> stamps/patch-ecj.stamp.tmp ; \
+	    then \
+	      echo "* $$(basename $$p): UNDOCUMENTED" \
+	        >> stamps/patch-ecj.stamp.tmp ; \
+	    fi ; \
+	  else \
+	    test x$${all_patches_ok} = "xyes" && all_patches_ok=$$p ; \
+	  fi ; \
+	done ; \
+	mv stamps/patch-ecj.stamp.tmp stamps/patch-ecj.stamp ; \
+	if ! test x$${all_patches_ok} = "xyes"; then \
+	  echo ERROR patch $${all_patches_ok} FAILED! ; \
+	  echo WARNING make clean-patch before retrying a fix ; \
 	  false; \
 	fi
 
 clean-patch-ecj:
 	rm -f stamps/patch-ecj.stamp
-	echo Checking $(ICEDTEA_ECJ_PATCH) ; \
-	if $(PATCH) -l -p0 -R --dry-run -s -t -f < $(ICEDTEA_ECJ_PATCH) ; \
-	then \
-	  echo Reverting $(ICEDTEA_ECJ_PATCH) ; \
-	  $(PATCH) -p0 -l -R < $(ICEDTEA_ECJ_PATCH) ; \
-	else \
-	  false; \
+	all_patches_ok=yes; \
+	for p in $(ICEDTEA_ECJ_PATCHES) ; \
+	do \
+	  echo Checking $$p ; \
+	  if $(PATCH) -l -p0 -R --dry-run -s -t -f < $(abs_top_srcdir)/$$p ; \
+	  then \
+	    echo Reverting $$p ; \
+	    $(PATCH) -l -p0 -R < $(abs_top_srcdir)/$$p ; \
+	  else \
+	    all_patches_ok=no ; \
+	  fi ; \
+	done ; \
+	if ! test x$${all_patches_ok} = "xyes" ; then \
+	  echo "WARNING Not all patches reverted cleanly" ; \
 	fi
 
 # Bootstrap Directory Targets
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/patches/icedtea-ecj-spp.patch	Fri Sep 12 23:30:45 2008 +0100
@@ -0,0 +1,65 @@
+diff -Nru openjdk-ecj.orig/jdk/make/tools/src/build/tools/spp/Spp.java openjdk-ecj/jdk/make/tools/src/build/tools/spp/Spp.java
+--- openjdk-ecj.orig/jdk/make/tools/src/build/tools/spp/Spp.java	2008-09-11 08:44:09.000000000 +0100
++++ openjdk-ecj/jdk/make/tools/src/build/tools/spp/Spp.java	2008-09-12 21:34:38.000000000 +0100
+@@ -25,6 +25,10 @@
+ 
+ package build.tools.spp;
+ 
++import java.io.BufferedReader;
++import java.io.InputStreamReader;
++import java.io.IOException;
++
+ import java.util.*;
+ import java.util.regex.*;
+ 
+@@ -83,7 +87,7 @@
+         }
+ 
+         StringBuffer out = new StringBuffer();
+-        new Spp().spp(new Scanner(System.in),
++        new Spp().spp(new BufferedReader(new InputStreamReader(System.in)),
+                       out, "",
+                       keys, vars, be,
+                       false);
+@@ -104,12 +108,12 @@
+     Matcher ifkey = Pattern.compile("^#if\\[(!)?" + KEY + "\\]").matcher("");
+     Matcher elsekey = Pattern.compile("^#else\\[(!)?" + KEY + "\\]").matcher("");
+     Matcher endkey = Pattern.compile("^#end\\[(!)?" + KEY + "\\]").matcher("");
+-    Matcher  vardef = Pattern.compile("\\{#if\\[(!)?" + KEY + "\\]\\?" + TEXT + "(:"+ TEXT + ")?\\}|\\$" + VAR + "\\$").matcher("");
++    Pattern  pvardef = Pattern.compile("\\{#if\\[(!)?" + KEY + "\\]\\?" + TEXT + "(:"+ TEXT + ")?\\}|\\$" + VAR + "\\$");
+     Matcher  vardef2 = Pattern.compile("\\$" + VAR + "\\$").matcher("");
+ 
+     void append(StringBuffer buf, String ln,
+                 Set<String> keys, Map<String, String> vars) {
+-        vardef.reset(ln);
++        Matcher vardef = pvardef.matcher(ln);
+         while (vardef.find()) {
+             String repl = "";
+             if (vardef.group(GN_VAR) != null)
+@@ -133,19 +137,20 @@
+     }
+ 
+     // return true if #end[key], #end or EOF reached
+-    boolean spp(Scanner in, StringBuffer buf, String key,
++    boolean spp(BufferedReader in, StringBuffer buf, String key,
+                 Set<String> keys, Map<String, String> vars,
+-                boolean be, boolean skip) {
+-        while (in.hasNextLine()) {
+-            String ln = in.nextLine();
++                boolean be, boolean skip) throws IOException {
++        while (true) {
++	    String ln = in.readLine();
++	    if (ln == null)
++	      break;
+             if (be) {
+                 if (ln.startsWith("#begin")) {
+                     buf.setLength(0);      //clean up to this line
+                     continue;
+                 }
+                 if (ln.equals("#end")) {
+-                    while (in.hasNextLine())
+-                        in.nextLine();
++		    do { } while (in.readLine() != null);
+                     return true;           //discard the rest to EOF
+                 }
+             }