#
# Copyright 1999-2004 The Apache Software Foundation.
# 
# Licensed 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.incl 240235 2005-08-26 13:07:24Z cargilld $
#

###################################################################
#                    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_DEPDOM_DIR = ${XERCESCROOT}/obj/${PLATFORM}/depdom
XML_OBJ        = ${XERCESCROOT}/obj
XML_INCL = -I$(XERCESCROOT)/include
ifeq (${SYSOVR},OS400)
PLATFORM = OS400
endif
TO = o
RM2 = rm -f
MV   = mv
## 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

    ifeq (${MESSAGELOADER}, ICU)
        ALLLIBS = ${LIBS} -L/usr/lib -L/usr/local/lib -L/usr/ccs/lib \
                  -licuuc -licudata -lXercesMessages -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 ${LIBS} -licuuc -licudata
    else
        ALLLIBS = -mt ${LIBS}
    endif

    ifeq (${MESSAGELOADER}, ICU)
        ALLLIBS = -mt ${LIBS} -licuuc -licudata -lXercesMessages
    endif

  endif
  SHLIBSUFFIX=.so
  ICUSHLIBSUFFIX=.so
  ## Compiler switch to embed a library name
  LD_SONAME = -h ${SO_NAME}
  LD_SODEPDOM = -h ${SO_DEPDOM}  
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
  ICUSHLIBSUFFIX=.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}
    DEPDOM_LINK_OPTIONS = -Wl,-h,${LIBDEPDOM}${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} -licuuc -licudata
  else
    ALLLIBS = ${LIBS}
  endif
  SHLIBSUFFIX=.so
  ICUSHLIBSUFFIX=.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
DEPDOM_LINK_OPTIONS = -lm -lgen
SHLIBSUFFIX=.so
ICUSHLIBSUFFIX=.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 (${GXX}, yes)
    ALLLIBS = ${LIBS} -L/usr/lib -L/usr/local/lib -L/usr/ccs/lib
    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}
    EXTRA_LINK_OPTIONS = -Wl,-b,map:$(XML_OBJ)/${LIBNAME}${SO_TARGET_VERSION}.${SO_TARGET_VERSION_MAJOR}.map
    DEPDOM_LINK_OPTIONS = -Wl,-b,map:$(XML_OBJ)/${LIBDEPDOM}${SO_TARGET_VERSION}.${SO_TARGET_VERSION_MAJOR}.map
else    
    ifeq (${TRANSCODER}, ICU)
	ALLLIBS = ${LIBS} -L/usr/lpp/xlC/lib -licuuc32 -licudata32
    else
	ALLLIBS = ${LIBS} -L/usr/lpp/xlC/lib
    endif

    ifeq (${MESSAGELOADER}, ICU)
	ALLLIBS = ${LIBS} -L/usr/lpp/xlC/lib -licuuc32 -licudata32 -lXercesMessages26
    endif

    ifeq (${CXXVER}, v5compat)
        PLATFORM_COMPILE_OPTIONS = -qnotempinc -D_THREAD_SAFE -qnamemangling=v5
    else
	PLATFORM_COMPILE_OPTIONS = -qnotempinc -D_THREAD_SAFE -qnamemangling=ansi
    endif
    
    ifeq (${BITSTOBUILD}, 64)
	MAKE_SHARED = makeC++SharedLib_r -p 5000 ${LDFLAGS} -X64
        MAKE_SHARED_C = makeC++SharedLib_r -p 5000 ${LDFLAGS} -X64
    else
	MAKE_SHARED = makeC++SharedLib_r -p 5000 ${LDFLAGS}
        MAKE_SHARED_C = makeC++SharedLib_r -p 5000 ${LDFLAGS}
    endif

    EXTRA_LINK_OPTIONS = -bmap:$(XML_OBJ)/${LIBNAME}${SO_TARGET_VERSION}.${SO_TARGET_VERSION_MAJOR}.map
    DEPDOM_LINK_OPTIONS = -bmap:$(XML_OBJ)/${LIBDEPDOM}${SO_TARGET_VERSION}.${SO_TARGET_VERSION_MAJOR}.map
endif

