root = ..\..

!include $(root)\build\config.nmake
!include $(root)\build\c\rules.nmake
!include $(root)\build\cxx\rules.nmake

EXTRA_CPPFLAGS = /I..

src = c\expat\xmlparse.c c\expat\xmlrole.c c\expat\xmltok.c

src = $(src) cxx\string.cxx cxx\ro-string.cxx
src = $(src) cxx\parser\elements.cxx cxx\parser\state.cxx
src = $(src) cxx\parser\expat\elements.cxx cxx\parser\expat\xml-error.cxx

!if "$(XSDE_EXCEPTIONS)" == "y"
src = $(src) cxx\parser\exceptions.cxx
!else
src = $(src) cxx\parser\sys-error.cxx cxx\parser\error.cxx
!endif

# Data types.
#

src = $(src) cxx\parser\buffer.cxx

!if "$(XSDE_STL)" == "y"
src = $(src) cxx\parser\string-sequence-stl.cxx
!else
src = $(src) \
cxx\parser\qname.cxx \
cxx\parser\string-sequence.cxx
!endif

# Parsers.
#

!if "$(XSDE_VALIDATION)" == "y"

src = $(src) \
cxx\parser\schema-error.cxx \
cxx\parser\validating\parser.cxx \
cxx\parser\validating\char-table.cxx \
cxx\parser\validating\ncname-common.cxx \
cxx\parser\validating\time-zone.cxx \
cxx\parser\validating\xml-schema-pskel.cxx

src = $(src) \
cxx\parser\validating\any-type.cxx \
cxx\parser\validating\boolean.cxx \
cxx\parser\validating\number.cxx \
cxx\parser\validating\byte.cxx \
cxx\parser\validating\unsigned-byte.cxx \
cxx\parser\validating\short.cxx \
cxx\parser\validating\unsigned-short.cxx \
cxx\parser\validating\int.cxx \
cxx\parser\validating\unsigned-int.cxx \
cxx\parser\validating\integer.cxx \
cxx\parser\validating\negative-integer.cxx \
cxx\parser\validating\non-positive-integer.cxx \
cxx\parser\validating\positive-integer.cxx \
cxx\parser\validating\non-negative-integer.cxx \
cxx\parser\validating\float.cxx \
cxx\parser\validating\double.cxx \
cxx\parser\validating\decimal.cxx

!if "$(XSDE_LONGLONG)" == "y"
src = $(src) \
cxx\parser\validating\long-long.cxx \
cxx\parser\validating\unsigned-long-long.cxx
!else
src = $(src) \
cxx\parser\validating\long.cxx \
cxx\parser\validating\unsigned-long.cxx
!endif

!if "$(XSDE_STL)" == "y"

src = $(src) \
cxx\parser\validating\string-stl.cxx \
cxx\parser\validating\normalized-string-stl.cxx \
cxx\parser\validating\token-stl.cxx \
cxx\parser\validating\name-stl.cxx \
cxx\parser\validating\nmtoken-stl.cxx \
cxx\parser\validating\nmtokens-stl.cxx \
cxx\parser\validating\ncname-stl.cxx \
cxx\parser\validating\id-stl.cxx \
cxx\parser\validating\idref-stl.cxx \
cxx\parser\validating\idrefs-stl.cxx \
cxx\parser\validating\language-stl.cxx \
cxx\parser\validating\uri-stl.cxx \
cxx\parser\validating\qname-stl.cxx

!else

src = $(src) \
cxx\parser\validating\string.cxx \
cxx\parser\validating\normalized-string.cxx \
cxx\parser\validating\token.cxx \
cxx\parser\validating\name.cxx \
cxx\parser\validating\nmtoken.cxx \
cxx\parser\validating\nmtokens.cxx \
cxx\parser\validating\ncname.cxx \
cxx\parser\validating\id.cxx \
cxx\parser\validating\idref.cxx \
cxx\parser\validating\idrefs.cxx \
cxx\parser\validating\language.cxx \
cxx\parser\validating\uri.cxx \
cxx\parser\validating\qname.cxx

!endif # stl

src = $(src) \
cxx\parser\validating\base64-binary.cxx \
cxx\parser\validating\hex-binary.cxx \
cxx\parser\validating\gday.cxx \
cxx\parser\validating\gmonth.cxx \
cxx\parser\validating\gyear.cxx \
cxx\parser\validating\gmonth-day.cxx \
cxx\parser\validating\gyear-month.cxx \
cxx\parser\validating\date.cxx \
cxx\parser\validating\time.cxx \
cxx\parser\validating\date-time.cxx \
cxx\parser\validating\duration.cxx

!else # validation

src = $(src) \
cxx\parser\non-validating\parser.cxx \
cxx\parser\non-validating\time-zone.cxx \
cxx\parser\non-validating\xml-schema-pskel.cxx

src = $(src) \
cxx\parser\non-validating\any-type.cxx \
cxx\parser\non-validating\boolean.cxx \
cxx\parser\non-validating\number.cxx \
cxx\parser\non-validating\byte.cxx \
cxx\parser\non-validating\unsigned-byte.cxx \
cxx\parser\non-validating\short.cxx \
cxx\parser\non-validating\unsigned-short.cxx \
cxx\parser\non-validating\int.cxx \
cxx\parser\non-validating\unsigned-int.cxx \
cxx\parser\non-validating\integer.cxx \
cxx\parser\non-validating\negative-integer.cxx \
cxx\parser\non-validating\non-positive-integer.cxx \
cxx\parser\non-validating\positive-integer.cxx \
cxx\parser\non-validating\non-negative-integer.cxx \
cxx\parser\non-validating\float.cxx \
cxx\parser\non-validating\double.cxx \
cxx\parser\non-validating\decimal.cxx

