#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
# 
#      http://www.apache.org/licenses/LICENSE-2.0
# 
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
#
#
# $Id: Makefile.in 570159 2007-08-27 15:43:48Z amassari $
#

###################################################################
#                    IMPORTANT NOTE                               #
###################################################################
# Before you try to run the Makefile, make sure you have two      #
# environment variables set.                                      #
#                                                                 #
# export XERCESCROOT=<the directory where you installed XERCES-C> #
#     export ICUROOT=<the directory where you installed ICU>      #
#                                                                 #
###################################################################
#all these setting come from the arguments passed in to runConfigure.
PLATFORM = @platform@
CC  = @cc@
CXX = @cxx@
CXXVER = @cxxver@
PREFIX = @prefix@
MESSAGELOADER=@messageloader@
TRANSCODER=@transcoder@
THREADS = @threads@
LIBTYPE = @libtype@
ARCH = @host_cpu@

GCC = @GCC@
GXX = @GXX@

#MACROS defining commands
MKDIR=mkdir
CP=cp
CD=cd
RM=rm
CHMODE=chmod

include ../../version.incl
include Makefile.incl

UTIL_DIR = util
SAX_DIR = sax
SAX2_DIR = sax2
INTERNAL_DIR = internal
FRAMEWORK_DIR = framework
DOM_DIR = dom
PARSERS_DIR = parsers
VALIDATORS_DIR = validators

PRODUCTNAME=xerces
PRODUCTVERSION=${VER}
BINTARGETNAME=${PRODUCTNAME}-c-${PLATFORM}-${CXX}-${PRODUCTVERSION}
BINTARGETDIR=${HOME}/${BINTARGETNAME}

all:: lib

compile:: Prepare Util Sax Internal Framework Parsers Sax2 Dom Validators

ifeq (${LIBTYPE},shared)
  ifeq (${PLATFORM},CYGWIN)
lib:: ${FQ_SO_NAME}
  else
lib:: ${FQ_REAL_NAME}
  endif
else # static
lib:: ${FQ_A_NAME}
endif

Prepare::
	@echo Preparing the directory structure for a build ...
	$Q${MKDIR} -p ${XML_OBJ_DIR}
	$Q${MKDIR} -p ${XML_OBJ_DEPDOM_DIR}
	$Q${MKDIR} -p ${XML_LIB_DIR}
	$Q${MAKE} -s -C $(UTIL_DIR) includes
	$Q${MAKE} -s -C $(SAX_DIR) includes
	$Q${MAKE} -s -C $(SAX2_DIR) includes
	$Q${MAKE} -s -C $(INTERNAL_DIR) includes
	$Q${MAKE} -s -C $(FRAMEWORK_DIR) includes
	$Q${MAKE} -s -C $(PARSERS_DIR) includes
	$Q${MAKE} -s -C $(VALIDATORS_DIR) includes
	$Q${MAKE} -s -C $(DOM_DIR) includes

Util::
	@echo Building "util"
	$Q${MAKE} -s -C $(UTIL_DIR) $(MAKE_FLAGS)

Sax::
	@echo Building "sax"
	$Q${MAKE} -s -C $(SAX_DIR) $(MAKE_FLAGS)


Internal::
	@echo Building "internal"
	$Q${MAKE} -s -C $(INTERNAL_DIR) $(MAKE_FLAGS)

Framework::
	@echo Building "framework"
	$Q${MAKE} -s -C $(FRAMEWORK_DIR) $(MAKE_FLAGS)

Parsers::
	@echo Building "parsers"
	$Q${MAKE} -s -C $(PARSERS_DIR) $(MAKE_FLAGS)

Sax2::
	@echo Building "sax2"
	$Q${MAKE} -s -C $(SAX2_DIR) $(MAKE_FLAGS)

Dom::
	@echo Building "dom"
	$Q${MAKE} -s -C $(DOM_DIR) $(MAKE_FLAGS)

Validators::
	@echo Building "validators"
	$Q${MAKE} -s -C $(VALIDATORS_DIR) $(MAKE_FLAGS)

ifeq (${LIBTYPE},shared)
  ifeq (${PLATFORM},CYGWIN)
