######################################################################
#
# Open Watcom 1.5 multiplatform target makefile. This file is called
# by main makefile.
#
# Author        : Michael Greene, July 2006
#
# User selectable project options are set in buildopts.inc
#
######################################################################

# include options set by main makefile
!include watopts.tmp

# include user selectable option
!include buildopts.inc

# project directories
PROJ   = $+ $(%cwd) $-
RELDIR = $(PROJ)\release
DEBDIR = $(PROJ)\debug
SRCDIR = $(PROJ)\..\lib
TSTDIR = $(PROJ)\..\tests
XMLDIR = $(PROJ)\..\xmlwf

CC  = wcl386
LD  = wlink
LB  = wlib


########################################
#
# ***** platform specific options *****
#
!ifeqi SYSPLATFORM os2
SYSCOMP    = os2
SYSLINK    = os2v2
LINKFILE   = expat.lnk
COMINC     = $(%watcom)\h;$(%watcom)\h\os2
EXPATDLL   = $(DLLNAME)
EXT        = .exe
!else ifeqi SYSPLATFORM nt
SYSCOMP    = nt
SYSLINK    = nt
LINKFILE   = wexpat.lnk
COMINC     = $(%watcom)\h;$(%watcom)\h\nt
EXPATDLL   = $(DLLNAME)
EXT        = .exe
NTLIB      = LIB $(%watcom)\lib386\nt\kernel32.lib
!else ifeqi SYSPLATFORM linux
SYSCOMP    = linux
SYSLINK    = linux
COMINC     = $(%watcom)\lh
LINUXEXT   = op noext
#EXT = .elf
!endif
# ***** END platform specific options *****


########################################
#
#  ***** Release/Debug options *****
#
!ifndef DEBUG
LD_OPTS   = op el
# -wcd to quiet warning 201 - might need to check
C_COMMON  = -d0 -wcd=201
OPT       = $(OPTIMIZATION)
TARGDIR   = $(RELDIR)
!else
LD_OPTS   = d all op map,symf
C_COMMON  = $(DEBUGOPTS) -of
# overrides optimization options set in buildopts.inc
OPT       = -od
TARGDIR   = $(DEBDIR)
!endif
#  ***** END Release/Debug options *****


# MULTITHREAD set in buildopts.inc
!ifdef MULTITHREAD
MT = -bm
!endif

# CLIBLNK set in buildopts.inc
!ifdef CLIBLNK
CLIBOPT = -br
!endif

INCLUDE   = $(SRCDIR);$(TSTDIR);$(COMINC)

EXTRA_C   = $(C_COMMON) $(OPT) $(MT) $(CLIBOPT) $(MACHINE)
COMMONC   = -w4 -e25 -zq -bt=$(SYSCOMP) -mf

CFLAGS    = -i=$(INCLUDE) $(DEFS) $(COMMONC) $(EXTRA_C)
LDFLAGS   = $(LD_OPTS) op maxe=25
LIBFLAGS  = -b -c -n -p=512

SRCS = $(SRCDIR)\xmlparse.c $(SRCDIR)\xmlrole.c $(SRCDIR)\xmltok.c
OBJS = xmlparse.obj xmlrole.obj xmltok.obj

XMLWFS = $(XMLDIR)\xmlwf.c $(XMLDIR)\xmlfile.c $(XMLDIR)\codepage.c &
         $(XMLDIR)\readfilemap.c
XMLWFO = xmlwf.obj xmlfile.obj codepage.obj readfilemap.obj

TESTSRC = ..\tests\chardata.c ..\tests\minicheck.c ..\tests\runtests.c
TESTOBJ = chardata.obj minicheck.obj runtests.obj


#############################################################
#
#       ***** Project target build procedures *****
#
#############################################################

all: clean $(EXPATDLL) $(TARGLIB) xmlwf$(EXT) tests release .SYMBOLIC

# dll is built only for OS/2-ECS and LINUX platforms
#expat.dll: .ALWAYS
$(DLLNAME): .ALWAYS
  $(CC) -c $(CFLAGS) -bd $(SRCS)
!ifeqi SYSPLATFORM os2
  $(LD) NAME $* @expat.lnk $(LDFLAGS) FILE {$(OBJS)}
!else
  $(LD) NAME $* @wexpat.lnk $(LDFLAGS) FILE {$(OBJS)}
!endif
  $(LB) $(IMPORTLIB) +$*.dll

# build static lib for platform
$(TARGLIB): .ALWAYS
  $(CC) -c $(CFLAGS) $(CLIBOPT) $(SRCS)
  $(LB) $(LIBFLAGS) $*.lib $(OBJS)

# build standalone XML parser
xmlwf$(EXT):
  $(CC) -c $(CFLAGS) $(CLIBOPT) $(XMLWFS)
  $(LD) NAME $* SYS $(SYSLINK) $(LDFLAGS) $(LINUXEXT) LIB $(TARGLIB) $(NTLIB) FILE {$(XMLWFO)}

