#
# The Apache Software License, Version 1.1
# 
# Copyright (c) 1999 The Apache Software Foundation.  All rights 
# reserved.
# 
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
# 
# 1. Redistributions of source code must retain the above copyright
#    notice, this list of conditions and the following disclaimer. 
# 
# 2. Redistributions in binary form must reproduce the above copyright
#    notice, this list of conditions and the following disclaimer in
#    the documentation and/or other materials provided with the
#    distribution.
# 
# 3. The end-user documentation included with the redistribution,
#    if any, must include the following acknowledgment:  
#       "This product includes software developed by the
#        Apache Software Foundation (http://www.apache.org/)."
#    Alternately, this acknowledgment may appear in the software itself,
#    if and wherever such third-party acknowledgments normally appear.
# 
# 4. The names "Xerces" and "Apache Software Foundation" must
#    not be used to endorse or promote products derived from this
#    software without prior written permission. For written 
#    permission, please contact apache\@apache.org.
# 
# 5. Products derived from this software may not be called "Apache",
#    nor may "Apache" appear in their name, without prior written
#    permission of the Apache Software Foundation.
# 
# THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
# ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
# ====================================================================
# 
# This software consists of voluntary contributions made by many
# individuals on behalf of the Apache Software Foundation, and was
# originally based on software copyright (c) 1999, International
# Business Machines, Inc., http://www.ibm.com .  For more information
# on the Apache Software Foundation, please see
# <http://www.apache.org/>.
# 
#
# $Log$
# Revision 1.8  1999/12/14 23:53:18  rahulj
# Removed the offending Ctrl-M's from the commit message
# logs which was giving packaging problems.
#
# PR:
# Obtained from:
# Submitted by:
# Reviewed by:
#
# Revision 1.7  1999/12/09 00:48:19  aruna1
# ICU library inclusion in ALLLIBS due to solaris failure
#
# Revision 1.6  1999/12/01 17:16:15  rahulj
# Added support for IRIX 6.5.5 using SGI MIPSpro C++ 7.3 and 7.21 generating 32 bit objects. Changes submitted by Marc Stuessel
#
# Revision 1.5  1999/11/23 01:59:28  rahulj
# Code now works under HPUX 11. Tested inmemory message loader.
# Revamped makefiles. Builds with both DCE threads as well as pthread libraries.
#
# Revision 1.4  1999/11/17 22:36:31  rahulj
# Code works with ICU transcoding service
#
# Revision 1.3  1999/11/12 20:38:49  rahulj
# Replaced XML4CROOT with XERCESCROOT.
#
# Revision 1.1.1.1  1999/11/09 01:02:55  twl
# Initial checkin
#
# Revision 1.4  1999/11/08 20:44:09  rahul
# Swat for adding in Product name and CVS comment log variable.
#
#

###################################################################
#                    IMPORTANT NOTE                               #
###################################################################
# Before you try to run the Makefile, make sure you have set      #
# the following environment variables properly.                   #
#                                                                 #
# export XERCESCROOT=<the directory where you installed XRECES-C> #
#                                                                 #
# In case you intend to use either the ICU transcoder or the      #
# ICU message loader, you must set ICUROOT correctly.             #
# export ICUROOT=<the directory where you installed ICU>          #
#                                                                 #
# For netaccessor, if you intend to use libwww, then you must     #
# also set another environment variable called LIBWWWROOT         #
# export LIBWWWROOT=<the directory where you installed libwww>    #
###################################################################

###################################################################
#         SPECIAL INSTRUCTIONS FOR OS/390 BATCH MODE              #
###################################################################
# If you are going to do the OS390BATCH build, make sure you have #
# the OS390BATCH environment variable set.                        #
#                                                                 #
#   export OS390BATCH=1                                           #
#                                                                 #
# Also, search for the LOADMOD variable and set it to your        #
# LOADMOD dataset. Make sure you have at least UPDATE access to   #
# the dataset.                                                    #
###################################################################

ALL:    all

ALL_OBJECTS_DIR   = ${XERCESCROOT}/obj

XML_BUILD_OPTIONS = ${CXXFLAGS}

XML_LIB_DIR = $(XERCESCROOT)/lib
XML_INC_DIR = $(XERCESCROOT)/include
XML_INCL    = -I$(XML_INC_DIR)

####################### PLATFORM DEPENDENCIES #####################

