root := ../..

include $(root)/build/config.make
include $(root)/build/c/rules.make
include $(root)/build/cxx/rules.make

EXTRA_CPPFLAGS := -I..

src :=

ifeq ($(XSDE_EXTERNAL_EXPAT),n)
src += c/expat/xmlparse.c c/expat/xmlrole.c c/expat/xmltok.c
endif

src += c/genx/genx.c c/genx/char-props.c

ifneq ($(XSDE_PARSER_VALIDATION)$(XSDE_SERIALIZER_VALIDATION),nn)
ifeq ($(XSDE_REGEXP),y)
src += c/regexp/chvalid.c c/regexp/xmlunicode.c c/regexp/xmlregexp.c
endif
endif

ifeq ($(XSDE_CUSTOM_ALLOCATOR),y)
ifeq ($(XSDE_DEFAULT_ALLOCATOR),y)
src += allocator.c
endif
endif

src += cxx/string.cxx cxx/string-search.cxx cxx/ro-string.cxx cxx/stack.cxx

ifeq ($(XSDE_CUSTOM_ALLOCATOR),y)
ifeq ($(XSDE_EXCEPTIONS),y)
src += cxx/allocator.cxx
endif
endif

ifeq ($(XSDE_ENCODING),iso8859-1)
src += cxx/iso8859-1.cxx
endif

ifeq ($(XSDE_STL),n)
src += cxx/strdupx.cxx
endif

ifeq ($(XSDE_EXCEPTIONS),n)
src += cxx/sys-error.cxx
endif

ifneq ($(XSDE_PARSER_VALIDATION)$(XSDE_SERIALIZER_VALIDATION),nn)
src += cxx/schema-error.cxx
endif

ifeq ($(XSDE_POLYMORPHIC),y)
src += cxx/hashmap.cxx
endif

# Common data types.
#
src += cxx/buffer.cxx cxx/sequence-base.cxx

ifeq ($(XSDE_STL),y)
src += cxx/string-sequence-stl.cxx
else
src += cxx/qname.cxx cxx/string-sequence.cxx
endif


## XML
##
ifneq ($(XSDE_PARSER_VALIDATION)$(XSDE_SERIALIZER_VALIDATION),nn)
src += cxx/xml/char-table.cxx cxx/xml/ncname.cxx
endif


## C++/Hybrid
##
src +=                         \
cxx/hybrid/any-type.cxx        \
cxx/hybrid/any-type-pimpl.cxx  \
cxx/hybrid/any-type-pskel.cxx  \
cxx/hybrid/any-type-simpl.cxx  \
cxx/hybrid/any-type-sskel.cxx  \
cxx/hybrid/sequence.cxx

ifeq ($(XSDE_POLYMORPHIC),y)
src +=                        \
cxx/hybrid/parser-map.cxx     \
cxx/hybrid/serializer-map.cxx
endif

ifeq ($(XSDE_CDR),y)
src +=                             \
cxx/hybrid/cdr/exceptions.cxx      \
cxx/hybrid/cdr/istream.cxx         \
cxx/hybrid/cdr/ostream.cxx         \
cxx/hybrid/cdr/qname.cxx           \
cxx/hybrid/cdr/date-time.cxx       \
cxx/hybrid/cdr/string-sequence.cxx
endif

ifeq ($(XSDE_XDR),y)
src +=                             \
cxx/hybrid/xdr/exceptions.cxx      \
cxx/hybrid/xdr/istream.cxx         \
cxx/hybrid/xdr/ostream.cxx         \
cxx/hybrid/xdr/qname.cxx           \
cxx/hybrid/xdr/date-time.cxx       \
cxx/hybrid/xdr/string-sequence.cxx
endif

## C++/Parser
##
src += cxx/parser/elements.cxx
src += cxx/parser/expat/document.cxx cxx/parser/expat/xml-error.cxx

ifeq ($(XSDE_POLYMORPHIC),y)
src += cxx/parser/map.cxx cxx/parser/substitution-map.cxx
endif

ifeq ($(XSDE_EXCEPTIONS),y)
src += cxx/parser/exceptions.cxx
else
src += cxx/parser/error.cxx
endif

# Parser implementations.
#
ifeq ($(XSDE_PARSER_VALIDATION),y)

src +=                                          \
cxx/parser/validating/parser.cxx                \
cxx/parser/validating/time-zone.cxx             \
cxx/parser/validating/string-common.cxx         \
cxx/parser/validating/xml-schema-pskel.cxx

