###########################################################
# Common variables and targets for XPath and xslt4j
#
# See Makefile for important environment notes
#
###########################################################

###########################################################
# Project-specific variables and rules
#
# You should not need to edit these
###########################################################
JAVAX = .java
CLASSX = .class
JARX  = .jar
TARX  = .tar.gz
ZIPX  = .zip
OBJS  = $(SRCS:%.java=%.class)

# A simple marker file created to show last compile time
# Note subdirectories may reset the name!
SINCE_FILE       = since.last

# Relative directory (usually from ./src/.) where class files are to go
CLASS_DIR        = classes

CURRENT_DIR      = .

###########################################################
# Build-specific tools and flags definitions
###########################################################
PRODUCT_NAME := xalan
VERSION      = _1_1_D01
JARNAME      = $(PRODUCT_NAME)$(JARX)
JARDISTNAME  = $(PRODUCT_NAME)-j$(VERSION)$(JARX)
TARDISTNAME  = $(PRODUCT_NAME)-j$(VERSION)$(TARX)
ZIPDISTNAME  = $(PRODUCT_NAME)-j$(VERSION)$(ZIPX)

###########################################################
# Environment-specific tools and flags definitions
#
# You may need to edit these if you're not using
# a standard JDK or the tools aren't on the path.
###########################################################
# References to default tools
JAVA       = java
JAVAC      = javac
JAVADOC    = javadoc
JAR        = jar
# References to JDK 1.2-only tools; required for xdocs build
# While the code compiles under 1.1.8 or 1.2.2, the docs require 1.2.2
# Thus, you can install both JDK's, set 1.1.8 up as default,
# then call us like 'make -f Makefile JAVAC12=c:/jdk122/bin/javac.exe ...'
#    This should compile the sources with 1.1.8, but the doc with 1.2.2
JAVA12     = java
JAVAC12    = javac
JAVADOC12  = javadoc

# Setting flags for various tools
# You can override these on the make command line as well
#    Call us like 'make -f Makefile JAVADEBUG=-g:none ...'
JAVADEBUG   = -g
# JAVADEBUG   = -g:none -O
JAVADESTDIR = -d $(CLASS_DIR)
JAVACFLAGS  = $(JAVADEBUG) $(JAVADESTDIR)
JARFLAGS    = Mcf0

# References to other tools
RM         = rm -f
RM-RF      = rm -rf
CP         = cp -f
CPR        = cp -Rvf
UPDIR      := ..

# References to standard UNIX or Cygwin tar utility, filtering through gzip
TARGZ      = tar cvzf
UNTARGZ      = tar xvzf 

# Decide if we're on unix or DOS
ifeq (,$(findstring usr,$(PATH)))
# DOS
PATHSEP := \\
CLPATHSEP := ;
else 
# UNIX
PATHSEP := /
CLPATHSEP := :
endif

###########################################################
# Main targets definitions
###########################################################
.PHONY: makeall
makeall: all

.PHONY: clean
clean::
	$(RM) *.class $(JARNAME) *~ *.bak *.o *.obj *.dll $(SINCE_FILE)

.PHONY: makesubdirs
makesubdirs:
	@for i in $(SUBDIRS) ; \
	do \
	(cd $$i; echo making xpath engine in "$(CURRENT_DIR)/$$i..."; \
	$(MAKE) CURRENT_DIR=$(CURRENT_DIR)/$$i $(MFLAGS) -f makexpath4j JAVACFLAGS="$(JAVACFLAGS)" all); \
	(cd $$i; echo making xslt engine in "$(CURRENT_DIR)/$$i..."; \
	$(MAKE) CURRENT_DIR=$(CURRENT_DIR)/$$i $(MFLAGS) -f makexslt4j JAVACFLAGS="$(JAVACFLAGS)" all); \
	done

.PHONY: makecompat
makecompat:
	@for i in $(SUBDIRS) ; \
	do \
	(cd $$i; echo making compat engine in "$(CURRENT_DIR)/$$i...";pwd; \
	$(MAKE) CURRENT_DIR=$(CURRENT_DIR)/$$i $(MFLAGS) -f makecompat JAVACFLAGS="$(JAVACFLAGS)" all); \
	done

.PHONY: makedocs
makedocs:
	@for i in xdocs ; \
	do \
	(cd $$i; echo making x-docs in "$(CURRENT_DIR)/$$i..."; \
	$(MAKE) CURRENT_DIR=$(CURRENT_DIR)/$$i $(MFLAGS) -f Makefile all); \
	done

.PHONY: makesamples
makesamples:
	@for i in samples ; \
	do \
	(cd $$i; echo making samples in "$(CURRENT_DIR)/$$i..."; \
	$(MAKE) CURRENT_DIR=$(CURRENT_DIR)/$$i $(MFLAGS) -f Makefile all); \
	done

.PHONY: cleansubdirs 
cleansubdirs:
	-@for i in $(SUBDIRS) ; \
	do \
	(cd $$i; echo cleaning in "$(CURRENT_DIR)/$$i..."; \
	$(MAKE) CURRENT_DIR=$(CURRENT_DIR)/$$i -f makexpath4j $(MFLAGS) clean); \
	(cd $$i; echo cleaning in "$(CURRENT_DIR)/$$i..."; \
	$(MAKE) CURRENT_DIR=$(CURRENT_DIR)/$$i -f makexslt4j $(MFLAGS) clean); \
	done

.PHONY: cleancompat
cleancompat:
	-@for i in $(SUBDIRS) ; \
	do \
	(cd $$i; echo cleaning in "$(CURRENT_DIR)/$$i..."; \
	$(MAKE) CURRENT_DIR=$(CURRENT_DIR)/$$i -f makecompat $(MFLAGS) clean); \
	done

.PHONY: cleandocs
cleandocs:
	@for i in xdocs ; \
	do \
	(cd $$i; echo cleaning up x-docs "$(CURRENT_DIR)/$$i..."; \
	$(MAKE) CURRENT_DIR=$(CURRENT_DIR)/$$i $(MFLAGS) -f Makefile clean); \
	done

.PHONY: cleansamples
cleansamples:
	@for i in samples ; \
	do \
	(cd $$i; echo cleaning up samples "$(CURRENT_DIR)/$$i..."; \
	$(MAKE) CURRENT_DIR=$(CURRENT_DIR)/$$i $(MFLAGS) -f Makefile clean); \
	done

# End of file