mirror of
https://gitlab.gnome.org/GNOME/libxml2
synced 2025-03-28 21:33:13 +00:00

Also use thread-local storage to store globals on POSIX platforms. Most importantly, this makes sure that global variable access can't fail when allocating the global state struct.
319 lines
8.8 KiB
Makefile
319 lines
8.8 KiB
Makefile
# 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 += -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),ctls)
|
|
CFLAGS += "-DXML_THREAD_LOCAL=__declspec(thread)"
|
|
endif
|
|
ifeq ($(WITH_THREADS),posix)
|
|
CFLAGS += -DHAVE_PTHREAD_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)
|
|
LIBS += -lwsock32 -lws2_32
|
|
endif
|
|
ifeq ($(WITH_HTTP),1)
|
|
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)/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)/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)/testModule.exe\
|
|
$(BINDIR)/runtest.exe\
|
|
$(BINDIR)/runsuite.exe\
|
|
$(BINDIR)/testapi.exe\
|
|
$(BINDIR)/testlimits.exe
|
|
|
|
ifneq ($(WITH_THREADS),no)
|
|
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
|
|
|