!if "$(XSDE_LONGLONG)" == "y"
src = $(src) \
cxx\parser\non-validating\long-long.cxx \
cxx\parser\non-validating\unsigned-long-long.cxx
!else
src = $(src) \
cxx\parser\non-validating\long.cxx \
cxx\parser\non-validating\unsigned-long.cxx
!endif

!if "$(XSDE_STL)" == "y"

src = $(src) \
cxx\parser\non-validating\string-stl.cxx \
cxx\parser\non-validating\normalized-string-stl.cxx \
cxx\parser\non-validating\token-stl.cxx \
cxx\parser\non-validating\name-stl.cxx \
cxx\parser\non-validating\nmtoken-stl.cxx \
cxx\parser\non-validating\nmtokens-stl.cxx \
cxx\parser\non-validating\ncname-stl.cxx \
cxx\parser\non-validating\id-stl.cxx \
cxx\parser\non-validating\idref-stl.cxx \
cxx\parser\non-validating\idrefs-stl.cxx \
cxx\parser\non-validating\language-stl.cxx \
cxx\parser\non-validating\uri-stl.cxx \
cxx\parser\non-validating\qname-stl.cxx

!else

src = $(src) \
cxx\parser\non-validating\string.cxx \
cxx\parser\non-validating\normalized-string.cxx \
cxx\parser\non-validating\token.cxx \
cxx\parser\non-validating\name.cxx \
cxx\parser\non-validating\nmtoken.cxx \
cxx\parser\non-validating\nmtokens.cxx \
cxx\parser\non-validating\ncname.cxx \
cxx\parser\non-validating\id.cxx \
cxx\parser\non-validating\idref.cxx \
cxx\parser\non-validating\idrefs.cxx \
cxx\parser\non-validating\language.cxx \
cxx\parser\non-validating\uri.cxx \
cxx\parser\non-validating\qname.cxx

!endif # stl

src = $(src) \
cxx\parser\non-validating\base64-binary.cxx \
cxx\parser\non-validating\hex-binary.cxx \
cxx\parser\non-validating\gday.cxx \
cxx\parser\non-validating\gmonth.cxx \
cxx\parser\non-validating\gyear.cxx \
cxx\parser\non-validating\gmonth-day.cxx \
cxx\parser\non-validating\gyear-month.cxx \
cxx\parser\non-validating\date.cxx \
cxx\parser\non-validating\time.cxx \
cxx\parser\non-validating\date-time.cxx \
cxx\parser\non-validating\duration.cxx

!endif # validation

obj = $(src:.cxx=.obj)
obj = $(obj:.c=.obj)


# Build.
#
xsde.lib: $(obj)
	$(AR) $(ARFLAGS) /OUT:$@ $**

$(src): config.h

config.h:
	@echo generating config.h
	@echo /* Generated - do not edit. */  >$@
	@echo #ifndef XSDE_CONFIG_H          >>$@
	@echo #define XSDE_CONFIG_H          >>$@
!if "$(XSDE_PLATFORM)" == "wince"
	@echo #define XSDE_PLATFORM_WINCE    >>$@
!endif
!if "$(XSDE_PLATFORM)" == "win32"
	@echo #define XSDE_PLATFORM_WIN32    >>$@
!endif
!if "$(XSDE_PLATFORM)" == "posix"
	@echo #define XSDE_PLATFORM_POSIX    >>$@
!endif
!if "$(XSDE_BYTEORDER)" == "l"
	@echo #define XSDE_BYTEORDER 1234    >>$@
!endif
!if "$(XSDE_BYTEORDER)" == "b"
	@echo #define XSDE_BYTEORDER 4321    >>$@
!endif
!if "$(XSDE_STL)" == "y"
	@echo #define XSDE_STL               >>$@
!endif
!if "$(XSDE_IOSTREAM)" == "y"
	@echo #define XSDE_IOSTREAM          >>$@
!endif
!if "$(XSDE_EXCEPTIONS)" == "y"
	@echo #define XSDE_EXCEPTIONS        >>$@
!endif
!if "$(XSDE_VALIDATION)" == "y"
	@echo #define XSDE_VALIDATION        >>$@
!endif
!if "$(XSDE_LONGLONG)" == "y"
	@echo #define XSDE_LONGLONG          >>$@
!endif
	@echo #endif                         >>$@

# Test.
#
test: xsde.lib

# Clean.
#
# Nmake that comes with eVC++ 4 cannot handle del $(obj)
# because the resulting line is too long.
#
clean:
	-del xsde.lib config.h
	-del c\expat\*.obj
	-del cxx\*.obj
	-del cxx\parser\*.obj
	-del cxx\parser\expat\*.obj
!if "$(XSDE_VALIDATION)" == "y"
	-del cxx\parser\validating\*.obj
!else
	-del cxx\parser\non-validating\*.obj
!endif