SHLIBSUFFIX=.a
ICUSHLIBSUFFIX=.a
## 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
ICUSHLIBSUFFIX=.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
ICUSHLIBSUFFIX=.o
endif
ifeq (${TRANSCODER}, ICU)
ifeq (${SYSOVR},OS400)
EXTRA_LINK_OPTIONS = -licuuc -licudata -lbsd
DEPDOM_LINK_OPTIONS = -licuuc -licudata -lbsd
else
EXTRA_LINK_OPTIONS = -lQZUUC
DEPDOM_LINK_OPTIONS = -lQZUUC
endif
endif
EXTRA_COMPILE_OPTIONS = -I. -g
EXTRA_LINK_OPTIONS = -q OPTION='*DUPVAR *DUPPROC'
DEPDOM_LINK_OPTIONS = -q OPTION='*DUPVAR *DUPPROC'

RM2 = -del
MV  = mv

endif

#=============== BEOS SPECIFIC OPTIONS =========================
ifeq (${PLATFORM}, BEOS)
PLATFORM_COMPILE_OPTIONS = -fPIC -D${PLATFORM} -DAPP_NO_THREADS
MAKE_SHARED = ${CXX} -D${PLATFORM} -nostart -fPIC ${LDFLAGS}
MAKE_SHARED_C = ${CC} -D${PLATFORM} -nostart -fPIC ${LDFLAGS}
ifeq (${TRANSCODER}, ICU)
    ALLLIBS = ${LIBS} -L/boot/develop/lib/x86 -L/boot/home/config/lib -lbe -licuuc -licudata
else
    ALLLIBS = ${LIBS} -L/boot/develop/lib/x86 -L/boot/home/config/lib -lbe
endif
EXTRA_LINK_OPTIONS = -Xlinker -Map -Xlinker $(XML_OBJ)/${SO_NAME}.map
DEPDOM_LINK_OPTIONS = -Xlinker -Map -Xlinker $(XML_OBJ)/${SO_DEPDOM}.map
SHLIBSUFFIX=.so
ICUSHLIBSUFFIX=.so
## Compiler switch to embed a library name
LD_SONAME = -Wl,-soname,${SO_NAME}
LD_SODEPDOM = -Wl,-soname,${SO_DEPDOM}
endif

#=============== INTERIX SPECIFIC OPTIONS =========================
ifeq (${PLATFORM}, INTERIX)
    PLATFORM_COMPILE_OPTIONS = -D${PLATFORM} -D_REENTRANT -D_ALL_SOURCE
    MAKE_SHARED = ${CXX} -D${PLATFORM} -shared ${LDFLAGS}
    MAKE_SHARED_C = ${CC} -D${PLATFORM} -shared ${LDFLAGS}
    ALLLIBS = ${LIBS}
    SHLIBSUFFIX=.so
endif

#=============== MINGW SPECIFIC OPTIONS =========================
ifeq (${PLATFORM}, MINGW)
    PLATFORM_COMPILE_OPTIONS = -D${PLATFORM} -fexceptions -D__GNUWIN32__ -DWIN32 -D_WINDOWS -DNDEBUG -DPLATFORM_WIN32
    MAKE_SHARED = dllwrap --export-all-symbols --driver-name c++ ${LDFLAGS}
    MAKE_SHARED_C = ${CC} -D${PLATFORM} ${LDFLAGS}
    ALLLIBS = ${LIBS}
    SHLIBSUFFIX=.dll
