#
# 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.
#
# 
#MACROS defining commands
MKDIR=mkdir
LN=ln

#all these setting come from the arguments passed in to runConfigure.
PLATFORM = @platform@
CC  = @cc@
CXX = @cxx@
CPPFLAGS = @cppflags@
CFLAGS = @cflags@
CXXFLAGS = @cxxflags@
PREFIX = @prefix@
LDFLAGS = @ldflags@
BITSTOBUILD = @bitstobuild@
LIBS = @libs@
TRANSCODER = @transcoder@
WCSTOMBS = @wcstombs@
MESSAGELOADER = @xalan_locale_system@
LOCALE = @xalan_locale@

SHELL = @SHELL@
MKINSTALLDIRS = $(MKDIR) -p

prefix = @prefix@
exec_prefix = @exec_prefix@
bindir = @bindir@
libdir = @libdir@
includedir = @includedir@
datadir = @datadir@

XSL_OBJ_DIR = ${OUTDIR}/obj
XSL_LIB_DIR = ${OUTDIR}/lib
XSL_BIN_DIR = ${OUTDIR}/bin
XSL_NLS_DIR = ${OUTDIR}/nls

XSL_INCL = -I$(XALANCROOT)/src -I$(XALANCROOT)/include -I${XSL_NLS_DIR}/include
XSL_INCL += -I$(XERCESCROOT)/src/ -I$(XERCESCROOT)/include/xercesc -I$(XERCESCROOT)/include/

SAMPLES_DIR = $(XALANCROOT)/samples
TESTS_DIR = $(XALANCROOT)/Tests

# ICU 
ifeq ($(TRANSCODER),icu)
  XALAN_USE_ICU = yes
endif

ifdef XALAN_USE_ICU
  ifndef ICUROOT
    ICUROOT=/usr/local
  endif
  ifndef ICUI18NROOT
    ICUI18NROOT=${ICUROOT}
  endif
  ICULIB_LOC=$(ICUROOT)/lib
endif

# required libraries 
XERCES_LIB = -L$(XERCESCROOT)/lib -lxerces-c
ICU_LIB = -L$(ICUROOT)/lib -licuuc -L$(ICUI18NROOT)/lib -licui18n
XALAN_LIB = $(LIBRARY_SEARCH_PATH) $(LIBRARY_LINK_NAME)

# Deprecated Xerces DOM Support handeling
ifeq (XALAN_BUILD_DEPRECATED_DOM_BRIDGE,$(findstring XALAN_BUILD_DEPRECATED_DOM_BRIDGE,$(CXXFLAGS)))
ifneq "$(wildcard $(XERCESCROOT)/lib/*xerces-depdom*)" ""
XERCES_LIB += -lxerces-depdom
endif
endif

# Library names
LIB_NAME = lib$(PROJECT_NAME)
LIB = $(LIB_NAME)$(SHLIBSUFFIX).$(LIB_MAJOR_VER).$(LIB_MINOR_VER)
SO_NAME = $(LIB_NAME)$(SHLIBSUFFIX).$(LIB_MAJOR_VER)
LINK_NAME = $(LIB_NAME)$(SHLIBSUFFIX)
XALAN_LIB_PATH = -L$(XSL_LIB_DIR)
LIBRARY_LINK_NAME = -l$(PROJECT_NAME)
LIBRARY_SEARCH_PATH = -L$(XSL_LIB_DIR) -L$(XALANCROOT)/lib

# Localization library names
LOC_PROJECT_NAME = xalanMsg
LOC_LIBNAME = lib${LOC_PROJECT_NAME}
LOC_LIB = ${LOC_LIBNAME}$(SHLIBSUFFIX).${LIB_MAJOR_VER}.${LIB_MINOR_VER}
LOC_SONAME = ${LOC_LIBNAME}${SHLIBSUFFIX}.${LIB_MAJOR_VER}
MESSAGELIB = ${XSL_LIB_DIR}/${LOC_LIB}
EXTRA_LOC_LINK_OPTIONS = $(EXTRA_LINK_OPTIONS)

ifeq ($(MESSAGELOADER),nls)
LOCAL_LIB =
XSL_BUILD_OPTIONS += -DXALAN_NLS_MSG_LOADER
endif

ifeq ($(MESSAGELOADER),icu)
XSL_BUILD_OPTIONS += -DXALAN_ICU_MSG_LOADER
LOCAL_LIB = -L${XSL_LIB_DIR} -l$(LOC_PROJECT_NAME)
endif
ifeq ($(MESSAGELOADER),inmem)
XSL_BUILD_OPTIONS += -DXALAN_INMEM_MSG_LOADER
LOCAL_LIB = -L${XSL_LIB_DIR} -l$(LOC_PROJECT_NAME)
endif

