#
# The Apache Software License, Version 1.1
#
# Copyright (c) 1999-2001 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/>.
#
#
# $Id$
#

###################################################################
#                    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,                                                           #
#                                                                 #
#   export LOADMOD=USERID.LOAD                                    #
#   export LOADEXP=USERID.EXP                                     #
#                                                                 #
# to specify your LOADMOD and the definition sidedeck dataset.    #
###################################################################

ALL:    all

XML_BUILD_OPTIONS = ${CXXFLAGS}

XML_LIB_DIR = $(XERCESCROOT)/lib
XML_INC_DIR = $(XERCESCROOT)/include/xercesc
XML_OBJ_DIR = ${XERCESCROOT}/obj/${PLATFORM}
XML_OBJ	    = ${XERCESCROOT}/obj
XML_INCL = -I$(XERCESCROOT)/include
ifeq (${SYSOVR},OS400)
PLATFORM = OS400
endif
TO = o
RM2 = rm -f
## Compiler switch to embed a library name
## default value empty
LD_SONAME =

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

#=============== SOLARIS SPECIFIC OPTIONS =========================
ifeq (${PLATFORM}, SOLARIS)
  ifeq (${GXX}, yes)
    PLATFORM_COMPILE_OPTIONS = -fPIC -D${PLATFORM} -D_REENTRANT
    MAKE_SHARED = ${CXX} -D${PLATFORM} -shared ${LDFLAGS}
    MAKE_SHARED_C = ${CC} -D${PLATFORM} -shared ${LDFLAGS}
    ifeq (${TRANSCODER}, ICU)
        ALLLIBS = ${LIBS} -L/usr/lib -L/usr/local/lib -L/usr/ccs/lib \
                  -licuuc -licudata -lm -lgen
    else
        ALLLIBS = ${LIBS} -L/usr/lib -L/usr/local/lib -L/usr/ccs/lib \
                  -lm  -lgen
    endif
  else
	PLATFORM_COMPILE_OPTIONS = -KPIC -mt -xs -ptr$(XML_OBJ_DIR) \
                               -features=rtti -D${PLATFORM} -D_REENTRANT
    MAKE_SHARED = ${CXX} -D${PLATFORM} -G -ptr$(XML_OBJ_DIR) ${LDFLAGS}
    MAKE_SHARED_C = ${CC} -D${PLATFORM} -G ${LDFLAGS}
    ifeq (${TRANSCODER}, ICU)
        ALLLIBS = -mt -licuuc -licudata ${LIBS}
    else
        ALLLIBS = -mt ${LIBS}
    endif
  endif
  SHLIBSUFFIX=.so
  ## Compiler switch to embed a library name
  LD_SONAME = -h ${SO_NAME}
endif

#=============== UNIXWARE SPECIFIC OPTIONS =========================
ifeq (${PLATFORM}, UNIXWARE)
  ifeq (${GXX}, yes)
    PLATFORM_COMPILE_OPTIONS = -fPIC -D${PLATFORM} -D_REENTRANT
    MAKE_SHARED = ${CXX} -D${PLATFORM} -shared ${LDFLAGS}
    MAKE_SHARED_C = ${CC} -D${PLATFORM} -shared ${LDFLAGS}
    ifeq (${TRANSCODER}, ICU)
        ALLLIBS = ${LIBS} -L/usr/lib -L/usr/local/lib -L/usr/ccs/lib \
                  -licuuc -licudata -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 \
                               -D${PLATFORM} -D_REENTRANT
    MAKE_SHARED = ${CXX} -D${PLATFORM} -G ${LDFLAGS}
    MAKE_SHARED_C = ${CC} -D${PLATFORM} -G ${LDFLAGS}
    ifeq (${TRANSCODER}, ICU)
        ALLLIBS = ${LIBS} -L/usr/local/lib -L/usr/ccs/lib \
                  -licuuc -licudata -lm -lw -lC -lc -lgen
    else
        ALLLIBS = ${LIBS} -L/usr/local/lib -L/usr/ccs/lib \
                  -lm -lw -lC -lc -lgen
    endif
  endif
  SHLIBSUFFIX=.so
endif

