diff options
33 files changed, 2032 insertions, 84 deletions
@@ -1,3 +1,24 @@ +2011-09-16 Stefano Lattarini <stefano.lattarini@gmail.com> + + automake: remove special handling of `ANSI2KNR' make variable + * automake.in (define_configure_variable): Remove special-cased + handling of `ANSI2KNR' variable. Related minor simplifications. + +2011-09-18 Stefano Lattarini <stefano.lattarini@gmail.com> + + coverage: test interactions of `nobase_' and `nodist_' + * tests/nobase-nodist.test: New test. + * tests/Makefile.am (TESTS): Add it. + +2011-09-18 Stefano Lattarini <stefano.lattarini@gmail.com> + + java: fix various blunders in test 'java-mix.test' + * tests/java-mix.test: Add missing call to `set -e'. Fix inverted + semantics (`.java' files are expected *not* to be distributed by + default, not the other way round). Fix various typos in the name + of the `.java' files. Correct other minor blunders. Improve some + comments. + 2011-09-15 Stefano Lattarini <stefano.lattarini@gmail.com> automake: remove code duplication in 'handle_tests' @@ -51,6 +72,16 @@ 2011-09-12 Stefano Lattarini <stefano.lattarini@gmail.com> + cosmetics: fix various typos and grammaros + * NEWS: Fix typos. + * tests/py-compile-basic.test: Likewise. + * tests/py-compile-basedir.test: Fix botched wording in comments. + * tests/py-compile-option-terminate.test: Fix typo and incomplete + comment. + Suggestions by Peter Rosin. + +2011-09-12 Stefano Lattarini <stefano.lattarini@gmail.com> + tests: remove redundant line from a test script * tests/test-log.test (fail.test): Remove extra `echo' command, probably due to a past copy&paste blunder. @@ -3958,6 +3989,68 @@ generic hard errors. The latter should be reserved for "real" set-up failures. +2011-06-08 Stefano Lattarini <stefano.lattarini@gmail.com> + + py-compile: '--' and non-option arguments terminate the option list + * lib/py-compile: Any non-option argument, or the special `--' + argument, now explicitly terminates the list of options. + * tests/py-compile-option-terminate.test: New test. + * tests/Makefile.am (TESTS): Update. + * NEWS: Update. + +2011-06-08 Stefano Lattarini <stefano.lattarini@gmail.com> + + py-compile: complain on unrecognized options + * lib/py-compile: Complain on unrecognized options. Don't be too + lax in matching `--help' and `--version' options. + * tests/py-compile-usage.test: Extend accordingly. + * NEWS: Update. + +2011-06-08 Stefano Lattarini <stefano.lattarini@gmail.com> + + py-compile: normalize error and help messages + * lib/py-compile: Now error messages do not begin with a capital + letter, nor end with a period, as per GNU standards. Prepend the + error messages with the name of the script, not with its path. + When an invalid usage is recognized, always display the customary + message "Try `py-compile --help' ..." on a line of its own. + ($me): New variable, containing the name of the + program, i.e., `py-compile'. Use it throughout. + (usage_error): New function, used to display error messages about + invalid usage. + * tests/py-compile-usage.test: Extend and tighten accordingly. + +2011-06-08 Stefano Lattarini <stefano.lattarini@gmail.com> + + python tests: add "unit tests" on py-compile + * tests/py-compile-basic.test: New test. + * tests/py-compile-basic2.test: New test. + * tests/py-compile-basedir.test: Likewise. + * tests/py-compile-destdir.test: Likewise. + * tests/py-compile-env.test: Likewise. + * tests/py-compile-usage.test: Likewise. + * tests/Makefile.am (TESTS): Update. + Tested with python 2.0.1, 2.4.6, 2.6.6, 2.7.1, and 3.1.3. + +2011-06-08 Stefano Lattarini <stefano.lattarini@gmail.com> + + py-compile: the '--destdir' option now accepts a blank argument + * lib/py-compile (Option parsing): Do not count an empty argument + to `--destdir' or `--basedir' as a missing argument. + * lib/python.am: Simplify accordingly, passing the `--destdir' + option to py-compile unconditionally, even if `$(DESTDIR)' is + empty. + * NEWS: Update. + +2011-06-08 Stefano Lattarini <stefano.lattarini@gmail.com> + + python: run the 'py-compile' script with $(SHELL) + * lib/python.am (install-%DIR%PYTHON): Run each instance of + py-compile using $(SHELL). Since we are at it, break overly + long lines. + (am__py_compile): New variable, to reduce code duplication. + + 2011-06-07 Stefano Lattarini <stefano.lattarini@gmail.com> tests: `lib/' shell scripts transparently tested also with $SHELL @@ -4880,6 +4973,11 @@ driver. * tests/pr401b.test: Likewise. * tests/pr401c.test: Likewise. + * tests/java-flat.test: Likewise, and properly update heading + comments. + * tests/java-nested.test: Likewise, but defining `parallel_tests' + to "yes" instead, for improved coverage in conjunction with the + sister test `java-flat.test'. 2011-05-20 Stefano Lattarini <stefano.lattarini@gmail.com> @@ -5038,6 +5136,12 @@ 2011-05-04 Stefano Lattarini <stefano.lattarini@gmail.com> + tests defs: use `skip_' for skipping java-related tests + * tests/defs.in (java, javac): Use `skip_' to signal test + skipping. + +2011-05-04 Stefano Lattarini <stefano.lattarini@gmail.com> + tests: add excerpts from few original bug reports, for clarity. * tests/comment6.test: Add excerpts and/or details from the original bug report that prompted this tests to be added and/or @@ -5483,6 +5587,80 @@ superseded by the much more complete `maintclean.test'. * tests/Makefile.am (TESTS): Update. +2011-05-03 Stefano Lattarini <stefano.lattarini@gmail.com> + + java tests: use $PATH_SEPARATOR where appropriate + * tests/java-compile-run-nested.test: Use `$PATH_SEPARATOR', not + `:', to separate entries of extended PATH and CLASSPATH variables. + * tests/java-compile-run-flat.test: Likewise. + +2011-04-26 Stefano Lattarini <stefano.lattarini@gmail.com> + + java coverage: test JAVACFLAGS and AM_JAVACFLAGS + * tests/javaflags.test: New test. + * tests/Makefile.am (TESTS): Update. + +2011-04-26 Stefano Lattarini <stefano.lattarini@gmail.com> + + java coverage: test rebuild rules for java + * tests/java-rebuild.test: New test. + * tests/Makefile.am (TESTS): Update. + +2011-04-26 Stefano Lattarini <stefano.lattarini@gmail.com> + + java coverage: try to build and run a java program + * tests/java-compile-run-flat.test: New test, try to build and run + a "UNIX-style" java program (complete with wrapper shell script + and the like) with a "flat" source-tree setup (i.e., everything in + the top-level directory). + * tests/java-compile-nested.test: Likewise, but using a more + typical "nested" source-tree setup. + * tests/Makefile.am (TESTS): Update. + +2011-04-23 Stefano Lattarini <stefano.lattarini@gmail.com> + + test defs: new requirement for the default java interpreter + * tests/defs.in (for tool in $required): New requirement 'java'. + +2011-04-23 Stefano Lattarini <stefano.lattarini@gmail.com> + + java tests: tweak and make stricter a couple of tests + * tests/javasubst.test: Use proper m4 quoting. Add trailing `:' + command. Enable `errexit' shell flag, and related changes. + Prefer cat + here-doc over echo to append to configure.in. + Make grepping of Makefile.in stricter. Add debugging output. + Improve heading comments. + * tests/javaprim.test: Likewise. + +2011-04-23 Stefano Lattarini <stefano.lattarini@gmail.com> + + java coverage: add test on uninstall with JAVA primary + * tests/java-uninstall.test: New test. + * tests/Makefile.am (TESTS): Update. + +2011-04-23 Stefano Lattarini <stefano.lattarini@gmail.com> + + java tests: require java compiler more properly + * tests/java-extra.test: Use "required=javac" instead of ad-hoc + configure check. + * tests/java-noinst.test: Likewise. + +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 @@ -5693,6 +5871,38 @@ * NEWS: Update. Report by Bruno Haible. +2011-04-18 Stefano Lattarini <stefano.lattarini@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@gmail.com> + + coverage: more on java support EXTRA_ and noinst_ prefixes + * tests/java-extra.test: New test, checking support for the + prefix `EXTRA_' with the JAVA primary. + * tests/java-noinst.test: New test, checking support for the + prefix `noinst_' with the JAVA primary. + * tests/Makefile.am (TESTS): Update. + 2011-04-10 Stefano Lattarini <stefano.lattarini@gmail.com> test defs: fix 'javac' requirement for older JDK versions @@ -5756,15 +5966,6 @@ * tests/defs: Fix typo (`itslef' instead of `itself') in comments. -2011-04-06 Stefano Lattarini <stefano.lattarini@gmail.com> - - coverage: more on java support EXTRA_ and noinst_ prefixes - * tests/java-extra.test: New test, checking support for the - prefix `EXTRA_' with the JAVA primary. - * tests/java-noinst.test: New test, checking support for the - prefix `noinst_' with the JAVA primary. - * tests/Makefile.am (TESTS): Update. - 2011-04-09 Ralf Wildenhues <Ralf.Wildenhues@gmx.de> Clarify regex code in depcomp. @@ -121,6 +121,11 @@ New in 1.11a: - C source and header files derived from non-distributed Yacc sources are now removed by "make clean", not only by "make maintainer-clean". + - The py-compile script now accepts empty arguments passed to the options + `--destdir' and `--basedir', and complains about unrecognized options. + Moreover, a non-option argument or a special `--' argument terminates + the list of options. + - A developer that needs to pass specific flags to configure at "make distcheck" time can now, and indeed he's advised to, do so by defining the developer-reserved makefile variable AM_DISTCHECK_CONFIGURE_FLAGS, diff --git a/automake.in b/automake.in index 677e1faf5..7297a850d 100644 --- a/automake.in +++ b/automake.in @@ -5006,20 +5006,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/^(?:nobase_)?(?:dist_|nodist_)?//; + 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"); @@ -6363,22 +6375,11 @@ sub define_files_variable ($\@$$) sub define_configure_variable ($) { my ($var) = @_; - - my $pretty = VAR_ASIS; - my $owner = VAR_CONFIGURE; - # Some variables we do not want to output. For instance it # would be a bad idea to output `U = @U@` when `@U@` can be # substituted as `\`. - $pretty = VAR_SILENT if exists $ignored_configure_vars{$var}; - - # ANSI2KNR is a variable that Automake wants to redefine, so - # it must be owned by Automake. (It is also used as a proof - # that AM_C_PROTOTYPES has been run, that's why we do not simply - # omit the AC_SUBST.) - $owner = VAR_AUTOMAKE if $var eq 'ANSI2KNR'; - - Automake::Variable::define ($var, $owner, '', TRUE, subst $var, + my $pretty = exists $ignored_configure_vars{$var} ? VAR_SILENT : VAR_ASIS; + Automake::Variable::define ($var, VAR_CONFIGURE, '', TRUE, subst $var, '', $configure_vars{$var}, $pretty); } diff --git a/lib/am/java.am b/lib/am/java.am index 604df2229..464b70609 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:+":$$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/lib/am/python.am b/lib/am/python.am index 9424a19e6..40aaa620d 100644 --- a/lib/am/python.am +++ b/lib/am/python.am @@ -1,6 +1,6 @@ ## automake - create Makefile.in from Makefile.am -## Copyright (C) 1999, 2001, 2003, 2004, 2006, 2007, 2008, 2009 Free -## Software Foundation, Inc. +## Copyright (C) 1999, 2001, 2003, 2004, 2006, 2007, 2008, 2009, 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 @@ -24,6 +24,7 @@ endif %?INSTALL% ## ------------ ## if %?INSTALL% +?FIRST?am__py_compile = PYTHON=$(PYTHON) $(SHELL) $(py_compile) am__installdirs += "$(DESTDIR)$(%NDIR%dir)" .PHONY install-%EXEC?exec:data%-am: install-%DIR%PYTHON install-%DIR%PYTHON: $(%DIR%_PYTHON) @@ -52,11 +53,8 @@ if %?BASE% ## Byte-compile must be done at install time, since file times are ## encoded in the actual files. if test -n "$$dlist"; then \ - if test -z "$(DESTDIR)"; then \ - PYTHON=$(PYTHON) $(py_compile) --basedir "$(%NDIR%dir)" $$dlist; \ - else \ - PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(%NDIR%dir)" $$dlist; \ - fi; \ + $(am__py_compile) --destdir "$(DESTDIR)" \ + --basedir "$(%NDIR%dir)" $$dlist; \ else :; fi else !%?BASE% @list='$(%DIR%_PYTHON)'; test -n "$(%NDIR%dir)" || list=; \ @@ -76,11 +74,8 @@ else !%?BASE% ## Byte-compile must be done at install time, since file times are ## encoded in the actual files. if test -n "$$dlist"; then \ - if test -z "$(DESTDIR)"; then \ - PYTHON=$(PYTHON) $(py_compile) --basedir "$(%NDIR%dir)" $$dlist; \ - else \ - PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(%NDIR%dir)" $$dlist; \ - fi; \ + $(am__py_compile) --destdir "$(DESTDIR)" \ + --basedir "$(%NDIR%dir)" $$dlist; \ else :; fi \ done endif !%?BASE% diff --git a/lib/py-compile b/lib/py-compile index 3f9d05b60..15c834c40 100755 --- a/lib/py-compile +++ b/lib/py-compile @@ -1,10 +1,10 @@ #!/bin/sh # py-compile - Compile a Python program -scriptversion=2009-04-28.21; # UTC +scriptversion=2011-06-08.12; # UTC -# Copyright (C) 2000, 2001, 2003, 2004, 2005, 2008, 2009 Free Software -# Foundation, Inc. +# Copyright (C) 2000, 2001, 2003, 2004, 2005, 2008, 2009, 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 @@ -32,28 +32,36 @@ if [ -z "$PYTHON" ]; then PYTHON=python fi +me=py-compile + +usage_error () +{ + echo "$me: $*" >&2 + echo "Try \`$me --help' for more information." >&2 + exit 1 +} + basedir= destdir= -files= while test $# -ne 0; do case "$1" in --basedir) - basedir=$2 - if test -z "$basedir"; then - echo "$0: Missing argument to --basedir." 1>&2 - exit 1 + if test $# -lt 2; then + usage_error "option '--basedir' requires an argument" + else + basedir=$2 fi shift ;; --destdir) - destdir=$2 - if test -z "$destdir"; then - echo "$0: Missing argument to --destdir." 1>&2 - exit 1 + if test $# -lt 2; then + usage_error "option '--destdir' requires an argument" + else + destdir=$2 fi shift ;; - -h|--h*) + -h|--help) cat <<\EOF Usage: py-compile [--help] [--version] [--basedir DIR] [--destdir DIR] FILES..." @@ -69,20 +77,27 @@ Report bugs to <bug-automake@gnu.org>. EOF exit $? ;; - -v|--v*) - echo "py-compile $scriptversion" + -v|--version) + echo "$me $scriptversion" exit $? ;; + --) + shift + break + ;; + -*) + usage_error "unrecognized option '$1'" + ;; *) - files="$files $1" + break ;; esac shift done +files=$* if test -z "$files"; then - echo "$0: No files given. Try \`$0 --help' for more information." 1>&2 - exit 1 + usage_error "no files given" fi # if basedir was given, then it should be prepended to filenames before diff --git a/tests/Makefile.am b/tests/Makefile.am index f502f8d4d..1e4b6d544 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -45,6 +45,7 @@ all.test \ cond17.test \ gcj6.test \ override-conditional-2.test \ +java-nobase.test \ pr8365-remake-timing.test \ yacc-dist-nobuild-subdir.test \ vala-vpath.test \ diff --git a/tests/Makefile.in b/tests/Makefile.in index 77f5cdd7a..6de6c109d 100644 --- a/tests/Makefile.in +++ b/tests/Makefile.in @@ -312,6 +312,7 @@ all.test \ cond17.test \ gcj6.test \ override-conditional-2.test \ +java-nobase.test \ pr8365-remake-timing.test \ yacc-dist-nobuild-subdir.test \ vala-vpath.test \ @@ -762,12 +763,23 @@ interp2.test \ java.test \ java2.test \ java3.test \ +javaflags.test \ java-check.test \ +java-clean.test \ +java-compile-install.test \ +java-compile-run-flat.test \ +java-compile-run-nested.test \ java-empty-classpath.test \ javaprim.test \ javasubst.test \ java-extra.test \ +java-mix.test \ +java-no-duplicate.test \ +java-nobase.test \ java-noinst.test \ +java-rebuild.test \ +java-sources.test \ +java-uninstall.test \ ldadd.test \ ldflags.test \ lex.test \ @@ -895,6 +907,7 @@ no-outdir-option.test \ nobase.test \ nobase-libtool.test \ nobase-python.test \ +nobase-nodist.test \ nodef.test \ nodef2.test \ nodep.test \ @@ -1059,6 +1072,14 @@ primary-prefix-couples-force-valid.test \ primary-prefix-couples-documented-valid.test \ proginst.test \ programs-primary-rewritten.test \ +py-compile-basedir.test \ +py-compile-basic.test \ +py-compile-basic2.test \ +py-compile-destdir.test \ +py-compile-env.test \ +py-compile-option-terminate.test \ +py-compile-usage.test \ +python-dist.test \ python.test \ python2.test \ python3.test \ diff --git a/tests/defs b/tests/defs index 297e5c0df..e5f66a52a 100644 --- a/tests/defs +++ b/tests/defs @@ -703,6 +703,11 @@ do echo "$me: running javac -version -help" javac -version -help || skip_all_ "Sun Java compiler not available" ;; + java) + # See the comments above about `javac' for why we use also `-help'. + echo "$me: running java -version -help" + java -version -help || skip_all_ "Sun Java interpreter not found" + ;; makedepend) echo "$me: running makedepend -f-" makedepend -f- \ diff --git a/tests/java-clean.test b/tests/java-clean.test new file mode 100755 index 000000000..7db5e5371 --- /dev/null +++ b/tests/java-clean.test @@ -0,0 +1,68 @@ +#! /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 + +nobase_java_JAVA = ClassNobase.java +nobase_dist_java_JAVA = ClassNobaseDist.java +nobase_nodist_java_JAVA = ClassNobaseNodist.java +END + +for base in '' Nobase; do + for dist in '' Dist Nodist; do + echo "class Class$base$dist {}" > Class$base$dist.java + done +done + +$ACLOCAL +$AUTOCONF +$AUTOMAKE + +./configure +$MAKE +ls -l +test -f classjava.stamp +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 + +: diff --git a/tests/java-compile-install.test b/tests/java-compile-install.test new file mode 100755 index 000000000..74b7a001f --- /dev/null +++ b/tests/java-compile-install.test @@ -0,0 +1,99 @@ +#! /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 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 +nobase_java_JAVA = Foo2.java +nobase_dist_java_JAVA = Bar.java +nodist_java_JAVA = Baz.java + +# 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 + 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 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: + 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 Foo2.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-compile-run-flat.test b/tests/java-compile-run-flat.test new file mode 100755 index 000000000..b5e1c3690 --- /dev/null +++ b/tests/java-compile-run-flat.test @@ -0,0 +1,241 @@ +#! /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 on compilation and execution of Java class files. +# Also meddle with wrapper scripts, as would be probably seen in a real +# "UNIX-style" use case. +# This test uses a "flat" setup for the source tree (i.e., everything in +# the top-level directory), and forces the use of the old, non-parallel +# testsuite driver. The sister test `java-compile-run-nested.test' do +# similar checks with a more usual, "nested" setup, and using the newer +# 'parallel-tests' driver. + +required='java javac' +am_parallel_tests=no +. ./defs || Exit 1 + +set -e + +echo "AC_SUBST([PATH_SEPARATOR], ['$PATH_SEPARATOR'])" >> configure.in + +cat >> configure.in <<'END' +AC_SUBST([JAVA], [java]) +AC_CONFIG_SRCDIR([PkgLocation.jin]) +AC_CONFIG_FILES([PkgLocation.java:PkgLocation.jin]) +AC_OUTPUT +END + +## TOP-LEVEL SETUP AND TARGETS ## + +cat > Makefile.am <<'END' +EXTRA_DIST = # Will be updated later. + +test-built: + ls -l $(srcdir) ;: For debugging. + test $(srcdir) = . || ls -l . ;: Likewise. + test -f $(srcdir)/Main.java + test -f $(srcdir)/HelloStream.java + test -f $(srcdir)/PkgLocation.jin + test -f PkgLocation.java + test -f HelloStream.class + test -f PkgLocation.class + test -f Main.class + test -f classjava.stamp + +test-installed: + ls -l $(javadir) ;: For debugging. + test -f $(javadir)/HelloStream.class + test -f $(javadir)/PkgLocation.class + test -f $(javadir)/Main.class + if find $(prefix) | grep '\.stamp$$'; then exit 1; else :; fi + +run-installed: + jprog_doing_installcheck=yes $(MAKE) $(AM_MAKEFLAGS) check + +check-local: test-built +installcheck-local: test-installed run-installed + +.PHONY: test-built test-installed run-installed +END + +## WRAPPER SCRIPT ## + +cat >> Makefile.am <<'END' +bin_SCRIPTS = jprog + +edit_script = sed -e 's|[@]JAVA@|$(JAVA)|g' \ + -e 's|[@]javadir@|$(javadir)|g' \ + -e 's|[@]SHELL@|$(SHELL)|g' \ + -e 's|[@]PATH_SEPARATOR@|$(PATH_SEPARATOR)|g' + +jprog: jprog.sh + rm -f $@ $@-t + $(edit_script) `test -f '$@.sh' || echo $(srcdir)/`$@.sh >$@-t + chmod a-w $@-t && chmod a+x $@-t && mv -f $@-t $@ + sed 's/^/ | /' $@ ;: for debugging. + +EXTRA_DIST += jprog.sh +CLEANFILES = jprog +END + +cat > jprog.sh <<'END' +#!@SHELL@ +CLASSPATH=${jprog_classpath-'@javadir@'}${CLASSPATH+"@PATH_SEPARATOR@$CLASSPATH"} +export CLASSPATH +case $# in + 0) exec @JAVA@ Main;; + *) exec @JAVA@ Main "$@";; +esac +END + +## JAVA SOURCES ## + +cat >> Makefile.am <<'END' +javadir = $(pkgdatadir)/java + +dist_java_JAVA = Main.java HelloStream.java +nodist_java_JAVA = PkgLocation.java +END + +cat > PkgLocation.jin <<'END' +public class PkgLocation { + public static String prefix() { + return new String("@prefix@"); + } +} +END + +cat > Main.java <<'END' +public class Main { + public static void main(String[] args) { + for (int i = 0; i < args.length; i++) { + if (args[i].equals("--print-prefix")) { + System.out.println(PkgLocation.prefix()); + } else if (args[i].equals("--hello-stdout")) { + HelloStream.to(System.out); + } else if (args[i].equals("--hello-stderr")) { + HelloStream.to(System.err); + } else { + System.err.println("jprog: invalid option '" + args[i] + + "'"); + System.exit(2); + } + } + System.exit(0); + } +} +END + +cat > HelloStream.java <<'END' +import java.io.PrintStream; +class HelloStream { + public static void to(PrintStream stream) { + stream.println("Hello, Stream!"); + } +} +END + +## TESTS ## + +cat >> Makefile.am <<'END' +## FIXME: Use AM_TESTS_ENVIRONMENT here when it becomes available. +TESTS_ENVIRONMENT = \ + if test x"$$jprog_doing_installcheck" != x"yes"; then \ + jprog_classpath='$(abs_top_builddir):$(abs_top_srcdir)'; \ + export jprog_classpath; \ + PATH='$(abs_top_builddir)$(PATH_SEPARATOR)'$$PATH; \ + export PATH; \ + else \ + unset jprog_classpath || :; \ + PATH='$(prefix)/bin$(PATH_SEPARATOR)'$$PATH; \ + export PATH; \ + fi; \ + config_time_prefix='@prefix@'; export config_time_prefix; + +TESTS = \ + simple.test \ + prefix.test \ + stdout.test \ + stderr.test \ + badarg.test + +XFAIL_TESTS = badarg.test + +EXTRA_DIST += $(TESTS) +END + +cat > simple.test <<'END' +#!/bin/sh +jprog +END + +cat > prefix.test <<'END' +#!/bin/sh +jprefix=`jprog --print-prefix` || exit 1 +echo "$0: exp prefix: $config_time_prefix" +echo "$0: got prefix: $jprefix" +test x"$jprefix" = x"$config_time_prefix" +END + +cat > stdout.test <<'END' +#!/bin/sh +rc=0 +jprog --hello-stdout >stdout.out 2>stdout.err || { echo \$?=$?; rc=1; } +sed 's/^/out:/' <stdout.out # For debugging. +sed 's/^/err:/' <stdout.err >&2 # Likewise. +test -s stdout.err && rc=1 +test "`cat stdout.out`" = 'Hello, Stream!' || rc=1 +rm -f stdout.out stdout.err || rc=1 +exit $rc +END + +cat > stderr.test <<'END' +#!/bin/sh +rc=0 +jprog --hello-stderr >stderr.out 2>stderr.err || { echo \$?=$?; rc=1; } +sed 's/^/out:/' <stderr.out # For debugging. +sed 's/^/err:/' <stderr.err >&2 # Likewise. +test -s stderr.out && rc=1 +test "`cat stderr.err`" = 'Hello, Stream!' || rc=1 +rm -f stderr.out stderr.err || rc=1 +exit $rc +END + +cat > badarg.test <<'END' +#!/bin/sh +jprog --bad-argument +END + +chmod a+x *.test + +## DO CHECKS ## + +$ACLOCAL +$AUTOCONF +$AUTOMAKE + +# To have the parallel testsuite more verbose. +VERBOSE=yes; export VERBOSE + +./configure --prefix="`pwd`/_inst" +cat PkgLocation.java # For debugging. +$MAKE check +$MAKE install +$MAKE test-installed +$MAKE run-installed +$MAKE distcheck + +: diff --git a/tests/java-compile-run-nested.test b/tests/java-compile-run-nested.test new file mode 100755 index 000000000..9de874b85 --- /dev/null +++ b/tests/java-compile-run-nested.test @@ -0,0 +1,254 @@ +#! /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 on compilation and execution of Java class files. +# Also meddle with wrapper scripts, as would be probably seen in a real +# "UNIX-style" use case. +# This test uses a typical "nested" source tree setup (i.e., different +# components/aspects are separated into different subdirectories), +# and uses the 'parallel-tests' testsuite driver. The sister test +# `java-compile-run-flat.test' do similar checks with a "flat" setup +# (i.e., everything in the top-level directory), and forcing the use +# of the older non-parallel 'simple-tests' driver. + +required='java javac' +am_parallel_tests=yes +. ./defs || Exit 1 + +set -e + +echo "AC_SUBST([PATH_SEPARATOR], ['$PATH_SEPARATOR'])" >> configure.in + +cat >> configure.in <<'END' +AC_SUBST([JAVA], [java]) +AC_CONFIG_SRCDIR([jprog/PkgLocation.jin]) +AC_SUBST([jprogdatadir], ['${pkgdatadir}']) +AC_SUBST([jprogclassdir], ['${jprogdatadir}/jprog']) +AC_CONFIG_FILES([jprog/PkgLocation.java:jprog/PkgLocation.jin]) +AC_CONFIG_FILES([jprog/Makefile bin/Makefile tests/Makefile]) +AC_OUTPUT +END + +## TOP-LEVEL SETUP AND TARGETS ## + +cat > Makefile.am <<'END' +SUBDIRS = bin jprog tests + +test-built: + ls -l $(srcdir)/* ;: For debugging. + test $(srcdir) = . || ls -l * ;: Likewise. + test -f $(srcdir)/jprog/Main.java + test -f $(srcdir)/jprog/HelloStream.java + test -f $(srcdir)/jprog/PkgLocation.jin + test -f jprog/PkgLocation.java + test -f jprog/HelloStream.class + test -f jprog/Main.class + test -f jprog/PkgLocation.class + test -f jprog/classjprogclass.stamp + +test-installed: + ls -l $(jprogclassdir) ;: For debugging. + test -f $(jprogclassdir)/HelloStream.class + test -f $(jprogclassdir)/Main.class + test -f $(jprogclassdir)/PkgLocation.class + if find $(prefix) | grep '\.stamp$$'; then exit 1; else :; fi + +run-installed: + jprog_doing_installcheck=yes $(MAKE) $(AM_MAKEFLAGS) check + +check-local: test-built +installcheck-local: test-installed run-installed + +.PHONY: test-built test-installed run-installed +END + +## WRAPPER SCRIPT ## + +mkdir bin + +cat > bin/Makefile.am <<'END' +bin_SCRIPTS = jprog + +edit_script = sed -e 's|[@]JAVA@|$(JAVA)|g' \ + -e 's|[@]jprogdatadir@|$(jprogdatadir)|g' \ + -e 's|[@]SHELL@|$(SHELL)|g' \ + -e 's|[@]PATH_SEPARATOR@|$(PATH_SEPARATOR)|g' + +jprog: jprog.sh + rm -f $@ $@-t + $(edit_script) `test -f '$@.sh' || echo $(srcdir)/`$@.sh >$@-t + chmod a-w $@-t && chmod a+x $@-t && mv -f $@-t $@ + sed 's/^/ | /' $@ ;: for debugging. + +EXTRA_DIST = jprog.sh +CLEANFILES = jprog +END + +cat > bin/jprog.sh <<'END' +#!@SHELL@ +CLASSPATH=${jprog_classpath-'@jprogdatadir@'}${CLASSPATH+"@PATH_SEPARATOR@$CLASSPATH"} +export CLASSPATH +case $# in + 0) exec @JAVA@ jprog.Main;; + *) exec @JAVA@ jprog.Main "$@";; +esac +END + +## JAVA SOURCES ## + +mkdir jprog + +cat > jprog/Makefile.am <<'END' +dist_jprogclass_JAVA = Main.java HelloStream.java +nodist_jprogclass_JAVA = PkgLocation.java +END + +cat > jprog/PkgLocation.jin <<'END' +package jprog; +public class PkgLocation { + public static String prefix() { + return new String("@prefix@"); + } +} +END + +cat > jprog/Main.java <<'END' +package jprog; +import jprog.PkgLocation; +import jprog.HelloStream; +public class Main { + public static void main(String[] args) { + for (int i = 0; i < args.length; i++) { + if (args[i].equals("--print-prefix")) { + System.out.println(PkgLocation.prefix()); + } else if (args[i].equals("--hello-stdout")) { + HelloStream.to(System.out); + } else if (args[i].equals("--hello-stderr")) { + HelloStream.to(System.err); + } else { + System.err.println("jprog: invalid option '" + args[i] + + "'"); + System.exit(2); + } + } + System.exit(0); + } +} +END + +cat > jprog/HelloStream.java <<'END' +package jprog; +import java.io.PrintStream; +class HelloStream { + public static void to(PrintStream stream) { + stream.println("Hello, Stream!"); + } +} +END + +## TESTS ## + +mkdir tests + +cat > tests/Makefile.am <<'END' +## FIXME: Use AM_TESTS_ENVIRONMENT here when it becomes available. +TESTS_ENVIRONMENT = \ + if test x"$$jprog_doing_installcheck" != x"yes"; then \ + jprog_classpath='$(abs_top_builddir):$(abs_top_srcdir)'; \ + export jprog_classpath; \ + PATH='$(abs_top_builddir)/bin$(PATH_SEPARATOR)'$$PATH; \ + export PATH; \ + else \ + unset jprog_classpath || :; \ + PATH='$(prefix)/bin$(PATH_SEPARATOR)'$$PATH; \ + export PATH; \ + fi; \ + config_time_prefix='@prefix@'; export config_time_prefix; + +TESTS = \ + simple.test \ + prefix.test \ + stdout.test \ + stderr.test \ + badarg.test + +XFAIL_TESTS = badarg.test + +EXTRA_DIST = $(TESTS) +END + +cat > tests/simple.test <<'END' +#!/bin/sh +jprog +END + +cat > tests/prefix.test <<'END' +#!/bin/sh +jprefix=`jprog --print-prefix` || exit 1 +echo "$0: exp prefix: $config_time_prefix" +echo "$0: got prefix: $jprefix" +test x"$jprefix" = x"$config_time_prefix" +END + +cat > tests/stdout.test <<'END' +#!/bin/sh +rc=0 +jprog --hello-stdout >stdout.out 2>stdout.err || { echo \$?=$?; rc=1; } +sed 's/^/out:/' <stdout.out # For debugging. +sed 's/^/err:/' <stdout.err >&2 # Likewise. +test -s stdout.err && rc=1 +test "`cat stdout.out`" = 'Hello, Stream!' || rc=1 +rm -f stdout.out stdout.err || rc=1 +exit $rc +END + +cat > tests/stderr.test <<'END' +#!/bin/sh +rc=0 +jprog --hello-stderr >stderr.out 2>stderr.err || { echo \$?=$?; rc=1; } +sed 's/^/out:/' <stderr.out # For debugging. +sed 's/^/err:/' <stderr.err >&2 # Likewise. +test -s stderr.out && rc=1 +test "`cat stderr.err`" = 'Hello, Stream!' || rc=1 +rm -f stderr.out stderr.err || rc=1 +exit $rc +END + +cat > tests/badarg.test <<'END' +#!/bin/sh +jprog --bad-argument +END + +chmod a+x tests/*.test + +## DO CHECKS ## + +$ACLOCAL +$AUTOCONF +$AUTOMAKE + +# To have the parallel testsuite more verbose. +VERBOSE=yes; export VERBOSE + +./configure --prefix="`pwd`/_inst" +cat jprog/PkgLocation.java # For debugging. +$MAKE check +$MAKE install +$MAKE test-installed +$MAKE run-installed +$MAKE distcheck + +: diff --git a/tests/java-mix.test b/tests/java-mix.test new file mode 100755 index 000000000..d6a43e79e --- /dev/null +++ b/tests/java-mix.test @@ -0,0 +1,69 @@ +#! /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 freely in the same Makefile.am +# with proper combinations of the `dist_', `nodist_' and `nobase_' +# modifiers. Also check that `.java' files are not ditributed by default. + +. ./defs || Exit 1 + +set -e + +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 = 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 + +Class.java ClassNodist.java ClassNobase.java ClassNobaseNodist.java: + @echo '$@ should not be generated!' >&2; exit 1 +END + +: > ClassDist.java +: > ClassNobaseDist.java + +$ACLOCAL +$AUTOCONF +# Automake used to display non-fatal warnings with this test, but +# they were unexpected, so we want to consider them as failures in +# this test. +$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/Class.java +test -f $distdir/ClassDist.java +test ! -f $distdir/ClassNobase.java +test -f $distdir/ClassNobaseDist.java +test ! -f $distdir/ClassNodist.java +test ! -f $distdir/ClassNobaseNodist.java + +: diff --git a/tests/java-no-duplicate.test b/tests/java-no-duplicate.test new file mode 100755 index 000000000..ec42a3b09 --- /dev/null +++ b/tests/java-no-duplicate.test @@ -0,0 +1,47 @@ +#! /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 +nobase_java_JAVA = d.java +nobase_dist_java_JAVA = e.java +nobase_nodist_java_JAVA = f.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-nobase.test b/tests/java-nobase.test new file mode 100755 index 000000000..7b55290f4 --- /dev/null +++ b/tests/java-nobase.test @@ -0,0 +1,67 @@ +#! /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 + +: diff --git a/tests/java-noinst.test b/tests/java-noinst.test index 5fe66d81a..eb90aa973 100755 --- a/tests/java-noinst.test +++ b/tests/java-noinst.test @@ -14,8 +14,8 @@ # 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. required=javac . ./defs || Exit 1 @@ -24,28 +24,32 @@ cat >> configure.in << 'END' 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; } + : diff --git a/tests/java-rebuild.test b/tests/java-rebuild.test new file mode 100755 index 000000000..75be5f733 --- /dev/null +++ b/tests/java-rebuild.test @@ -0,0 +1,126 @@ +#! /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 rebuild rules for Java class files. + +required='javac' +. ./defs || Exit 1 + +set -e + +cat >> configure.in <<'END' +AC_OUTPUT +END + +cat > Makefile.am <<'END' +AM_JAVACFLAGS = -verbose +foodir = $(datadir)/java +foo_JAVA = a.java +dist_foo_JAVA = d.java +nodist_foo_JAVA = n.java +nobase_foo_JAVA = Nobase.java +nobase_dist_foo_JAVA = NobaseDist.java +nobase_nodist_foo_JAVA = NobaseNoDist.java +END + +echo 'class _x {}' > a.java +echo 'class x_ {}' > d.java +echo 'class a {} class d {}' > n.java +echo 'class Nobase_Foo {} class Nobase_Bar {}' > Nobase.java +echo 'class NobaseDist {}' > NobaseDist.java +echo 'class NobaseNoDist {}' > NobaseNoDist.java + +$ACLOCAL +$AUTOCONF +$AUTOMAKE + +all_classes='_x x_ a d Nobase_Foo Nobase_Bar NobaseDist NobaseNoDist' + +for vpath in : false; do + + if $vpath; then + srcdir=.. + mkdir build + cd build + else + srcdir=. + fi + + $srcdir/configure + $MAKE + ls -l # For debugging. + + # Sanity check. + test -f classfoo.stamp + for cls in $all_classes; do + test -f $cls.class + done + + # When the stampfile is removed, all the *.class files should + # be considered out-of-date. + echo timestamp > older + $sleep + rm -f classfoo.stamp + $MAKE + for cls in $all_classes; do + is_newest $cls.class older + done + + # When only a java file is modified, only the *.class files derived from + # it should be updated. + # The strings we loop on here have the following format: + # ``JAVA-FILES-TO-BE-TOUCHED -- CLASSES-THAT-SHOULD-BE-UPDATED'' + for args in \ + 'a -- _x' \ + 'd -- x_' \ + 'n -- a d' \ + 'a d Nobase -- _x x_ Nobase_Foo Nobase_Bar' \ + 'n NobaseDist -- a d NobaseDist' \ + 'd NobaseNoDist -- x_ NobaseNoDist' \ + "a d n Nobase NobaseDist NobaseNoDist -- $all_classes" \ + ; do + set $args + touched_javas= + while test $# -gt 0; do + if test x"$1" = x"--"; then + shift + break + else + touched_javas="$touched_javas $1" + shift + fi + done + updated_classes=$* + echo timestamp > older + $sleep + for j in $touched_javas; do + touch $srcdir/$j.java + done + $MAKE + is_newest classfoo.stamp older + for cls in $all_classes; do + case " $updated_classes " in + *" $cls "*) is_newest $cls.class older;; + *) is_newest older $cls.class;; + esac + done + done # $args ... + + cd $srcdir + +done # $vpath ... + +: diff --git a/tests/java-sources.test b/tests/java-sources.test new file mode 100755 index 000000000..770eb2d16 --- /dev/null +++ b/tests/java-sources.test @@ -0,0 +1,67 @@ +#! /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 +nobase_foo_JAVA = d.java +nobase_dist_foo_JAVA = e.java +nobase_nodist_foo_JAVA = f.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 +d.java +e.java +f.java +END + +./configure +$MAKE debug +$MAKE got + +cat got +cat exp +diff exp got + +: diff --git a/tests/java-uninstall.test b/tests/java-uninstall.test new file mode 100755 index 000000000..35d1e4a04 --- /dev/null +++ b/tests/java-uninstall.test @@ -0,0 +1,101 @@ +#! /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/>. + +# Check uninstallation of Java class files. + +required=javac +. ./defs || Exit 1 + +set -e + +cat >> configure.in << 'END' +AC_OUTPUT +END + +cat > Makefile.am << 'END' +javadir = $(prefix)/java +java_JAVA = Foo.java +nobase_java_JAVA = Foo2.java +nobase_dist_java_JAVA = Bar.java +nodist_java_JAVA = Baz.java + +# 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 + echo 'class Baz2 {}' >> $@-t + chmod a-w $@-t && mv -f $@-t $@ + +DISTCLEANFILES = Baz.java Foo2.java +END + +echo 'class aClass {}' > Foo.java +echo 'class Zardoz {}' > Bar.java + +$ACLOCAL +$AUTOCONF +$AUTOMAKE + +./configure --prefix="`pwd`"/_inst +javadir=_inst/java + +check_uninstallation() +{ + test ! -r $javadir/aClass.class + test ! -r $javadir/bClass.class + test ! -r $javadir/Zardoz.class + test ! -r $javadir/Baz.class + test ! -r $javadir/Baz2.class + test -f $javadir/Foo.class + test -f $javadir/Bar.class + test -f $javadir/xClass.class + test -f $javadir/aclass.class +} + +$MAKE +ls -l +$MAKE install +: > $javadir/Foo.class +: > $javadir/Bar.class +: > $javadir/xClass.class +: > $javadir/aclass.class +ls -l $javadir +$MAKE uninstall +ls -l $javadir +check_uninstallation + +# FIXME: "make uninstall" should continue to work also after "make clean", +# but currently this doesn't happen. See automake bug#8540. +$MAKE install +ls -l $javadir +$MAKE clean +ls -l +$MAKE uninstall +ls -l $javadir +#check_uninstallation + +$MAKE distcheck + +: diff --git a/tests/java.test b/tests/java.test index 671d2fda2..fdf209297 100755 --- a/tests/java.test +++ b/tests/java.test @@ -24,7 +24,6 @@ cat >>configure.in <<'EOF' AC_OUTPUT EOF - cat > Makefile.am << 'END' javadir = $(datadir)/java dist_java_JAVA = a.java b.java @@ -33,7 +32,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 diff --git a/tests/javaflags.test b/tests/javaflags.test new file mode 100755 index 000000000..75643222f --- /dev/null +++ b/tests/javaflags.test @@ -0,0 +1,62 @@ +#! /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 support for $(JAVACFLAGS) and $(AM_JAVACFLAGS). + +. ./defs || Exit 1 + +set -e + +cat > fake-javac <<'END' +#!/bin/sh +echo "$*" > javaflags.list +END +chmod a+x fake-javac + +# Remove JAVAC from the environment, so that it won't interfere +# with `make -e' below. +unset JAVAC || : + +cat >> configure.in <<'END' +AC_PROG_CC +# Simulate presence of the java compiler using our fake-javac script. +AC_SUBST([JAVAC], ['$(abs_top_srcdir)'/fake-javac]) +AC_OUTPUT +END + +cat > Makefile.am <<'END' +foodir = $(prefix) +foo_JAVA = bar.java +AM_JAVACFLAGS = __am_flags__ +END + +$ACLOCAL +$AUTOMAKE + +grep '\$(JAVACFLAGS).*\$(AM_JAVACFLAGS)' Makefile.in && Exit 1 + +: > bar.java + +$AUTOCONF +./configure +env JAVACFLAGS=__user_flags__ $MAKE -e + +ls -l + +cat javaflags.list +grep '__am_flags__.*__user_flags__' javaflags.list + +: diff --git a/tests/javaprim.test b/tests/javaprim.test index f0b8a1a02..f80cec909 100755 --- a/tests/javaprim.test +++ b/tests/javaprim.test @@ -15,7 +15,7 @@ # 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 to make sure JAVA variable can be defined. +# Test to make sure JAVA variable can be defined by AC_SUBST. . ./defs || Exit 1 @@ -31,4 +31,7 @@ END $ACLOCAL $AUTOMAKE +grep -i java Makefile.in # For debugging. +grep '^JAVA = *@JAVA@ *$' Makefile.in + : diff --git a/tests/javasubst.test b/tests/javasubst.test index 6b867d986..7d6dd9c88 100755 --- a/tests/javasubst.test +++ b/tests/javasubst.test @@ -15,7 +15,7 @@ # 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 to make sure redefining JAVAC works. +# Test to make sure redefining JAVAC with AC_SUBST works. . ./defs || Exit 1 @@ -31,6 +31,7 @@ END $ACLOCAL $AUTOMAKE -grep 'JAVAC.*@JAVAC@' Makefile.in +grep -i java Makefile.in # For debugging. +grep '^JAVAC = *@JAVAC@ *$' Makefile.in : diff --git a/tests/list-of-tests.mk b/tests/list-of-tests.mk index 723cb6a3f..249981859 100644 --- a/tests/list-of-tests.mk +++ b/tests/list-of-tests.mk @@ -446,12 +446,23 @@ interp2.test \ java.test \ java2.test \ java3.test \ +javaflags.test \ java-check.test \ +java-clean.test \ +java-compile-install.test \ +java-compile-run-flat.test \ +java-compile-run-nested.test \ java-empty-classpath.test \ javaprim.test \ javasubst.test \ java-extra.test \ +java-mix.test \ +java-no-duplicate.test \ +java-nobase.test \ java-noinst.test \ +java-rebuild.test \ +java-sources.test \ +java-uninstall.test \ ldadd.test \ ldflags.test \ lex.test \ @@ -579,6 +590,7 @@ no-outdir-option.test \ nobase.test \ nobase-libtool.test \ nobase-python.test \ +nobase-nodist.test \ nodef.test \ nodef2.test \ nodep.test \ @@ -743,6 +755,14 @@ primary-prefix-couples-force-valid.test \ primary-prefix-couples-documented-valid.test \ proginst.test \ programs-primary-rewritten.test \ +py-compile-basedir.test \ +py-compile-basic.test \ +py-compile-basic2.test \ +py-compile-destdir.test \ +py-compile-env.test \ +py-compile-option-terminate.test \ +py-compile-usage.test \ +python-dist.test \ python.test \ python2.test \ python3.test \ diff --git a/tests/nobase-nodist.test b/tests/nobase-nodist.test new file mode 100644 index 000000000..90823e2a3 --- /dev/null +++ b/tests/nobase-nodist.test @@ -0,0 +1,62 @@ +#! /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/>. + +# Interaction of `nobase_' and `nodist_' prefixes. + +. ./defs || Exit 1 + +set -e + +# Simulate no emacs and no python (it shouldn't be needed in this test). +EMACS="no" PYTHON=":"; export EMCAS PYTHON + +cat >> configure.in << 'END' +AM_PATH_LISPDIR +AM_PATH_PYTHON([], [], [:]) +# Simulate no javac (it shouldn't be needed in this test). +AC_SUBST([JAVAC], [false]) +AC_OUTPUT +END + +cat > Makefile.am << 'END' +nobase_nodist_noinst_PYTHON = baz1.py sub/baz2.py +# Lisp and Java sources are not distributed by default, so try both +# with and without the `nodist_' prefix, for more coverage. +nobase_noinst_LISP = foo1.el sub/foo2.el +nobase_nodist_noinst_LISP = foo3.el sub/foo4.el +nobase_noinst_JAVA = bar1.java sub/bar2.java +nobase_nodist_noinst_JAVA = bar3.java sub/bar4.java +END + +$ACLOCAL +$AUTOCONF +$AUTOMAKE -a +./configure +$MAKE distdir + +ls -l $distdir $distdir/* # For debugging. +test ! -f $distdir/foo1.el +test ! -f $distdir/sub/foo2.el +test ! -f $distdir/foo3.el +test ! -f $distdir/sub/foo4.el +test ! -f $distdir/bar1.java +test ! -f $distdir/sub/bar2.java +test ! -f $distdir/bar3.java +test ! -f $distdir/sub/bar4.java +test ! -f $distdir/baz1.py +test ! -f $distdir/sub/baz2.py + +: diff --git a/tests/py-compile-basedir.test b/tests/py-compile-basedir.test new file mode 100755 index 000000000..a277639cb --- /dev/null +++ b/tests/py-compile-basedir.test @@ -0,0 +1,51 @@ +#! /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 the `--basedir' option of the `py-compile' script, + +required=python +. ./defs || Exit 1 + +set -e + +# We'll need to create files in `..', so we need one more subdirectory +# level in order not to clutter up the top-level tests directory. +mkdir sandbox +cd sandbox + +cp "$testsrcdir/../lib/py-compile" . + +f=__init__ +for d in foo foo/bar "`pwd`/foo" . .. ../foo ''; do + if test -z "$d"; then + d2=. + else + d2=$d + fi + ../install-sh -d "$d2" "$d2/sub" || Exit 99 + : > "$d2/$f.py" + : > "$d2/sub/$f.py" + ./py-compile --basedir "$d" "$f.py" "sub/$f.py" + ls -l "$d2" "$d2/sub" # For debugging. + test -f "$d2/$f.pyc" + test -f "$d2/$f.pyo" + test -f "$d2/sub/$f.pyc" + test -f "$d2/sub/$f.pyo" + rm -f "$d2/$f.pyc" "$d2/$f.pyo" "$d2/sub/$f.pyc" "$d2/sub/$f.pyo" + find . | grep '\.py[co]$' && Exit 1 +done + +: diff --git a/tests/py-compile-basic.test b/tests/py-compile-basic.test new file mode 100755 index 000000000..a7a3f899c --- /dev/null +++ b/tests/py-compile-basic.test @@ -0,0 +1,64 @@ +#! /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 more basic functionalities of the `py-compile' script, +# with "believable" python sources. See also related test +# `py-compile-basic2.test'. + +required=python +. ./defs || Exit 1 + +set -e + +cp "$testsrcdir/../lib/py-compile" . + +cat > foo.py <<'END' +# Try out some non-trivial syntax in here. + +'''Module docstring''' + +def foo (*args, **kwargs): + """Function docstring + with embedded newline""" + return 1 + +class Foo: + r"""Class docstring""" + def __init__(self): + r'''Method docstring + with + embedded + newlines''' + pass + +bar = baz = (1, (2,), [3, 4]); zardoz = 0; +END + +cat > bar.py <<'END' +# Import of non-existent modules, or assertion of false conditions, +# shouldn't cause problems, as it should be enough for the code to +# be syntactically correct. +import Automake.No.Such.Module +assert False +END + +./py-compile foo.py bar.py +test -f foo.pyc +test -f foo.pyo +test -f bar.pyc +test -f bar.pyo + +: diff --git a/tests/py-compile-basic2.test b/tests/py-compile-basic2.test new file mode 100755 index 000000000..0da0d4231 --- /dev/null +++ b/tests/py-compile-basic2.test @@ -0,0 +1,71 @@ +#! /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 more basic functionalities of the `py-compile' script, with +# dummy python sources, but more complex directory layouts. See also +# related test `py-compile-basic.test'. + +required=python +. ./defs || Exit 1 + +set -e + +ocwd=`pwd` || Exit 99 + +pyfiles=" + foo.py + ./foo1.py + ../foo2.py + ../dir/foo3.py + $ocwd/foo4.py + sub/bar.py + sub/subsub/barbar.py + __init__.py + sub/__init__.py + 1.py + .././_.py +" + +lst=' + dir/foo + dir/foo1 + foo2 + dir/foo3 + foo4 + dir/sub/bar + dir/sub/subsub/barbar + dir/__init__ + dir/sub/__init__ + dir/1 + _ +' + +mkdir dir +cd dir +cp "$testsrcdir/../lib/py-compile" . +mkdir sub sub/subsub +touch $pyfiles +./py-compile $pyfiles +cd "$ocwd" + +for x in $lst; do echo $x.pyc; echo $x.pyo; done | sort > exp +find . -name '*.py[co]' | sed 's|^\./||' | sort > got + +cat exp +cat got +diff exp got + +: diff --git a/tests/py-compile-destdir.test b/tests/py-compile-destdir.test new file mode 100755 index 000000000..3d122e64b --- /dev/null +++ b/tests/py-compile-destdir.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 the `--destdir' option of the `py-compile' script, + +required=python +. ./defs || Exit 1 + +set -e + +cp "$testsrcdir/../lib/py-compile" . + +# Should not give false positives when grepping for it, so use +# an "uncommon" string (with ugly CamelCase). +destdir=TheDestDir + +mkdir sub $destdir $destdir/sub +echo 'def foo (): return "foo"' > $destdir/foo.py +echo 'def bar (): return "bar"' > $destdir/sub/bar.py + +./py-compile --destdir $destdir foo.py sub/bar.py +ls -l $destdir $destdir/sub # For debugging. +ls . sub | grep '\.py[co]$' && Exit 1 +test -f $destdir/foo.pyc +test -f $destdir/foo.pyo +test -f $destdir/sub/bar.pyc +test -f $destdir/sub/bar.pyo +strings $destdir/*.py[co] $destdir/sub/*.py[co] || : # For debugging. +$FGREP $destdir $destdir/*.py[co] $destdir/sub/*.py[co] && Exit 1 + +: diff --git a/tests/py-compile-env.test b/tests/py-compile-env.test new file mode 100755 index 000000000..a72d173c8 --- /dev/null +++ b/tests/py-compile-env.test @@ -0,0 +1,60 @@ +#! /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/>. + +# Make sure `py-compile' honours the PYTHON environment variable. + +. ./defs || Exit 1 + +set -e + +cp "$testsrcdir/../lib/py-compile" . + +cat > my-py <<'END' +#!/bin/sh +: > my-py.run +END +chmod a+x my-py + +mkdir sub1 +cd sub1 + +PYTHON=: ../py-compile foo.py +ls | grep . && Exit 1 + +PYTHON=false ../py-compile foo.py && Exit 1 +ls | grep . && Exit 1 + +PYTHON='echo GrEpMe AndMeToo' ../py-compile foo.py +PYTHON='echo GrEpMe AndMeToo' ../py-compile foo.py | grep 'GrEpMe AndMeToo' +ls | grep . && Exit 1 + +cd .. +mkdir sub2 +cd sub2 + +PYTHON=../my-py ../py-compile foo.py +test -f my-py.run +ls | grep -v '^my-py\.run$' | grep . && Exit 1 + +cd .. +mkdir sub3 +cd sub3 +PATH=..$PATH_SEPARATOR$PATH; export PATH +PYTHON=my-py py-compile foo.py +test -f my-py.run +ls | grep -v '^my-py\.run$' | grep . && Exit 1 + +: diff --git a/tests/py-compile-option-terminate.test b/tests/py-compile-option-terminate.test new file mode 100755 index 000000000..69f9bb5f1 --- /dev/null +++ b/tests/py-compile-option-terminate.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/>. + +# Check that a non-option argument and the `--' special argument +# explicitly terminate the option list for `py-compile'. + +required=python +. ./defs || Exit 1 + +set -e + +cp "$testsrcdir/../lib/py-compile" . + +: > ./-o.py +: > ./--foo.py +./py-compile -- -o.py --foo.py +test -f ./-o.pyc +test -f ./-o.pyo +test -f ./--foo.pyc +test -f ./--foo.pyo +rm -f ./-*.py[co] +: > x.py +./py-compile x.py -o.py --foo.py +test -f ./x.pyc +test -f ./x.pyo +test -f ./-o.pyc +test -f ./-o.pyo +test -f ./--foo.pyc +test -f ./--foo.pyo + +: diff --git a/tests/py-compile-usage.test b/tests/py-compile-usage.test new file mode 100755 index 000000000..7e8c78605 --- /dev/null +++ b/tests/py-compile-usage.test @@ -0,0 +1,75 @@ +#! /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 `py-compile --help', `py-compile --version', and that `py-compile' +# correctly complains on wrong usage. + +. ./defs || Exit 1 + +set -e + +cp "$testsrcdir/../lib/py-compile" . + +# --help + +./py-compile --help >stdout 2>stderr \ + || { cat stdout; cat stderr >&2; Exit 1; } +cat stdout +test -s stderr && { cat stderr >&2; Exit 1; } +grep '^Usage: py-compile .' stdout +$FGREP ' [--basedir DIR]' stdout +$FGREP ' [--destdir DIR]' stdout + +# --version + +./py-compile --version >stdout 2>stderr \ + || { cat stdout; cat stderr >&2; Exit 1; } +cat stdout +test -s stderr && { cat stderr >&2; Exit 1; } +year='20[0-9][0-9]' # Hopefully automake will be obsolete in 80 years ;-) +month='(0[0-9]|1[012])' +day='([012][0-9]|3[01])' +hour='([01][0-9]|2[0123])' +LC_ALL=C $EGREP "^py-compile $year-$month-$day\.$hour" stdout +test `wc -l <stdout` -eq 1 + +# Unknown option. +for opt in -b -d --foo; do + ./py-compile $opt 2>stderr && { cat stderr >&2; Exit 1; } + cat stderr >&2 + grep "^py-compile: unrecognized option ['\`]$opt'" stderr + grep "^Try [\`']py-compile --help' for more information" stderr +done + +# Missing option argument. + +for opt in --basedir --destdir; do + ./py-compile $opt 2>stderr && { cat stderr >&2; Exit 1; } + cat stderr >&2 + grep "^py-compile: option ['\`]$opt' requires an argument" stderr + grep "^Try [\`']py-compile --help' for more information" stderr +done + +# Missing files. + +for args in '' '--basedir dir' '--destdir dir'; do + ./py-compile $args 2>stderr && { cat stderr >&2; Exit 1; } + cat stderr >&2 + grep '^py-compile: no files given' stderr + grep "^Try [\`']py-compile --help' for more information" stderr +done + +: |