ifeq ($(XSDE_POLYMORPHIC),y)
src += cxx/parser/validating/inheritance-map.cxx
endif

src +=                                          \
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

ifeq ($(XSDE_LONGLONG),y)
src +=                                          \
cxx/parser/validating/long-long.cxx             \
cxx/parser/validating/unsigned-long-long.cxx
else
src +=                                          \
cxx/parser/validating/long.cxx                  \
cxx/parser/validating/unsigned-long.cxx
endif

ifeq ($(XSDE_STL),y)

src +=                                          \
cxx/parser/validating/any-simple-type-stl.cxx   \
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 +=                                       \
cxx/parser/validating/any-simple-type.cxx    \
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 +=                                       \
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 +=                                              \
cxx/parser/non-validating/parser.cxx                \
cxx/parser/non-validating/time-zone.cxx             \
cxx/parser/non-validating/string-common.cxx         \
cxx/parser/non-validating/xml-schema-pskel.cxx

src +=                                              \
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

ifeq ($(XSDE_LONGLONG),y)
src +=                                              \
cxx/parser/non-validating/long-long.cxx             \
cxx/parser/non-validating/unsigned-long-long.cxx
else
src +=                                              \
cxx/parser/non-validating/long.cxx                  \
cxx/parser/non-validating/unsigned-long.cxx
endif

ifeq ($(XSDE_STL),y)

src +=                                              \
cxx/parser/non-validating/any-simple-type-stl.cxx   \
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 +=                                           \
cxx/parser/non-validating/any-simple-type.cxx    \
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 +=                                           \
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


## C++/Serializer
##
src += cxx/serializer/elements.cxx cxx/serializer/context.cxx
src += cxx/serializer/genx/document.cxx cxx/serializer/genx/xml-error.cxx

ifeq ($(XSDE_POLYMORPHIC),y)
src += cxx/serializer/map.cxx cxx/serializer/substitution-map.cxx
endif

ifeq ($(XSDE_EXCEPTIONS),y)
src += cxx/serializer/exceptions.cxx
else
src += cxx/serializer/error.cxx
endif

# Serializer implementations.
#
ifeq ($(XSDE_SERIALIZER_VALIDATION),y)

src +=                                              \
cxx/serializer/validating/serializer.cxx            \
cxx/serializer/validating/time-zone.cxx             \
cxx/serializer/validating/string-common.cxx         \
cxx/serializer/validating/xml-schema-sskel.cxx

ifeq ($(XSDE_POLYMORPHIC),y)
src += cxx/serializer/validating/inheritance-map.cxx
endif

src +=                                              \
cxx/serializer/validating/boolean.cxx               \
cxx/serializer/validating/byte.cxx                  \
cxx/serializer/validating/unsigned-byte.cxx         \
cxx/serializer/validating/short.cxx                 \
cxx/serializer/validating/unsigned-short.cxx        \
cxx/serializer/validating/int.cxx                   \
cxx/serializer/validating/unsigned-int.cxx          \
cxx/serializer/validating/integer.cxx               \
cxx/serializer/validating/negative-integer.cxx      \
cxx/serializer/validating/non-positive-integer.cxx  \
cxx/serializer/validating/positive-integer.cxx      \
cxx/serializer/validating/non-negative-integer.cxx  \
cxx/serializer/validating/float.cxx                 \
cxx/serializer/validating/double.cxx                \
cxx/serializer/validating/decimal.cxx

ifeq ($(XSDE_LONGLONG),y)
src +=                                              \
cxx/serializer/validating/long-long.cxx             \
cxx/serializer/validating/unsigned-long-long.cxx
else
src +=                                              \
cxx/serializer/validating/long.cxx                  \
cxx/serializer/validating/unsigned-long.cxx
endif

ifeq ($(XSDE_STL),y)

src +=                                              \
cxx/serializer/validating/any-simple-type-stl.cxx   \
cxx/serializer/validating/string-stl.cxx            \
cxx/serializer/validating/normalized-string-stl.cxx \
cxx/serializer/validating/token-stl.cxx             \
cxx/serializer/validating/name-stl.cxx              \
cxx/serializer/validating/nmtoken-stl.cxx           \
cxx/serializer/validating/ncname-stl.cxx            \
cxx/serializer/validating/id-stl.cxx                \
cxx/serializer/validating/idref-stl.cxx             \
cxx/serializer/validating/language-stl.cxx          \
cxx/serializer/validating/uri-stl.cxx               \
cxx/serializer/validating/idrefs-stl.cxx            \
cxx/serializer/validating/nmtokens-stl.cxx          \
cxx/serializer/validating/qname-stl.cxx