endif

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

    ifeq (${CXX}, xlC_r)

        PLATFORM_COMPILE_OPTIONS = -qpic -qnotempinc -D${PLATFORM}
        MAKE_SHARED = ${CXX} -D${PLATFORM} -qpic -qmkshrobj -G ${LDFLAGS}
        MAKE_SHARED_C = ${CC} -D${PLATFORM} -qpic -qmkshrobj -G ${LDFLAGS}

        ifeq (${TRANSCODER}, ICU)
            ALLLIBS = ${LIBS} -licuuc -licudata
        endif

        ifeq (${MESSAGELOADER}, ICU)
            ALLLIBS = ${LIBS} -licuuc -licudata -lXercesMessages
        endif

        ## Compiler switch to embed a library name
        LD_SONAME =
        
    else  
    #non xlC_r
    #
        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 (${BITSTOBUILD}, 64)
            ifeq (${TRANSCODER}, ICU)
                ALLLIBS = ${LIBS} -L/usr/lib64 -L/usr/lib -L/usr/local/lib -L/usr/ccs/lib -licuuc -licudata
            else
                ALLLIBS = ${LIBS} -L/usr/lib64 -L/usr/lib -L/usr/local/lib -L/usr/ccs/lib
            endif

            ifeq (${MESSAGELOADER}, ICU)
                ALLLIBS = ${LIBS} -L/usr/lib64 -L/usr/lib -L/usr/local/lib -L/usr/ccs/lib -licuuc -licudata -lXercesMessages
            endif
        else
            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

            ifeq (${MESSAGELOADER}, ICU)
                ALLLIBS = ${LIBS} -L/usr/lib -L/usr/local/lib -L/usr/ccs/lib -licuuc -licudata -lXercesMessages
            endif
        endif

        EXTRA_LINK_OPTIONS = -Xlinker -Map -Xlinker $(XML_OBJ)/${SO_NAME}.map
        DEPDOM_LINK_OPTIONS = -Xlinker -Map -Xlinker $(XML_OBJ)/${SO_DEPDOM}.map
        
        ## Compiler switch to embed a library name
        LD_SONAME = -Wl,-soname,${SO_NAME}
        LD_SODEPDOM = -Wl,-soname,${SO_DEPDOM}        
    endif        

    SHLIBSUFFIX=.so
    ICUSHLIBSUFFIX=.so

endif

#=============== QNX SPECIFIC OPTIONS =========================
ifeq (${PLATFORM}, QNX)
PLATFORM_COMPILE_OPTIONS = -shared
MAKE_SHARED = ${CXX}  -shared ${LDFLAGS}
MAKE_SHARED_C = ${CC} -shared ${LDFLAGS}
ifeq (${TRANSCODER}, ICU)
    ALLLIBS = ${LIBS} -L/usr/local/lib -licuuc -licudata
else
    ALLLIBS = ${LIBS}
endif

ifeq (${MESSAGELOADER}, ICU)
    ALLLIBS = ${LIBS} -L/usr/local/lib -licuuc -licudata -lXercesMessages
endif

EXTRA_LINK_OPTIONS =
DEPDOM_LINK_OPTIONS =
SHLIBSUFFIX=.so
ICUSHLIBSUFFIX=.so
## Compiler switch to embed a library name
LD_SONAME = -Wl,-soname,${SO_NAME}
LD_SODEPDOM = -Wl,-soname,${SO_DEPDOM}
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 -L${ICUROOT} -licuuc -licudata -lgcc
else
    PLATFORM_COMPILE_OPTIONS = -fPIC -D${PLATFORM}
    ALLLIBS = ${LIBS}
endif
SHLIBSUFFIX=.so
ICUSHLIBSUFFIX=.so
## Compiler switch to embed a library name
LD_SONAME = -Wl,-soname,${SO_NAME}
LD_SODEPDOM = -Wl,-soname,${SO_DEPDOM}
endif

#=============== NETBSD SPECIFIC OPTIONS =========================
ifeq (${PLATFORM}, NETBSD)
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 -L${ICUROOT} -licuuc -licudata -lgcc
else
    PLATFORM_COMPILE_OPTIONS = -fPIC -D${PLATFORM}
    ALLLIBS = ${LIBS}
endif
SHLIBSUFFIX=.so
ICUSHLIBSUFFIX=.so
## Compiler switch to embed a library name
LD_SONAME = -Wl,-soname,${SO_NAME}
LD_SODEPDOM = -Wl,-soname,${SO_DEPDOM}
endif

#=============== IRIX SPECIFIC OPTIONS ============================
ifeq (${PLATFORM}, IRIX)
PLATFORM_COMPILE_OPTIONS = -LANG:pch -LANG:std -O2 \
                           -D${PLATFORM} -D_REENTRANT -no_auto_include \
                           -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
