# Makefile for libxml2, specific for Windows, GCC (mingw) and GNU make.
#
# 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.
#
# November 2002, Igor Zlatkovic <igor@zlatkovic.com>

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

AUTOCONF = .\config.mingw
include $(AUTOCONF)

# Names of various input and output components.
XML_NAME = xml2
XML_BASENAME = lib$(XML_NAME)
XML_SO = $(XML_BASENAME).dll
XML_IMP = $(XML_BASENAME).lib
XML_A = $(XML_BASENAME).a

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

# The preprocessor and its options.
CPP = gcc.exe -E
CPPFLAGS += -I$(XML_SRCDIR)/include -DNOLIBTOOL 
ifeq ($(WITH_THREADS),1)
CPPFLAGS += -D_REENTRANT
endif

# The compiler and its options.
CC = gcc.exe
CFLAGS += -DWIN32 -D_WINDOWS -D_MBCS -DNOLIBTOOL 
CFLAGS += -I$(XML_SRCDIR) -I$(XML_SRCDIR)/include -I$(INCPREFIX) $(INCLUDE)
ifneq ($(WITH_THREADS),no)
CFLAGS += -D_REENTRANT
endif
ifeq ($(WITH_THREADS),yes) 
CFLAGS += -DHAVE_WIN32_THREADS -DHAVE_COMPILER_TLS
endif
ifeq ($(WITH_THREADS),ctls)
CFLAGS += -DHAVE_WIN32_THREADS -DHAVE_COMPILER_TLS
endif
ifeq ($(WITH_THREADS),native)
CFLAGS += -DHAVE_WIN32_THREADS
endif
ifeq ($(WITH_THREADS),posix)
CFLAGS += -DHAVE_PTHREAD_H
endif
ifeq ($(WITH_ZLIB),1)
CFLAGS += -DHAVE_ZLIB_H
endif
ifeq ($(WITH_LZMA),1)
CFLAGS += -DHAVE_LZMA_H
endif

# The linker and its options.
LD = gcc.exe
LDFLAGS += -Wl,--major-image-version,$(LIBXML_MAJOR_VERSION)
LDFLAGS += -Wl,--minor-image-version,$(LIBXML_MINOR_VERSION)
LDFLAGS += -Wl,-L,$(BINDIR) -Wl,-L,$(LIBPREFIX)
LIBS =
ifeq ($(WITH_FTP),1)
CFLAGS += -D_WINSOCKAPI_
LIBS += -lwsock32 -lws2_32
endif 
ifeq ($(WITH_HTTP),1)
CFLAGS += -D_WINSOCKAPI_
LIBS += -lwsock32 -lws2_32
endif 
ifeq ($(WITH_ICONV),1)
LIBS += -liconv
endif 
ifeq ($(WITH_ZLIB),1)
# Could be named differently
# LIBS += -lzdll
LIBS += -lz
endif
ifeq ($(WITH_LZMA),1)
LIBS += -llzma
endif
ifeq ($(WITH_THREADS),posix)
LIBS += -lpthreadGC
endif
ifeq ($(WITH_MODULES),1)
LIBS += -lkernel32
endif

LIBS += $(LIB)

# The archiver and its options.
AR = ar.exe
ARFLAGS = -r

# Optimisation and debug symbols.
ifeq ($(DEBUG),1)
CFLAGS += -D_DEBUG -g
LDFLAGS += 
else
CFLAGS += -DNDEBUG -O2 
LDFLAGS += 
endif


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

XML_SRCS = $(subst .o,.c,$(subst $(XML_INTDIR)/,$(XML_SRCDIR)/,$(XML_OBJS)))

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

XML_SRCS_A = $(subst .o,.c,$(subst $(XML_INTDIR_A)/,$(XML_SRCDIR)/,$(XML_OBJS_A)))

# Xmllint and friends executables.
UTILS = $(BINDIR)/xmllint.exe\
	$(BINDIR)/xmlcatalog.exe\
	$(BINDIR)/testAutomata.exe\
	$(BINDIR)/testC14N.exe\
	$(BINDIR)/testDocbook.exe\
	$(BINDIR)/testHTML.exe\
	$(BINDIR)/testReader.exe\
	$(BINDIR)/testRegexp.exe\
	$(BINDIR)/testModule.exe\
	$(BINDIR)/testRelax.exe\
	$(BINDIR)/testSAX.exe\
	$(BINDIR)/testSchemas.exe\
	$(BINDIR)/testURI.exe\
	$(BINDIR)/testXPath.exe\
	$(BINDIR)/runtest.exe\
	$(BINDIR)/runsuite.exe\
	$(BINDIR)/testapi.exe\
	$(BINDIR)/testlimits.exe

