#
# 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.incl 571127 2007-08-30 12:09:58Z amassari $
#

###################################################################
#                    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 =
LD_SODEPDOM =

# Default AR and RANLIB setting if we are building static libraries.
#
ifeq (${LIBTYPE},static)
  AR = ar
  ARFLAGS = -rc
  RANLIB = ranlib
  STLIBSUFFIX = .a
endif

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

#=============== SOLARIS SPECIFIC OPTIONS =========================
ifeq (${PLATFORM}, SOLARIS)
  ifeq (${GXX}, yes)
    PLATFORM_COMPILE_OPTIONS = -D${PLATFORM}

    ifneq (${THREADS},none)
      PLATFORM_COMPILE_OPTIONS += -D_REENTRANT
    endif

    ifeq (${LIBTYPE},shared)
      PLATFORM_COMPILE_OPTIONS += -fPIC
      MAKE_SHARED = ${CXX} -D${PLATFORM} -shared ${LDFLAGS}
      MAKE_SHARED_C = ${CC} -D${PLATFORM} -shared ${LDFLAGS}
    endif

    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

    ## Compiler switch to embed a library name
    LD_SONAME = -Wl,-h,${SO_NAME}
    LD_SODEPDOM = -Wl,-h,${SO_DEPDOM}

  else
    PLATFORM_COMPILE_OPTIONS = -xs -ptr$(XML_OBJ_DIR) -features=rtti \
                               -D${PLATFORM}

    ifneq (${THREADS},none)
      PLATFORM_COMPILE_OPTIONS += -mt -D_REENTRANT
      ALLLIBS = -mt
    endif

    ifeq (${LIBTYPE},shared)
      PLATFORM_COMPILE_OPTIONS += -KPIC
      MAKE_SHARED = ${CXX} -D${PLATFORM} -G -ptr$(XML_OBJ_DIR) ${LDFLAGS}
      MAKE_SHARED_C = ${CC} -D${PLATFORM} -G ${LDFLAGS}
    endif

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

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

  ## Compiler switch to embed a library name
  LD_SONAME = -h ${SO_NAME}
  LD_SODEPDOM = -h ${SO_DEPDOM}
  endif

  SHLIBSUFFIX=.so
  ICUSHLIBSUFFIX=.so
endif

#=============== UNIXWARE SPECIFIC OPTIONS =========================
ifeq (${PLATFORM}, UNIXWARE)
  ifeq (${GXX}, yes)
    PLATFORM_COMPILE_OPTIONS = -D${PLATFORM}

    ifneq (${THREADS},none)
      PLATFORM_COMPILE_OPTIONS += -D_REENTRANT
    endif

    ifeq (${LIBTYPE},shared)
      PLATFORM_COMPILE_OPTIONS += -fPIC
      MAKE_SHARED = ${CXX} -D${PLATFORM} -shared ${LDFLAGS}
      MAKE_SHARED_C = ${CC} -D${PLATFORM} -shared ${LDFLAGS}
    endif

    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

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

  else
    PLATFORM_COMPILE_OPTIONS = -xs -D${PLATFORM}

    ifneq (${THREADS},none)
      PLATFORM_COMPILE_OPTIONS += -mt -D_REENTRANT
    endif

    ifeq (${LIBTYPE},shared)
      PLATFORM_COMPILE_OPTIONS += -KPIC
      MAKE_SHARED = ${CXX} -D${PLATFORM} -G ${LDFLAGS}
      MAKE_SHARED_C = ${CC} -D${PLATFORM} -G ${LDFLAGS}
    endif

    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

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

    ifneq (${THREADS},none)
      PLATFORM_COMPILE_OPTIONS += -D_REENTRANT
    endif

    ifeq (${LIBTYPE},shared)
      COMMON_COMPILE_OPTIONS += -fPIC
    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}
    endif
  else
    PLATFORM_COMPILE_OPTIONS = -D${PLATFORM} -belf

    ifeq (${LIBTYPE},shared)
      PLATFORM_COMPILE_OPTIONS += -KPIC
      MAKE_SHARED = ${CXX} -D${PLATFORM} -belf -G ${LDFLAGS}
      MAKE_SHARED_C = ${CC} -D${PLATFORM} -belf -G ${LDFLAGS}
    endif
  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

  PLATFORM_COMPILE_OPTIONS = -D${PLATFORM}

  ifneq (${THREADS},none)
    PLATFORM_COMPILE_OPTIONS += -Kthread
  endif

  ifeq (${TRANSCODER}, ICU)
    ALLLIBS = ${LIBS} -L${ICUROOT}/lib -lm -lgen -licuuc
  else
    ALLLIBS = ${LIBS} -lm -lgen
  endif

  OBJ_OUT=${ALL_OBJECTS_DIR}/

  ifeq (${LIBTYPE},shared)
    PLATFORM_COMPILE_OPTIONS += -KPIC
    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
  endif

  SHLIBSUFFIX=.so
  ICUSHLIBSUFFIX=.so
