# Makefile for libxml2, specific for Windows, MSVC and NMAKE.
#
# Take a look at the beginning and modify the variables to suit your 
# environment. Having done that, you can do a
#
# nmake [all]     to build the libxml and the accompanying utilities.
# nmake clean     to remove all compiler output files and return to a
#                 clean state.
# nmake rebuild   to rebuild everything from scratch. This basically does
#                 a 'nmake clean' and then a 'nmake all'.
# nmake install   to install the library and its header files.
#
# March 2002, Igor Zlatkovic <igor@zlatkovic.com>

# There should never be a need to modify anything below this line.
# ----------------------------------------------------------------

AUTOCONF = .\config.msvc
!include $(AUTOCONF)

# Names of various input and output components.
XML_NAME = xml2
XML_BASENAME = lib$(XML_NAME)
XML_SO = $(XML_BASENAME).dll
XML_RES = $(XML_BASENAME).res
XML_IMP = $(XML_BASENAME).lib
XML_A = $(XML_BASENAME)_a.lib
XML_A_DLL = $(XML_BASENAME)_a_dll.lib

# Place where we let the compiler put its output.
BINDIR = bin.msvc
XML_INTDIR = int.msvc
XML_INTDIR_A = int.a.msvc
XML_INTDIR_A_DLL = int.a.dll.msvc
UTILS_INTDIR = int.utils.msvc

# The preprocessor and its options.
CPP = cl.exe /EP
CPPFLAGS = /nologo /I$(XML_SRCDIR)\include /D "NOLIBTOOL" 

# The compiler and its options.
CC = cl.exe
CFLAGS = /nologo /D "_WINDOWS" /D "_MBCS" /D "NOLIBTOOL" /W3 /wd4244 /wd4267 $(CRUNTIME)
CFLAGS = $(CFLAGS) /I$(XML_SRCDIR) /I$(XML_SRCDIR)\include /I$(INCPREFIX)
!if "$(WITH_THREADS)" == "ctls"
CFLAGS = $(CFLAGS) /D "XML_THREAD_LOCAL=__declspec(thread)"
!else if "$(WITH_THREADS)" == "posix"
CFLAGS = $(CFLAGS) /D "HAVE_PTHREAD_H"
!endif
CFLAGS = $(CFLAGS) /D_CRT_SECURE_NO_DEPRECATE /D_CRT_NONSTDC_NO_DEPRECATE

# The linker and its options.
LD = link.exe
LDFLAGS = /nologo /VERSION:$(LIBXML_MAJOR_VERSION).$(LIBXML_MINOR_VERSION)
LDFLAGS = $(LDFLAGS) /LIBPATH:$(BINDIR) /LIBPATH:$(LIBPREFIX)
LIBS =
!if "$(WITH_FTP)" == "1" || "$(WITH_HTTP)" == "1"
LIBS = $(LIBS) wsock32.lib ws2_32.lib
!endif 
!if "$(WITH_ICONV)" == "1"
LIBS = $(LIBS) iconv.lib
!endif 
!if "$(WITH_ICU)" == "1"
!if "$(STATIC)" == "1"
LIBS = $(LIBS) advapi32.lib sicuuc.lib sicuin.lib sicudt.lib
!else
LIBS = $(LIBS) icuuc.lib icuin.lib icudt.lib
!endif
!endif
!if "$(WITH_ZLIB)" == "1"
# could be named differently zdll or zlib
# LIBS = $(LIBS) zdll.lib
LIBS = $(LIBS) zlib.lib
!endif
!if "$(WITH_LZMA)" == "1"
LIBS = $(LIBS) liblzma.lib
!endif
!if "$(WITH_THREADS)" == "posix"
LIBS = $(LIBS) pthreadVC.lib
!endif
!if "$(WITH_MODULES)" == "1"
LIBS = $(LIBS) kernel32.lib
!endif

# The archiver and its options.
AR = lib.exe
ARFLAGS = /nologo

# Optimisation and debug symbols.
!if "$(DEBUG)" == "1"
CFLAGS = $(CFLAGS) /D "_DEBUG" /Od /Z7
LDFLAGS = $(LDFLAGS) /DEBUG
!else
CFLAGS = $(CFLAGS) /D "NDEBUG" /O2 
# commented out as this break VC10 c.f. 634846
# LDFLAGS = $(LDFLAGS) /OPT:NOWIN98
LDFLAGS = $(LDFLAGS)
!endif