else

src +=                                           \
cxx/serializer/validating/any-simple-type.cxx    \
cxx/serializer/validating/string.cxx             \
cxx/serializer/validating/normalized-string.cxx  \
cxx/serializer/validating/token.cxx              \
cxx/serializer/validating/name.cxx               \
cxx/serializer/validating/nmtoken.cxx            \
cxx/serializer/validating/ncname.cxx             \
cxx/serializer/validating/id.cxx                 \
cxx/serializer/validating/idref.cxx              \
cxx/serializer/validating/language.cxx           \
cxx/serializer/validating/uri.cxx                \
cxx/serializer/validating/idrefs.cxx             \
cxx/serializer/validating/nmtokens.cxx           \
cxx/serializer/validating/qname.cxx

endif # stl

src +=                                           \
cxx/serializer/validating/base64-binary.cxx      \
cxx/serializer/validating/hex-binary.cxx         \
cxx/serializer/validating/gday.cxx               \
cxx/serializer/validating/gmonth.cxx             \
cxx/serializer/validating/gyear.cxx              \
cxx/serializer/validating/gmonth-day.cxx         \
cxx/serializer/validating/gyear-month.cxx        \
cxx/serializer/validating/date.cxx               \
cxx/serializer/validating/time.cxx               \
cxx/serializer/validating/date-time.cxx          \
cxx/serializer/validating/duration.cxx

else # validation

src +=                                                  \
cxx/serializer/non-validating/serializer.cxx            \
cxx/serializer/non-validating/time-zone.cxx             \
cxx/serializer/non-validating/xml-schema-sskel.cxx

src +=                                                  \
cxx/serializer/non-validating/boolean.cxx               \
cxx/serializer/non-validating/byte.cxx                  \
cxx/serializer/non-validating/unsigned-byte.cxx         \
cxx/serializer/non-validating/short.cxx                 \
cxx/serializer/non-validating/unsigned-short.cxx        \
cxx/serializer/non-validating/int.cxx                   \
cxx/serializer/non-validating/unsigned-int.cxx          \
cxx/serializer/non-validating/integer.cxx               \
cxx/serializer/non-validating/negative-integer.cxx      \
cxx/serializer/non-validating/non-positive-integer.cxx  \
cxx/serializer/non-validating/positive-integer.cxx      \
cxx/serializer/non-validating/non-negative-integer.cxx  \
cxx/serializer/non-validating/float.cxx                 \
cxx/serializer/non-validating/double.cxx                \
cxx/serializer/non-validating/decimal.cxx

ifeq ($(XSDE_LONGLONG),y)
src +=                                                  \
cxx/serializer/non-validating/long-long.cxx             \
cxx/serializer/non-validating/unsigned-long-long.cxx
else
src +=                                                  \
cxx/serializer/non-validating/long.cxx                  \
cxx/serializer/non-validating/unsigned-long.cxx
endif

ifeq ($(XSDE_STL),y)

src +=                                                  \
cxx/serializer/non-validating/any-simple-type-stl.cxx   \
cxx/serializer/non-validating/string-stl.cxx            \
cxx/serializer/non-validating/normalized-string-stl.cxx \
cxx/serializer/non-validating/token-stl.cxx             \
cxx/serializer/non-validating/name-stl.cxx              \
cxx/serializer/non-validating/nmtoken-stl.cxx           \
cxx/serializer/non-validating/ncname-stl.cxx            \
cxx/serializer/non-validating/id-stl.cxx                \
cxx/serializer/non-validating/idref-stl.cxx             \
cxx/serializer/non-validating/language-stl.cxx          \
cxx/serializer/non-validating/uri-stl.cxx               \
cxx/serializer/non-validating/idrefs-stl.cxx            \
cxx/serializer/non-validating/nmtokens-stl.cxx          \
cxx/serializer/non-validating/qname-stl.cxx

else

