#! /bin/sh # Copyright (C) 2011-2017 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 . # Test rebuild rules for Java class files. required='javac' . test-init.sh cat >> configure.ac <<'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 ... :