# append CFLAGS etc. passed on command line
CPPFLAGS = $(CPPFLAGS) $(EXTRA_CPPFLAGS)
CFLAGS = $(CFLAGS) $(EXTRA_CFLAGS)
LDFLAGS = $(LDFLAGS) $(EXTRA_LDFLAGS)

# Libxml object files.
XML_OBJS = $(XML_INTDIR)\buf.obj\
	$(XML_INTDIR)\c14n.obj\
	$(XML_INTDIR)\catalog.obj\
	$(XML_INTDIR)\chvalid.obj\
	$(XML_INTDIR)\debugXML.obj\
	$(XML_INTDIR)\dict.obj\
	$(XML_INTDIR)\encoding.obj\
	$(XML_INTDIR)\entities.obj\
	$(XML_INTDIR)\error.obj\
	$(XML_INTDIR)\globals.obj\
	$(XML_INTDIR)\hash.obj\
	$(XML_INTDIR)\HTMLparser.obj\
	$(XML_INTDIR)\HTMLtree.obj\
	$(XML_INTDIR)\legacy.obj\
	$(XML_INTDIR)\list.obj\
	$(XML_INTDIR)\nanoftp.obj\
	$(XML_INTDIR)\nanohttp.obj\
	$(XML_INTDIR)\parser.obj\
	$(XML_INTDIR)\parserInternals.obj\
	$(XML_INTDIR)\pattern.obj\
	$(XML_INTDIR)\relaxng.obj\
	$(XML_INTDIR)\SAX2.obj\
	$(XML_INTDIR)\SAX.obj\
	$(XML_INTDIR)\schematron.obj\
	$(XML_INTDIR)\threads.obj\
	$(XML_INTDIR)\tree.obj\
	$(XML_INTDIR)\uri.obj\
	$(XML_INTDIR)\valid.obj\
	$(XML_INTDIR)\xinclude.obj\
	$(XML_INTDIR)\xlink.obj\
	$(XML_INTDIR)\xmlIO.obj\
	$(XML_INTDIR)\xmlmemory.obj\
	$(XML_INTDIR)\xmlreader.obj\
	$(XML_INTDIR)\xmlregexp.obj\
	$(XML_INTDIR)\xmlmodule.obj\
	$(XML_INTDIR)\xmlsave.obj\
	$(XML_INTDIR)\xmlschemas.obj\
	$(XML_INTDIR)\xmlschemastypes.obj\
	$(XML_INTDIR)\xmlunicode.obj\
	$(XML_INTDIR)\xmlwriter.obj\
	$(XML_INTDIR)\xpath.obj\
	$(XML_INTDIR)\xpointer.obj\
	$(XML_INTDIR)\xmlstring.obj

# Static libxml object files.
XML_OBJS_A = $(XML_INTDIR_A)\buf.obj\
	$(XML_INTDIR_A)\c14n.obj\
	$(XML_INTDIR_A)\catalog.obj\
	$(XML_INTDIR_A)\chvalid.obj\
	$(XML_INTDIR_A)\debugXML.obj\
	$(XML_INTDIR_A)\dict.obj\
	$(XML_INTDIR_A)\encoding.obj\
	$(XML_INTDIR_A)\entities.obj\
	$(XML_INTDIR_A)\error.obj\
	$(XML_INTDIR_A)\globals.obj\
	$(XML_INTDIR_A)\hash.obj\
	$(XML_INTDIR_A)\HTMLparser.obj\
	$(XML_INTDIR_A)\HTMLtree.obj\
	$(XML_INTDIR_A)\legacy.obj\
	$(XML_INTDIR_A)\list.obj\
	$(XML_INTDIR_A)\nanoftp.obj\
	$(XML_INTDIR_A)\nanohttp.obj\
	$(XML_INTDIR_A)\parser.obj\
	$(XML_INTDIR_A)\parserInternals.obj\
	$(XML_INTDIR_A)\pattern.obj\
	$(XML_INTDIR_A)\relaxng.obj\
	$(XML_INTDIR_A)\SAX2.obj\
	$(XML_INTDIR_A)\SAX.obj\
	$(XML_INTDIR_A)\schematron.obj\
	$(XML_INTDIR_A)\threads.obj\
	$(XML_INTDIR_A)\tree.obj\
	$(XML_INTDIR_A)\uri.obj\
	$(XML_INTDIR_A)\valid.obj\
	$(XML_INTDIR_A)\xinclude.obj\
	$(XML_INTDIR_A)\xlink.obj\
	$(XML_INTDIR_A)\xmlIO.obj\
	$(XML_INTDIR_A)\xmlmemory.obj\
	$(XML_INTDIR_A)\xmlreader.obj\
	$(XML_INTDIR_A)\xmlregexp.obj\
	$(XML_INTDIR_A)\xmlmodule.obj\
	$(XML_INTDIR_A)\xmlsave.obj\
	$(XML_INTDIR_A)\xmlschemas.obj\
	$(XML_INTDIR_A)\xmlschemastypes.obj\
	$(XML_INTDIR_A)\xmlunicode.obj\
	$(XML_INTDIR_A)\xmlwriter.obj\
	$(XML_INTDIR_A)\xpath.obj\
	$(XML_INTDIR_A)\xpointer.obj\
	$(XML_INTDIR_A)\xmlstring.obj

