# 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>

AUTOCONF = .\config.mingw

# If you cannot run the configuration script, which would take the burden of
# editing this file from your back, then remove the following line...
include $(AUTOCONF)
# ...and enable the following lines and adapt them to your environment.
#XML_SRCDIR = ..
#UTILS_SRCDIR = ..
#BINDIR = binaries
#LIBXML_MAJOR_VERSION = 0 # set this to the right value.
#LIBXML_MINOR_VERSION = 0 # set this to the right value.
#LIBXML_MICRO_VERSION = 0 # set this to the right value.
#WITH_TRIO = 0
#WITH_THREADS = 0
#WITH_FTP = 1
#WITH_HTTP = 1
#WITH_HTML = 1
#WITH_C14N = 1
#WITH_CATALOG = 1
#WITH_DOCB = 1
#WITH_XPATH = 1
#WITH_XPTR = 1
#WITH_XINCLUDE = 1
#WITH_ICONV = 1
#WITH_ZLIB = 0
#WITH_DEBUG = 1
#WITH_MEM_DEBUG = 0
#WITH_SCHEMAS = 1
#DEBUG = 0
#STATIC = 0
#PREFIX = . # set this to the right value.
#BINPREFIX = $(PREFIX)\bin
#INCPREFIX = $(PREFIX)\include
#LIBPREFIX = $(PREFIX)\lib
#SOPREFIX = $(PREFIX)\lib
#INCLUDE += ;$(INCPREFIX)
#LIB += ;$(LIBPREFIX) 


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


# 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 intermediate trash.
XML_INTDIR = $(XML_BASENAME).int
XML_INTDIR_A = $(XML_BASENAME)_a.int
UTILS_INTDIR = utils.int

# 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)/debugXML.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)/list.o\
	$(XML_INTDIR)/nanoftp.o\
	$(XML_INTDIR)/nanohttp.o\
	$(XML_INTDIR)/parser.o\
	$(XML_INTDIR)/parserInternals.o\
	$(XML_INTDIR)/SAX.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)/xpath.o\
	$(XML_INTDIR)/xpointer.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)/debugXML.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)/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)/SAX.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)/xpath.o\
	$(XML_INTDIR_A)/xpointer.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)/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 :
	if exist $(XML_INTDIR) rmdir /S /Q $(XML_INTDIR)
	if exist $(XML_INTDIR_A) rmdir /S /Q $(XML_INTDIR_A)
	if exist $(UTILS_INTDIR) rmdir /S /Q $(UTILS_INTDIR)
	if exist $(BINDIR) rmdir /S /Q $(BINDIR)
	if exist depends.mingw del depends.mingw

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

rebuild : clean all

install : all
	if not exist $(INCPREFIX)\libxml mkdir $(INCPREFIX)\libxml
	if not exist $(BINPREFIX) mkdir $(BINPREFIX)
	if not exist $(LIBPREFIX) mkdir $(LIBPREFIX)
	copy $(XML_SRCDIR)\include\libxml\*.h $(INCPREFIX)\libxml
	copy $(BINDIR)\$(XML_SO) $(SOPREFIX)
	copy $(BINDIR)\$(XML_A) $(LIBPREFIX)
	copy $(BINDIR)\$(XML_IMP) $(LIBPREFIX)
	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) :
	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)

# 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) :
	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