ifeq ($(WITH_THREADS),yes)
UTILS += $(BINDIR)/testThreadsWin32.exe
endif
ifeq ($(WITH_THREADS),ctls) 
UTILS += $(BINDIR)/testThreadsWin32.exe
endif
ifeq ($(WITH_THREADS),native)
UTILS += $(BINDIR)/testThreadsWin32.exe
endif
ifeq ($(WITH_THREADS),posix)
UTILS += $(BINDIR)/testThreads.exe
endif

all : dep libxml libxmla utils

libxml : $(BINDIR)/$(XML_SO) 

libxmla : $(BINDIR)/$(XML_A)

utils : $(UTILS)

clean :
	cmd.exe /C "if exist $(XML_INTDIR) rmdir /S /Q $(XML_INTDIR)"
	cmd.exe /C "if exist $(XML_INTDIR_A) rmdir /S /Q $(XML_INTDIR_A)"
	cmd.exe /C "if exist $(UTILS_INTDIR) rmdir /S /Q $(UTILS_INTDIR)"
	cmd.exe /C "if exist $(BINDIR) rmdir /S /Q $(BINDIR)"
	cmd.exe /C "if exist depends.mingw del depends.mingw"

distclean : clean
	cmd.exe /C "if exist config.* del config.*"
	cmd.exe /C "if exist Makefile del Makefile"

rebuild : clean all

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

install : install-libs
	cmd.exe /C "copy $(BINDIR)\*.exe $(BINPREFIX)"

install-dist : install-libs
	cmd.exe /C "copy $(BINDIR)\xml*.exe $(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) PREFIX=$(BDPREFIX) SOPREFIX=$(BDPREFIX)/bin install-dist
	cscript //NoLogo configure.js genreadme $(XML_BASENAME) $(BDVERSION) $(BDPREFIX)\readme.txt


# Creates the dependency file
dep :
	$(CC) $(CFLAGS) -M $(XML_SRCS) > depends.mingw


# Makes the output directory.
$(BINDIR) :
	cmd.exe /C if not exist $(BINDIR) mkdir $(BINDIR)


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

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

# An implicit rule for libxml compilation.
$(XML_INTDIR)/%.o : $(XML_SRCDIR)/%.c
	$(CC) $(CFLAGS) -o $@ -c $<

# An implicit rule for static libxml compilation.
$(XML_INTDIR_A)/%.o : $(XML_SRCDIR)/%.c
	$(CC) $(CFLAGS) -DLIBXML_STATIC -o $@ -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) 

# Creates the libxml shared object.
XMLSO_LDFLAGS = $(LDFLAGS) -shared -Wl,--dll -Wl,--out-implib,$(BINDIR)/$(XML_IMP)
$(BINDIR)/$(XML_SO) : $(BINDIR) $(XML_OBJS)
	$(LD) $(XMLSO_LDFLAGS) -o $(BINDIR)/$(XML_SO) $(XML_OBJS) $(LIBS)

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


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

# An implicit rule for xmllint and friends.
ifeq ($(STATIC),1)
$(BINDIR)/%.exe : $(UTILS_SRCDIR)/%.c
	$(CC) -DLIBXML_STATIC $(CFLAGS) -o $(subst .c,.o,$(UTILS_INTDIR)/$(<F)) -c $< 
	$(LD) $(LDFLAGS) -o $@ $(subst .c,.o,$(UTILS_INTDIR)/$(<F)) -l$(XML_BASENAME) $(LIBS) 
else
$(BINDIR)/%.exe : $(UTILS_SRCDIR)/%.c
	$(CC) $(CFLAGS) -o $(subst .c,.o,$(UTILS_INTDIR)/$(<F)) -c $< 
	$(LD) $(LDFLAGS) -o $@ $(subst .c,.o,$(UTILS_INTDIR)/$(<F)) -l$(XML_BASENAME) $(LIBS) 
endif

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

# Source dependencies
#-include depends.mingw