#=============== MINGW SPECIFIC OPTIONS =========================

ifeq ($(PLATFORM), MINGW)

  SUPPORTED = TRUE
  ALLLIBS = $(LIBS)
  SHLIBSUFFIX = .dll
  LINK_SONAME =  
  EXT=.exe

  LOC_LIB = ${LOC_LIBNAME}${VER}$(SHLIBSUFFIX)

  MESSAGELIB = ${XSL_LIB_DIR}/$(LOC_LIB)
  LIB = $(LIB_NAME)$(VER)$(SHLIBSUFFIX)
  SONAME = $(LIB_NAME)$(MS_VER)$(SHLIBSUFFIX)
  PLATFORM_COMPILE_OPTIONS = -DWIN32 -D_WINDOWS -D__MINGW__ -D${PLATFORM} -fexceptions

  CC1 = $(CXX) $(CPPFLAGS) $(CXXFLAGS) $(PLATFORM_COMPILE_OPTIONS)
  CC4 = $(CC1)
  LDFLAGS += -Wl,--allow-multiple-definition
  LINK = $(CXX) -D${PLATFORM} ${LDFLAGS}

  MAKE_SHARED = dllwrap --export-all-symbols --driver-name c++ ${LDFLAGS}

  MAKE_SHARED_LOC = dllwrap --export-all-symbols --driver-name c++ ${LDFLAGS}

  LOC_OTHER_LINK_PARAMETERS = $(XERCES_LIB)
  
  OTHER_LINK_PARAMETERS = $(XALAN_LIB) $(ALLLIBS)
  
  OTHER_LINK_LIB_PARAMETERS = $(ALLLIBS)
   
  export PATH := $(XERCESCROOT)/lib:$(ICULIB_LOC):$(PATH)
 
endif

#=============== CYGWIN SPECIFIC OPTIONS =========================

ifeq ($(PLATFORM), CYGWIN)

  SUPPORTED = TRUE
  ALLLIBS = $(LIBS)
  SHLIBSUFFIX = .dll
  CYG_PREFIX = cyg
  LINK_SONAME =  
  EXT=.exe
    
  MESSAGELIB = ${XSL_LIB_DIR}/$(CYG_PREFIX)$(LOC_PROJECT_NAME)$(LIB_MAJOR_VER)$(SHLIBSUFFIX)
  
  LIB = $(CYG_PREFIX)$(PROJECT_NAME)$(LIB_MAJOR_VER)$(SHLIBSUFFIX)

  PLATFORM_COMPILE_OPTIONS = -Wall -D${PLATFORM} -D_REENTRANT
              
  CC1 = $(CXX) $(CPPFLAGS) $(CXXFLAGS) $(PLATFORM_COMPILE_OPTIONS)
  CC4 = $(CC1)
  LINK = $(CXX) -D${PLATFORM} ${LDFLAGS}
   
  MAKE_SHARED = $(LINK) $(CXXFLAGS) ${LDFLAGS} -shared   -Wl,--warn-once \
 							  -Wl,--out-implib \
 							  -Wl,$(XSL_LIB_DIR)/$(LIB_NAME)$(SHLIBSUFFIX).$(LIB_MAJOR_VER).$(LIB_MINOR_VER)
 											        																            
  MAKE_SHARED_LOC = $(LINK) $(CXXFLAGS) ${LDFLAGS} -shared -Wl,--warn-once \
							-Wl,--out-implib \
        						-Wl,$(XSL_LIB_DIR)/$(LOC_LIB)

  LOC_OTHER_LINK_PARAMETERS = $(XERCES_LIB)
  
  OTHER_LINK_PARAMETERS = $(XALAN_LIB) $(ALLLIBS)
  
  OTHER_LINK_LIB_PARAMETERS = $(ALLLIBS)
   
  export PATH := $(XERCESCROOT)/lib:$(ICULIB_LOC):$(PATH)
 
endif

#=============== LINUX SPECIFIC OPTIONS =========================

