# Decide if we're on unix or DOS
ifneq ($(findstring WIN,$(shell uname)),)
# DOS
CLPATHSEP := ;
else 
# UNIX
CLPATHSEP := :
endif

#
# Define the environment commands and/or utilities
#
XERCES_CLASSPATH = $(TOP)/src$(CLPATHSEP)$(TOP)/samples
CLPATH = $(XERCES_CLASSPATH)$(CLPATHSEP)$(CLASSPATH)

STYLEBOOK_CLPATH = $(TOP)/tools/xalan.jar$(CLPATHSEP)$(TOP)/tools/xerces.jar$(CLPATHSEP)$(XERCES_CLASSPATH)$(CLPATHSEP)$(TOP)/tools/stylebook-1.0-b2.jar

SB_CLPATH = $(STYLEBOOK_CLPATH)$(CLPATHSEP)$(CLASSPATH)

JAR = jar
JAVAC = javac
ifeq ($(JDK12BIN),)
JAVA12 = java
JAVADOC12 = javadoc
else
JAVA12 = $(JDK12BIN)/java
JAVADOC12 = $(JDK12BIN)/javadoc
endif
STYLEBOOK = $(JAVA12) -classpath "$(SB_CLPATH)" org.apache.stylebook.StyleBook

MKDIR = mkdir -p 
RM = -rm -f
CP = cp
MV = mv

#
# Define the version strings
#
PRODUCTVERSION = 1_2_0
PRODUCTVERSION_DOT = 1.2.0
PRODUCTNAME = Xerces

#define the jar file names

JARFILE = xerces.jar
SAMPLESJARFILE = xercesSamples.jar

#define the package value	
PACKAGES = \
	org.apache.xerces.framework \
	org.apache.xerces.parsers \
	org.apache.xerces.dom \
	org.apache.xerces.dom.events \
	org.apache.xml.serialize \
	org.apache.html.dom \
	org.apache.wml \
	org.apache.wml.dom \
	org.w3c.dom \
	org.w3c.dom.events \
	org.w3c.dom.range \
	org.w3c.dom.traversal \
	org.w3c.dom.html \
	org.xml.sax \
	org.xml.sax.ext \
	org.xml.sax.helpers \
	javax.xml.parsers


BINZIPFILE = ${PRODUCTNAME}-J-bin.${PRODUCTVERSION_DOT}.zip
SRCZIPFILE = ${PRODUCTNAME}-J-src.${PRODUCTVERSION_DOT}.zip

BINTARFILE = ${PRODUCTNAME}-J-bin.${PRODUCTVERSION_DOT}.tar
SRCTARFILE = ${PRODUCTNAME}-J-src.${PRODUCTVERSION_DOT}.tar

BINJARFILE = ${PRODUCTNAME}-J-bin.${PRODUCTVERSION_DOT}.jar
SRCJARFILE = ${PRODUCTNAME}-J-src.${PRODUCTVERSION_DOT}.jar

# Common rules

.SUFFIXES: .class .java

.java.class:
	${JAVAC} -classpath "$(CLPATH)" $<
	touch ${TOP}/src/classfiles_updated

all:: dirs compile 

compile:: ${TARGETS}

clean:: cleandirs
	@$(RM) *.class

dirs::
	@if [ -n "$(DIRS)" ]; \
	then for i in $(DIRS) __bogus__; do \
	       if [ $$i != __bogus__ ] ; then \
		echo "$(MAKE) -C $$i"; $(MAKE) -C $$i; \
		fi \
	     done; \
	fi

cleandirs::
	@if [ -n "$(DIRS)" ]; \
	then for i in $(DIRS);do \
		echo "$(MAKE) -C $$i clean"; $(MAKE) -C $$i clean; \
	     done; \
	fi