# Static libxml object files.
XML_OBJS_A_DLL = $(XML_INTDIR_A_DLL)\buf.obj\
	$(XML_INTDIR_A_DLL)\c14n.obj\
	$(XML_INTDIR_A_DLL)\catalog.obj\
	$(XML_INTDIR_A_DLL)\chvalid.obj\
	$(XML_INTDIR_A_DLL)\debugXML.obj\
	$(XML_INTDIR_A_DLL)\dict.obj\
	$(XML_INTDIR_A_DLL)\encoding.obj\
	$(XML_INTDIR_A_DLL)\entities.obj\
	$(XML_INTDIR_A_DLL)\error.obj\
	$(XML_INTDIR_A_DLL)\globals.obj\
	$(XML_INTDIR_A_DLL)\hash.obj\
	$(XML_INTDIR_A_DLL)\HTMLparser.obj\
	$(XML_INTDIR_A_DLL)\HTMLtree.obj\
	$(XML_INTDIR_A_DLL)\legacy.obj\
	$(XML_INTDIR_A_DLL)\list.obj\
	$(XML_INTDIR_A_DLL)\nanoftp.obj\
	$(XML_INTDIR_A_DLL)\nanohttp.obj\
	$(XML_INTDIR_A_DLL)\parser.obj\
	$(XML_INTDIR_A_DLL)\parserInternals.obj\
	$(XML_INTDIR_A_DLL)\pattern.obj\
	$(XML_INTDIR_A_DLL)\relaxng.obj\
	$(XML_INTDIR_A_DLL)\SAX2.obj\
	$(XML_INTDIR_A_DLL)\SAX.obj\
	$(XML_INTDIR_A_DLL)\schematron.obj\
	$(XML_INTDIR_A_DLL)\threads.obj\
	$(XML_INTDIR_A_DLL)\tree.obj\
	$(XML_INTDIR_A_DLL)\uri.obj\
	$(XML_INTDIR_A_DLL)\valid.obj\
	$(XML_INTDIR_A_DLL)\xinclude.obj\
	$(XML_INTDIR_A_DLL)\xlink.obj\
	$(XML_INTDIR_A_DLL)\xmlIO.obj\
	$(XML_INTDIR_A_DLL)\xmlmemory.obj\
	$(XML_INTDIR_A_DLL)\xmlreader.obj\
	$(XML_INTDIR_A_DLL)\xmlregexp.obj\
	$(XML_INTDIR_A_DLL)\xmlmodule.obj\
	$(XML_INTDIR_A_DLL)\xmlsave.obj\
	$(XML_INTDIR_A_DLL)\xmlschemas.obj\
	$(XML_INTDIR_A_DLL)\xmlschemastypes.obj\
	$(XML_INTDIR_A_DLL)\xmlunicode.obj\
	$(XML_INTDIR_A_DLL)\xmlwriter.obj\
	$(XML_INTDIR_A_DLL)\xpath.obj\
	$(XML_INTDIR_A_DLL)\xpointer.obj\
	$(XML_INTDIR_A_DLL)\xmlstring.obj

!if "$(WITH_LZMA)" == "1"
XML_OBJS = $(XML_OBJS) $(XML_INTDIR)\xzlib.obj
XML_OBJS_A = $(XML_OBJS_A) $(XML_INTDIR_A)\xzlib.obj
XML_OBJS_A_DLL = $(XML_OBJS_A_DLL) $(XML_INTDIR_A_DLL)\xzlib.obj
!endif