ifeq ($(PLATFORM), LINUX)

	SUPPORTED = TRUE
	
  ifeq (${CXX}, xlC_r)

			PLATFORM_COMPILE_OPTIONS = -qpic -D_AIX -D_THREAD_SAFE
			ALLLIBS = ${LIBS} -L/usr/lib 
			
			CC2 = $(CXX) $(PLATFORM_COMPILE_OPTIONS)
			
			CC1 = $(CC2) $(CPPFLAGS) $(CXXFLAGS) 
		
		        CC4 = $(CC) $(CFLAGS) $(PLATFORM_COMPILE_OPTIONS)
		
			MAKE_SHARED = $(CXX) -qmkshrobj  ${LDFLAGS} ${bitstobuildLink}
		
			LINK = $(CC1)  ${bitstobuildLink} ${LDFLAGS}
		
		ifeq (${BITSTOBUILD}, 64)
			MAKE_SHARED += -q64
			CC2 += -q64
			CC4 += -q64
			LINK += -q64
		endif
		
			SHLIBSUFFIX=.so
		
		   
		  XERCES_LIB= -L$(XERCESCROOT)/lib -lxerces-c
		  ICU_LIB= -L$(ICUROOT)/lib -licuuc32 -L$(ICUI18NROOT)/lib -licui18n32
		
		  LIB = $(LIB_NAME)$(LIB_MAJOR_VER).$(LIB_MINOR_VER)$(SHLIBSUFFIX)
		  SO_NAME = $(LIB_NAME)$(LIB_MAJOR_VER)$(SHLIBSUFFIX)
		
		  LIBRARY_LINK_NAME=-l$(PROJECT_NAME)$(LIB_MAJOR_VER)
		  
		  export LD_LIBRARY_PATH := $(XERCESCROOT)/lib:$(ICULIB_LOC):$(LD_LIBRARY_PATH)
		  MAKE_SHARED_LOC=$(MAKE_SHARED)
		  LOC_LIB = ${LOC_LIBNAME}${LIB_MAJOR_VER}.${LIB_MINOR_VER}${SHLIBSUFFIX}
		  LOC_LIBKEYNAME=${LOC_PROJECT_NAME}${LIB_MAJOR_VER}
		        
  else  
    ## 	Other compilers ...
    
		  
		  ALLLIBS = ${LIBS}
		  SHLIBSUFFIX=.so
		  PIC_OPTION=
		
		  ifeq (${CXX}, icpc)
		
		    PIC_OPTION=-KPIC
		    PLATFORM_COMPILE_OPTIONS = -ansi
		
		  else
		
		    PIC_OPTION=-fPIC
		    PLATFORM_COMPILE_OPTIONS = -Wall
		
		  endif
		
		  PLATFORM_COMPILE_OPTIONS += ${PIC_OPTION} -D${PLATFORM} -D_REENTRANT
		
		  # We need the ICU library if we are using the ICUBridge
		  ifdef XALAN_USE_ICU
		    LD_RPATH_PRE= -Wl,-rpath,
		    PLATFORM_LIB_LINK_OPTIONS=$(LD_RPATH_PRE)${ICUROOT}/lib
		  endif
		
		  CC1 = $(CXX) $(CPPFLAGS) $(CXXFLAGS) $(PLATFORM_COMPILE_OPTIONS)
		  CC4 = $(CC) $(CFLAGS) $(PLATFORM_COMPILE_OPTIONS)
		  MAKE_SHARED = ${CXX} $(CXXFLAGS) -D${PLATFORM} -shared ${PIC_OPTION} ${LDFLAGS}
		  LINK_SONAME = -Wl,-soname,$(SO_NAME)
		  LINK = $(CXX) -D${PLATFORM} ${PIC_OPTION} ${LDFLAGS}
		  
		  export LD_LIBRARY_PATH := $(XERCESCROOT)/lib:$(ICULIB_LOC):$(LD_LIBRARY_PATH)
		  MAKE_SHARED_LOC = ${CXX} $(CXXFLAGS) -Wl,-soname,$(LOC_SONAME) -D${PLATFORM} -shared ${PIC_OPTION} ${LDFLAGS}
	
	 ## End of other compilers
	endif
endif
#=============== FREEBSD SPECIFIC OPTIONS ======================

ifeq ($(PLATFORM), FREEBSD)

  SUPPORTED = TRUE
  ALLLIBS = ${LIBS} -L/usr/local/lib
  SHLIBSUFFIX=.so
  PIC_OPTION = -fPIC

  PLATFORM_COMPILE_OPTIONS = -D${PLATFORM} ${PIC_OPTION} ${WCSTOMBS}

  # We need the ICU library if we are using the ICUBridge
  ifdef XALAN_USE_ICU
    LD_RPATH_PRE = -Wl,-rpath,
    PLATFORM_LIB_LINK_OPTIONS = $(LD_RPATH_PRE)${ICUROOT}/lib
    PLATFORM_LIB_LINK_OPTIONS += -licuuc -licudata -lgcc
    ALLLIBS += -L${ICUROOT}
  endif

  CC1 = $(CXX) $(CPPFLAGS) $(CXXFLAGS) $(PLATFORM_COMPILE_OPTIONS)
  CC4 = $(CC) $(CFLAGS) $(PLATFORM_COMPILE_OPTIONS)
  MAKE_SHARED = $(CXX) $(CXXFLAGS) -D${PLATFORM} -shared ${PIC_OPTION} ${LDFLAGS}
  LINK = $(CXX) -D${PLATFORM} ${PIC_OPTION} ${LDFLAGS}
  
  MAKE_SHARED_LOC=$(MAKE_SHARED)
  