${FQ_SO_NAME}:: compile
	@echo Building ${FQ_SO_NAME}
	$Q${MAKE} -C $(XML_OBJ) -k $(MAKE_FLAGS)
  else
${FQ_REAL_NAME}:: compile
	@echo toplevel Building ${FQ_REAL_NAME}
	$Q${MAKE} -C $(XML_OBJ) -k $(MAKE_FLAGS)
  endif
else # static
${FQ_A_NAME}:: compile
	@echo Building ${FQ_A_NAME}
	$Q${MAKE} -C $(XML_OBJ) -k $(MAKE_FLAGS)
endif

install::
	${MAKE} -C $(UTIL_DIR) $@
	${MAKE} -C $(SAX_DIR) $@
	${MAKE} -C $(SAX2_DIR) $@
	${MAKE} -C $(INTERNAL_DIR) $@
	${MAKE} -C $(FRAMEWORK_DIR) $@
	${MAKE} -C $(PARSERS_DIR) $@
	${MAKE} -C $(DOM_DIR) $@
	${MAKE} -C $(VALIDATORS_DIR) $@
	${MAKE} -C $(XML_OBJ) $@
	
clean::
	${MAKE} -C $(UTIL_DIR) $@
	${MAKE} -C $(SAX_DIR) $@
	${MAKE} -C $(SAX2_DIR) $@
	${MAKE} -C $(INTERNAL_DIR) $@
	${MAKE} -C $(FRAMEWORK_DIR) $@
	${MAKE} -C $(PARSERS_DIR) $@
	${MAKE} -C $(DOM_DIR) $@
	${MAKE} -C $(VALIDATORS_DIR) $@
	${MAKE} -C $(XML_OBJ) $@
	
distclean::
	${MAKE} -C $(UTIL_DIR) $@
	${MAKE} -C $(SAX_DIR) $@
	${MAKE} -C $(SAX2_DIR) $@
	${MAKE} -C $(INTERNAL_DIR) $@
	${MAKE} -C $(FRAMEWORK_DIR) $@
	${MAKE} -C $(PARSERS_DIR) $@
	${MAKE} -C $(DOM_DIR) $@
	${MAKE} -C $(VALIDATORS_DIR) $@
	${MAKE} -C $(XML_OBJ) $@
	rm -f Makefile config.cache config.log config.status
	find . -name Makefile -print -exec rm -f {} \;
	rm -Rf ${XML_OBJ_DIR} ${XML_OBJ_DEPDOM_DIR} ${XML_LIB_DIR} ../../include
	rm -f *~ core

#docs::

samples::
	${MAKE} -C ../../samples

copy:: lib samples
	@echo Make the target directory and its main subdirectories
	-${MKDIR} ${BINTARGETDIR}
	-${MKDIR} ${BINTARGETDIR}/bin
	-${MKDIR} ${BINTARGETDIR}/etc
	-${MKDIR} ${BINTARGETDIR}/lib
ifeq (${MESSAGELOADER},ICU)
	-${MKDIR} ${BINTARGETDIR}/msg
endif
ifeq (${MESSAGELOADER},ICONV)
	-${MKDIR} ${BINTARGETDIR}/msg