#=============== OPENSERVER SPECIFIC OPTIONS =========================
ifeq (${PLATFORM}, OPENSERVER)
  ifeq (${GXX}, yes)
	COMMON_COMPILE_OPTIONS = -D${PLATFORM} -fPIC
    ifeq (${THREADS}, none)
      PLATFORM_COMPILE_OPTIONS = ${COMMON_COMPILE_OPTIONS}
    else
      PLATFORM_COMPILE_OPTIONS = ${COMMON_COMPILE_OPTIONS} -D_REENTRANT
    endif
    MAKE_SHARED = ${CXX} -D${PLATFORM} -G ${LDFLAGS}
    MAKE_SHARED_C = ${CC} -D${PLATFORM} -G ${LDFLAGS}
	EXTRA_LINK_OPTIONS = -Wl,-h,${LIBNAME}${VER}${SHLIBSUFFIX}
  else
    PLATFORM_COMPILE_OPTIONS = -D${PLATFORM} -belf -KPIC
    MAKE_SHARED = ${CXX} -D${PLATFORM} -belf -G ${LDFLAGS}
    MAKE_SHARED_C = ${CC} -D${PLATFORM} -belf -G ${LDFLAGS}
  endif
  ifeq (${TRANSCODER}, ICU)
    ALLLIBS = ${LIBS} -licu-uc -licudata
  else
    ALLLIBS = ${LIBS}
  endif
  SHLIBSUFFIX=.so
endif

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

PLATFORM_CPP_COMPILER = c++
PLATFORM_C_COMPILER = cc
ifeq (${TRANSCODER}, ICU)
  PLATFORM_COMPILE_OPTIONS = -KPIC -Kthread -D${PLATFORM}
  ALLLIBS = ${LIBS} -L${ICUROOT}/lib -lm -lgen -licuuc
else
  PLATFORM_COMPILE_OPTIONS = -KPIC -Kthread -D${PLATFORM}
  ALLLIBS = ${LIBS} -lm -lgen
endif
OBJ_OUT=${ALL_OBJECTS_DIR}/
MAKE_SHARED = ${PLATFORM_CPP_COMPILER} -D${PLATFORM} -G ${LDFLAGS}
MAKE_SHARED_C = ${PLATFORM_C_COMPILER} -D${PLATFORM} -G ${LDFLAGS}
EXTRA_LINK_OPTIONS = -lm -lgen
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 -licuuc -licudata -lbsd
#else
#  ALLLIBS = -L/usr/lpp/xlC/lib -lbsd
#endif

ifeq (${TRANSCODER}, ICU)
    ALLLIBS = ${LIBS} -L/usr/lpp/xlC/lib -licuuc -licudata
else
    ALLLIBS = ${LIBS} -L/usr/lpp/xlC/lib
endif
PLATFORM_COMPILE_OPTIONS = -qnotempinc -D_THREAD_SAFE

ifeq (${BITSTOBUILD}, 64)
    MAKE_SHARED = makeC++SharedLib_r -p 5000 -brtl ${LDFLAGS} -X64
    MAKE_SHARED_C = makeC++SharedLib_r -p 5000 -brtl ${LDFLAGS} -X64
else
    MAKE_SHARED = makeC++SharedLib_r -p 5000 -brtl ${LDFLAGS}
    MAKE_SHARED_C = makeC++SharedLib_r -p 5000 -brtl ${LDFLAGS}
endif

EXTRA_LINK_OPTIONS = -bmap:$(XML_OBJ)/${LIBNAME}${SO_TARGET_VERSION}.${SO_TARGET_VERSION_MAJOR}.map
SHLIBSUFFIX=.so
## Compiler switch to embed a library name
LD_SONAME =

endif

#================= OS400 SPECIFIC OPTIONS ==========================
ifeq (${PLATFORM}, OS400)
ifeq (${SYSOVR},OS400)
MYCC = /afs/rchland.ibm.com/usr2/phkramer/bin/tvcc.pl
else
MYCC = icc
endif
CXX = $(MYCC)
CC = $(MYCC)
JUSTCC = $(MYCC)
XML_INCL    += -I${ICUROOT}/include
ifeq (${SYSOVR},OS400)
PLATFORM_COMPILE_OPTIONS = -qnotempinc
MAKE_SHARED = makeC++SharedLib_r -p 5000 ${LDFLAGS}
MAKE_SHARED_C = makeC++SharedLib_r -p 5000 ${LDFLAGS}
TO = qwobj
SHLIBSUFFIX=.a
else
PLATFORM_COMPILE_OPTIONS = -qnotempinc  -D_MULTI_THREADED -D${PLATFORM}
PLATFORM_C_COMPILE_OPTIONS =  -v  -D_MULTI_THREADED -D${PLATFORM}
MAKE_SHARED = ld -v ${LDFLAGS}
MAKE_SHARED_C = ld -v ${LDFLAGS}
SHLIBSUFFIX=.o
endif
ifeq (${TRANSCODER}, ICU)
ifeq (${SYSOVR},OS400)
EXTRA_LINK_OPTIONS = -licuuc -licudata -lbsd
else
EXTRA_LINK_OPTIONS = -lQZUUC
endif
endif
EXTRA_COMPILE_OPTIONS = -I. -g
EXTRA_LINK_OPTIONS = -q OPTION='*DUPVAR *DUPPROC'

