GNU bug report logs - #8434
java: cannot use JAVA with both dist_ and nodist_ prefixes

Previous Next

Package: automake;

Reported by: Stefano Lattarini <stefano.lattarini <at> gmail.com>

Date: Wed, 6 Apr 2011 19:07:02 UTC

Severity: normal

Tags: patch

Done: Stefano Lattarini <stefano.lattarini <at> gmail.com>

Bug is archived. No further changes may be made.

To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 8434 in the body.
You can then email your comments to 8434 AT debbugs.gnu.org in the normal way.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to owner <at> debbugs.gnu.org, bug-automake <at> gnu.org:
bug#8434; Package automake. (Wed, 06 Apr 2011 19:07:02 GMT) Full text and rfc822 format available.

Acknowledgement sent to Stefano Lattarini <stefano.lattarini <at> gmail.com>:
New bug report received and forwarded. Copy sent to bug-automake <at> gnu.org. (Wed, 06 Apr 2011 19:07:02 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Stefano Lattarini <stefano.lattarini <at> gmail.com>
To: bug-automake <at> gnu.org
Subject: java: cannot use JAVA with both dist_ and nodist_ prefixes
Date: Wed, 6 Apr 2011 21:00:32 +0200
[Message part 1 (text/plain, inline)]
Hello autoconfers.

Currently, limitations in the Automake support for java enforce the
restriction that only one `_JAVA' primary can be used in a given
Makefile.am.

Unfortunately, this (quite acceptable) limitation has the side effect
that one cannot have both distributed and not distributed *.java files
in a the same Makefile.am:

 $ cat Makefile.am
 dist_java_JAVA = a.java
 nodist_java_JAVA = b.java
 $ automake -a
 /usr/share/automake-1.11/am/java.am: JAVAC multiply defined in condition TRUE ...
 Makefile.am:2:   while processing `nodist_java_JAVA'
 /usr/share/automake-1.11/am/java.am: ... `JAVAC' previously defined here
 Makefile.am:1:   while processing `dist_java_JAVA'
 /usr/share/automake-1.11/am/java.am: CLASSPATH_ENV multiply defined in condition TRUE ...
 Makefile.am:2:   while processing `nodist_java_JAVA'
 /usr/share/automake-1.11/am/java.am: ... `CLASSPATH_ENV' previously defined here
 Makefile.am:1:   while processing `dist_java_JAVA'
 /usr/share/automake-1.11/am/java.am: JAVAROOT multiply defined in condition TRUE ...
 Makefile.am:2:   while processing `nodist_java_JAVA'
 /usr/share/automake-1.11/am/java.am: ... `JAVAROOT' previously defined here
 Makefile.am:1:   while processing `dist_java_JAVA'
 Makefile.am:2: multiple _JAVA primaries in use

See also the attached testcase (for maint, v1.11-329-gd4df619).

This bug is particularly annoying because *.java files listed with
the `JAVA' primary are not included by default in the distribution.

Ganted, one can always use EXTRA_DIST to work around this issue,
but it would be nice if things Just Worked.

Regards,
  Stefano
[java-mix-dist-nodist.test (application/x-shellscript, inline)]

Information forwarded to owner <at> debbugs.gnu.org, bug-automake <at> gnu.org:
bug#8434; Package automake. (Sat, 09 Apr 2011 10:54:02 GMT) Full text and rfc822 format available.

Message #8 received at 8434 <at> debbugs.gnu.org (full text, mbox):

From: Ralf Wildenhues <Ralf.Wildenhues <at> gmx.de>
To: Stefano Lattarini <stefano.lattarini <at> gmail.com>
Cc: 8434 <at> debbugs.gnu.org
Subject: Re: bug#8434: java: cannot use JAVA with both dist_ and nodist_
	prefixes
Date: Sat, 9 Apr 2011 12:53:04 +0200
Hi Stefano,

* Stefano Lattarini wrote on Wed, Apr 06, 2011 at 09:00:32PM CEST:
> Currently, limitations in the Automake support for java enforce the
> restriction that only one `_JAVA' primary can be used in a given
> Makefile.am.

> This bug is particularly annoying because *.java files listed with
> the `JAVA' primary are not included by default in the distribution.
> 
> Ganted, one can always use EXTRA_DIST to work around this issue,
> but it would be nice if things Just Worked.

Agreed on all accounts.  Do you see a way to fix this, for arbitrary
dependency structure between the java classes?

Thanks for the bug report,
Ralf




Information forwarded to owner <at> debbugs.gnu.org, bug-automake <at> gnu.org:
bug#8434; Package automake. (Mon, 18 Apr 2011 19:37:02 GMT) Full text and rfc822 format available.

Message #11 received at 8434 <at> debbugs.gnu.org (full text, mbox):

From: Stefano Lattarini <stefano.lattarini <at> gmail.com>
To: Ralf Wildenhues <Ralf.Wildenhues <at> gmx.de>
Cc: automake-patches <at> gnu.org, 8434 <at> debbugs.gnu.org
Subject: [PATCH] java: allow both dist_JAVA and nodist_JAVA in the same
	Makefile.am (was: Re: bug#8434: java: cannot use JAVA with both
	dist_ and nodist_ prefixes)
Date: Mon, 18 Apr 2011 21:35:52 +0200
[Message part 1 (text/plain, inline)]
On Saturday 09 April 2011, Ralf Wildenhues wrote:
> Hi Stefano,
> 
> * Stefano Lattarini wrote on Wed, Apr 06, 2011 at 09:00:32PM CEST:
> > Currently, limitations in the Automake support for java enforce the
> > restriction that only one `_JAVA' primary can be used in a given
> > Makefile.am.
> 
> > This bug is particularly annoying because *.java files listed with
> > the `JAVA' primary are not included by default in the distribution.
> > 
> > Ganted, one can always use EXTRA_DIST to work around this issue,
> > but it would be nice if things Just Worked.
> 
> Agreed on all accounts.  Do you see a way to fix this, for arbitrary
> dependency structure between the java classes?
> 
> Thanks for the bug report,
> Ralf
> 
Attached is a patch that fixes the problem.  OK for a new 'java-work'
branch based off of the right maint-based commits (as to make new
tests like 'java-extra.test' and `java-noinst.test' available)?  We
can decide at a later date whether this branch has to be merged into
maint or into master only.

I'll push in 72 hours if there is no objection.

Regards,
   Stefano
[0001-java-allow-both-dist_JAVA-and-nodist_JAVA-in-the-sam.patch (text/x-patch, inline)]
From d76b503883525aaab6048102cbfe96bbdd9a0a85 Mon Sep 17 00:00:00 2001
From: Stefano Lattarini <stefano.lattarini <at> gmail.com>
Date: Mon, 18 Apr 2011 15:18:08 +0200
Subject: [PATCH] java: allow both dist_JAVA and nodist_JAVA in the same Makefile.am

Fixes automake bug#8434.

* automake.in (handle_java): Strip `dist_' and `nodist_' from
the given prefix.  Define a new internal Makefile variable
`am__java_sources'.  Related adjustments.
* lib/am/java.am (JAVAC, JAVAROOT, CLASSPATH_ENV): Define only the
first time this am file is processed.
(class%DIR%.stamp): Stamp file renamed ...
(class%NDIR%.stamp): ... to this, so that the `dist_' and `nodist_'
prefixes are stripped from the name of the stampfile.  Adjust
declaration of dependencies by using the new automake-generated
internal variable `$(am__java_sources)'.  In the rule, use `$@'
as the name of the target, rather than hard-coding it.
* tests/java.test: Update and extend.
* tests/java-no-duplicate.test: New test.
* tests/java-mix-dist-nodist.test: Likewise.
* tests/java-compile-and-install.test: Likewise.
* tests/java-clean.test: Likewise.
* tests/java-sources.test: Likewise.
* tests/Makefile.am (TESTS): Update.
---
 ChangeLog                       |   23 ++++++++++
 automake.in                     |   20 +++++++--
 lib/am/java.am                  |   14 ++++---
 tests/Makefile.am               |    5 ++
 tests/Makefile.in               |    5 ++
 tests/java-clean.test           |   57 ++++++++++++++++++++++++++
 tests/java-compile-install.test |   86 +++++++++++++++++++++++++++++++++++++++
 tests/java-mix-dist-nodist.test |   56 +++++++++++++++++++++++++
 tests/java-no-duplicate.test    |   44 ++++++++++++++++++++
 tests/java-sources.test         |   61 +++++++++++++++++++++++++++
 tests/java.test                 |    9 +++-
 11 files changed, 367 insertions(+), 13 deletions(-)
 create mode 100755 tests/java-clean.test
 create mode 100755 tests/java-compile-install.test
 create mode 100755 tests/java-mix-dist-nodist.test
 create mode 100755 tests/java-no-duplicate.test
 create mode 100755 tests/java-sources.test

diff --git a/ChangeLog b/ChangeLog
index 3ece73c..791d8e7 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,26 @@
+2011-04-18  Stefano Lattarini  <stefano.lattarini <at> gmail.com>
+
+	java: allow both dist_JAVA and nodist_JAVA in the same Makefile.am
+	Fixes automake bug#8434.
+	* automake.in (handle_java): Strip `dist_' and `nodist_' from
+	the given prefix.  Define a new internal Makefile variable
+	`am__java_sources'.  Related adjustments.
+	* lib/am/java.am (JAVAC, JAVAROOT, CLASSPATH_ENV): Define only the
+	first time this am file is processed.
+	(class%DIR%.stamp): Stamp file renamed ...
+	(class%NDIR%.stamp): ... to this, so that the `dist_' and `nodist_'
+	prefixes are stripped from the name of the stampfile.  Adjust
+	declaration of dependencies by using the new automake-generated
+	internal variable `$(am__java_sources)'.  In the rule, use `$@'
+	as the name of the target, rather than hard-coding it.
+	* tests/java.test: Update and extend.
+	* tests/java-no-duplicate.test: New test.
+	* tests/java-mix-dist-nodist.test: Likewise.
+	* tests/java-compile-and-install.test: Likewise.
+	* tests/java-clean.test: Likewise.
+	* tests/java-sources.test: Likewise.
+	* tests/Makefile.am (TESTS): Update.
+
 2011-04-06  Stefano Lattarini  <stefano.lattarini <at> gmail.com>
 
 	coverage: more on java support EXTRA_ and noinst_ prefixes
diff --git a/automake.in b/automake.in
index a8ec749..01b41a1 100755
--- a/automake.in
+++ b/automake.in
@@ -5107,20 +5107,32 @@ sub handle_java
 				      'java', 'noinst', 'check');
     return if ! @sourcelist;
 