# The following builds EXPAT test and example programs
tests: runtests$(EXT) elements$(EXT) outline$(EXT) benchmark$(EXT) .SYMBOLIC

runtests$(EXT): $(LINKLIB)
  $(CC) -c $(CFLAGS) $(CLIBOPT) $(TESTSRC)
  $(LD) NAME $* SYS $(SYSLINK) $(LDFLAGS) $(LINUXEXT) LIB $(TARGLIB) FILE {$(TESTOBJ)}

elements$(EXT): $(LINKLIB)
  $(CC) -c $(CFLAGS) $(CLIBOPT) ..\examples\elements.c
  $(LD) NAME $* SYS $(SYSLINK) $(LDFLAGS) $(LINUXEXT) LIB $(TARGLIB) FILE $*.obj

outline$(EXT): $(LINKLIB)
  $(CC) -c $(CFLAGS) $(CLIBOPT) ..\examples\outline.c
  $(LD) NAME $* SYS $(SYSLINK) $(LDFLAGS) $(LINUXEXT) LIB $(TARGLIB) FILE $*.obj

benchmark$(EXT): $(LINKLIB)
  $(CC) -c $(CFLAGS) $(CLIBOPT) ..\tests\benchmark\benchmark.c
  $(LD) NAME $* SYS $(SYSLINK) $(LDFLAGS) $(LINUXEXT) LIB $(TARGLIB) FILE $*.obj

# requires wget to download and unzip XML_TEST_SUITE
xmlts.zip:  .SYMBOLIC
  $(WGET)wget --output-document=..\tests\xmlts.zip &
                       http://www.w3.org/XML/Test/xmlts20020606.zip
  unzip -q ..\tests\xmlts.zip -d ..\tests


#############################################################
#
#  ***** Project make release directories procedures *****
#
#############################################################

release: .SYMBOLIC
TARGEXE = xmlwf$(EXT) runtests$(EXT) elements$(EXT) outline$(EXT) benchmark$(EXT)
  @if not EXIST $(TARGDIR) -@mkdir $(TARGDIR)
  @if not EXIST $(TARGDIR)\$(SYSPLATFORM) @%make mktargdir
!ifneqi SYSPLATFORM linux
  -@copy  .\$(EXPATDLL) $(TARGDIR)\$(SYSPLATFORM)\dll
!endif
  @for %a in ($(TARGEXE)) do -@copy .\%a $(TARGDIR)\$(SYSPLATFORM)\bin
  -@copy  .\*.lib $(TARGDIR)\$(SYSPLATFORM)\lib
  -@copy  ..\lib\expat.h $(TARGDIR)\$(SYSPLATFORM)\include
  -@copy  ..\lib\expat_external.h $(TARGDIR)\$(SYSPLATFORM)\include

mktargdir: .PROCEDURE
  -@mkdir $(TARGDIR)\$(SYSPLATFORM)
  -@mkdir $(TARGDIR)\$(SYSPLATFORM)\bin
  -@mkdir $(TARGDIR)\$(SYSPLATFORM)\lib
  -@mkdir $(TARGDIR)\$(SYSPLATFORM)\include
!ifneqi SYSPLATFORM linux
  -@mkdir $(TARGDIR)\$(SYSPLATFORM)\dll
!endif

#############################################################
#
#           ***** Project clean procedures *****
#
#############################################################

# cleanup build files
clean: .SYMBOLIC
CLEANEXTS   = obj exe err lst map sym lib dll
CLEANLINUX  = xmlwf runtests elements outline benchmark
  @for %a in ($(CLEANEXTS))  do -@rm *.%a
  @for %a in ($(CLEANLINUX)) do -@rm %a*

cleanall: clean .SYMBOLIC
  @%write  watclean.tmp RELDIR=$(RELDIR)
  @%append watclean.tmp DEBDIR=$(DEBDIR)
  @if EXIST $(RELDIR)\os2   @wmake -h -f watclean.mif os2
  @if EXIST $(DEBDIR)\os2   @wmake -h -f watclean.mif os2d
  @if EXIST $(RELDIR)\nt    @wmake -h -f watclean.mif nt
  @if EXIST $(DEBDIR)\nt    @wmake -h -f watclean.mif ntd
  @if EXIST $(RELDIR)\linux @wmake -h -f watclean.mif linux
  @if EXIST $(DEBDIR)\linux @wmake -h -f watclean.mif linuxd
  @if EXIST $(RELDIR) -@rd $(RELDIR)
  @if EXIST $(DEBDIR) -@rd $(DEBDIR)
  @if EXIST watclean.tmp -@rm watclean.tmp
  @if EXIST watopts.tmp -@rm watopts.tmp
  @cd ..\tests
  @if EXIST xmlts.zip -@rm xmlts.zip
  @echo Clean complete.



