2002-11-14 17:43:24 +00:00
# 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.
#
2002-12-18 14:53:54 +00:00
# November 2002, Igor Zlatkovic <igor@zlatkovic.com>
2002-11-14 17:43:24 +00:00
# There should never be a need to modify anything below this line.
# ----------------------------------------------------------------
2003-11-27 18:39:01 +00:00
AUTOCONF = .\c onfig.mingw
i n c l u d e $( AUTOCONF )
2002-11-14 17:43:24 +00:00
# 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
2003-11-27 18:39:01 +00:00
# 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
2002-11-14 17:43:24 +00:00
# The preprocessor and its options.
CPP = gcc.exe -E
CPPFLAGS += -I$( XML_SRCDIR) /include
i f e q ( $( WITH_THREADS ) , 1 )
CPPFLAGS += -D_REENTRANT
e n d i f
# The compiler and its options.
CC = gcc.exe
CFLAGS += -DWIN32 -D_WINDOWS -D_MBCS
CFLAGS += -I$( XML_SRCDIR) -I$( XML_SRCDIR) /include -I$( INCPREFIX)
i f n e q ( $( WITH_THREADS ) , n o )
CFLAGS += -D_REENTRANT
e n d i f
i f e q ( $( WITH_THREADS ) , y e s )
CFLAGS += -DHAVE_WIN32_THREADS -DHAVE_COMPILER_TLS
e n d i f
i f e q ( $( WITH_THREADS ) , c t l s )
CFLAGS += -DHAVE_WIN32_THREADS -DHAVE_COMPILER_TLS
e n d i f
i f e q ( $( WITH_THREADS ) , n a t i v e )
CFLAGS += -DHAVE_WIN32_THREADS
e n d i f
i f e q ( $( WITH_THREADS ) , p o s i x )
CFLAGS += -DHAVE_PTHREAD_H
e n d i f
i f e q ( $( WITH_ZLIB ) , 1 )
CFLAGS += -DHAVE_ZLIB_H
e n d i f
# 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 =
i f e q ( $( WITH_FTP ) , 1 )
CFLAGS += -D_WINSOCKAPI_
LIBS += -lwsock32
e n d i f
i f e q ( $( WITH_HTTP ) , 1 )
CFLAGS += -D_WINSOCKAPI_
LIBS += -lwsock32
e n d i f
i f e q ( $( WITH_ICONV ) , 1 )
LIBS += -liconv
e n d i f
i f e q ( $( WITH_ZLIB ) , 1 )
LIBS += -lzlib
e n d i f
i f e q ( $( WITH_THREADS ) , p o s i x )
LIBS += -lpthreadGC
e n d i f
# The archiver and its options.
AR = ar.exe
ARFLAGS = -r
# Optimisation and debug symbols.
i f e q ( $( DEBUG ) , 1 )
CFLAGS += -D_DEBUG -g
LDFLAGS +=
e l s e
CFLAGS += -DNDEBUG -O2
LDFLAGS +=
e n d i f
# Libxml object files.
XML_OBJS = $( XML_INTDIR) /c14n.o\
$( XML_INTDIR) /catalog.o\
2003-10-21 19:15:44 +00:00
$( XML_INTDIR) /chvalid.o\
2002-11-14 17:43:24 +00:00
$( XML_INTDIR) /debugXML.o\
2003-08-28 10:24:40 +00:00
$( XML_INTDIR) /dict.o\
2002-11-14 17:43:24 +00:00
$( 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\
2003-10-06 08:47:56 +00:00
$( XML_INTDIR) /legacy.o\
2002-11-14 17:43:24 +00:00
$( XML_INTDIR) /list.o\
$( XML_INTDIR) /nanoftp.o\
$( XML_INTDIR) /nanohttp.o\
$( XML_INTDIR) /parser.o\
$( XML_INTDIR) /parserInternals.o\
2003-12-11 13:56:54 +00:00
$( XML_INTDIR) /pattern.o\
2003-02-08 17:53:46 +00:00
$( XML_INTDIR) /relaxng.o\
2002-11-14 17:43:24 +00:00
$( XML_INTDIR) /SAX.o\
2003-08-28 10:24:40 +00:00
$( XML_INTDIR) /SAX2.o\
2002-11-14 17:43:24 +00:00
$( 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\
2002-12-16 18:45:29 +00:00
$( XML_INTDIR) /xmlreader.o\
2002-11-14 17:43:24 +00:00
$( XML_INTDIR) /xmlregexp.o\
2004-03-09 10:53:42 +00:00
$( XML_INTDIR) /xmlsave.o\
2002-11-14 17:43:24 +00:00
$( XML_INTDIR) /xmlschemas.o\
$( XML_INTDIR) /xmlschemastypes.o\
$( XML_INTDIR) /xmlunicode.o\
2003-11-27 18:39:01 +00:00
$( XML_INTDIR) /xmlwriter.o\
2002-11-14 17:43:24 +00:00
$( XML_INTDIR) /xpath.o\
2004-01-07 23:38:02 +00:00
$( XML_INTDIR) /xpointer.o\
$( XML_INTDIR) /xmlstring.o
2002-11-14 17:43:24 +00:00
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\
2003-10-21 19:15:44 +00:00
$( XML_INTDIR_A) /chvalid.o\
2002-11-14 17:43:24 +00:00
$( XML_INTDIR_A) /debugXML.o\
2003-08-28 10:24:40 +00:00
$( XML_INTDIR_A) /dict.o\
2002-11-14 17:43:24 +00:00
$( 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\
2003-10-06 08:47:56 +00:00
$( XML_INTDIR_A) /legacy.o\
2002-11-14 17:43:24 +00:00
$( 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\
2003-12-11 13:56:54 +00:00
$( XML_INTDIR_A) /pattern.o\
2003-02-08 17:53:46 +00:00
$( XML_INTDIR_A) /relaxng.o\
2002-11-14 17:43:24 +00:00
$( XML_INTDIR_A) /SAX.o\
2003-08-28 10:24:40 +00:00
$( XML_INTDIR_A) /SAX2.o\
2002-11-14 17:43:24 +00:00
$( 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\
2002-12-16 18:45:29 +00:00
$( XML_INTDIR_A) /xmlreader.o\
2002-11-14 17:43:24 +00:00
$( XML_INTDIR_A) /xmlregexp.o\
2004-03-09 10:53:42 +00:00
$( XML_INTDIR_A) /xmlsave.o\
2002-11-14 17:43:24 +00:00
$( XML_INTDIR_A) /xmlschemas.o\
$( XML_INTDIR_A) /xmlschemastypes.o\
$( XML_INTDIR_A) /xmlunicode.o\
2003-11-27 18:39:01 +00:00
$( XML_INTDIR_A) /xmlwriter.o\
2002-11-14 17:43:24 +00:00
$( XML_INTDIR_A) /xpath.o\
2004-01-07 23:38:02 +00:00
$( XML_INTDIR_A) /xpointer.o\
$( XML_INTDIR_A) /xmlstring.o
2002-11-14 17:43:24 +00:00
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\
2002-12-16 18:45:29 +00:00
$( BINDIR) /testReader.exe\
2002-11-14 17:43:24 +00:00
$( BINDIR) /testRegexp.exe\
2003-02-08 17:53:46 +00:00
$( BINDIR) /testRelax.exe\
2002-11-14 17:43:24 +00:00
$( BINDIR) /testSAX.exe\
$( BINDIR) /testSchemas.exe\
$( BINDIR) /testURI.exe\
$( BINDIR) /testXPath.exe
i f e q ( $( WITH_THREADS ) , y e s )
UTILS += $( BINDIR) /testThreadsWin32.exe
e n d i f
i f e q ( $( WITH_THREADS ) , c t l s )
UTILS += $( BINDIR) /testThreadsWin32.exe
e n d i f
i f e q ( $( WITH_THREADS ) , n a t i v e )
UTILS += $( BINDIR) /testThreadsWin32.exe
e n d i f
i f e q ( $( WITH_THREADS ) , p o s i x )
UTILS += $( BINDIR) /testThreads.exe
e n d i f
all : dep libxml libxmla utils
libxml : $( BINDIR ) /$( XML_SO )
libxmla : $( BINDIR ) /$( XML_A )
utils : $( UTILS )
clean :
2003-08-28 10:24:40 +00:00
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
2002-11-14 17:43:24 +00:00
distclean : clean
2003-08-28 10:24:40 +00:00
cmd.exe /C if exist config.* del config.*
cmd.exe /C if exist Makefile del Makefile
2002-11-14 17:43:24 +00:00
rebuild : clean all
install : all
2003-08-28 10:24:40 +00:00
cmd.exe /C if not exist $( INCPREFIX) \l ibxml mkdir $( INCPREFIX) \l ibxml
cmd.exe /C if not exist $( BINPREFIX) mkdir $( BINPREFIX)
cmd.exe /C if not exist $( LIBPREFIX) mkdir $( LIBPREFIX)
cmd.exe /C copy $( XML_SRCDIR) \i nclude\l ibxml\* .h $( INCPREFIX) \l ibxml
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)
2002-11-14 17:43:24 +00:00
# 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) \r eadme.txt
# Creates the dependency file
dep :
$( CC) $( CFLAGS) -M $( XML_SRCS) > depends.mingw
# Makes the output directory.
$(BINDIR) :
2003-08-28 10:24:40 +00:00
cmd.exe /C if not exist $( BINDIR) mkdir $( BINDIR)
2002-11-14 17:43:24 +00:00
# Makes the libxml intermediate directory.
$(XML_INTDIR) :
2003-08-28 10:24:40 +00:00
cmd.exe /C if not exist $( XML_INTDIR) mkdir $( XML_INTDIR)
2002-11-14 17:43:24 +00:00
# Makes the static libxml intermediate directory.
$(XML_INTDIR_A) :
2003-08-28 10:24:40 +00:00
cmd.exe /C if not exist $( XML_INTDIR_A) mkdir $( XML_INTDIR_A)
2002-11-14 17:43:24 +00:00
# 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) :
2003-08-28 10:24:40 +00:00
cmd.exe /C if not exist $( UTILS_INTDIR) mkdir $( UTILS_INTDIR)
2002-11-14 17:43:24 +00:00
# An implicit rule for xmllint and friends.
i f e q ( $( STATIC ) , 1 )
$(BINDIR)/%.exe : $( UTILS_SRCDIR ) /%.c
$( CC) -DLIBXML_STATIC $( CFLAGS) -o $( subst .c,.o,$( UTILS_INTDIR) /$( <F) ) -c $<
2002-11-22 18:07:37 +00:00
$( LD) $( LDFLAGS) -o $@ $( subst .c,.o,$( UTILS_INTDIR) /$( <F) ) -l$( XML_BASENAME) $( LIBS)
2002-11-14 17:43:24 +00:00
e l s e
$(BINDIR)/%.exe : $( UTILS_SRCDIR ) /%.c
$( CC) $( CFLAGS) -o $( subst .c,.o,$( UTILS_INTDIR) /$( <F) ) -c $<
2002-11-22 18:07:37 +00:00
$( LD) $( LDFLAGS) -o $@ $( subst .c,.o,$( UTILS_INTDIR) /$( <F) ) -l$( XML_BASENAME) $( LIBS)
2002-11-14 17:43:24 +00:00
e n d i f
# Builds xmllint and friends. Uses the implicit rule for commands.
$(UTILS) : $( UTILS_INTDIR ) $( BINDIR ) libxml libxmla
# Source dependencies
#-include depends.mingw