endif

#=============== HURD SPECIFIC OPTIONS ======================

ifeq ($(PLATFORM), HURD)

  SUPPORTED = TRUE
  ALLLIBS = ${LIBS} -L/usr/local/lib
  SHLIBSUFFIX=.so
  PIC_OPTION = -fPIC

  PLATFORM_COMPILE_OPTIONS = -D${PLATFORM} ${PIC_OPTION} ${WCSTOMBS}

  # We need the ICU library if we are using the ICUBridge
  ifdef XALAN_USE_ICU
    LD_RPATH_PRE = -Wl,-rpath,
    PLATFORM_LIB_LINK_OPTIONS = $(LD_RPATH_PRE)${ICUROOT}/lib
  endif

  CC1 = $(CXX) $(CPPFLAGS) $(CXXFLAGS) $(PLATFORM_COMPILE_OPTIONS)
  CC4 = $(CC) $(CFLAGS) $(PLATFORM_COMPILE_OPTIONS)
  MAKE_SHARED = $(CXX) $(CXXFLAGS) -D${PLATFORM} -shared ${PIC_OPTION} ${LDFLAGS}
  LINK_SONAME = -Wl,-soname,$(SO_NAME)
  LINK = $(CXX) -D${PLATFORM} ${PIC_OPTION} ${LDFLAGS}
  
  MAKE_SHARED_LOC = ${CXX} $(CXXFLAGS) -Wl,-soname,$(LOC_SONAME) -D${PLATFORM} -shared ${PIC_OPTION} ${LDFLAGS}
  
endif

#=============== NETBSD SPECIFIC OPTIONS ======================

ifeq ($(PLATFORM), NETBSD)

  SUPPORTED = TRUE
  ALLLIBS = ${LIBS} -L/usr/local/lib
  SHLIBSUFFIX=.so
  PIC_OPTION = -fPIC

  PLATFORM_COMPILE_OPTIONS = -D${PLATFORM} ${PIC_OPTION} ${WCSTOMBS}

  # We need the ICU library if we are using the ICUBridge
  ifdef XALAN_USE_ICU
    LD_RPATH_PRE = -Wl,-rpath,
    PLATFORM_LIB_LINK_OPTIONS = $(LD_RPATH_PRE)${ICUROOT}/lib
    PLATFORM_LIB_LINK_OPTIONS += -licuuc -licudata
    ALLLIBS += -L${ICUROOT}
  endif

  CC1 = $(CXX) $(CPPFLAGS) $(CXXFLAGS) $(PLATFORM_COMPILE_OPTIONS)
  CC4 = $(CC) $(CFLAGS) $(PLATFORM_COMPILE_OPTIONS)
  MAKE_SHARED = $(CXX) $(CXXFLAGS) -D${PLATFORM} -shared ${PIC_OPTION} ${LDFLAGS}
  LINK = $(CXX) -D${PLATFORM} ${PIC_OPTION} ${LDFLAGS}

  MAKE_SHARED_LOC=$(MAKE_SHARED)
endif

#=============== OPENBSD SPECIFIC OPTIONS ======================

ifeq ($(PLATFORM), OPENBSD)

  SUPPORTED = TRUE
  ALLLIBS = ${LIBS} -L/usr/local/lib
  SHLIBSUFFIX=.so
  PIC_OPTION = -fPIC

  PLATFORM_COMPILE_OPTIONS = -D${PLATFORM} ${PIC_OPTION} ${WCSTOMBS}

  # We need the ICU library if we are using the ICUBridge
  ifdef XALAN_USE_ICU
    LD_RPATH_PRE = -Wl,-rpath,
    PLATFORM_LIB_LINK_OPTIONS = $(LD_RPATH_PRE)${ICUROOT}/lib
    PLATFORM_LIB_LINK_OPTIONS += -licuuc -licudata
    ALLLIBS += -L${ICUROOT}
  endif

  CC1 = $(CXX) $(CPPFLAGS) $(CXXFLAGS) $(PLATFORM_COMPILE_OPTIONS)
  CC4 = $(CC) $(CFLAGS) $(PLATFORM_COMPILE_OPTIONS)
  MAKE_SHARED = $(CXX) $(CXXFLAGS) -D${PLATFORM} -shared ${PIC_OPTION} ${LDFLAGS}
  LINK = $(CXX) -D${PLATFORM} ${PIC_OPTION} ${LDFLAGS}

  MAKE_SHARED_LOC=$(MAKE_SHARED)
endif

#=============== HPUX SPECIFIC OPTIONS =========================