ICUSHLIBSUFFIX=.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
DEPDOM_LINK_OPTIONS = /map /nod /noe /noi /packcode /packdata /exepack /align:4
SHLIBSUFFIX= .dll
ICUSHLIBSUFFIX= .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)
    ifeq (${CXXVER}, aCC05)
       PLATFORM_COMPILE_OPTIONS = -D_HP_UX -DHPaCC -D${OSVERDEFINE} -mt +Z
    else
       PLATFORM_COMPILE_OPTIONS = -D_HP_UX -DHPaCC -D${OSVERDEFINE} +DAportable +Z    
    endif
            
    MAKE_SHARED   = ${CXX} ${PLATFORM_COMPILE_OPTIONS} -D${PLATFORM} ${LDFLAGS}
    MAKE_SHARED_C = ${CC}  ${PLATFORM_COMPILE_OPTIONS} -D${PLATFORM} ${LDFLAGS}  
    ifeq (${TRANSCODER}, ICU)
        ALLLIBS = ${LIBS} -licuuc -licudata
    else
        ALLLIBS = ${LIBS}
    endif

    ifeq (${MESSAGELOADER}, ICU)
        ALLLIBS = ${LIBS} -licuuc -licudata -lXercesMessages
    endif

    ifeq (${CXXVER}, aCC05)
       EXTRA_LINK_OPTIONS = -b -Wl,+s -Wl,+b,. -mt
       DEPDOM_LINK_OPTIONS = -b -Wl,+s -Wl,+b,. -mt   
    else
       EXTRA_LINK_OPTIONS = -b -Wl,+s -Wl,+b,. 
       DEPDOM_LINK_OPTIONS = -b -Wl,+s -Wl,+b,.
    endif
    
    SHLIBSUFFIX=.sl
    ICUSHLIBSUFFIX=.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

    ifeq (${MESSAGELOADER}, ICU)
        ALLLIBS = ${LIBS} -licuuc -licudata -lXercesMessages
    endif

    EXTRA_LINK_OPTIONS = -b -Wl,+s -Wl,+b,. -Wl,-a,shared
    DEPDOM_LINK_OPTIONS = -b -Wl,+s -Wl,+b,. -Wl,-a,shared    
    SHLIBSUFFIX=.sl
    ICUSHLIBSUFFIX=.sl
  endif
  ## Compiler switch to embed a library name
  LD_SONAME = -Wl,+h,${SO_NAME}
  LD_SODEPDOM = -Wl,+h,${SO_DEPDOM}  
endif


#================ OS/390 SPECIFIC OPTIONS =========================
ifeq (${PLATFORM}, OS390)
PLATFORM_CPP_COMPILER = _CXX_CXXSUFFIX="cpp" c++
PLATFORM_C_COMPILER = _CXX_CXXSUFFIX="cpp" cc
PLATFORM_LIBRARIES=
## OS390BATCH
ifeq (${OS390BATCH},1)
PLATFORM_COMPILE_OPTIONS = -2 -Wc,dll -W0,"langlvl(extended)" -Wc,"TMPLPARSE(NO)" -Wc,"float(IEEE)" -D${PLATFORM} -D_XOPEN_SOURCE_EXTENDED -DXML_ALLOW_NELWS -I${ICUROOT}/include -DOS390BATCH
else
PLATFORM_COMPILE_OPTIONS = -2 -Wc,dll -W0,"langlvl(extended)" -Wc,"TMPLPARSE(NO)" -Wc,"float(IEEE)" -D${PLATFORM} -D_XOPEN_SOURCE_EXTENDED -DXML_ALLOW_NELWS -I${ICUROOT}/include
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}(IXMI32UC)'"
    else
    ALLLIBS = ${ICUROOT}/lib/libicuuc32.0.x
    endif
else
ifeq (${TRANSCODER}, Uniconv390)
## OS390BATCH
    ifeq (${OS390BATCH},1)
	 ALLLIBS = "//'${LOADEXP}(IXMI32UC)'"
    else
	 ALLLIBS = ${ICUROOT}/lib/libicuuc32.0.x
    endif
else
	 ALLLIBS =
endif
endif
EXTRA_LINK_OPTIONS =
DEPDOM_LINK_OPTIONS =
SHLIBSUFFIX=.dll
ICUSHLIBSUFFIX=.dll
OS390SIDEDECK=.x
endif