endif
	-${MKDIR} ${BINTARGETDIR}/include
	-${MKDIR} ${BINTARGETDIR}/samples
	-${MKDIR} ${BINTARGETDIR}/doc
	-${MKDIR} ${BINTARGETDIR}/doc/html

	@echo Populate the include output directory
	@echo Copying headers files ...
	-${CP} -Rf ${XERCESCROOT}/include/* ${BINTARGETDIR}/include
	-${RM} -rf ${BINTARGETDIR}/include/xercesc/dom/impl
ifeq (${TRANSCODER},ICU)
	-${CP} -Rf ${ICUROOT}/include/* ${BINTARGETDIR}/include
else
   ifeq (${MESSAGELOADER},ICU)
	-${CP} -Rf ${ICUROOT}/include/* ${BINTARGETDIR}/include
   endif
endif

	@echo Populate the binary output directory
	@echo Copying binary outputs ...
	-${CP} -Rf ${XERCESCROOT}/bin/* ${BINTARGETDIR}/bin
	-${CP} -Rf ${XERCESCROOT}/src/xercesc/config.status ${BINTARGETDIR}/etc
	-${CP} -Rf ${XERCESCROOT}/bin/obj/*.map ${BINTARGETDIR}/etc
	-${CP} -Rf ${XERCESCROOT}/lib/${REAL_NAME} ${BINTARGETDIR}/lib
	-${CD} ${BINTARGETDIR}/lib; ln -s ${REAL_NAME} ${SO_NAME}; ln -s ${REAL_NAME} ${LINK_NAME}
ifeq (${TRANSCODER},ICU)
	-${CP} -Rf ${ICUROOT}/lib/libicudata32.0.so ${BINTARGETDIR}/lib
	-${CP} -Rf ${ICUROOT}/lib/libicudata.so.32.0 ${BINTARGETDIR}/lib
	-${CP} -Rf ${ICUROOT}/lib/libicudata.sl.32.0 ${BINTARGETDIR}/lib
	-${CD} ${BINTARGETDIR}/lib; find . -name 'libicudata32.0.so' -exec ln -s {} libicudata.so \;
	-${CD} ${BINTARGETDIR}/lib; find . -name 'libicudata32.0.so' -exec ln -s {} libicudata32.so \;
	-${CD} ${BINTARGETDIR}/lib; find . -name 'libicudata.so.32.0' -exec ln -s {} libicudata.so \;
	-${CD} ${BINTARGETDIR}/lib; find . -name 'libicudata.so.32.0' -exec ln -s {} libicudata.so.32 \;
	-${CD} ${BINTARGETDIR}/lib; find . -name 'libicudata.sl.32.0' -exec ln -s {} libicudata.sl \;
	-${CD} ${BINTARGETDIR}/lib; find . -name 'libicudata.sl.32.0' -exec ln -s {} libicudata.sl.32 \;
	-${CP} -Rf ${ICUROOT}/lib/libicuuc32.0.so ${BINTARGETDIR}/lib
	-${CP} -Rf ${ICUROOT}/lib/libicuuc.so.32.0 ${BINTARGETDIR}/lib
	-${CP} -Rf ${ICUROOT}/lib/libicuuc.sl.32.0 ${BINTARGETDIR}/lib
	-${CD} ${BINTARGETDIR}/lib; find . -name 'libicuuc32.0.so' -exec ln -s {} libicuuc.so \;
	-${CD} ${BINTARGETDIR}/lib; find . -name 'libicuuc32.0.so' -exec ln -s {} libicuuc32.so \;
	-${CD} ${BINTARGETDIR}/lib; find . -name 'libicuuc.so.32.0' -exec ln -s {} libicuuc.so \;
	-${CD} ${BINTARGETDIR}/lib; find . -name 'libicuuc.so.32.0' -exec ln -s {} libicuuc.so.32 \;
	-${CD} ${BINTARGETDIR}/lib; find . -name 'libicuuc.sl.32.0' -exec ln -s {} libicuuc.sl \;
	-${CD} ${BINTARGETDIR}/lib; find . -name 'libicuuc.sl.32.0' -exec ln -s {} libicuuc.sl.32 \;
else
   ifeq (${MESSAGELOADER},ICU)
	-${CP} -Rf ${ICUROOT}/lib/libicudata32.0.so ${BINTARGETDIR}/lib
	-${CP} -Rf ${ICUROOT}/lib/libicudata.so.32.0 ${BINTARGETDIR}/lib
	-${CP} -Rf ${ICUROOT}/lib/libicudata.sl.32.0 ${BINTARGETDIR}/lib
	-${CD} ${BINTARGETDIR}/lib; find . -name 'libicudata32.0.so' -exec ln -s {} libicudata.so \;
	-${CD} ${BINTARGETDIR}/lib; find . -name 'libicudata32.0.so' -exec ln -s {} libicudata32.so \;
	-${CD} ${BINTARGETDIR}/lib; find . -name 'libicudata.so.32.0' -exec ln -s {} libicudata.so \;
	-${CD} ${BINTARGETDIR}/lib; find . -name 'libicudata.so.32.0' -exec ln -s {} libicudata.so.32 \;
	-${CD} ${BINTARGETDIR}/lib; find . -name 'libicudata.sl.32.0' -exec ln -s {} libicudata.sl \;
	-${CD} ${BINTARGETDIR}/lib; find . -name 'libicudata.sl.32.0' -exec ln -s {} libicudata.sl.32 \;
	-${CP} -Rf ${ICUROOT}/lib/libicuuc32.0.so ${BINTARGETDIR}/lib
	-${CP} -Rf ${ICUROOT}/lib/libicuuc.so.32.0 ${BINTARGETDIR}/lib
	-${CP} -Rf ${ICUROOT}/lib/libicuuc.sl.32.0 ${BINTARGETDIR}/lib
	-${CD} ${BINTARGETDIR}/lib; find . -name 'libicuuc32.0.so' -exec ln -s {} libicuuc.so \;
	-${CD} ${BINTARGETDIR}/lib; find . -name 'libicuuc32.0.so' -exec ln -s {} libicuuc32.so \;
	-${CD} ${BINTARGETDIR}/lib; find . -name 'libicuuc.so.32.0' -exec ln -s {} libicuuc.so \;
	-${CD} ${BINTARGETDIR}/lib; find . -name 'libicuuc.so.32.0' -exec ln -s {} libicuuc.so.32 \;
	-${CD} ${BINTARGETDIR}/lib; find . -name 'libicuuc.sl.32.0' -exec ln -s {} libicuuc.sl \;
	-${CD} ${BINTARGETDIR}/lib; find . -name 'libicuuc.sl.32.0' -exec ln -s {} libicuuc.sl.32 \;
   endif
endif
ifeq (${MESSAGELOADER},ICU)
	-${CP} -f ${XERCESCROOT}/msg/*.res ${BINTARGETDIR}/msg
endif
ifeq (${MESSAGELOADER},ICONV)
	-${CP} -f ${XERCESCROOT}/msg/*.cat ${BINTARGETDIR}/msg
endif
	-${RM} -rf ${BINTARGETDIR}/bin/obj

	@echo Populate the samples directory
	@echo Copying sample files ...
	-${CP} -Rf ${XERCESCROOT}/samples/* 	${BINTARGETDIR}/samples
	-${RM2} `find ${BINTARGETDIR}/samples -name Makefile`

	@echo Populate the docs directory
	@echo Copying documentation ..
	-${CP} -f ${XERCESCROOT}/doc/index.html ${BINTARGETDIR}/doc
	-${CP} -Rf ${XERCESCROOT}/doc/html/* ${BINTARGETDIR}/doc/html
	-${CP} -f ${XERCESCROOT}/*.html ${BINTARGETDIR}
	-${CP} -f ${XERCESCROOT}/*.txt ${BINTARGETDIR}
	-${CP} -f ${XERCESCROOT}/version.incl ${BINTARGETDIR}

	@echo Change the directory permissions
	-${CHMODE} 644 `find ${BINTARGETDIR} -type f`
	-${CHMODE} 755 ${BINTARGETDIR}/bin/* ${BINTARGETDIR}/lib/*
	-${CHMODE} +x ${BINTARGETDIR}/samples/runConfigure ${BINTARGETDIR}/samples/configure ${BINTARGETDIR}/samples/install-sh
	-${CHMODE} +x ${BINTARGETDIR}/samples/config.sub ${BINTARGETDIR}/samples/config.guess ${BINTARGETDIR}/samples/config.status
	-${CHMODE} 755 `find ${BINTARGETDIR} -type d`

tarball:: copy
	@echo Now package it all up using tar
	@echo TARing up all files ...
	cd ${BINTARGETDIR}/..; tar -cvf ${BINTARGETDIR}.tar ${BINTARGETNAME}/
	@echo Finally compress the files
	@echo Compressing ${BINTARGETDIR}.tar ...
	gzip ${BINTARGETDIR}.tar

zip:: copy
	${CD} ${BINTARGETDIR}/..
	@echo ZIPping up all files ...
	zip -r ${BINTARGETDIR}.zip ${BINTARGETDIR}


package_bin:: zip tarball