ifeq ($(PLATFORM), HPUX)

  SUPPORTED = TRUE
  PLATFORM_COMPILE_OPTIONS = +Z -D${PLATFORM} -D_THREAD_SAFE
  # +p option removed, +W849 option added
  # to avoid error created by instantiated template symbol length limitation.
  # Also disable warning 930 about placement delete not implemented.
  PLATFORM_CXX_COMPILE_OPTIONS = +W849,930 -mt  -Wc,-koenig_lookup,on -Wc,-ansi_for_scope,on

  ALLLIBS = ${LIBS}
  SHLIBSUFFIX=.sl
  CC1 = $(CXX) $(CPPFLAGS) $(CXXFLAGS) $(PLATFORM_COMPILE_OPTIONS) $(PLATFORM_CXX_COMPILE_OPTIONS)
  CC4 = $(CC) $(CFLAGS) $(PLATFORM_COMPILE_OPTIONS)
  MAKE_SHARED = $(CXX) -b +Z ${LDFLAGS} -Wl,+s
  LINK_SONAME = -Wl,+h,${SO_NAME}
  LINK = $(CXX) $(CXXFLAGS) ${LDFLAGS} $(PLATFORM_COMPILE_OPTIONS) $(PLATFORM_CXX_COMPILE_OPTIONS) -Wl,+s

  export SHLIB_PATH:=$(XERCESCROOT)/lib:$(ICULIB_LOC):$(SHLIB_PATH)

  MAKE_SHARED_LOC = $(CXX) -b +Z ${LDFLAGS} -Wl,+s -Wl,+h,${LOC_SONAME}
endif

#=============== SOLARIS SPECIFIC OPTIONS =========================

ifeq ($(PLATFORM), SOLARIS)

  SUPPORTED = TRUE

  ifeq (${CXX}, g++)

	PLATFORM_COMPILE_OPTIONS = -Wall -fPIC -D${PLATFORM} -D_REENTRANT

	ifdef XALAN_USE_ICU
	LD_RPATH_PRE=  -Wl,-rpath,
	endif

	EXTRA_LINK_OPTIONS=-lc
	CC1 = $(CXX) $(CPPFLAGS) $(CXXFLAGS) $(PLATFORM_COMPILE_OPTIONS)
        CC4 = $(CC) $(CFLAGS) $(PLATFORM_COMPILE_OPTIONS)
	MAKE_SHARED = ${CXX} $(CXXFLAGS) -D${PLATFORM} -shared -fPIC ${LDFLAGS}
	LINK =  g++ -D${PLATFORM} -fPIC ${LDFLAGS}

	ALLLIBS = ${LIBS} -L/usr/lib -L/usr/local/lib -lc

  else

	PLATFORM_COMPILE_OPTIONS = -KPIC -mt -xs -features=rtti -D${PLATFORM} -D_REENTRANT

	CC1 = $(CXX) $(CPPFLAGS) $(CXXFLAGS) $(PLATFORM_COMPILE_OPTIONS)
    CC4 = $(CC) $(CFLAGS) -KPIC -mt -xs -D${PLATFORM} -D_REENTRANT
    MAKE_SHARED = ${CXX} -D${PLATFORM} -G ${LDFLAGS} 
    LINK_SONAME = -h ${SO_NAME} 
    MAKE_SHARED_C = ${CC} -D${PLATFORM} -G ${LDFLAGS}
	LINK = ${CXX} -D${PLATFORM} ${LDFLAGS}

    ALLLIBS = -mt ${LIBS} -L/usr/local/SUNWspro/lib -L/usr/ccs/lib -lc -lgen
  endif

  SHLIBSUFFIX=.so
  
  export LD_LIBRARY_PATH := $(XERCESCROOT)/lib:$(ICULIB_LOC):$(LD_LIBRARY_PATH)

  # if there is a LD_LIBRARY_PATH_64, we need to set this also
  ifdef LD_LIBRARY_PATH_64
  	export LD_LIBRARY_PATH_64 := $(XERCESCROOT)/lib:$(ICUROOT)/lib:$(LD_LIBRARY_PATH_64)
  endif

  MAKE_SHARED_LOC = ${CXX} -D${PLATFORM} -G ${LDFLAGS} -h ${LOC_SONAME}