#=============== TRU64 SPECIFIC OPTIONS =========================
ifeq (${PLATFORM}, TRU64)
  SHLIBSUFFIX=.so
  ICUSHLIBSUFFIX=.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 -licuuc -licudata -lc
    else
        ALLLIBS = ${LIBS} -L/usr/lib
    endif
    SHLIBSUFFIX=.dylib
    ICUSHLIBSUFFIX=.dylib
    LD_SONAME = -install_name ${PREFIX}/lib/${SO_NAME}
    LD_SODEPDOM = -install_name ${PREFIX}/lib/${SO_DEPDOM}    
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 -licuuc -licudata -lc
      else
              ALLLIBS = ${LIBS} -L/usr/lib
      endif
      EXTRA_LINK_OPTIONS = \
              -Xlinker --warn-once \
              -Xlinker -Map \
                  -Xlinker $(XML_LIB_DIR)/${LIBNAME}${SO_TARGET_VERSION}.map \
              -Xlinker --output-def \
                  -Xlinker $(XML_LIB_DIR)/${LIBNAME}${SO_TARGET_VERSION}.def \
              -Xlinker --out-implib \
                  -Xlinker $(XML_LIB_DIR)/${LIBNAME}${SO_TARGET_VERSION}.dll.a
                  
      DEPDOM_LINK_OPTIONS = \
              -Xlinker --warn-once \
              -Xlinker -Map \
                  -Xlinker $(XML_LIB_DIR)/${LIBDEPDOM}${SO_TARGET_VERSION}.map \
              -Xlinker --output-def \
                  -Xlinker $(XML_LIB_DIR)/${LIBDEPDOM}${SO_TARGET_VERSION}.def \
              -Xlinker --out-implib \
                  -Xlinker $(XML_LIB_DIR)/${LIBDEPDOM}${SO_TARGET_VERSION}.dll.a
                                    
        SHLIBSUFFIX=.dll
        ICUSHLIBSUFFIX=.dll
endif


###################### LIBNAME ####################################
#
#
ifneq (${PLATFORM}, OS400)
ifeq (${PLATFORM}, CYGWIN)
CYGNAME=cygxerces-c
CYGDEPDOM=cygxerces-depdom
endif
LIBNAME=libxerces-c
LINK_LIBNAME=xerces-c
LIBDEPDOM=libxerces-depdom
else
LIBNAME=libxercesc
LINK_LIBNAME=xercesc
LIBDEPDOM=libxercesdepdom
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}
    
    LINK_DEPDOM=${LIBDEPDOM}${SHLIBSUFFIX}
    SO_DEPDOM  =${LIBDEPDOM}${SO_TARGET_VERSION}${SHLIBSUFFIX}
    REAL_DEPDOM=${LIBDEPDOM}${SO_TARGET_VERSION}.${SO_TARGET_VERSION_MAJOR}${SHLIBSUFFIX}
        
    RESLIB_LINK_NAME=${RESLIBNAME}${SHLIBSUFFIX}
    RESLIB_SO_NAME  =${RESLIBNAME}${SO_TARGET_VERSION}${SHLIBSUFFIX}
    RESLIB_REAL_NAME=${RESLIBNAME}${SO_TARGET_VERSION}.${SO_TARGET_VERSION_MAJOR}${SHLIBSUFFIX}
    
endif
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}
	
    LINK_DEPDOM=${LIBDEPDOM}${SHLIBSUFFIX}
    SO_DEPDOM  =${LIBDEPDOM}${SO_TARGET_VERSION}${SHLIBSUFFIX}
    REAL_DEPDOM=${LIBDEPDOM}${VER}${SHLIBSUFFIX}
    	
    RESLIB_LINK_NAME=${RESLIBNAME}${SHLIBSUFFIX}
    RESLIB_SO_NAME  =${RESLIBNAME}${SO_TARGET_VERSION}${SHLIBSUFFIX}
    RESLIB_REAL_NAME=${RESLIBNAME}${VER}${SHLIBSUFFIX}	

endif
ifeq (${PLATFORM}, CYGWIN)
    #
    # LINK_NAME=libxerces-c.dll
    # SO_NAME  =cygxerces-c20.dll
    # REAL_NAME=libxerces-c2_0_0.dll
    #
    LINK_NAME=${LIBNAME}${SHLIBSUFFIX}
    SO_NAME  =${CYGNAME}${SO_TARGET_VERSION}${SHLIBSUFFIX}
    REAL_NAME=${LIBNAME}${VER}${SHLIBSUFFIX}
    
    LINK_DEPDOM=${LIBDEPDOM}${SHLIBSUFFIX}
    SO_DEPDOM  =${CYGDEPDOM}${SO_TARGET_VERSION}${SHLIBSUFFIX}
    REAL_DEPDOM=${LIBDEPDOM}${VER}${SHLIBSUFFIX}
        