RM2 = -del

endif

#=============== LINUX SPECIFIC OPTIONS =========================
ifeq (${PLATFORM}, LINUX)
PLATFORM_COMPILE_OPTIONS = -fPIC -D${PLATFORM} -D_REENTRANT
MAKE_SHARED = ${CXX} -D${PLATFORM} -shared -fPIC ${LDFLAGS}
MAKE_SHARED_C = ${CC} -D${PLATFORM} -shared -fPIC ${LDFLAGS}
ifeq (${TRANSCODER}, ICU)
    ALLLIBS = ${LIBS} -L/usr/lib -L/usr/local/lib -L/usr/ccs/lib -licuuc -licudata
else
    ALLLIBS = ${LIBS} -L/usr/lib -L/usr/local/lib -L/usr/ccs/lib
endif
EXTRA_LINK_OPTIONS = -Xlinker -Map -Xlinker $(XML_OBJ)/${SO_NAME}.map
SHLIBSUFFIX=.so
## Compiler switch to embed a library name
LD_SONAME = -Wl,-soname,${SO_NAME}
endif

#=============== FREEBSD SPECIFIC OPTIONS =========================
ifeq (${PLATFORM}, FREEBSD)
MAKE_SHARED = ${CXX} -D${PLATFORM} -shared -fPIC ${LDFLAGS}
MAKE_SHARED_C = ${CC} -D${PLATFORM} -shared -fPIC ${LDFLAGS}
ifeq (${TRANSCODER}, ICU)
    PLATFORM_COMPILE_OPTIONS = -fPIC -D${PLATFORM} -I/usr/local/include
    ALLLIBS = ${LIBS} -L/usr/local/lib -licuuc -L${ICUROOT} -licudata -lgcc
else
    PLATFORM_COMPILE_OPTIONS = -fPIC -D${PLATFORM}
    ALLLIBS = ${LIBS}
endif
SHLIBSUFFIX=.so
## Compiler switch to embed a library name
LD_SONAME = -Wl,-soname,${SO_NAME}
endif

#=============== IRIX SPECIFIC OPTIONS ============================
ifeq (${PLATFORM}, IRIX)
PLATFORM_COMPILE_OPTIONS = -LANG:pch -LANG:std -O2 \
                           -D${PLATFORM} -D_REENTRANT \
                           -I/usr/local/include
MAKE_SHARED = ${CXX} -D${PLATFORM} -shared ${LDFLAGS}
MAKE_SHARED_C = ${CC} -D${PLATFORM} -shared ${LDFLAGS}
ifeq (${TRANSCODER}, ICU)
    ALLLIBS = ${LIBS} -lC -licuuc -licudata
else
    ALLLIBS = ${LIBS} -lC