#=============== SOLARIS SPECIFIC OPTIONS =========================
ifeq (${PLATFORM}, SOLARIS)
  ifeq (${CXX}, g++)
	PLATFORM_COMPILE_OPTIONS = -fPIC -instances=static -D${PLATFORM} -D_REENTRANT
	MAKE_SHARED = ${CXX} -D${PLATFORM} -shared
	MAKE_SHARED_C = ${CC} -D${PLATFORM} -shared
	ifeq (${TRANSCODER}, ICU)
		ALLLIBS = ${LIBS} -L/usr/lib -L/usr/local/lib -L/usr/ccs/lib -licu-uc -lm -lw -lgen
	else
		ALLLIBS = ${LIBS} -L/usr/lib -L/usr/local/lib -L/usr/ccs/lib -lm -lw -lgen
	endif
  else
	PLATFORM_COMPILE_OPTIONS = -KPIC -mt -xs -instances=static -features=rtti -D${PLATFORM} -D_REENTRANT
	MAKE_SHARED = ${CXX} -D${PLATFORM} -G
	MAKE_SHARED_C = ${CC} -D${PLATFORM} -G
	ifeq (${TRANSCODER}, ICU)
		EXTRA_LINK_OPTIONS = ${LIBS} -L/usr/local/SUNWspro/lib -L/usr/ccs/lib -licu-uc -lm -lw -lC -lc -lgen
	else
		EXTRA_LINK_OPTIONS = ${LIBS} -L/usr/local/SUNWspro/lib -L/usr/ccs/lib -lm -lw -lC -lc -lgen
	endif
  endif
  SHLIBSUFFIX=.so
endif

#================= AIX SPECIFIC OPTIONS ===========================
ifeq (${PLATFORM}, AIX)

#PLATFORM_CPP_COMPILER = xlC_r
#PLATFORM_C_COMPILER = xlc_r
#ifdef ICUROOT
#  ALLLIBS = ${LIBS} -L/usr/lpp/xlC/lib -L${ICUROOT}/lib -licu-uc -lbsd
#else
#  ALLLIBS = -L/usr/lpp/xlC/lib -lbsd
#endif

ifeq (${TRANSCODER}, ICU)
	ALLLIBS = ${LIBS} -L/usr/lpp/xlC/lib -licu-uc -lbsd
else
	ALLLIBS = ${LIBS} -L/usr/lpp/xlC/lib -lbsd
endif
PLATFORM_COMPILE_OPTIONS = -qnotempinc -D_THREAD_SAFE
MAKE_SHARED = makeC++SharedLib_r -p 5000
MAKE_SHARED_C = makeC++SharedLib_r -p 5000
SHLIBSUFFIX=.a
endif

#=============== LINUX SPECIFIC OPTIONS =========================
ifeq (${PLATFORM}, LINUX)
PLATFORM_COMPILE_OPTIONS = -fpic -instances=static -D${PLATFORM} -D_REENTRANT
MAKE_SHARED = ${CXX} -D${PLATFORM} -shared -fpic
MAKE_SHARED_C = ${CC} -D${PLATFORM} -shared -fpic
ifeq (${TRANSCODER}, ICU)
	ALLLIBS = ${LIBS} -L/usr/lib -L/usr/local/lib -L/usr/ccs/lib -licu-uc -lc
else
	ALLLIBS = ${LIBS} -L/usr/lib -L/usr/local/lib -L/usr/ccs/lib -lc
endif
SHLIBSUFFIX=.so
endif

#=============== IRIX SPECIFIC OPTIONS ============================
ifeq (${PLATFORM}, IRIX)
PLATFORM_COMPILE_OPTIONS = -mips4 -LANG:pch -LANG:std -O2 \
                           -D${PLATFORM} -D_REENTRANT \
                           -I/usr/local/include
OBJ_OUT=${XML4CROOT}/obj/
MAKE_SHARED = ${CXX} -D${PLATFORM} -shared
MAKE_SHARED_C = ${CC} -D${PLATFORM} -shared
ALLLIBS = -L/usr/lib32 -lC
SHLIBSUFFIX=.so
endif


#=============== OS2 SPECIFIC OPTIONS =========================
ifeq (${PLATFORM}, OS/2)
#PLATFORM_CPP_COMPILER = icc
#PLATFORM_C_COMPILER = icc
PLATFORM_LIBRARIES= CPPOM30.LIB os2386.lib mmpm2.lib
PLATFORM_COMPILE_OPTIONS = /C+ /Gd- /Ge- /Gm+ /Gs- /Re /J+  /Ms /Sm /Sn /Ss+
MAKE_SHARED = ilink /nofree
MAKE_SHARED_C = ilink /nofree
EXTRA_LINK_OPTIONS = /map /nod /noe /noi /packcode /packdata /exepack /align:4
SHLIBSUFFIX= .dll
ifneq (${DEBUG}, 1)
XML_BUILD_OPTIONS = -2
endif
endif

#================= HP SPECIFIC OPTIONS ===========================