endif
ifeq (${PLATFORM}, MINGW)
    #
    # 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}
    
    LINK_DEPDOM=${LIBDEPDOM}${SHLIBSUFFIX}
    SO_DEPDOM  =${LIBDEPDOM}${SO_TARGET_VERSION}${SHLIBSUFFIX}
    REAL_DEPDOM=${LIBDEPDOM}${VER}${SHLIBSUFFIX}
        
endif
ifeq (${PLATFORM}, MACOSX)
    #
    # LINK_NAME=libxerces-c.{suffix}
    # SO_NAME  =libxerces-c.20.{suffix}
    # REAL_NAME=libxerces-c.20.0.{suffix}
    #
    LINK_NAME=${LIBNAME}${SHLIBSUFFIX}
    SO_NAME  =${LIBNAME}.${SO_TARGET_VERSION}${SHLIBSUFFIX}
    REAL_NAME=${LIBNAME}.${SO_TARGET_VERSION}.${SO_TARGET_VERSION_MAJOR}${SHLIBSUFFIX}
    
    LINK_DEPDOM=${LIBDEPDOM}${SHLIBSUFFIX}
    SO_DEPDOM  =${LIBDEPDOM}.${SO_TARGET_VERSION}${SHLIBSUFFIX}
    REAL_DEPDOM=${LIBDEPDOM}.${SO_TARGET_VERSION}.${SO_TARGET_VERSION_MAJOR}${SHLIBSUFFIX}
        
endif
ifeq (${PLATFORM}, QNX)
    #
    # LINK_NAME=libxerces-c.{suffix}
    # SO_NAME  =libxerces-c.20.{suffix}
    # REAL_NAME=libxerces-c.20.{suffix}
    #
    LINK_NAME=${LIBNAME}${SHLIBSUFFIX}
    SO_NAME  =${LIBNAME}${SHLIBSUFFIX}.${SO_TARGET_VERSION}
    REAL_NAME=$(SO_NAME)
    
    LINK_DEPDOM=${LIBDEPDOM}${SHLIBSUFFIX}
    SO_DEPDOM  =${LIBDEPDOM}${SHLIBSUFFIX}.${SO_TARGET_VERSION}
    REAL_DEPDOM=$(SO_DEPDOM)
        
endif

# Default naming (if no special cases above)
ifeq ($(SO_NAME),) 
    #
    # 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}
	
    LINK_DEPDOM=${LIBDEPDOM}${SHLIBSUFFIX}
    SO_DEPDOM  =${LIBDEPDOM}${SHLIBSUFFIX}.${SO_TARGET_VERSION}
    REAL_DEPDOM=${LIBDEPDOM}${SHLIBSUFFIX}.${SO_TARGET_VERSION}.${SO_TARGET_VERSION_MAJOR}
    	
    RESLIB_LINK_NAME=${RESLIBNAME}${SHLIBSUFFIX}
    RESLIB_SO_NAME  =${RESLIBNAME}${SHLIBSUFFIX}.${SO_TARGET_VERSION}
    RESLIB_REAL_NAME=${RESLIBNAME}${SHLIBSUFFIX}.${SO_TARGET_VERSION}.${SO_TARGET_VERSION_MAJOR}	

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}

FQ_LINK_DEPDOM=${XML_LIB_DIR}/${LINK_DEPDOM}
FQ_SO_DEPDOM  =${XML_LIB_DIR}/${SO_DEPDOM}
FQ_REAL_DEPDOM=${XML_LIB_DIR}/${REAL_DEPDOM}

FQ_RESLIB_LINK_NAME=${XML_LIB_DIR}/${RESLIB_LINK_NAME}
FQ_RESLIB_SO_NAME  =${XML_LIB_DIR}/${RESLIB_SO_NAME}
FQ_RESLIB_REAL_NAME=${XML_LIB_DIR}/${RESLIB_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) .s

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

.cpp.$(TO):
	$Qecho "  (C++) $@"
	$Q$(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)/$(@) $(<)

.s.$(TO):
	$(JUST_CC) -c -o $(XML_OBJ_DIR)/$(@) $(<)