endif
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 ${LDFLAGS}
MAKE_SHARED_C = ilink /nofree ${LDFLAGS}
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
    MAKE_SHARED = ${CXX} -D${PLATFORM} ${LDFLAGS}
    MAKE_SHARED_C = ${CC} -D${PLATFORM} ${LDFLAGS}
    ifeq (${TRANSCODER}, ICU)
        ALLLIBS = ${LIBS} -licuuc -licudata
    else
        ALLLIBS = ${LIBS}
    endif
    EXTRA_LINK_OPTIONS = -b -Wl,+s -Wl,+b,.
    SHLIBSUFFIX=.sl
  else
    TEMPLATESREPOSITORY = ${XML_OBJ_DIR}/ptrepository
    COMMON_COMPILE_OPTIONS = -D_HP_UX -DXERCES_TMPLSINC \
        -D${OSVERDEFINE} +DAportable +eh +Z -Z +a1 +d
    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) ${LDFLAGS}
    MAKE_SHARED_C = $(CC) $(PLATFORM_COMPILE_OPTIONS) $(XML_INCL) ${LDFLAGS}
    ifeq (${TRANSCODER}, ICU)
        ALLLIBS = ${LIBS} -licuuc -licudata
    else
        ALLLIBS = ${LIBS}
    endif
    EXTRA_LINK_OPTIONS = -b -Wl,+s -Wl,+b,. -Wl,-a,shared
    SHLIBSUFFIX=.sl
  endif
  ## Compiler switch to embed a library name
  LD_SONAME = -Wl,+h,${SO_NAME}
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 -W0,"langlvl(extended)" -D${PLATFORM} -D_OPEN_THREADS -D_XOPEN_SOURCE_EXTENDED -DOS390BATCH
else
PLATFORM_COMPILE_OPTIONS =-Wc,dll -W0,"langlvl(extended)" -D${PLATFORM} -D_OPEN_THREADS -D_XOPEN_SOURCE_EXTENDED
endif
MAKE_SHARED = ${PLATFORM_CPP_COMPILER} -D${PLATFORM} -W l,dll ${LDFLAGS}
MAKE_SHARED_C = ${PLATFORM_C_COMPILER} -D${PLATFORM} -W l,dll ${LDFLAGS}
ifeq (${TRANSCODER}, ICU)
## OS390BATCH
    ifeq (${OS390BATCH},1)
	ALLLIBS = "//'${LOADEXP}(IXM22UCX)'"
    else
	ALLLIBS = ${ICUROOT}/lib/libicuuc22.0.x
    endif
else
	ALLLIBS =
endif
EXTRA_LINK_OPTIONS =
SHLIBSUFFIX=.dll
OS390SIDEDECK=.x
endif

#=============== TRU64 SPECIFIC OPTIONS =========================
ifeq (${PLATFORM}, TRU64)
  SHLIBSUFFIX=.so
  MAKE_SHARED_C = ${CC} -D${PLATFORM} -shared ${LDFLAGS}
  ifeq (${GXX}, yes)
    MAKE_SHARED = ${CXX} -D${PLATFORM} -shared ${LDFLAGS}
    PLATFORM_COMPILE_OPTIONS = -fPIC -D${PLATFORM} -D_REENTRANT
    ifeq (${TRANSCODER}, ICU)
      ALLLIBS = ${LIBS} -licuuc -licudata -lc -lrt
    else
      ALLLIBS = ${LIBS} -lc -lrt
    endif
  else
    MAKE_SHARED = ${CXX} -D${PLATFORM} -shared -ptr ${XERCESCROOT}/.cxx_repository ${LDFLAGS}
    PLATFORM_COMPILE_OPTIONS = -D${PLATFORM} -ptr ${XERCESCROOT}/.cxx_repository
    ifeq (${TRANSCODER}, ICU)
	ALLLIBS = ${LIBS} -L/usr/lib -L/usr/local/lib -L/usr/ccs/lib -licuuc -licudata -lc -lrt
    else
	ALLLIBS = ${LIBS} -L/usr/lib -L/usr/local/lib -L/usr/ccs/lib -lc -lrt
    endif
  endif
endif


#=============== MacOS SPECIFIC OPTIONS =========================
ifeq (${PLATFORM}, MACOSX)
	PLATFORM_LIBRARIES = \
		-framework CoreServices
	PLATFORM_COMPILE_OPTIONS = \
		-D${PLATFORM} \
		-D_REENTRANT
	MAKE_SHARED = ${CXX} -D${PLATFORM} -dynamiclib ${LDFLAGS}
	MAKE_SHARED_C = ${CC} -D${PLATFORM} -dynamiclib ${LDFLAGS}
	ifeq (${TRANSCODER}, ICU)
		ALLLIBS = ${LIBS} -L/usr/lib -L/usr/local/lib -L/usr/ccs/lib -licu-uc -licud ata -lc
	else
		ALLLIBS = ${LIBS} -L/usr/lib
	endif
	SHLIBSUFFIX=.dylib
endif