endif

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

  SUPPORTED = TRUE

  ifeq (${CXX}, g++)

	PLATFORM_COMPILE_OPTIONS = -Wall -fPIC -D${PLATFORM} -D_REENTRANT
	ALLLIBS = ${LIBS} -L/usr/lib -L/usr/local/lib -lc

	EXTRA_LINK_OPTIONS=-lc
	CC1 = $(CXX) $(CPPFLAGS) $(CXXFLAGS) $(PLATFORM_COMPILE_OPTIONS)
        CC4 = $(CC) $(CFLAGS) $(PLATFORM_COMPILE_OPTIONS)
	MAKE_SHARED = ${CXX} $(CXXFLAGS) -D${PLATFORM} -shared -fPIC ${LDFLAGS}
	LINK =  g++ -D${PLATFORM} -fPIC ${LDFLAGS}

	ALLLIBS = ${LIBS} -L/usr/lib -L/usr/local/lib -lc

    SHLIBSUFFIX=.a

  else

	PLATFORM_COMPILE_OPTIONS = -qthreaded -D${PLATFORM} -D_THREAD_SAFE
	ALLLIBS = ${LIBS} -L/usr/lib 
	CC1 = $(CXX) $(CPPFLAGS) $(CXXFLAGS) $(PLATFORM_COMPILE_OPTIONS)
	
ifeq (-DNDEBUG,$(findstring -DNDEBUG,${CXXFLAGS}))
	CC2 = $(CXX) $(PLATFORM_COMPILE_OPTIONS) -DNDEBUG
else
	CC2 = $(CXX) $(PLATFORM_COMPILE_OPTIONS)
endif
    CC4 = $(CC) $(CFLAGS) $(PLATFORM_COMPILE_OPTIONS)

	MAKE_SHARED = makeC++SharedLib_r -p 512 ${LDFLAGS} ${bitstobuildLink}

	LINK = $(CXX) -qnotempinc $(CXXFLAGS)  ${LDFLAGS} $(PLATFORM_COMPILE_OPTIONS) ${bitstobuildLink}

ifeq (${BITSTOBUILD}, 64)
	MAKE_SHARED += -X64
	CC2 += -q64
	CC4 += -q64
endif

	SHLIBSUFFIX=.a

  endif
   
  XERCES_LIB= -L$(XERCESCROOT)/lib -lxerces-c
  ICU_LIB= -L$(ICUROOT)/lib -licuuc32 -L$(ICUI18NROOT)/lib -licui18n32

  LIB = $(LIB_NAME)$(LIB_MAJOR_VER).$(LIB_MINOR_VER)$(SHLIBSUFFIX)
  SO_NAME = $(LIB_NAME)$(LIB_MAJOR_VER)$(SHLIBSUFFIX)

  LIBRARY_LINK_NAME=-l$(PROJECT_NAME)$(LIB_MAJOR_VER)
  
  export LIBPATH := $(XERCESCROOT)/lib:$(ICULIB_LOC):$(LIBPATH)
  MAKE_SHARED_LOC=$(MAKE_SHARED)
  LOC_LIB = ${LOC_LIBNAME}${LIB_MAJOR_VER}.${LIB_MINOR_VER}${SHLIBSUFFIX}
  LOC_LIBKEYNAME=${LOC_PROJECT_NAME}${LIB_MAJOR_VER}

endif

#=============== OS390 SPECIFIC OPTIONS =========================

ifeq ($(PLATFORM), OS390)

  SUPPORTED = TRUE
  PLATFORM_COMPILE_OPTIONS =-Wc,dll,"langlvl(extended),float(ieee)" -D${PLATFORM} -D_XOPEN_SOURCE_EXTENDED -DXALAN_BUILD_DLL
  ALLLIBS =
ifeq (${OS390_XPLINK},1)
  SHLIBSUFFIX=.xplink.dll
  OS390SIDEDECK=.xplink.x
else
  SHLIBSUFFIX=.dll
  OS390SIDEDECK=.x
endif

  CPPMSGFLAGS = -2 -DNDEBUG -DXALAN_XALANMSGLIB_BUILD_DLL
  CMSGFLAGS = -2 -DNDEBUG -DXALAN_XALANMSGLIB_BUILD_DLL
  CXXMSGFLAGS = -2 -DNDEBUG -DXALAN_XALANMSGLIB_BUILD_DLL

  CC1 = $(CXX) $(CPPFLAGS) $(CXXFLAGS) ${LDFLAGS} $(PLATFORM_COMPILE_OPTIONS) 
ifeq (-DNDEBUG,$(findstring -DNDEBUG,${CXXFLAGS}))
  CC2 = $(CXX) $(PLATFORM_COMPILE_OPTIONS) -DNDEBUG
else
  CC2 = $(CXX) $(PLATFORM_COMPILE_OPTIONS)
