+2011-04-23 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ java: allow both JAVA and nobase_JAVA in the same Makefile.am
+ * automake.in (handle_java): Also strip `nobase_' from the given
+ prefix, when needed.
+ * tests/java-clean.test: Update and extend.
+ * tests/java-compile-install.test: Likewise.
+ * tests/java-no-duplicate.test: Likewise.
+ * tests/java-sources.test: Likewise.
+ * tests/java-noinst.test: Likewise.
+ * tests/java-mix-dist-nodist.test: Renamed to ...
+ * tests/java-mix.test: ... this, and extended.
+ * tests/java-nobase.test: New test, still xfailing due to
+ unrelated issues.
+ * tests/Makefile.am (TESTS, XFAIL_TESTS): Update.
+
2011-04-22 Stefano Lattarini <stefano.lattarini@gmail.com>
testsuite: more environment sanitization
my @java_sources = ();
foreach my $prefix (@prefixes)
{
- (my $curs = $prefix) =~ s/^(?:no)?dist_//;
+ (my $curs = $prefix) =~ s/^(?:nobase_)?(?:dist_|nodist_)?//;
next
if $curs eq 'EXTRA';
auxdir2.test \
cond17.test \
gcj6.test \
+java-nobase.test \
pr8365-remake-timing.test \
yacc-dist-nobuild-subdir.test \
txinfo5.test
javasubst.test \
java-extra.test \
java-noinst.test \
+java-nobase.test \
java-compile-install.test \
java-sources.test \
java-no-duplicate.test \
-java-mix-dist-nodist.test \
+java-mix.test \
ldadd.test \
ldflags.test \
lex.test \
auxdir2.test \
cond17.test \
gcj6.test \
+java-nobase.test \
pr8365-remake-timing.test \
yacc-dist-nobuild-subdir.test \
txinfo5.test
javasubst.test \
java-extra.test \
java-noinst.test \
+java-nobase.test \
java-compile-install.test \
java-sources.test \
java-no-duplicate.test \
-java-mix-dist-nodist.test \
+java-mix.test \
ldadd.test \
ldflags.test \
lex.test \
cat > Makefile.am << 'END'
javadir = $(datadir)/java
+
java_JAVA = Class.java
dist_java_JAVA = ClassDist.java
-nodist_java_JAVA = ClassNoDist.java
+nodist_java_JAVA = ClassNodist.java
+
+nobase_java_JAVA = ClassNobase.java
+nobase_dist_java_JAVA = ClassNobaseDist.java
+nobase_nodist_java_JAVA = ClassNobaseNodist.java
END
-echo 'class Class {}' > Class.java
-echo 'class ClassDist {}' > ClassDist.java
-echo 'class ClassNoDist {}' > ClassNoDist.java
+for base in '' Nobase; do
+ for dist in '' Dist Nodist; do
+ echo "class Class$base$dist {}" > Class$base$dist.java
+ done
+done
$ACLOCAL
$AUTOCONF
$MAKE
ls -l
test -f classjava.stamp
-test -f Class.class
-test -f ClassDist.class
-test -f ClassNoDist.class
+for base in '' Nobase; do
+ for dist in '' Dist Nodist; do
+ test -f Class$base$dist.class
+ done
+done
$MAKE clean
find . -name '*.class' -o -name '*.stamp' | grep . && Exit 1
# We should not remove unrelated stamp files.
echo timestamp > classjava2.stamp
+echo timestamp > classdist_java.stamp
$MAKE clean
test -f classjava2.stamp
+test -f classdist_java.stamp
:
#! /bin/sh
-# Copyright (C) 1998, 2001, 2002, 2004, 2007 Free Software Foundation, Inc.
+# 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
cat > Makefile.am << 'END'
javadir = $(datadir)/java
java_JAVA = Foo.java
-dist_java_JAVA = Bar.java
+nobase_java_JAVA = Foo2.java
+nobase_dist_java_JAVA = Bar.java
nodist_java_JAVA = Baz.java
-# Java files are not distributed by default.
+# Java files are not distributed by default, so we distribute
+# one "by hand" ...
EXTRA_DIST = Foo.java
+# ... and make the other one generated.
+Foo2.java:
+ rm -f $@ $@-t
+ echo 'class bClass {}' > $@-t
+ chmod a-w $@-t && mv -f $@-t $@
+# Explicitly declared as `nodist_', so generate it.
Baz.java:
rm -f $@ $@-t
echo 'class Baz {}' > $@-t
ls -l $(srcdir) . ;: For debugging.
test -f $(srcdir)/Foo.java
test -f $(srcdir)/Bar.java
+ test -f Foo2.java
test -f Baz.java
test -f aClass.class
+ test -f bClass.class
test -f Zardoz.class
test -f Baz.class
test -f Baz2.class
test ! -r Foo.class
test ! -r Bar.class
+ test -f classjava.stamp
test-install:
- find $(prefix) ;: For debugging.
+ ls -l $(javadir) ;: For debugging.
+ test -f '$(javadir)/bClass.class'
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'
+ if find $(prefix) | grep '\.stamp$$'; then exit 1; else :; fi
check-local: test
installcheck-local: test-install
.PHONY: test test-install
-DISTCLEANFILES = Baz.java
+DISTCLEANFILES = Baz.java Foo2.java
END
echo 'class aClass {}' > Foo.java
# 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.
+# Check that the JAVA primary can be used freely in the same Makefile.am
+# with proper combinations of the `dist_', `nodist_' and `nobase_'
+# modifiers .
. ./defs || Exit 1
# 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:
+
+java_JAVA = Class.java
+dist_java_JAVA = ClassDist.java
+nodist_java_JAVA = ClassNodist.java
+
+nobase_java_JAVA = ClassNobase.java
+nobase_dist_java_JAVA = ClassNobaseDist.java
+nobase_nodist_java_JAVA = ClassNobaseNodist.java
+
+Class3.java Class6.java:
@echo '$@ should not be generated!' >&2; exit 1
END
-: > Class1.java
-: > Class2.java
+: > Class.java
+: > ClassDist.java
+: > ClassNobase.java
+: > ClassNobaseDist.java
$ACLOCAL
$AUTOCONF
$MAKE distdir
ls -l $distdir # For debugging.
-test -f $distdir/Class1.java
-test -f $distdir/Class2.java
-test ! -f $distdir/Class3.java
+test -f $distdir/Class.java
+test -f $distdir/ClassDist.java
+test -f $distdir/NobaseClass.java
+test -f $distdir/NobaseClassDist.java
+test ! -f $distdir/ClassNodist.java
+test ! -f $distdir/NobaseClassNodist.java
:
java_JAVA = a.java
dist_java_JAVA = b.java
nodist_java_JAVA = c.java
+nobase_java_JAVA = d.java
+nobase_dist_java_JAVA = e.java
+nobase_nodist_java_JAVA = f.java
END
$ACLOCAL
--- /dev/null
+#! /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 support of `nobase_' with the `JAVA' primary.
+
+required=javac
+. ./defs || Exit 1
+
+set -e
+
+cat >>configure.in <<'END'
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+javadir = $(datadir)/java
+nobase_java_JAVA = sub/subsub/Foo.java
+nobase_dist_java_JAVA = sub/Bar.java
+nobase_nodist_java_JAVA = sub2/Baz.java
+
+# Java files are not distributed by default.
+EXTRA_DIST = sub/subsub/Foo.java
+
+sub2/Baz.java:
+ rm -f $@ $@-t
+ test -d sub2 || mkdir sub2
+ echo 'class Baz {}' > $@-t
+ chmod a-w $@-t && mv -f $@-t $@
+
+.PHONY: test-install
+test-install:
+ find $(prefix) ;: For debugging.
+ test -f $(javadir)/sub/subsub/Foo.class
+ test -f $(javadir)/sub/Bar.class
+ test -f $(javadir)/sub2/Baz.class
+installcheck-local: test-install
+DISTCLEANFILES = sub2/Baz.java
+END
+
+mkdir sub sub/subsub
+echo 'class Foo {}' > sub/subsub/Foo.java
+echo 'class Bar {}' > sub/Bar.java
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+./configure --prefix="`pwd`"/_inst
+$MAKE check
+$MAKE install
+$MAKE test-install
+$MAKE distcheck
+
+:
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
-# Make sure that noinst_JAVA causes generated *.class files not to be installed.
+# Make sure that noinst_JAVA causes generated *.class files not to
+# be installed.
. ./defs || Exit 1
AC_OUTPUT
END
-cat > Foo.java <<'END'
-class Foo { }
+cat > Makefile.am <<'END'
+noinst_JAVA = 1.java
+dist_noinst_JAVA = 2.java
+nodist_noinst_JAVA = 3.java
+nobase_noinst_JAVA = 4.java
+nobase_dist_noinst_JAVA = 5.java
+nobase_nodist_noinst_JAVA = 6.java
END
+for i in 1 2 3 4 5 6; do
+ echo "class Class$i {}" > $i.java
+done
+
$ACLOCAL
+$AUTOMAKE
$AUTOCONF
-: > Makefile.in # Will be updated later.
-
./configure --prefix="`pwd`/_inst"
-# We need this hacky loop because multiple uses of the JAVA primary
-# in the same Makefile.am are not allowed.
-
-for prefix in '' nodist_ dist_; do
- echo "${prefix}noinst_JAVA = Foo.java" > Makefile.am
- $AUTOMAKE
- ./config.status Makefile
- $MAKE
- test -f Foo.class
- $MAKE install
- test ! -d _inst
+$MAKE
+ls -l
+for i in 1 2 3 4 5 6; do
+ test -f Class$i.class
done
+$MAKE install
+test -d _inst && { ls -l _inst; Exit 1; }
+
:
foo_JAVA = a.java
dist_foo_JAVA = b.java
nodist_foo_JAVA = c.java
+nobase_foo_JAVA = d.java
+nobase_dist_foo_JAVA = e.java
+nobase_nodist_foo_JAVA = f.java
.PHONY: debug
debug:
a.java
b.java
c.java
+d.java
+e.java
+f.java
END
./configure