1# Makefile for libxslt, specific for Windows, GCC (mingw) and GNU make. 2# 3# Take a look at the beginning and modify the variables to suit your 4# environment. Having done that, you can do a 5# 6# make [all] to build the libxslt and the accompanying utilities. 7# make clean to remove all compiler output files and return to a 8# clean state. 9# make rebuild to rebuild everything from scratch. This basically does 10# a 'make clean' and then a 'make all'. 11# make install to install the library and its header files. 12# 13# November 2002, Igor Zlatkovic <igor@zlatkovic.com> 14 15AUTOCONF = .\config.mingw 16include $(AUTOCONF) 17 18# There should never be a need to modify anything below this line. 19# ---------------------------------------------------------------- 20 21BASEDIR = .. 22XSLT_SRCDIR = $(BASEDIR)\libxslt 23EXSLT_SRCDIR = $(BASEDIR)\libexslt 24UTILS_SRCDIR = $(BASEDIR)\xsltproc 25BINDIR = bin.mingw 26 27# Names of various input and output components. 28XSLT_NAME = xslt 29XSLT_BASENAME = lib$(XSLT_NAME) 30XSLT_SO = $(XSLT_BASENAME).dll 31XSLT_IMP = $(XSLT_BASENAME).lib 32XSLT_A = $(XSLT_BASENAME).a 33EXSLT_NAME = exslt 34EXSLT_BASENAME = lib$(EXSLT_NAME) 35EXSLT_SO = $(EXSLT_BASENAME).dll 36EXSLT_IMP = $(EXSLT_BASENAME).lib 37EXSLT_A = $(EXSLT_BASENAME).a 38 39# Places where intermediate files produced by the compiler go 40XSLT_INTDIR = int.xslt.mingw 41XSLT_INTDIR_A = int.xslta.mingw 42EXSLT_INTDIR = int.exslt.mingw 43EXSLT_INTDIR_A = int.exslta.mingw 44UTILS_INTDIR = int.utils.mingw 45 46# The preprocessor and its options. 47CPP = gcc.exe -E 48CPPFLAGS += 49 50# The compiler and its options. 51CC = gcc.exe 52CFLAGS += -DWIN32 -D_WINDOWS -D_MBCS 53CFLAGS += -I$(BASEDIR) -I$(XSLT_SRCDIR) -I$(INCPREFIX) 54 55# The linker and its options. 56LD = gcc.exe 57LDFLAGS += -Wl,-L,$(BINDIR) -Wl,-L,$(LIBPREFIX) 58LIBS = -lwsock32 59 60# The archiver and its options. 61AR = ar.exe 62ARFLAGS = -r 63 64# Optimisation and debug symbols. 65ifeq ($(DEBUG),1) 66CFLAGS += -D_DEBUG -g 67LDFLAGS += 68else 69CFLAGS += -DNDEBUG -O2 70LDFLAGS += 71endif 72 73# Libxslt object files. 74XSLT_OBJS = $(XSLT_INTDIR)/attributes.o\ 75 $(XSLT_INTDIR)/documents.o\ 76 $(XSLT_INTDIR)/extensions.o\ 77 $(XSLT_INTDIR)/extra.o\ 78 $(XSLT_INTDIR)/functions.o\ 79 $(XSLT_INTDIR)/imports.o\ 80 $(XSLT_INTDIR)/keys.o\ 81 $(XSLT_INTDIR)/namespaces.o\ 82 $(XSLT_INTDIR)/numbers.o\ 83 $(XSLT_INTDIR)/pattern.o\ 84 $(XSLT_INTDIR)/preproc.o\ 85 $(XSLT_INTDIR)/security.o\ 86 $(XSLT_INTDIR)/templates.o\ 87 $(XSLT_INTDIR)/transform.o\ 88 $(XSLT_INTDIR)/variables.o\ 89 $(XSLT_INTDIR)/xslt.o\ 90 $(XSLT_INTDIR)/xsltlocale.o\ 91 $(XSLT_INTDIR)/xsltutils.o 92XSLT_SRCS = $(subst .o,.c,$(subst $(XSLT_INTDIR),$(XSLT_SRCDIR),$(XSLT_OBJS))) 93 94# Static libxslt object files. 95XSLT_OBJS_A = $(XSLT_INTDIR_A)/attributes.o\ 96 $(XSLT_INTDIR_A)/documents.o\ 97 $(XSLT_INTDIR_A)/extensions.o\ 98 $(XSLT_INTDIR_A)/extra.o\ 99 $(XSLT_INTDIR_A)/functions.o\ 100 $(XSLT_INTDIR_A)/imports.o\ 101 $(XSLT_INTDIR_A)/keys.o\ 102 $(XSLT_INTDIR_A)/namespaces.o\ 103 $(XSLT_INTDIR_A)/numbers.o\ 104 $(XSLT_INTDIR_A)/pattern.o\ 105 $(XSLT_INTDIR_A)/preproc.o\ 106 $(XSLT_INTDIR_A)/security.o\ 107 $(XSLT_INTDIR_A)/templates.o\ 108 $(XSLT_INTDIR_A)/transform.o\ 109 $(XSLT_INTDIR_A)/variables.o\ 110 $(XSLT_INTDIR_A)/xslt.o\ 111 $(XSLT_INTDIR_A)/xsltlocale.o\ 112 $(XSLT_INTDIR_A)/xsltutils.o 113 114# Libexslt object files. 115EXSLT_OBJS = $(EXSLT_INTDIR)/common.o\ 116 $(EXSLT_INTDIR)/crypto.o\ 117 $(EXSLT_INTDIR)/date.o\ 118 $(EXSLT_INTDIR)/exslt.o\ 119 $(EXSLT_INTDIR)/functions.o\ 120 $(EXSLT_INTDIR)/math.o\ 121 $(EXSLT_INTDIR)/saxon.o\ 122 $(EXSLT_INTDIR)/sets.o\ 123 $(EXSLT_INTDIR)/strings.o\ 124 $(EXSLT_INTDIR)/dynamic.o 125EXSLT_SRCS = $(subst .o,.c,$(subst $(EXSLT_INTDIR)/,$(EXSLT_SRCDIR)/,$(EXSLT_OBJS))) 126 127# Static libexslt object files. 128EXSLT_OBJS_A = $(EXSLT_INTDIR_A)/common.o\ 129 $(EXSLT_INTDIR_A)/crypto.o\ 130 $(EXSLT_INTDIR_A)/date.o\ 131 $(EXSLT_INTDIR_A)/exslt.o\ 132 $(EXSLT_INTDIR_A)/functions.o\ 133 $(EXSLT_INTDIR_A)/math.o\ 134 $(EXSLT_INTDIR_A)/saxon.o\ 135 $(EXSLT_INTDIR_A)/sets.o\ 136 $(EXSLT_INTDIR_A)/strings.o\ 137 $(EXSLT_INTDIR_A)/dynamic.o 138 139 140# Xsltproc and friends executables. 141UTILS = $(BINDIR)/xsltproc.exe 142 143all : dep libxslt libxslta libexslt libexslta utils 144 145libxslt : $(BINDIR)\$(XSLT_SO) 146 147libxslta : $(BINDIR)\$(XSLT_A) 148 149libexslt : $(BINDIR)\$(EXSLT_SO) 150 151libexslta : $(BINDIR)\$(EXSLT_A) 152 153utils : $(UTILS) 154 155clean : 156 cmd.exe /C if exist $(XSLT_INTDIR) rmdir /S /Q $(XSLT_INTDIR) 157 cmd.exe /C if exist $(XSLT_INTDIR_A) rmdir /S /Q $(XSLT_INTDIR_A) 158 cmd.exe /C if exist $(EXSLT_INTDIR) rmdir /S /Q $(EXSLT_INTDIR) 159 cmd.exe /C if exist $(EXSLT_INTDIR_A) rmdir /S /Q $(EXSLT_INTDIR_A) 160 cmd.exe /C if exist $(UTILS_INTDIR) rmdir /S /Q $(UTILS_INTDIR) 161 cmd.exe /C if exist $(BINDIR) rmdir /S /Q $(BINDIR) 162 cmd.exe /C if exist depends.mingw del depends.mingw 163 164rebuild : clean all 165 166distclean : clean 167 cmd.exe /C if exist config.* del config.* 168 cmd.exe /C if exist depends.* del depends.* 169 cmd.exe /C if exist Makefile del Makefile 170 171install-libs : all 172 cmd.exe /C if not exist $(INCPREFIX)\$(XSLT_BASENAME) mkdir $(INCPREFIX)\$(XSLT_BASENAME) 173 cmd.exe /C if not exist $(INCPREFIX)\$(EXSLT_BASENAME) mkdir $(INCPREFIX)\$(EXSLT_BASENAME) 174 cmd.exe /C if not exist $(BINPREFIX) mkdir $(BINPREFIX) 175 cmd.exe /C if not exist $(LIBPREFIX) mkdir $(LIBPREFIX) 176 cmd.exe /C copy $(XSLT_SRCDIR)\*.h $(INCPREFIX)\$(XSLT_BASENAME) 177 cmd.exe /C copy $(EXSLT_SRCDIR)\*.h $(INCPREFIX)\$(EXSLT_BASENAME) 178 cmd.exe /C copy $(BINDIR)\$(XSLT_SO) $(SOPREFIX) 179 cmd.exe /C copy $(BINDIR)\$(XSLT_A) $(LIBPREFIX) 180 cmd.exe /C copy $(BINDIR)\$(XSLT_IMP) $(LIBPREFIX) 181 cmd.exe /C copy $(BINDIR)\$(EXSLT_SO) $(SOPREFIX) 182 cmd.exe /C copy $(BINDIR)\$(EXSLT_A) $(LIBPREFIX) 183 cmd.exe /C copy $(BINDIR)\$(EXSLT_IMP) $(LIBPREFIX) 184 185install : install-libs 186 cmd.exe /C copy $(BINDIR)\*.exe $(BINPREFIX) 187 188install-dist : install 189 190# This is a target for me, to make a binary distribution. Not for the public use, 191# keep your hands off :-) 192BDVERSION = $(LIBXSLT_MAJOR_VERSION).$(LIBXSLT_MINOR_VERSION).$(LIBXSLT_MICRO_VERSION) 193BDPREFIX = $(XSLT_BASENAME)-$(BDVERSION).win32 194bindist : all 195 $(MAKE) PREFIX=$(BDPREFIX) SOPREFIX=$(BDPREFIX)/bin install-dist 196 cscript //NoLogo configure.js genreadme $(XSLT_BASENAME) $(BDVERSION) $(BDPREFIX)\readme.txt 197 198 199# Creates the dependency files 200dep : 201 $(CC) $(subst \,/,$(CFLAGS)) -MM $(subst \,/,$(XSLT_SRCS)) $(subst \,/,$(EXSLT_SRCS)) > depends.mingw 202 203 204# Makes the compiler output directory. 205$(BINDIR) : 206 cmd.exe /C if not exist $(BINDIR) mkdir $(BINDIR) 207 208 209# Makes the libxslt intermediate directory. 210$(XSLT_INTDIR) : 211 cmd.exe /C if not exist $(XSLT_INTDIR) mkdir $(XSLT_INTDIR) 212 213# Makes the static libxslt intermediate directory. 214$(XSLT_INTDIR_A) : 215 cmd.exe /C if not exist $(XSLT_INTDIR_A) mkdir $(XSLT_INTDIR_A) 216 217# An implicit rule for libxslt compilation. 218$(XSLT_INTDIR)/%.o : $(XSLT_SRCDIR)/%.c 219 $(CC) $(CFLAGS) -c -o $@ $< 220 221# An implicit rule for static libxslt compilation. 222$(XSLT_INTDIR_A)/%.o : $(XSLT_SRCDIR)/%.c 223 $(CC) $(CFLAGS) -DLIBXML_STATIC -DLIBXSLT_STATIC -o $@ -c $< 224 225# Compiles libxslt source. Uses the implicit rule for commands. 226$(XSLT_OBJS) : $(XSLT_INTDIR) 227 228# Compiles static libxslt source. Uses the implicit rule for commands. 229$(XSLT_OBJS_A) : $(XSLT_INTDIR_A) 230 231# Creates the libxslt shared object. 232XSLTSO_LDFLAGS = $(LDFLAGS) -shared -Wl,--dll -Wl,--out-implib,$(BINDIR)/$(XSLT_IMP) 233XSLTSO_LDFLAGS += -Wl,--major-image-version,$(LIBXSLT_MAJOR_VERSION) 234XSLTSO_LDFLAGS += -Wl,--minor-image-version,$(LIBXSLT_MINOR_VERSION) 235$(BINDIR)\$(XSLT_SO) : $(BINDIR) $(XSLT_OBJS) 236 $(LD) $(XSLTSO_LDFLAGS) -o $(BINDIR)/$(XSLT_SO) $(XSLT_OBJS) $(LIBS) -llibxml2 237 238# Creates the libxslt archive. 239$(BINDIR)\$(XSLT_A) : $(BINDIR) $(XSLT_OBJS_A) 240 $(AR) $(ARFLAGS) $(BINDIR)/$(XSLT_A) $(XSLT_OBJS_A) 241 242 243# Creates the libexslt intermediate directory. 244$(EXSLT_INTDIR) : 245 cmd.exe /C if not exist $(EXSLT_INTDIR) mkdir $(EXSLT_INTDIR) 246 247# Creates the static libexslt intermediate directory. 248$(EXSLT_INTDIR_A) : 249 cmd.exe /C if not exist $(EXSLT_INTDIR_A) mkdir $(EXSLT_INTDIR_A) 250 251# An implicit rule for libexslt compilation. 252$(EXSLT_INTDIR)/%.o : $(EXSLT_SRCDIR)/%.c 253 $(CC) $(CFLAGS) -I$(EXSLT_SRCDIR) -o $@ -c $< 254 255# An implicit rule for static libexslt compilation. 256$(EXSLT_INTDIR_A)/%.o : $(EXSLT_SRCDIR)/%.c 257 $(CC) $(CFLAGS) -DLIBXML_STATIC -DLIBXSLT_STATIC -DLIBEXSLT_STATIC \ 258 -I$(EXSLT_SRCDIR) -o $@ -c $< 259 260# Compiles libxslt source. Uses the implicit rule for commands. 261$(EXSLT_OBJS) : $(EXSLT_INTDIR) 262 263# Compiles libxslt source. Uses the implicit rule for commands. 264$(EXSLT_OBJS_A) : $(EXSLT_INTDIR_A) 265 266# Creates the libexslt shared object. 267EXSLTSO_LDFLAGS = $(LDFLAGS) -shared -Wl,--dll -Wl,--out-implib,$(BINDIR)/$(EXSLT_IMP) 268EXSLTSO_LDFLAGS += -Wl,--major-image-version,$(LIBEXSLT_MAJOR_VERSION) 269EXSLTSO_LDFLAGS += -Wl,--minor-image-version,$(LIBEXSLT_MINOR_VERSION) 270$(BINDIR)\$(EXSLT_SO) : $(BINDIR) $(EXSLT_OBJS) libxslt 271 $(LD) $(EXSLTSO_LDFLAGS) -o $(BINDIR)/$(EXSLT_SO) $(EXSLT_OBJS) $(LIBS) -l$(XSLT_BASENAME) -llibxml2 272 273# Creates the libexslt archive. 274$(BINDIR)\$(EXSLT_A) : $(BINDIR) $(EXSLT_OBJS_A) libxslta 275 $(AR) $(ARFLAGS) $(BINDIR)\$(EXSLT_A) $(EXSLT_OBJS_A) 276 277 278# Creates the utils intermediate directory. 279$(UTILS_INTDIR) : 280 cmd.exe /C if not exist $(UTILS_INTDIR) mkdir $(UTILS_INTDIR) 281 282# An implicit rule for xsltproc and friends. 283APPLIBS = $(LIBS) 284APPLIBS += -llibxml2 -l$(XSLT_BASENAME) -l$(EXSLT_BASENAME) 285APP_LDFLAGS = $(LDFLAGS) 286APP_LDFLAGS += -Wl,--major-image-version,$(LIBXSLT_MAJOR_VERSION) 287APP_LDFLAGS += -Wl,--minor-image-version,$(LIBXSLT_MINOR_VERSION) 288ifeq ($(STATIC),1) 289CFLAGS += -DLIBXML_STATIC -DLIBXSLT_STATIC -DLIBEXSLT_STATIC 290APP_LDFLAGS += -Bstatic 291$(BINDIR)/%.exe : $(UTILS_SRCDIR)/%.c 292 $(CC) $(CFLAGS) -o $(subst .c,.o,$(UTILS_INTDIR)/$(<F)) -c $< 293 $(LD) $(APP_LDFLAGS) -o $@ $(APPLIBS) $(subst .c,.o,$(UTILS_INTDIR)/$(<F)) 294else 295$(BINDIR)/%.exe : $(UTILS_SRCDIR)/%.c 296 $(CC) $(CFLAGS) -o $(subst .c,.o,$(UTILS_INTDIR)/$(<F)) -c $< 297 $(LD) $(APP_LDFLAGS) -o $@ $(APPLIBS) $(subst .c,.o,$(UTILS_INTDIR)/$(<F)) 298endif 299 300# Builds xsltproc and friends. Uses the implicit rule for commands. 301$(UTILS) : $(UTILS_INTDIR) $(BINDIR) libxslt libxslta libexslt libexslta 302 303 304# Source dependencies, just how? 305#-include depends.mingw 306 307