endif
  CC3 = $(CXX) $(CXXFLAGS) $(PLATFORM_COMPILE_OPTIONS)
  CC4 = $(CC) $(CFLAGS) $(PLATFORM_COMPILE_OPTIONS)
  CC5 = $(CXX) $(CXXMSGFLAGS) $(PLATFORM_COMPILE_OPTIONS) {$LDFLAGS}
  MAKE_SHARED = ${CXX} $(CXXFLAGS) -D${PLATFORM} -Wl,dll ${LDFLAGS}
  MAKE_SHARED_MSG = ${CXX} $(CXXMSGFLAGS) -D${PLATFORM} -Wl,dll ${LDFLAGS}
  LINK = $(CXX) $(CXXFLAGS) $(PLATFORM_COMPILE_OPTIONS) ${LDFLAGS}

  XERCES_LIB=$(XERCESCROOT)/lib/libxerces-c3_1_1.x
  ICU_LIB=$(XERCESCROOT)/lib/libicuuc33.0$(OS390SIDEDECK) $(XERCESCROOT)/lib/libicui18n33.0$(OS390SIDEDECK)
  
  LIB=$(LIB_NAME).$(VER)$(SHLIBSUFFIX) 
  
  LIBRARY_SEARCH_PATH=
  LIBRARY_LINK_NAME=$(XSL_LIB_DIR)/$(LIB_NAME).$(VER)$(OS390SIDEDECK)
  LOCAL_LIB=${XSL_LIB_DIR}/lib$(LOC_PROJECT_NAME).$(VER)$(OS390SIDEDECK)
  LOC_LIB=${LOC_LIBNAME}.${VER}$(SHLIBSUFFIX)
  MESSAGELIB=${XSL_LIB_DIR}/${LOC_LIB}

## OS390BATCH
ifeq (${OS390BATCH},1)
    BATCH_XALAN_UTIL_NAME = IXMXAL20
    BATCH_TEST_UTIL_NAME  = IXMTST20
ifeq (${OS390_XPLINK},1)
    BATCH_PROJECT_NAME    = IXMLX20
    BATCH_MESSAGE_NAME    = IXMMXG20
    BATCH_XML_PROJ_NAME   = IXM4C6XX
    BATCH_ICUUC_PROJ_NAME = IXMI33XC
    BATCH_ICUIN_PROJ_NAME = IXMI33XN
else
    BATCH_PROJECT_NAME    = IXMLC20
    BATCH_MESSAGE_NAME    = IXMMSG20
    BATCH_XML_PROJ_NAME   = IXM4C56X
    BATCH_ICUUC_PROJ_NAME = IXMI33UC
    BATCH_ICUIN_PROJ_NAME = IXMI33IN
endif

    XERCES_LIB = "//'${LOADEXP}(${BATCH_XML_PROJ_NAME})'"
    ICU_LIB = "//'${LOADEXP}(${BATCH_ICUUC_PROJ_NAME})'" "//'${LOADEXP}(${BATCH_ICUIN_PROJ_NAME})'"
    LOCAL_LIB = "//'${LOADEXP}(${BATCH_MESSAGE_NAME})'"
    BATCH_TARGET = "//'${LOADMOD}(${BATCH_PROJECT_NAME})'"
#   ALLLIBS =  ${XERCES_LIB} ${ICU_LIB} "//'${LOADEXP}(${BATCH_MESSAGE_NAME})'"
    LIBRARY_LINK_NAME=  "//'${LOADEXP}(${BATCH_PROJECT_NAME})'" 
    MESSAGELIB="//'${LOADMOD}(${BATCH_MESSAGE_NAME})'"
endif  ## OS390BATCH

  MAKE_SHARED_LOC=$(MAKE_SHARED)



endif

#============ TRU64 SPECIFIC OPTIONS ============================

ifeq ($(PLATFORM), TRU64)

  SUPPORTED = TRUE
  PLATFORM_COMPILE_OPTIONS = -D${PLATFORM} -ptr ${XSL_OBJ_DIR}/.cxx_repository -ieee -pthread -std strict_ansi_errors
  ALLLIBS = ${LIBS} -L/usr/lib -lm
  SHLIBSUFFIX = .so
  CC1 = $(CXX) $(CPPFLAGS) ${CXXFLAGS} $(PLATFORM_COMPILE_OPTIONS) -nocxxstd
  CC4 = $(CC) $(CFLAGS) $(PLATFORM_COMPILE_OPTIONS)
  MAKE_SHARED = ${CXX} ${CXXFLAGS} -shared -D${PLATFORM} -ptr ${XSL_OBJ_DIR}/.cxx_repository -ieee -pthread -std strict_ansi_errors -nocxxstd ${LDFLAGS}
  LINK = ${CXX} $(CXXFLAGS) $(PLATFORM_COMPILE_OPTIONS) ${LDFLAGS}
  MAKE_SHARED_LOC=$(MAKE_SHARED)
endif

#============ MacOSX SPECIFIC OPTIONS ============================