-    my @prefix = am_primary_prefixes ('JAVA', 1,
+    my @prefixes = am_primary_prefixes ('JAVA', 1,
 				      'java', 'noinst', 'check');
 
     my $dir;
-    foreach my $curs (@prefix)
+    my @java_sources = ();
+    foreach my $prefix (@prefixes)
       {
+        (my $curs = $prefix) =~ s/^(?:no)?dist_//;
+
 	next
 	  if $curs eq 'EXTRA';
 
-	err_var "${curs}_JAVA", "multiple _JAVA primaries in use"
-	  if defined $dir;
+        push @java_sources, '$(' . $prefix . '_JAVA' . ')';
+
+	if (defined $dir)
+	  {
+	    err_var "${curs}_JAVA", "multiple _JAVA primaries in use"
+	     unless $curs eq $dir;
+	  }
+
 	$dir = $curs;
       }
 
+    define_pretty_variable ('am__java_sources', TRUE, INTERNAL,
+                            "@java_sources");
+
     if ($dir eq 'check')
       {
         push (@check, "class$dir.stamp");
diff --git a/lib/am/java.am b/lib/am/java.am
index d6eb455..e0f5bba 100644
--- a/lib/am/java.am
+++ b/lib/am/java.am
@@ -20,11 +20,13 @@
 ## Building.  ##
 ## ---------- ##
 
+if %?FIRST%
 JAVAC = javac
 CLASSPATH_ENV = CLASSPATH=$(JAVAROOT):$(srcdir)/$(JAVAROOT):$$CLASSPATH
 JAVAROOT = $(top_builddir)
+endif %?FIRST%
 
-class%DIR%.stamp: $(%DIR%_JAVA)
+class%NDIR%.stamp: $(am__java_sources)
 	@list1='$?'; list2=; if test -n "$$list1"; then \
 	  for p in $$list1; do \
 	    if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
@@ -33,7 +35,7 @@ class%DIR%.stamp: $(%DIR%_JAVA)
 	  echo '$(CLASSPATH_ENV) $(JAVAC) -d $(JAVAROOT) $(AM_JAVACFLAGS) $(JAVACFLAGS) '"$$list2"; \
 	  $(CLASSPATH_ENV) $(JAVAC) -d $(JAVAROOT) $(AM_JAVACFLAGS) $(JAVACFLAGS) $$list2; \
 	else :; fi
-	echo timestamp > class%DIR%.stamp
+	echo timestamp > $@
 
 
 ## ------------ ##
@@ -44,7 +46,7 @@ if %?INSTALL%
 am__installdirs += "$(DESTDIR)$(%NDIR%dir)"
 ?EXEC?.PHONY install-exec-am: install-%DIR%JAVA
 ?!EXEC?.PHONY install-data-am: install-%DIR%JAVA
-install-%DIR%JAVA: class%DIR%.stamp
+install-%DIR%JAVA: class%NDIR%.stamp
 	@$(NORMAL_INSTALL)
 	test -z "$(%NDIR%dir)" || $(MKDIR_P) "$(DESTDIR)$(%NDIR%dir)"
 ## A single .java file can be compiled into multiple .class files.  So
@@ -76,9 +78,9 @@ endif %?INSTALL%
 ## Cleaning.  ##
 ## ---------- ##
 
-.PHONY clean-am: clean-%DIR%JAVA
-clean-%DIR%JAVA:
-	-rm -f *.class class%DIR%.stamp
+.PHONY clean-am: clean-%NDIR%JAVA
+clean-%NDIR%JAVA:
+	-rm -f *.class class%NDIR%.stamp
 
 
 ## -------------- ##
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 96b7e89..5ed38a1 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -422,10 +422,15 @@ java.test \
 java2.test \
 java3.test \
 java-check.test \
+java-clean.test \
 javaprim.test \
 javasubst.test \
 java-extra.test \
 java-noinst.test \
+java-compile-install.test \
+java-sources.test \
+java-no-duplicate.test \
+java-mix-dist-nodist.test \
 ldadd.test \
 ldflags.test \
 lex.test \
diff --git a/tests/Makefile.in b/tests/Makefile.in
index dce3a00..b467e35 100644
--- a/tests/Makefile.in
+++ b/tests/Makefile.in
@@ -692,10 +692,15 @@ java.test \
 java2.test \
 java3.test \
 java-check.test \
+java-clean.test \
 javaprim.test \
 javasubst.test \
 java-extra.test \
 java-noinst.test \
+java-compile-install.test \
+java-sources.test \
+java-no-duplicate.test \
+java-mix-dist-nodist.test \
 ldadd.test \
 ldflags.test \
 lex.test \
diff --git a/tests/java-clean.test b/tests/java-clean.test
new file mode 100755
index 0000000..4dcc966
--- /dev/null
+++ b/tests/java-clean.test
@@ -0,0 +1,57 @@
+#! /bin/sh
+# Copyright (C) 1998, 2001, 2002, 2004, 2007  Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+# Test cleaning of Java class files and timestamps.
+
+required=javac
+. ./defs || Exit 1
+
+set -e
+
+cat >> configure.in <<'END'
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+javadir = $(datadir)/java
+java_JAVA = Class.java
+dist_java_JAVA = ClassDist.java
+nodist_java_JAVA = ClassNoDist.java
+END
+
+echo 'class Class {}' > Class.java
+echo 'class ClassDist {}' > ClassDist.java
+echo 'class ClassNoDist {}' > ClassNoDist.java
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+./configure
+$MAKE
+ls -l
+test -f classjava.stamp
+test -f Class.class
+test -f ClassDist.class
+test -f ClassNoDist.class
+$MAKE clean
+find . -name '*.class' -o -name '*.stamp' | grep . && Exit 1
+# We should not remove unrelated stamp files.
+echo timestamp > classjava2.stamp
+$MAKE clean
+test -f classjava2.stamp
+
+:
diff --git a/tests/java-compile-install.test b/tests/java-compile-install.test
new file mode 100755
index 0000000..b2145fb
--- /dev/null
+++ b/tests/java-compile-install.test
@@ -0,0 +1,86 @@
+#! /bin/sh
+# Copyright (C) 1998, 2001, 2002, 2004, 2007  Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+# Test on compilation and installation of Java class files.
+
+required=javac
+. ./defs || Exit 1
+
+set -e
+
+cat >>configure.in <<'EOF'
+AC_OUTPUT
+EOF
+
+cat > Makefile.am << 'END'
+javadir = $(datadir)/java
+java_JAVA = Foo.java
+dist_java_JAVA = Bar.java
+nodist_java_JAVA = Baz.java
+
+# Java files are not distributed by default.
+EXTRA_DIST = Foo.java
+
+Baz.java:
+	rm -f $@ $@-t
+	echo 'class Baz {}' > $@-t
+	echo 'class Baz2 {}' >> $@-t
+	chmod a-w $@-t && mv -f $@-t $@
+
+test:
+	ls -l $(srcdir) . ;: For debugging.
+	test   -f $(srcdir)/Foo.java
+	test   -f $(srcdir)/Bar.java
+	test   -f Baz.java
+	test   -f aClass.class
+	test   -f Zardoz.class
+	test   -f Baz.class
+	test   -f Baz2.class
+	test ! -r Foo.class
+	test ! -r Bar.class
+
+test-install:
+	find $(prefix) ;: For debugging.
+	test   -f '$(javadir)/aClass.class'
+	test   -f '$(javadir)/Zardoz.class'
+	test   -f '$(javadir)/Baz.class'
+	test   -f '$(javadir)/Baz2.class'
+	test ! -r '$(javadir)/Foo.class'
+	test ! -r '$(javadir)/Bar.class'
+
+check-local: test
+installcheck-local: test-install
+
+.PHONY: test test-install
+
+DISTCLEANFILES = Baz.java
+END
+
+echo 'class aClass {}' > Foo.java
+echo 'class Zardoz {}' > Bar.java
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+./configure --prefix="`pwd`"/_inst
+$MAKE
+$MAKE test
+$MAKE install
+$MAKE test-install
+$MAKE distcheck
+
+:
diff --git a/tests/java-mix-dist-nodist.test b/tests/java-mix-dist-nodist.test
new file mode 100755
index 0000000..786f400
--- /dev/null
+++ b/tests/java-mix-dist-nodist.test
@@ -0,0 +1,56 @@
+#! /bin/sh
+# Copyright (C) 2011 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+# Check that the JAVA primary can be used with both `dist_' and `nodist_'
+# modifiers in the same directory.
+
+. ./defs || Exit 1
+
+cat >> configure.in << 'END'
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+# This test does not require compilation of *.java files.
+JAVAC = false
+javadir = $(prefix)
+java_JAVA = Class1.java
+dist_java_JAVA = Class2.java
+nodist_java_JAVA = Class3.java
+Class3.java:
+	@echo '$@ should not be generated!' >&2; exit 1
+END
+
+: > Class1.java
+: > Class2.java
+
+$ACLOCAL
+$AUTOCONF
+# Automake used to display non-fatal warnings with this test,
+# but those must be seen as a failure by us.
+$AUTOMAKE 2>stderr || { cat stderr >&2; Exit 1; }
+cat stderr >&2
+test ! -s stderr
+
+./configure
+
+$MAKE distdir
+ls -l $distdir # For debugging.
+test -f $distdir/Class1.java
+test -f $distdir/Class2.java
+test ! -f $distdir/Class3.java
+
+:
diff --git a/tests/java-no-duplicate.test b/tests/java-no-duplicate.test
new file mode 100755
index 0000000..d5fec4b
--- /dev/null
+++ b/tests/java-no-duplicate.test
@@ -0,0 +1,44 @@
+#! /bin/sh
+# Copyright (C) 2011 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+# Test that some Java-related variables and rules are not repeatedly
+# defined.
+
+. ./defs || Exit 1
+
+set -e
+
+cat > Makefile.am << 'END'
+javadir = $(datadir)/java
+java_JAVA = a.java
+dist_java_JAVA = b.java
+nodist_java_JAVA = c.java
+END
+
+$ACLOCAL
+$AUTOMAKE
+
+$EGREP -i '\.stamp|\.class|java|classpath' Makefile.in # For debugging.
+
+for var in JAVAC JAVAROOT CLASSPATH_ENV am__java_sources; do
+  grep "^$var =" Makefile.in
+  test `grep -c "^[$sp$tab]*$var[$sp$tab]*=" Makefile.in` = 1
+done
+
+grep '^classjava\.stamp:' Makefile.in
+test `grep -c "class.*java.*\.stamp.*:" Makefile.in` = 1
+
+:
diff --git a/tests/java-sources.test b/tests/java-sources.test
new file mode 100755
index 0000000..4a489e4
--- /dev/null
+++ b/tests/java-sources.test
@@ -0,0 +1,61 @@
+#! /bin/sh
+# Copyright (C) 2011 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+# Test definition of automake-generated private Makefile variable
+# `$(am__java_sources)'.
+
+. ./defs || Exit 1
+
+set -e
+
+cat >> configure.in << 'END'
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+foodir = $(prefix)
+
+foo_JAVA = a.java
+dist_foo_JAVA = b.java
+nodist_foo_JAVA = c.java
+
+.PHONY: debug
+debug:
+	@echo 'am__java_sources: "$(am__java_sources)"'
+got:
+	@lst='$(am__java_sources)'; \
+         for f in $$lst; do echo $$f; done | sort > $@
+END
+
+$ACLOCAL
+$AUTOMAKE
+$AUTOCONF
+
+cat > exp << 'END'
+a.java
+b.java
+c.java
+END
+
+./configure
+$MAKE debug
+$MAKE got
+
+cat got
+cat exp
+diff exp got
+
+:
diff --git a/tests/java.test b/tests/java.test
index cae56dc..4aa91d0 100755
--- a/tests/java.test
+++ b/tests/java.test
@@ -1,5 +1,6 @@
 #! /bin/sh
-# Copyright (C) 1998, 2001, 2002, 2004, 2007  Free Software Foundation, Inc.
+# Copyright (C) 1998, 2001, 2002, 2004, 2007, 2011 Free Software
+# Foundation, Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -25,7 +26,6 @@ cat >>configure.in <<'EOF'
 AC_OUTPUT
 EOF
 
-
 cat > Makefile.am << 'END'
 javadir = $(datadir)/java
 dist_java_JAVA = a.java b.java
@@ -34,7 +34,10 @@ END
 $ACLOCAL
 $AUTOCONF
 $AUTOMAKE
-grep '^all[-a-z]*:.*classdist_java\.stamp' Makefile.in
+
+$EGREP '\.stamp|class' Makefile.in # For debugging.
+grep '^all[-a-z]*:.*classjava\.stamp' Makefile.in
+test `grep -c '^all[-a-z]*:.*classjava\.stamp' Makefile.in` -eq 1
 
 cat >a.java <<EOF
 class a
-- 
1.7.2.3


Added tag(s) patch. Request was from Stefano Lattarini <stefano.lattarini <at> gmail.com> to control <at> debbugs.gnu.org. (Tue, 19 Apr 2011 08:03:02 GMT) Full text and rfc822 format available.

Information forwarded to owner <at> debbugs.gnu.org, bug-automake <at> gnu.org:
bug#8434; Package automake. (Sat, 23 Apr 2011 08:16:02 GMT) Full text and rfc822 format available.

Message #16 received at 8434 <at> debbugs.gnu.org (full text, mbox):

From: Stefano Lattarini <stefano.lattarini <at> gmail.com>
To: Ralf Wildenhues <Ralf.Wildenhues <at> gmx.de>
Cc: automake-patches <at> gnu.org, 8434 <at> debbugs.gnu.org
Subject: New public branch "java-work" (was: Re: [PATCH] java: allow both
	dist_JAVA and nodist_JAVA in the same Makefile.am)
Date: Sat, 23 Apr 2011 10:15:03 +0200
On Monday 18 April 2011, Stefano Lattarini wrote:
> On Saturday 09 April 2011, Ralf Wildenhues wrote:
> > Hi Stefano,
> > 
> > * Stefano Lattarini wrote on Wed, Apr 06, 2011 at 09:00:32PM CEST:
> > > Currently, limitations in the Automake support for java enforce the
> > > restriction that only one `_JAVA' primary can be used in a given
> > > Makefile.am.
> > 
> > > This bug is particularly annoying because *.java files listed with
> > > the `JAVA' primary are not included by default in the distribution.
> > > 
> > > Ganted, one can always use EXTRA_DIST to work around this issue,
> > > but it would be nice if things Just Worked.
> > 
> > Agreed on all accounts.  Do you see a way to fix this, for arbitrary
> > dependency structure between the java classes?
> > 
> > Thanks for the bug report,
> > Ralf
> > 
> Attached is a patch that fixes the problem.  OK for a new 'java-work'
> branch based off of the right maint-based commits (as to make new
> tests like 'java-extra.test' and `java-noinst.test' available)?  We
> can decide at a later date whether this branch has to be merged into
> maint or into master only.
> 
> I'll push in 72 hours if there is no objection.
> 
> Regards,
>    Stefano
> 
I've pushed this patch to a new public branch "java-work".  This new
branch is meant to be merged into either master or maint eventually
(which one exactly is still to be decided).  So, merging maint into
java-work should be ok at any moment, but master shouldn't be merged
into it.

Regards,
  Stefano




Reply sent to Stefano Lattarini <stefano.lattarini <at> gmail.com>:
You have taken responsibility. (Sun, 18 Sep 2011 19:01:02 GMT) Full text and rfc822 format available.

Notification sent to Stefano Lattarini <stefano.lattarini <at> gmail.com>:
bug acknowledged by developer. (Sun, 18 Sep 2011 19:01:03 GMT) Full text and rfc822 format available.

Message #21 received at 8434-done <at> debbugs.gnu.org (full text, mbox):

From: Stefano Lattarini <stefano.lattarini <at> gmail.com>
To: 8434-done <at> debbugs.gnu.org
Cc: Ralf Wildenhues <Ralf.Wildenhues <at> gmx.de>
Subject: Re: bug#8434: New public branch "java-work" (was: Re: [PATCH] java:
	allow both dist_JAVA and nodist_JAVA in the same Makefile.am)
Date: Sun, 18 Sep 2011 20:55:18 +0200
Reference:
 <http://debbugs.gnu.org/cgi/bugreport.cgi?bug=8434>

On Saturday 23 April 2011, Stefano Lattarini wrote:
> On Monday 18 April 2011, Stefano Lattarini wrote:
> > On Saturday 09 April 2011, Ralf Wildenhues wrote:
> > > Hi Stefano,
> > > 
> > > * Stefano Lattarini wrote on Wed, Apr 06, 2011 at 09:00:32PM CEST:
> > > > Currently, limitations in the Automake support for java enforce the
> > > > restriction that only one `_JAVA' primary can be used in a given
> > > > Makefile.am.
> > > 
> > > > This bug is particularly annoying because *.java files listed with
> > > > the `JAVA' primary are not included by default in the distribution.
> > > > 
> > > > Ganted, one can always use EXTRA_DIST to work around this issue,
> > > > but it would be nice if things Just Worked.
> > > 
> > > Agreed on all accounts.  Do you see a way to fix this, for arbitrary
> > > dependency structure between the java classes?
> > > 
> > > Thanks for the bug report,
> > > Ralf
> > > 
> > Attached is a patch that fixes the problem.  OK for a new 'java-work'
> > branch based off of the right maint-based commits (as to make new
> > tests like 'java-extra.test' and `java-noinst.test' available)?  We
> > can decide at a later date whether this branch has to be merged into
> > maint or into master only.
> > 
> > I'll push in 72 hours if there is no objection.
> > 
> > Regards,
> >    Stefano
> > 
> I've pushed this patch to a new public branch "java-work".  This new
> branch is meant to be merged into either master or maint eventually
> (which one exactly is still to be decided).  So, merging maint into
> java-work should be ok at any moment, but master shouldn't be merged
> into it.
> 
The patch (or a slighty modified version) has been applied to maint now:
 <http://lists.gnu.org/archive/html/automake-patches/2011-09/msg00075.html>
So I'm closing this bug report.

Regards,
  Stefano




bug archived. Request was from Debbugs Internal Request <help-debbugs <at> gnu.org> to internal_control <at> debbugs.gnu.org. (Mon, 17 Oct 2011 11:24:06 GMT) Full text and rfc822 format available.

This bug report was last modified 13 years and 341 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.