#=============== CygWin SPECIFIC OPTIONS =========================
ifeq (${PLATFORM}, CYGWIN)
      PLATFORM_COMPILE_OPTIONS = \
              -D__${PLATFORM}__ \
              -I/usr/include \
              -I/usr/include/w32api
      MAKE_SHARED = ${CXX} -shared ${LDFLAGS}
      MAKE_SHARED_C = ${CC} -shared ${LDFLAGS}
      ifeq (${TRANSCODER}, ICU)
              ALLLIBS = ${LIBS} -L/usr/lib -L/usr/local/lib -L/usr/ccs/lib -licu-uc -licudata -lc
      else
              ALLLIBS = ${LIBS} -L/usr/lib
      endif
      EXTRA_LINK_OPTIONS = \
              -Xlinker --warn-once \
              -Xlinker -Map -Xlinker $(XML_LIB_DIR)/${LIBNAME}${VER}.map \
              -Xlinker --output-def -Xlinker $(XML_LIB_DIR)/${LIBNAME}${VER}.def \
              -Xlinker --out-implib -Xlinker $(XML_LIB_DIR)/${LIBNAME}${VER}.dll.a
        SHLIBSUFFIX=.dll
endif


###################### SO_NAME ####################################
#
#
ifeq (${PLATFORM}, AIX)

    #
    # LINK_NAME=libxerces-c.so
    # SO_NAME  =libxerces-c20.so
    # REAL_NAME=libxerces-c20.0.so
    #

    LINK_NAME=${LIBNAME}${SHLIBSUFFIX}
    SO_NAME  =${LIBNAME}${SO_TARGET_VERSION}${SHLIBSUFFIX}
    REAL_NAME=${LIBNAME}${SO_TARGET_VERSION}.${SO_TARGET_VERSION_MAJOR}${SHLIBSUFFIX}

else
    ifeq (${PLATFORM}, OS390)
        #
        # LINK_NAME=libxerces-c.dll
        # SO_NAME  =libxerces-c20.dll
        # REAL_NAME=libxerces-c2_0_0.dll
        #
        LINK_NAME=${LIBNAME}${SHLIBSUFFIX}
        SO_NAME  =${LIBNAME}${SO_TARGET_VERSION}${SHLIBSUFFIX}
        REAL_NAME=${LIBNAME}${VER}${SHLIBSUFFIX}
    else
		ifeq (${PLATFORM}, CYGWIN)
			#
			# LINK_NAME=libxerces-c.dll
			# SO_NAME  =libxerces-c20.dll
			# REAL_NAME=libxerces-c2_0_0.dll
			#
			LINK_NAME=${LIBNAME}${SHLIBSUFFIX}
			SO_NAME  =${LIBNAME}${SO_TARGET_VERSION}${SHLIBSUFFIX}
			REAL_NAME=${LIBNAME}${VER}${SHLIBSUFFIX}
		else
			#
			# LINK_NAME=libxerces-c.so
			# SO_NAME  =libxerces-c.so.20
			# REAL_NAME=libxerces-c.so.20.0
			#
			LINK_NAME=${LIBNAME}${SHLIBSUFFIX}
			SO_NAME  =${LIBNAME}${SHLIBSUFFIX}.${SO_TARGET_VERSION}
			REAL_NAME=${LIBNAME}${SHLIBSUFFIX}.${SO_TARGET_VERSION}.${SO_TARGET_VERSION_MAJOR}
		endif
    endif
endif


FQ_LINK_NAME=${XML_LIB_DIR}/${LINK_NAME}
FQ_SO_NAME  =${XML_LIB_DIR}/${SO_NAME}
FQ_REAL_NAME=${XML_LIB_DIR}/${REAL_NAME}

###################### STANDARD TOOLS #############################
ifeq (${PLATFORM}, OS400)
CP = -cp -fph
else
CP = -cp -fp
endif
ifeq (${PLATFORM}, FREEBSD)
CP = -cp -p
endif
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 .$(TO)

# Tell make where the object files are for proper resolution of suffix rules
vpath %.$(TO) $(XML_OBJ_DIR)

.cpp.$(TO):
	$(CC1) -c $(XML_INCL) $(XML_BUILD_OPTIONS) $(XML_DEF) $(EXTRA_COMPILE_OPTIONS) -o $(XML_OBJ_DIR)/$(@) $(<)

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

.C.$(TO):
	$(JUST_CC) -c $(XML_INCL) $(XML_BUILD_OPTIONS) $(XML_DEF) $(EXTRA_COMPILE_OPTIONS) -o $(XML_OBJ_DIR)/$(@) $(<)