# Xmllint and friends executables.
UTILS = $(BINDIR)\xmllint.exe\
	$(BINDIR)\xmlcatalog.exe\
	$(BINDIR)\testModule.exe\
	$(BINDIR)\runtest.exe\
	$(BINDIR)\runsuite.exe\
	$(BINDIR)\runxmlconf.exe\
	$(BINDIR)\testapi.exe\
	$(BINDIR)\testchar.exe\
	$(BINDIR)\testdict.exe\
	$(BINDIR)\testlimits.exe\
	$(BINDIR)\testrecurse.exe
	
!if "$(WITH_THREADS)" != "no"
UTILS = $(UTILS) $(BINDIR)\testThreads.exe
!endif

!if "$(VCMANIFEST)" == "1"
_VC_MANIFEST_EMBED_EXE= if exist $@.manifest mt.exe -nologo -manifest $@.manifest -outputresource:$@;1
_VC_MANIFEST_EMBED_DLL= if exist $@.manifest mt.exe -nologo -manifest $@.manifest -outputresource:$@;2
!else
_VC_MANIFEST_EMBED_EXE=
_VC_MANIFEST_EMBED_DLL=
!endif

all : libxml libxmla libxmladll utils

libxml : $(BINDIR)\$(XML_SO) 

libxmla : $(BINDIR)\$(XML_A)

libxmladll : $(BINDIR)\$(XML_A_DLL)

utils : $(UTILS)

clean :
	if exist $(XML_INTDIR) rmdir /S /Q $(XML_INTDIR)
	if exist $(XML_INTDIR_A) rmdir /S /Q $(XML_INTDIR_A)
	if exist $(XML_INTDIR_A_DLL) rmdir /S /Q $(XML_INTDIR_A_DLL)
	if exist $(UTILS_INTDIR) rmdir /S /Q $(UTILS_INTDIR)
	if exist $(BINDIR) rmdir /S /Q $(BINDIR)

distclean : clean
	if exist config.* del config.*
	if exist Makefile del Makefile

rebuild : clean all

install-libs : all
	if not exist $(INCPREFIX)\libxml2 mkdir $(INCPREFIX)\libxml2
	if not exist $(INCPREFIX)\libxml2\libxml mkdir $(INCPREFIX)\libxml2\libxml
	if not exist $(BINPREFIX) mkdir $(BINPREFIX)
	if not exist $(LIBPREFIX) mkdir $(LIBPREFIX)
	if not exist $(SOPREFIX) mkdir $(SOPREFIX)
	copy $(XML_SRCDIR)\include\libxml\*.h $(INCPREFIX)\libxml2\libxml
	copy $(BINDIR)\$(XML_SO) $(SOPREFIX)
	copy $(BINDIR)\$(XML_A) $(LIBPREFIX)
	copy $(BINDIR)\$(XML_A_DLL) $(LIBPREFIX)
	copy $(BINDIR)\$(XML_IMP) $(LIBPREFIX)

install : install-libs 
	copy $(BINDIR)\*.exe $(BINPREFIX)
	-copy $(BINDIR)\*.pdb $(BINPREFIX)

install-dist : install-libs 
	copy $(BINDIR)\xml*.exe $(BINPREFIX)
	-copy $(BINDIR)\xml*.pdb $(BINPREFIX)

# This is a target for me, to make a binary distribution. Not for the public use,
# keep your hands off :-)
BDVERSION = $(LIBXML_MAJOR_VERSION).$(LIBXML_MINOR_VERSION).$(LIBXML_MICRO_VERSION)
BDPREFIX = $(XML_BASENAME)-$(BDVERSION).win32
bindist : all
	$(MAKE) /nologo PREFIX=$(BDPREFIX) SOPREFIX=$(BDPREFIX)\bin install-dist
	cscript //NoLogo configure.js genreadme $(XML_BASENAME) $(BDVERSION) $(BDPREFIX)\readme.txt


# Makes the output directory.
$(BINDIR) :
	if not exist $(BINDIR) mkdir $(BINDIR)


# Makes the libxml intermediate directory.
$(XML_INTDIR) :
	if not exist $(XML_INTDIR) mkdir $(XML_INTDIR)

# Makes the static libxml intermediate directory.
$(XML_INTDIR_A) :
	if not exist $(XML_INTDIR_A) mkdir $(XML_INTDIR_A)

# Makes the static for dll libxml intermediate directory.
$(XML_INTDIR_A_DLL) :
	if not exist $(XML_INTDIR_A_DLL) mkdir $(XML_INTDIR_A_DLL)