endif

#================= AIX SPECIFIC OPTIONS ===========================
ifeq (${PLATFORM}, AIX)
  ifeq (${GXX}, yes)
    PLATFORM_COMPILE_OPTIONS = -D${PLATFORM}

    ifneq (${THREADS},none)
      PLATFORM_COMPILE_OPTIONS += -D_REENTRANT
    endif

    ifeq (${LIBTYPE},shared)
      PLATFORM_COMPILE_OPTIONS += -fPIC
      MAKE_SHARED = ${CXX} -D${PLATFORM} -shared ${LDFLAGS}
      MAKE_SHARED_C = ${CC} -D${PLATFORM} -shared ${LDFLAGS}
    endif

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

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

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

    ifeq (${CXXVER}, v5compat)
      PLATFORM_COMPILE_OPTIONS = -qnotempinc -qnamemangling=v5
    else
      PLATFORM_COMPILE_OPTIONS = -qnotempinc -qnamemangling=ansi
    endif

    ifneq (${THREADS},none)
      PLATFORM_COMPILE_OPTIONS += -D_THREAD_SAFE
    endif

    ifeq (${LIBTYPE},shared)
      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
  endif

  SHLIBSUFFIX=.a
  ICUSHLIBSUFFIX=.a
  ## Compiler switch to embed a library name
  LD_SONAME =
  LD_SODEPDOM =

  ifeq (${LIBTYPE},static)
    ifeq (${BITSTOBUILD}, 64)
      ARFLAGS += -X64
    endif
  endif  
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

    ifeq (${LIBTYPE},shared)
      MAKE_SHARED = makeC++SharedLib_r -p 5000 ${LDFLAGS}
      MAKE_SHARED_C = makeC++SharedLib_r -p 5000 ${LDFLAGS}
    endif

    TO = qwobj
    SHLIBSUFFIX=.a
    ICUSHLIBSUFFIX=.a
  else
    PLATFORM_COMPILE_OPTIONS = -qnotempinc  -D${PLATFORM}
    PLATFORM_C_COMPILE_OPTIONS =  -v -D${PLATFORM}

    ifneq (${THREADS},none)
      PLATFORM_COMPILE_OPTIONS += -D_MULTI_THREADED
      PLATFORM_C_COMPILE_OPTIONS += -D_MULTI_THREADED
    endif

    ifeq (${LIBTYPE},shared)
      MAKE_SHARED = ld -v ${LDFLAGS}
      MAKE_SHARED_C = ld -v ${LDFLAGS}
    endif

    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)

  ifneq (${THREADS},none)
    $(error Xerces-C++ on BE OS can only be built as a single-threaded library)
  endif

  PLATFORM_COMPILE_OPTIONS = -D${PLATFORM} -DAPP_NO_THREADS

  ifeq (${LIBTYPE},shared)
    PLATFORM_COMPILE_OPTIONS += -fPIC
    MAKE_SHARED = ${CXX} -D${PLATFORM} -nostart -fPIC ${LDFLAGS}
    MAKE_SHARED_C = ${CC} -D${PLATFORM} -nostart -fPIC ${LDFLAGS}
  endif

  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_ALL_SOURCE

  ifneq (${THREADS},none)
    PLATFORM_COMPILE_OPTIONS += -D_REENTRANT
  endif

  ifeq (${LIBTYPE},shared)
    MAKE_SHARED = ${CXX} -D${PLATFORM} -shared ${LDFLAGS}
    MAKE_SHARED_C = ${CC} -D${PLATFORM} -shared ${LDFLAGS}
  endif

  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

  ifeq (${LIBTYPE},shared)
    MAKE_SHARED = dllwrap --export-all-symbols --driver-name ${CXX} ${LDFLAGS}
    MAKE_SHARED_C = ${CC} -D${PLATFORM} ${LDFLAGS}
  else
    PLATFORM_COMPILE_OPTIONS += -DXML_LIBRARY # switch off import/export
  endif

  ALLLIBS = ${LIBS}
  SHLIBSUFFIX=.dll