src +=                                               \
cxx/serializer/non-validating/any-simple-type.cxx    \
cxx/serializer/non-validating/string.cxx             \
cxx/serializer/non-validating/normalized-string.cxx  \
cxx/serializer/non-validating/token.cxx              \
cxx/serializer/non-validating/name.cxx               \
cxx/serializer/non-validating/nmtoken.cxx            \
cxx/serializer/non-validating/ncname.cxx             \
cxx/serializer/non-validating/id.cxx                 \
cxx/serializer/non-validating/idref.cxx              \
cxx/serializer/non-validating/language.cxx           \
cxx/serializer/non-validating/uri.cxx                \
cxx/serializer/non-validating/idrefs.cxx             \
cxx/serializer/non-validating/nmtokens.cxx           \
cxx/serializer/non-validating/qname.cxx

endif # stl

src +=                                               \
cxx/serializer/non-validating/base64-binary.cxx      \
cxx/serializer/non-validating/hex-binary.cxx         \
cxx/serializer/non-validating/gday.cxx               \
cxx/serializer/non-validating/gmonth.cxx             \
cxx/serializer/non-validating/gyear.cxx              \
cxx/serializer/non-validating/gmonth-day.cxx         \
cxx/serializer/non-validating/gyear-month.cxx        \
cxx/serializer/non-validating/date.cxx               \
cxx/serializer/non-validating/time.cxx               \
cxx/serializer/non-validating/date-time.cxx          \
cxx/serializer/non-validating/duration.cxx

endif # validation

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

# Build.
#
libxsde.a: $(obj)
	$(AR) $(ARFLAGS) $@ $^
ifneq ($(RANLIB),)
	$(RANLIB) $@
endif

# It is tricky to output # with both POSIX and Windows shells.
#
ifeq ($(shell echo %PATH%),%PATH%)
h := \\\#
shell_type := posix
else
h := \#
shell_type := windows
endif

$(obj): config.h

config.h: $(root)/config/config.make
	@echo generating config.h
ifeq ($(shell_type),windows)
	@echo /* Generated - do not edit. */      >$@
else
	@echo "/* Generated - do not edit. */"    >$@
endif
ifeq ($(shell_type),posix)
	@echo $(h)ifndef XSDE_CONFIG_H              >>$@
	@echo $(h)define XSDE_CONFIG_H              >>$@
	@echo $(h)ifdef _MSC_VER                    >>$@
	@echo "#if _MSC_VER >= 1600"                >>$@
	@echo $(h)define XSDE_CXX11                 >>$@
	@echo $(h)endif                             >>$@
	@echo $(h)else                              >>$@
	@echo "#if defined(__GXX_EXPERIMENTAL_CXX0X__) || (defined(__cplusplus) && __cplusplus >= 201103L)" >>$@
	@echo $(h)define XSDE_CXX11                 >>$@
	@echo $(h)endif                             >>$@
	@echo $(h)endif                             >>$@
endif
ifeq ($(XSDE_PLATFORM),wince)
	@echo $(h)define XSDE_PLATFORM_WINCE        >>$@
endif
ifeq ($(XSDE_PLATFORM),win32)
	@echo $(h)define XSDE_PLATFORM_WIN32        >>$@
endif
ifeq ($(XSDE_PLATFORM),posix)
	@echo $(h)define XSDE_PLATFORM_POSIX        >>$@
endif
	@echo $(h)define XSDE_ARCH_WIDTH $(XSDE_ARCH_WIDTH) >>$@
ifeq ($(XSDE_BYTEORDER),l)
	@echo $(h)define XSDE_BYTEORDER 1234        >>$@
endif
ifeq ($(XSDE_BYTEORDER),b)
	@echo $(h)define XSDE_BYTEORDER 4321        >>$@
endif
ifeq ($(XSDE_ENCODING),utf8)
	@echo $(h)define XSDE_ENCODING_UTF8         >>$@
else
ifeq ($(XSDE_ENCODING),)
	@echo $(h)define XSDE_ENCODING_UTF8         >>$@
else
	@echo $(h)undef XSDE_ENCODING_UTF8          >>$@
endif
endif
ifeq ($(XSDE_ENCODING),iso8859-1)
	@echo $(h)define XSDE_ENCODING_ISO8859_1    >>$@
else
	@echo $(h)undef XSDE_ENCODING_ISO8859_1     >>$@
endif
ifeq ($(XSDE_STL),y)
	@echo $(h)define XSDE_STL                   >>$@
endif
ifeq ($(XSDE_STL_ITERATOR),y)
	@echo $(h)define XSDE_STL_ITERATOR          >>$@
endif
ifeq ($(XSDE_IOSTREAM),y)
	@echo $(h)define XSDE_IOSTREAM              >>$@