# An implicit rule for libxml compilation.
{$(XML_SRCDIR)}.c{$(XML_INTDIR)}.obj::
	$(CC) $(CFLAGS) /Fo$(XML_INTDIR)\ /c $<

# An implicit rule for static libxml compilation.
{$(XML_SRCDIR)}.c{$(XML_INTDIR_A)}.obj::
	$(CC) $(CFLAGS) /D "LIBXML_STATIC" /Fo$(XML_INTDIR_A)\ /c $<

# An implicit rule for static for dll libxml compilation.
{$(XML_SRCDIR)}.c{$(XML_INTDIR_A_DLL)}.obj::
	$(CC) $(CFLAGS) /D "LIBXML_STATIC" /D "LIBXML_STATIC_FOR_DLL" /Fo$(XML_INTDIR_A_DLL)\ /c $<

# Compiles libxml source. Uses the implicit rule for commands.
$(XML_OBJS) : $(XML_INTDIR) 

# Compiles static libxml source. Uses the implicit rule for commands.
$(XML_OBJS_A) : $(XML_INTDIR_A) 

# Compiles static for dll libxml source. Uses the implicit rule for commands.
$(XML_OBJS_A_DLL) : $(XML_INTDIR_A_DLL) 

$(XML_INTDIR)\$(XML_RES) : $(XML_INTDIR) libxml2.rc
	rc -Fo $(XML_INTDIR)\$(XML_RES) libxml2.rc

# Creates the libxml shared object.
$(BINDIR)\$(XML_SO) : $(BINDIR) $(XML_OBJS) $(XML_INTDIR)\$(XML_RES)
	$(LD) $(LDFLAGS) /DLL \
		/IMPLIB:$(BINDIR)\$(XML_IMP) /OUT:$(BINDIR)\$(XML_SO) $(XML_OBJS) $(XML_INTDIR)\$(XML_RES) $(LIBS)
	@$(_VC_MANIFEST_EMBED_DLL)

# Creates the libxml archive.
$(BINDIR)\$(XML_A) : $(BINDIR) $(XML_OBJS_A)
	$(AR) $(ARFLAGS) /OUT:$(BINDIR)\$(XML_A) $(XML_OBJS_A)

# Creates the libxml static for dll archive.
$(BINDIR)\$(XML_A_DLL) : $(BINDIR) $(XML_OBJS_A_DLL)
	$(AR) $(ARFLAGS) /OUT:$(BINDIR)\$(XML_A_DLL) $(XML_OBJS_A_DLL)

# Makes the utils intermediate directory.
$(UTILS_INTDIR) :
	if not exist $(UTILS_INTDIR) mkdir $(UTILS_INTDIR)

# An implicit rule for xmllint and friends.
!if "$(STATIC)" == "1"
{$(UTILS_SRCDIR)}.c{$(BINDIR)}.exe:
	$(CC) /D "LIBXML_STATIC" $(CFLAGS) /Fo$(UTILS_INTDIR)\ /c $< 
	$(LD) $(LDFLAGS) /OUT:$@ $(XML_A) $(LIBS) $(UTILS_INTDIR)\$(<B).obj
	@$(_VC_MANIFEST_EMBED_EXE)
!else
{$(UTILS_SRCDIR)}.c{$(BINDIR)}.exe:
	$(CC) $(CFLAGS) /Fo$(UTILS_INTDIR)\ /c $< 
	$(LD) $(LDFLAGS) /OUT:$@ $(XML_IMP) $(LIBS) $(UTILS_INTDIR)\$(<B).obj
	@$(_VC_MANIFEST_EMBED_EXE)
!endif

# Builds xmllint and friends. Uses the implicit rule for commands.
$(UTILS) : $(UTILS_INTDIR) $(BINDIR) libxml libxmla libxmladll

# Source dependences should be autogenerated somehow here, but how to
# do it? I have no clue.

# TESTS

tests : checktests XPathtests

checktests : $(UTILS)
	cd .. && win32\$(BINDIR)\runtest.exe
	cd .. && win32\$(BINDIR)\testrecurse.exe
	cd .. && win32\$(BINDIR)\testapi.exe
	cd .. && win32\$(BINDIR)\testchar.exe
	cd .. && win32\$(BINDIR)\testdict.exe
	cd .. && win32\$(BINDIR)\runxmlconf.exe