endif

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

  ifneq ($(filter xlC%,${CXX}),)

    PLATFORM_COMPILE_OPTIONS = -qnotempinc -D${PLATFORM}

    ifneq (${THREADS},none)
      PLATFORM_COMPILE_OPTIONS += -D_REENTRANT
    endif

    ifeq (${LIBTYPE},shared)
      PLATFORM_COMPILE_OPTIONS += -qpic
      MAKE_SHARED = ${CXX} -D${PLATFORM} -qpic -qmkshrobj -G ${LDFLAGS}
      MAKE_SHARED_C = ${CC} -D${PLATFORM} -qpic -qmkshrobj -G ${LDFLAGS}
    endif

    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 = -Wl,-soname,${SO_NAME}
    LD_SODEPDOM = -Wl,-soname,${SO_DEPDOM}

  else
    #non xlC_r
    #
    PLATFORM_COMPILE_OPTIONS = -D${PLATFORM}

    ifneq (${THREADS},none)
      PLATFORM_COMPILE_OPTIONS += -D_REENTRANT
    endif

    ifeq (${LIBTYPE},shared)
      PLATFORM_COMPILE_OPTIONS += -fPIC
      MAKE_SHARED = ${CXX} -D${PLATFORM} -shared -fPIC ${LDFLAGS}
      MAKE_SHARED_C = ${CC} -D${PLATFORM} -shared -fPIC ${LDFLAGS}
    endif

    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)

  ifeq (${LIBTYPE},shared)
    PLATFORM_COMPILE_OPTIONS = -shared
    MAKE_SHARED = ${CXX}  -shared ${LDFLAGS}
    MAKE_SHARED_C = ${CC} -shared ${LDFLAGS}
  endif

  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)
  PLATFORM_COMPILE_OPTIONS = -D${PLATFORM}

  ifeq (${LIBTYPE},shared)
    PLATFORM_COMPILE_OPTIONS += -fPIC
    MAKE_SHARED = ${CXX} -D${PLATFORM} -shared -fPIC ${LDFLAGS}
    MAKE_SHARED_C = ${CC} -D${PLATFORM} -shared -fPIC ${LDFLAGS}
  endif

  ifeq (${TRANSCODER}, ICU)
    PLATFORM_COMPILE_OPTIONS += -I/usr/local/include
    ALLLIBS = ${LIBS} -L/usr/local/lib -L${ICUROOT} -licuuc -licudata -lgcc
  else
    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)
  PLATFORM_COMPILE_OPTIONS = -D${PLATFORM}

  ifeq (${LIBTYPE},shared)
    PLATFORM_COMPILE_OPTIONS += -fPIC
    MAKE_SHARED = ${CXX} -D${PLATFORM} -shared -fPIC ${LDFLAGS}
    MAKE_SHARED_C = ${CC} -D${PLATFORM} -shared -fPIC ${LDFLAGS}
  endif

  ifeq (${TRANSCODER}, ICU)
    PLATFORM_COMPILE_OPTIONS += -I/usr/local/include
    ALLLIBS = ${LIBS} -L/usr/local/lib -L${ICUROOT} -licuuc -licudata -lgcc
  else
    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} -no_auto_include \
                           -I/usr/local/include

  ifneq (${THREADS},none)
    PLATFORM_COMPILE_OPTIONS += -D_REENTRANT
  endif

  ifeq (${LIBTYPE},shared)
    MAKE_SHARED = ${CXX} -D${PLATFORM} -shared ${LDFLAGS}
    MAKE_SHARED_C = ${CC} -D${PLATFORM} -shared ${LDFLAGS}
  endif

  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_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 (${GXX}, yes)
    PLATFORM_COMPILE_OPTIONS = -D${PLATFORM}

    ifneq (${THREADS},none)
      PLATFORM_COMPILE_OPTIONS += -D_REENTRANT
    endif

    ifeq (${LIBTYPE},shared)
      PLATFORM_COMPILE_OPTIONS += -fPIC
      MAKE_SHARED = ${CXX} -D${PLATFORM} -fPIC -shared ${LDFLAGS}
      MAKE_SHARED_C = ${CC} -D${PLATFORM} -fPIC -shared ${LDFLAGS}
    endif

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

    ifeq (${MESSAGELOADER}, ICU)
      ALLLIBS = ${LIBS} -L/usr/lib -L/usr/local/lib \
                -licuuc -licudata -lXercesMessages
    endif
  else
  ifeq (${CXX}, aCC)
    ifeq (${CXXVER}, aCC05)
      PLATFORM_COMPILE_OPTIONS = -D_HP_UX -DHPaCC -D${OSVERDEFINE}
      ifneq (${THREADS},none)
        PLATFORM_COMPILE_OPTIONS += -mt
      endif
    else
      PLATFORM_COMPILE_OPTIONS = -D_HP_UX -DHPaCC -D${OSVERDEFINE} +DAportable
    endif

    ifeq (${LIBTYPE},shared)
      PLATFORM_COMPILE_OPTIONS += +Z
      MAKE_SHARED   = ${CXX} ${PLATFORM_COMPILE_OPTIONS} -D${PLATFORM} ${LDFLAGS}
      MAKE_SHARED_C = ${CC}  ${PLATFORM_COMPILE_OPTIONS} -D${PLATFORM} ${LDFLAGS}
    endif

    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,.
      DEPDOM_LINK_OPTIONS = -b -Wl,+s -Wl,+b,.
      ifneq (${THREADS},none)
        EXTRA_LINK_OPTIONS += -mt
        DEPDOM_LINK_OPTIONS += -mt
      endif
    else
       EXTRA_LINK_OPTIONS = -b -Wl,+s -Wl,+b,.
       DEPDOM_LINK_OPTIONS = -b -Wl,+s -Wl,+b,.
    endif

  else
    TEMPLATESREPOSITORY = ${XML_OBJ_DIR}/ptrepository
    COMMON_COMPILE_OPTIONS = -D_HP_UX -DXERCES_TMPLSINC \
          -D${OSVERDEFINE} +DAportable +eh -Z +a1 +d
    ifeq ($(MODULE), dom)
      PLATFORM_COMPILE_OPTIONS  = -DDOM_PROJ $(COMMON_COMPILE_OPTIONS)
    else
      PLATFORM_COMPILE_OPTIONS  = $(COMMON_COMPILE_OPTIONS) -ptr${TEMPLATESREPOSITORY}
    endif

    ifeq (${LIBTYPE},shared)
      PLATFORM_COMPILE_OPTIONS += +Z
      MAKE_SHARED = $(CXX) $(PLATFORM_COMPILE_OPTIONS) $(XML_INCL) ${LDFLAGS}
      MAKE_SHARED_C = $(CC) $(PLATFORM_COMPILE_OPTIONS) $(XML_INCL) ${LDFLAGS}
    endif

    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
  endif
  endif # GXX

  # HP-UX on IA64 uses .so and on PA-RISC -- .sl.
  #
  ifeq (${ARCH},ia64)
    SHLIBSUFFIX=.so
    ICUSHLIBSUFFIX=.so
  else
    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

  ifeq (${GXX}, yes)
    PLATFORM_COMPILE_OPTIONS = -D${PLATFORM}

    ifneq (${THREADS},none)
      PLATFORM_COMPILE_OPTIONS += -D_REENTRANT
    endif

    ifeq (${LIBTYPE},shared)
      PLATFORM_COMPILE_OPTIONS += -fPIC
      MAKE_SHARED_C = ${CC} -D${PLATFORM} -shared ${LDFLAGS}
    MAKE_SHARED = ${CXX} -D${PLATFORM} -shared ${LDFLAGS}
    endif

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

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

  else
    PLATFORM_COMPILE_OPTIONS = -D${PLATFORM} -ptr ${XERCESCROOT}/.cxx_repository

    ifeq (${LIBTYPE},shared)
      MAKE_SHARED_C = ${CC} -D${PLATFORM} -shared ${LDFLAGS}
      MAKE_SHARED = ${CXX} -D${PLATFORM} -shared -ptr ${XERCESCROOT}/.cxx_repository ${LDFLAGS}
    endif

    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

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

  endif