endif
ifeq ($(XSDE_EXCEPTIONS),y)
	@echo $(h)define XSDE_EXCEPTIONS            >>$@
endif
ifeq ($(XSDE_LONGLONG),y)
	@echo $(h)define XSDE_LONGLONG              >>$@
endif
ifeq ($(XSDE_SNPRINTF),y)
	@echo $(h)define XSDE_SNPRINTF              >>$@
endif
ifeq ($(XSDE_PARSER_VALIDATION),y)
	@echo $(h)define XSDE_PARSER_VALIDATION     >>$@
endif
ifeq ($(XSDE_SERIALIZER_VALIDATION),y)
	@echo $(h)define XSDE_SERIALIZER_VALIDATION >>$@
endif
ifeq ($(XSDE_REGEXP),y)
	@echo $(h)define XSDE_REGEXP                >>$@
endif
ifeq ($(XSDE_EXTERNAL_EXPAT),y)
	@echo $(h)define XSDE_EXTERNAL_EXPAT        >>$@
endif
ifeq ($(XSDE_REUSE_STYLE),mixin)
	@echo $(h)define XSDE_REUSE_STYLE_MIXIN     >>$@
else
	@echo $(h)undef XSDE_REUSE_STYLE_MIXIN      >>$@
endif
ifeq ($(XSDE_REUSE_STYLE),tiein)
	@echo $(h)define XSDE_REUSE_STYLE_TIEIN     >>$@
else
	@echo $(h)undef XSDE_REUSE_STYLE_TIEIN      >>$@
endif
ifeq ($(XSDE_REUSE_STYLE),none)
	@echo $(h)define XSDE_REUSE_STYLE_NONE      >>$@
else
	@echo $(h)undef XSDE_REUSE_STYLE_NONE       >>$@
endif
ifeq ($(XSDE_CUSTOM_ALLOCATOR),y)
	@echo $(h)define XSDE_CUSTOM_ALLOCATOR      >>$@
endif
ifeq ($(XSDE_DEFAULT_ALLOCATOR),y)
	@echo $(h)define XSDE_DEFAULT_ALLOCATOR     >>$@
endif
ifeq ($(XSDE_POLYMORPHIC),y)
	@echo $(h)define XSDE_POLYMORPHIC           >>$@
	@echo $(h)define XSDE_PARSER_SMAP_BUCKETS $(XSDE_PARSER_SMAP_BUCKETS)UL >>$@
ifeq ($(XSDE_PARSER_VALIDATION),y)
	@echo $(h)define XSDE_PARSER_IMAP_BUCKETS $(XSDE_PARSER_IMAP_BUCKETS)UL >>$@
endif
	@echo $(h)define XSDE_SERIALIZER_SMAP_BUCKETS $(XSDE_SERIALIZER_SMAP_BUCKETS)UL >>$@
	@echo $(h)define XSDE_SERIALIZER_SMAP_BUCKET_BUCKETS $(XSDE_SERIALIZER_SMAP_BUCKET_BUCKETS)UL >>$@
ifeq ($(XSDE_SERIALIZER_VALIDATION),y)
	@echo $(h)define XSDE_SERIALIZER_IMAP_BUCKETS $(XSDE_SERIALIZER_IMAP_BUCKETS)UL >>$@
endif
else
	@echo $(h)undef XSDE_POLYMORPHIC            >>$@
endif
	@echo $(h)endif                             >>$@


# Generated.
#
.PHONY: gen
gen:


# Test.
#
.PHONY: test
test: libxsde.a
	@:

# Install.
#
install_prefix := /usr/local
install_lib := $(install_prefix)/lib
install_include := $(install_prefix)/include

.PHONY: install
install: libxsde.a
	../../install-sh -d -m 755 $(install_lib)
	../../install-sh -m 644 libxsde.a $(install_lib)/libxsde.a
	../../install-sh -d -m 755 $(install_include)/xsde
	find . -type d | sed -e 's%^\.%$(install_include)/xsde%' \
| xargs -n 1 ../../install-sh -d -m 755
	find . -name '*.h' -o -name '*.hxx' -o -name '*.ixx' -o -name '*.txx' \
| sed -e 's%^\./\(.*\)%\1 $(install_include)/xsde/\1%' \
| xargs -n 2 ../../install-sh -m 644

# Clean.
#
.PHONY: clean cleanobj
cleanobj:
	rm -f libxsde.a $(obj) config.h

clean: cleanobj
