# 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
ifeq ($(WITH_THREADS),1)
CPPFLAGS += -D_REENTRANT
endif

# The compiler and its options.
CC = gcc.exe
CFLAGS += -DWIN32 -D_WINDOWS -D_MBCS
CFLAGS += -I$(XML_SRCDIR) -I$(XML_SRCDIR)/include -I$(INCPREFIX)
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

# 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
endif 
ifeq ($(WITH_HTTP),1)
CFLAGS += -D_WINSOCKAPI_
LIBS += -lwsock32
endif 
ifeq ($(WITH_ICONV),1)
LIBS += -liconv
endif 
ifeq ($(WITH_ZLIB),1)
LIBS += -lzlib
endif
ifeq ($(WITH_THREADS),posix)
LIBS += -lpthreadGC
endif

# 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)/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)/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)/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)/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)/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)/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)/testRelax.exe\
	$(BINDIR)/testSAX.exe\
	$(BINDIR)/testSchemas.exe\
	$(BINDIR)/testURI.exe\
	$(BINDIR)/testXPath.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 : all
	cmd.exe /C if not exist $(INCPREFIX)\libxml mkdir $(INCPREFIX)\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)\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)\*.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) BINPREFIX=$(BDPREFIX)/util install
	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