endif


#=============== MacOS SPECIFIC OPTIONS =========================
ifeq (${PLATFORM}, MACOSX)
  PLATFORM_LIBRARIES = -framework CoreServices
  PLATFORM_COMPILE_OPTIONS = -D${PLATFORM}

  ifneq (${THREADS},none)
    PLATFORM_COMPILE_OPTIONS += -D_REENTRANT
  endif

  ifeq (${LIBTYPE},shared)
    MAKE_SHARED = ${CXX} -D${PLATFORM} -dynamiclib ${LDFLAGS}
    MAKE_SHARED_C = ${CC} -D${PLATFORM} -dynamiclib ${LDFLAGS}
  endif

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

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

  ifeq (${LIBTYPE},shared)
    MAKE_SHARED = ${CXX} -shared ${LDFLAGS}
    MAKE_SHARED_C = ${CC} -shared ${LDFLAGS}
  endif

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

  ifeq (${MESSAGELOADER}, ICU)
    ALLLIBS = ${LIBS} -licuuc -licudata -lXercesMessages
  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

###################### A_NAME ####################################
#
#
ifeq (${LIBTYPE},static)

A_NAME = ${LIBNAME}${STLIBSUFFIX}
A_DEPDOM = ${LIBDEPDOM}${STLIBSUFFIX}

FQ_A_NAME = ${XML_LIB_DIR}/${A_NAME}
FQ_A_DEPDOM = ${XML_LIB_DIR}/$(A_DEPDOM)

RESLIB_REAL_NAME = ${RESLIBNAME}${STLIBSUFFIX}
FQ_RESLIB_REAL_NAME=${XML_LIB_DIR}/${RESLIB_REAL_NAME}

else # dynamic

###################### 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}

endif # dynamic

###################### 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
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):
ifndef VERBOSE
	$Qecho "  (C++) $@"
else
	$Qecho "$(CC1) -c $(XML_INCL) $(XML_BUILD_OPTIONS) $(XML_DEF) $(EXTRA_COMPILE_OPTIONS) -o $(XML_OBJ_DIR)/$(@) $(<)"
endif
	$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)/$(@) $(<)