ifeq (${PLATFORM}, HPUX)

  OSVERDEFINE=HPUX11
  ifeq (${OSVER}, HPUX10)
    OSVERDEFINE=HPUX10
  endif

  ifeq (${CXX}, aCC)
    PLATFORM_COMPILE_OPTIONS = -D_HP_UX -DHPaCC \
        -D${OSVERDEFINE} +DAportable +z +inst_compiletime
    MAKE_SHARED = ${CXX} -D${PLATFORM} -b
    MAKE_SHARED_C = ${CC} -D${PLATFORM} -b
	ifeq (${TRANSCODER}, ICU)
        ALLLIBS = ${LIBS} -licu-uc -lCsup -lstream
	else
        ALLLIBS = ${LIBS} -lCsup -lstream
    endif
    SHLIBSUFFIX=.sl
  else
    TEMPLATESREPOSITORY = ${ALL_OBJECTS_DIR}/ptrepository
    COMMON_COMPILE_OPTIONS = -D_HP_UX -DXML4C_TMPLSINC \
        -D${OSVERDEFINE} +DAportable +eh +z -z +a1
    ifeq ($(MODULE), dom)
      PLATFORM_COMPILE_OPTIONS  = -DDOM_PROJ $(COMMON_COMPILE_OPTIONS)
    else
      PLATFORM_COMPILE_OPTIONS  = $(COMMON_COMPILE_OPTIONS) -ptr${TEMPLATESREPOSITORY}
    endif
    MAKE_SHARED = $(CXX) $(PLATFORM_COMPILE_OPTIONS) $(XML_INCL)
    MAKE_SHARED_C = $(CC) $(PLATFORM_COMPILE_OPTIONS) $(XML_INCL)
	ifeq (${TRANSCODER}, ICU)
        ALLLIBS = ${LIBS} -licu-uc
	else
        ALLLIBS = ${LIBS}
	endif
    EXTRA_LINK_OPTIONS = -b -Wl,+s -Wl,-a,shared
    SHLIBSUFFIX=.sl
  endif
endif


#================ OS/390 SPECIFIC OPTIONS =========================
ifeq (${PLATFORM}, OS390)
PLATFORM_CPP_COMPILER = _CXX_CXXSUFFIX="cpp" _CXX_STEPS="-1" c++
PLATFORM_C_COMPILER = _CXX_CXXSUFFIX="cpp" _CXX_STEPS="-1" cc
PLATFORM_LIBRARIES=
## OS390BATCH
ifeq (${OS390BATCH},1)
PLATFORM_COMPILE_OPTIONS =-Wc,dll,expo -W0,"langlvl(extended)" -D${PLATFORM} -D_OPEN_THREADS -D_XOPEN_SOURCE_EXTENDED -DOS390BATCH
else
PLATFORM_COMPILE_OPTIONS =-Wc,dll,expo -W0,"langlvl(extended)" -D${PLATFORM} -D_OPEN_THREADS -D_XOPEN_SOURCE_EXTENDED
endif
MAKE_SHARED = ${PLATFORM_CPP_COMPILER} -D${PLATFORM} -W l,dll
MAKE_SHARED_C = ${PLATFORM_C_COMPILER} -D${PLATFORM} -W l,dll
## OS390BATCH
ifeq (${OS390BATCH},1)
LOADMOD = USERID.LOAD
LOADEXP = USERID.EXP
ALLLIBS = "//'${LOADEXP}(ICUUC)'"
else
ALLLIBS = ${ICUROOT}/lib/libicu-uc.x
endif
EXTRA_LINK_OPTIONS =
SHLIBSUFFIX=.dll
OS390SIDEDECK=.x
ifneq (${DEBUG}, 1)
  XML_BUILD_OPTIONS = -2
endif
endif

###################### STANDARD TOOLS #############################
CP = -cp -fp
RM = -rm -f
CAT = cat
AR = ar -cqv
CD = cd
CC1     = ${CXX} ${PLATFORM_COMPILE_OPTIONS}
JUST_CC = ${CC} -D${PLATFORM}
ECHO = echo
CREATE_DEPENDS_FILE = echo "" > depends
MAKE_DEPEND = ${CC1} -E -xM


##################### HELPER MACROS ###############################
DEPFILE = depends
LINKLIB = $(XML_LIB_DIR)

######################### SUFFIX RULES ############################
.SUFFIXES:
.SUFFIXES: .cpp .c .o

.cpp.o:
	$(CC1) -c $(XML_BUILD_OPTIONS) $(XML_DEF) $(XML_INCL) $(EXTRA_COMPILE_OPTIONS) -o $(@) $(<)
ifeq (${PLATFORM}, IRIX)
	$(CC1) -c $(XML_BUILD_OPTIONS) $(XML_DEF) $(XML_INCL) $(EXTRA_COMPILE_OPTIONS) -o $(OBJ_OUT)$(@) $(<)
endif

.c.o:
	$(JUST_CC) -c $(XML_BUILD_OPTIONS) $(XML_DEF) $(XML_INCL) $(EXTRA_COMPILE_OPTIONS) -o $(@) $(<)
