# This Makefile is used when building with gcj.  It is separate from
# the ordinary Makefile as it does special GNU-make-specific things,
# and this avoids making other builds unnecessarily ugly.

# A .list file is made by split-for-gcj.sh.
# It lists all the files in a given package.
all_list_files := $(shell echo lists/*.list)
# The corresponding stamp files.
# Each .class file depends on its package's stamp file.
# Each stamp file depends on the corresponding list file.
# Each list file depends on the java files in its package.
# This way touching a single java source will cause the minimum
# number of rebuilds.
all_stamp_files := $(all_list_files:.list=.stamp)
# The dependency file generated by gcj.
all_deps_files := $(all_list_files:.list=.deps)

all: $(all_stamp_files)

# Ensure this is rebuilt whenever the list of classes changes.
# The list will always exist when this Makefile is used.
Makefile.deps: classes
	$(SHELL) $(top_srcdir)/lib/split-for-gcj.sh

-include Makefile.deps $(all_deps_files)

## Like GCJ but include some common flags.
GCJF = $(GCJ) -fsource=1.5 -ftarget=1.5 -g -Wno-deprecated --encoding=UTF-8 \
    --bootclasspath '' --classpath $(compile_classpath) \
    -C -d .

# Rule to rebuild a stamp file and update the deps file.  Note that we
# make the target be the stamp file.  This ensures that if a needed
# source is changed, this rule is re-run for the appropriate package.
%.stamp: %.list
	$(GCJF) -MD -MF ${@:.stamp=.deps} -MT $@ -MP @$<
	echo timestamp > $@
