123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- #! /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 <http://www.gnu.org/licenses/>.
- # 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 ...
- :
|