ifeq ($(PLATFORM), MACOSX)

  SUPPORTED = TRUE
  PLATFORM_COMPILE_OPTIONS = -Wall -fno-elide-constructors -D${PLATFORM} -D_REENTRANT -DXALAN_USE_XERCES_LOCAL_CODEPAGE_TRANSCODERS
  ALLLIBS = ${LIBS} -L/usr/lib -L/usr/local/lib
  SHLIBSUFFIX=.dylib
  CC1 = ${CXX} $(CPPFLAGS) $(CXXFLAGS) $(PLATFORM_COMPILE_OPTIONS)
  CC4 = ${CC} $(CXXFLAGS) $(PLATFORM_COMPILE_OPTIONS)
  LIB = $(LIB_NAME).$(LIB_MAJOR_VER).$(LIB_MINOR_VER)$(SHLIBSUFFIX)
  SO_NAME = $(LIB_NAME).$(LIB_MAJOR_VER)$(SHLIBSUFFIX)
  MAKE_SHARED = ${CXX} $(CXXFLAGS) -D${PLATFORM} -dynamiclib -prebind -seg1addr 0x38000000  -compatibility_version 1 -current_version $(LIB_MAJOR_DOT_VER) -install_name ${PREFIX}/lib/${LINK_NAME} ${LDFLAGS}
  LINK = ${CXX} $(CXXFLAGS) ${PLATFORM_COMPILE_OPTIONS} ${LDFLAGS}
  
  export DYLD_FALLBACK_LIBRARY_PATH := $(XERCESCROOT)/lib:$(ICULIB_LOC):$(DYLD_FALLBACK_LIBRARY_PATH)
  LOC_LIB = ${LOC_LIBNAME}.${LIB_MAJOR_VER}.${LIB_MINOR_VER}$(SHLIBSUFFIX)
  LOC_SONAME = ${LOC_LIBNAME}.${LIB_MAJOR_VER}${SHLIBSUFFIX}
  MAKE_SHARED_LOC= ${CXX} $(CXXFLAGS) -D${PLATFORM} -dynamiclib -prebind -seg1addr 0x40000000  -compatibility_version 1 -current_version $(LIB_MAJOR_DOT_VER) -install_name ${PREFIX}/lib/${LOC_LIBNAME}${SHLIBSUFFIX} ${LDFLAGS}
endif

#=============== OS400 SPECIFIC OPTIONS =========================

ifeq ($(PLATFORM), OS400)

  SUPPORTED = TRUE
  PLATFORM_COMPILE_OPTIONS = -v -D_MULTI_THREADED -D${PLATFORM} -DXALAN_USE_XERCES_LOCAL_CODEPAGE_TRANSCODERS
  PLATFORM_C_COMPILE_OPTIONS = -v -D_MULTI_THREADED -D${PLATFORM} -DXALAN_USE_XERCES_LOCAL_CODEPAGE_TRANSCODERS
  ALLLIBS =
  MAKE_SHARED = ld -v ${LDFLAGS}
  MAKE_SHARED_C = ld -v ${LDFLAGS}
  SHLIBSUFFIX=.a

  CC1 = $(CXX) $(CPPFLAGS) $(CXXFLAGS) $(PLATFORM_COMPILE_OPTIONS)
ifeq (-DNDEBUG,$(findstring -DNDEBUG,${CXXFLAGS}))
  CC2 = $(CXX) $(PLATFORM_COMPILE_OPTIONS2) -DNDEBUG
else
  CC2 = $(CXX) $(PLATFORM_COMPILE_OPTIONS2)
endif
  CC3 = $(CXX) $(CXXFLAGS) $(PLATFORM_COMPILE_OPTIONS2)
  CC4 = $(CC) $(CFLAGS) $(PLATFORM_COMPILE_OPTIONS)
  TO = qwobj
  EXTRA_COMPILE_OPTIONS = -I. -g  -qTERASPACE="*YES *NOTSIFC" -qSTGMDL="*INHERIT" -DXML_USE_ICONV400_TRANSCODER -DXML_USE_INMEM_MESSAGELOADER -DXML_USE_PTHREADS -DXML_USE_NETACCESSSOR_SOCKET -qTGTRLS="V5R1M0"
  EXTRA_LINK_OPTIONS = -qOPTION="*DUPPROC *DUPVAR *NOWARN"
  LINK = $(CXX) $(CXXFLAGS) $(PLATFORM_COMPILE_OPTIONS) ${LDFLAGS}

endif

ifndef SUPPORTED
  nogood:
	  @echo Linux, Solaris, AIX, Compaq Tru64, OS/390, MacOSX, HP-UX, NETBSD, FREEBSD, CYGWIN, and MINGW are the only platforms supported.
endif


ALLLIBS += $(XERCES_LIB)

ALLLIBS += $(LOCAL_LIB)

ifdef XALAN_USE_ICU 
  ALLLIBS += $(ICU_LIB)
endif


