From a7586e45a2b89ab8ce66ac00a54c0223f08f6804 Mon Sep 17 00:00:00 2001 From: Erkka Kääriä Date: Thu, 10 Dec 2015 10:45:45 +0200 Subject: gnumail: Fix race condition in makefile MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Parallel make does not handle multiple javac invocations correctly, as javac compiles any uncompiled dependencies on its own. This leads to a race condition where make may see incomplete class files and incorrectly assume that the class files has already been compiled. This ultimately causes incomplete class files to be included in one of the jars, causing build failures later one when javac attempts to use such class file. This issue is fixed by patching the makefile so that only one instance of javac is invoked, which compiles all the java files in one go. Signed-off-by: Erkka Kääriä Signed-off-by: Maxin B. John --- .../fix_makefile_race_condition.patch | 129 +++++++++++++++++++++ recipes-core/classpathx/gnumail_1.1.2.bb | 1 + 2 files changed, 130 insertions(+) create mode 100644 recipes-core/classpathx/gnumail-1.1.2/fix_makefile_race_condition.patch diff --git a/recipes-core/classpathx/gnumail-1.1.2/fix_makefile_race_condition.patch b/recipes-core/classpathx/gnumail-1.1.2/fix_makefile_race_condition.patch new file mode 100644 index 0000000..7f847e8 --- /dev/null +++ b/recipes-core/classpathx/gnumail-1.1.2/fix_makefile_race_condition.patch @@ -0,0 +1,129 @@ +From 81a63484820c3f8ac2808c74957a62b773f7f342 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Erkka=20K=C3=A4=C3=A4ri=C3=A4?= +Date: Fri, 11 Dec 2015 14:24:23 +0200 +Subject: [PATCH] gnumail: Fix race condition in makefile +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Parallel make does not handle multiple javac invocations correctly, as javac +compiles any uncompiled dependencies on its own. This leads to a race condition +where make may see incomplete class files and incorrectly assume that the class +file has already been compiled. This ultimately causes incomplete class files +to be included in one of the jars, causing build failures later on when javac +attempts to use such class file. + +This issue is fixed by patching the makefile in such way that only one instance +of javac is invoked, which compiles all the java files in one go. + +Upstream-Status: Inappropriate [dead project] + +Signed-off-by: Erkka Kääriä +--- + Makefile.am | 70 +++++++++---------------------------------------------------- + 1 file changed, 10 insertions(+), 60 deletions(-) + +diff --git a/Makefile.am b/Makefile.am +index 8116b55..5c78dbc 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -295,18 +295,6 @@ classpath = $(src):$(activation_jar):$(inetlib_jar):$(jsse_jar) + # Targets + BUILT_SOURCES = $(gnumail_jar) $(providers_jar) + +-#£EXTRA_DIST = jarcompiler $(API_JAVASRC) $(GNU_SRC) $(MAIL_META) +- +-gnumail_classes = $(patsubst $(src)/%.java, $(dst)/%.class, $(gnumail_sources)) +-util_classes = $(patsubst $(src)/%.java, $(dst)/%.class, $(util_sources)) +-provider_classes = $(patsubst $(src)/%.java, $(dst)/%.class, $(provider_sources)) +-smtp_classes = $(patsubst $(src)/%.java, $(dst)/%.class, $(smtp_sources)) +-imap_classes = $(patsubst $(src)/%.java, $(dst)/%.class, $(imap_sources)) +-pop3_classes = $(patsubst $(src)/%.java, $(dst)/%.class, $(pop3_sources)) +-nntp_classes = $(patsubst $(src)/%.java, $(dst)/%.class, $(nntp_sources)) +-mbox_classes = $(patsubst $(src)/%.java, $(dst)/%.class, $(mbox_sources)) +-maildir_classes = $(patsubst $(src)/%.java, $(dst)/%.class, $(maildir_sources)) +- + META-INF: + mkdir -p META-INF + +@@ -361,16 +349,14 @@ $(dst): + + # Jars + +-$(gnumail_jar): $(dst) $(gnumail_meta) $(gnumail_classes) $(util_classes) ++$(gnumail_jar): $(dst) $(gnumail_meta) build_sources + $(JAR) cfm $(gnumail_jar) $(manifest_mf) \ + $(gnumail_meta) \ + -C $(dst) javax \ + -C $(dst) gnu/mail/handler \ + -C $(dst) gnu/mail/util + +-$(providers_jar): $(dst) $(providers_meta) $(provider_classes) $(smtp_classes) \ +- $(imap_classes) $(pop3_classes) $(nntp_classes) $(mbox_classes) \ +- $(maildir_classes) ++$(providers_jar): $(dst) $(providers_meta) build_sources + $(JAR) cfm $(providers_jar) $(manifest_mf) \ + $(providers_meta) \ + -C $(dst) gnu/mail/providers \ +@@ -378,50 +364,14 @@ $(providers_jar): $(dst) $(providers_meta) $(provider_classes) $(smtp_classes) \ + + # Compilation + +-#gnumail: util $(gnumail_classes) +- +-$(gnumail_classes): $(dst)/%.class: $(src)/%.java +- $(JAVAC) $(JAVACFLAGS) -classpath $(classpath) -d $(dst) $< +- +-#util: $(util_classes) +- +-$(util_classes): $(dst)/%.class: $(src)/%.java +- $(JAVAC) $(JAVACFLAGS) -classpath $(classpath) -d $(dst) $< +- +-#provider_util: $(gnumail_jar) $(provider_classes) +- +-$(provider_classes): $(dst)/%.class: $(src)/%.java +- $(JAVAC) $(JAVACFLAGS) -classpath $(classpath) -d $(dst) $< +- +-#smtp: provider_util $(smtp_classes) +- +-$(smtp_classes): $(dst)/%.class: $(src)/%.java +- $(JAVAC) $(JAVACFLAGS) -classpath $(classpath) -d $(dst) $< +- +-#imap: provider_util $(imap_classes) +- +-$(imap_classes): $(dst)/%.class: $(src)/%.java +- $(JAVAC) $(JAVACFLAGS) -classpath $(classpath) -d $(dst) $< +- +-#pop3: provider_util $(pop3_classes) +- +-$(pop3_classes): $(dst)/%.class: $(src)/%.java +- $(JAVAC) $(JAVACFLAGS) -classpath $(classpath) -d $(dst) $< +- +-#nntp: provider_util $(nntp_classes) +- +-$(nntp_classes): $(dst)/%.class: $(src)/%.java +- $(JAVAC) $(JAVACFLAGS) -classpath $(classpath) -d $(dst) $< +- +-#mbox: provider_util $(mbox_classes) +- +-$(mbox_classes): $(dst)/%.class: $(src)/%.java +- $(JAVAC) $(JAVACFLAGS) -classpath $(classpath) -d $(dst) $< +- +-#maildir: provider_util $(maildir_classes) +- +-$(maildir_classes): $(dst)/%.class: $(src)/%.java +- $(JAVAC) $(JAVACFLAGS) -classpath $(classpath) -d $(dst) $< ++build_sources: $(gnumail_sources) $(util_sources) $(provider_sources) \ ++ $(smtp_sources) $(imap_sources) $(pop3_sources) $(nntp_sources) \ ++ $(mbox_sources) $(maildir_sources) ++ $(JAVAC) $(JAVACFLAGS) -classpath $(classpath) -d $(dst) \ ++ $(gnumail_sources) $(util_sources) $(provider_sources) \ ++ $(smtp_sources) $(imap_sources) $(pop3_sources) \ ++ $(nntp_sources) $(mbox_sources) $(maildir_sources) ++ touch build_sources + + # Javadoc + javadoc: +-- +2.1.4 + diff --git a/recipes-core/classpathx/gnumail_1.1.2.bb b/recipes-core/classpathx/gnumail_1.1.2.bb index 41417c0..b498c2b 100644 --- a/recipes-core/classpathx/gnumail_1.1.2.bb +++ b/recipes-core/classpathx/gnumail_1.1.2.bb @@ -6,6 +6,7 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=14bc6ee8b2e2b409be599212867d126e" SRC_URI = "http://ftp.gnu.org/gnu/classpathx/mail-${PV}.tar.gz \ file://datadir_java.patch \ + file://fix_makefile_race_condition.patch \ " inherit java-library java-bootstrap-components autotools -- cgit v1.2.3-54-g00ecf