summaryrefslogtreecommitdiff
path: root/Build/source/texk/web2c/xetexdir/xetex.mk
blob: 621bd99a629ec095ce194a5dc78113e95df87529 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
# Makefile fragment for XeTeX and web2c. -- Jonathan Kew -- Public domain.
# This fragment contains the parts of the makefile that are most likely to
# differ between releases of XeTeX.

Makefile: $(srcdir)/xetexdir/xetex.mk

# We build xetex unless configure decides to skip it
xetex = @XETEX@ xetex

### Platform-specific defines and files to be built

# On Mac OS X:
@XETEX_MACOSX@ xetex_platform_o = XeTeX_mac.o XeTeXFontMgr_Mac.o
@XETEX_MACOSX@ xetex_platform_layout_o = XeTeXFontInst_Mac.o XeTeXFontInst_FT2.o
@XETEX_MACOSX@ xetex_platform_layout_cxx = XeTeXFontInst_Mac.cpp XeTeXFontInst_FT2.cpp
@XETEX_MACOSX@ xetex_images_o =

@XETEX_MACOSX@ XETEX_DEFINES = -DXETEX_MAC

@XETEX_MACOSX@ EXTRALIBS = -framework Carbon -framework Cocoa -framework QuickTime

@XETEX_MACOSX@ EXTRADEPS = 

# On non-Mac platforms:
@XETEX_GENERIC@ xetex_platform_o = XeTeXFontMgr_FC.o
@XETEX_GENERIC@ xetex_platform_layout_o = XeTeXFontInst_FT2.o
@XETEX_GENERIC@ xetex_platform_layout_cxx = XeTeXFontInst_FT2.cpp
@XETEX_GENERIC@ xetex_images_o = mfileio.o numbers.o pdfimage.o bmpimage.o jpegimage.o pngimage.o XeTeX_pic.o

@XETEX_GENERIC@ XETEX_DEFINES = -DXETEX_OTHER

@XETEX_GENERIC@ EXTRALIBS = @LDLIBXPDF@ @LDLIBPNG@ @LDFONTCONFIG@

@XETEX_GENERIC@ EXTRADEPS = @LIBXPDFDEP@ @LIBPNGDEP@

### end of platform-specific setup

LDLIBXPDF=@LDLIBXPDF@
LIBXPDFCPPFLAGS=@LIBXPDFCPPFLAGS@
LIBXPDFDEP=@LIBXPDFDEP@

LIBXPDFDIR=../../libs/xpdf
LIBXPDFSRCDIR=$(srcdir)/$(LIBXPDFDIR)

LDLIBPNG=@LDLIBPNG@
LIBPNGCPPFLAGS=@LIBPNGCPPFLAGS@
LIBPNGDEP=@LIBPNGDEP@

LIBPNGDIR=../../libs/libpng
LIBPNGSRCDIR=$(srcdir)/$(LIBPNGDIR)

LDFREETYPE2 = @LDFREETYPE2@
FTFLAGS =  @FREETYPE2CPPFLAGS@
FREETYPE2DEP = @FREETYPE2DEP@

FREETYPE2DIR = ../../libs/freetype2
FREETYPE2SRCDIR = $(srcdir)/$(FREETYPE2DIR)

TECKITFLAGS = @TECKITCPPFLAGS@
LDTECKIT = @LDTECKIT@
TECKITDEP = @TECKITDEP@

TECKITDIR=../../libs/teckit
TECKITSRCDIR=$(srcdir)/$(TECKITDIR)

ICUFLAGS = @ICUCPPFLAGS@
LDICU = @LDICU@
ICUDEP = @ICUDEP@

ICUDIR=../../libs/icu-xetex
ICUSRCDIR=$(srcdir)/$(ICUDIR)

ICUCFLAGS = @ICUCPPFLAGS@ -DLE_USE_CMEMORY

ZLIBCPPFLAGS = @ZLIBCPPFLAGS@
LDZLIB = @LDZLIB@

ZLIBDIR = ../../libs/zlib
ZLIBSRCDIR = $(srcdir)/$(ZLIBDIR)

FONTCONFIGCPPFLAGS = @FONTCONFIGCPPFLAGS@
FONTCONFIGLDFLAGS  = @FONTCONFIGLDFLAGS@

xetexlibs = $(LDICU) $(LDTECKIT) $(LDFREETYPE2) $(LDZLIB)

# Font-related headers
XeTeXFontHdrs = \
	$(srcdir)/xetexdir/FontTableCache.h \
	$(srcdir)/xetexdir/XeTeXFontInst.h \
	$(srcdir)/xetexdir/XeTeXFontInst_FT2.h \
	$(srcdir)/xetexdir/XeTeXFontInst_Mac.h \
	$(srcdir)/xetexdir/XeTeXFontMgr.h \
	$(srcdir)/xetexdir/XeTeXFontMgr_FC.h \
	$(srcdir)/xetexdir/XeTeXFontMgr_Mac.h \
	$(srcdir)/xetexdir/XeTeXLayoutInterface.h \
	$(srcdir)/xetexdir/XeTeXOTLayoutEngine.h
	
# Image-related headers
XeTeXImageHdrs = \
	$(srcdir)/xetexdir/bmpimage.h \
	$(srcdir)/xetexdir/jpegimage.h \
	$(srcdir)/xetexdir/pdfimage.h \
	$(srcdir)/xetexdir/pngimage.h

# Extract xetex version
xetexdir/xetex.version: $(srcdir)/xetexdir/xetex-new.ch
	test -d xetexdir || mkdir xetexdir
	grep '^@d XeTeX_version_string==' $(srcdir)/xetexdir/xetex-new.ch \
	  | sed "s/^.*'-//;s/'.*$$//" >xetexdir/xetex.version

# Extract etex version
xetexdir/etex.version: $(srcdir)/etexdir/etex.ch
	test -d xetexdir || mkdir xetexdir
	grep '^@d eTeX_version_string==' $(srcdir)/etexdir/etex.ch \
	  | sed "s/^.*'-//;s/'.*$$//" >xetexdir/etex.version

# The C sources.
xetex_c = xetexini.c xetex0.c xetex1.c xetex2.c
xetex_o = xetexini.o xetex0.o xetex1.o xetex2.o xetexextra.o
xetex_add_o = trans.o XeTeX_ext.o xetex_pool.o $(xetex_platform_o)

# these compilations require the path to TECkit headers;
# just setting it in XCFLAGS doesn't seem to work when we're called
# recursively from "make world" etc
xetexini.o: xetexini.c $(srcdir)/xetexdir/XeTeX_ext.h
	$(compile) $(TECKITFLAGS) $(ALL_CFLAGS) $(XETEX_DEFINES) -c $< -o $@
xetex0.o: xetex0.c $(srcdir)/xetexdir/XeTeX_ext.h
	$(compile) $(TECKITFLAGS) $(ALL_CFLAGS) $(XETEX_DEFINES) -c $< -o $@
xetex1.o: xetex1.c $(srcdir)/xetexdir/XeTeX_ext.h
	$(compile) $(TECKITFLAGS) $(ALL_CFLAGS) $(XETEX_DEFINES) -c $< -o $@
xetex2.o: xetex2.c $(srcdir)/xetexdir/XeTeX_ext.h
	$(compile) $(TECKITFLAGS) $(ALL_CFLAGS) $(XETEX_DEFINES) -c $< -o $@
xetexextra.o: xetexextra.c $(srcdir)/xetexdir/XeTeX_ext.h
	$(compile) $(TECKITFLAGS) $(ALL_CFLAGS) $(XETEX_DEFINES) -c $< -o $@
xetex_pool.o: xetex_pool.c $(srcdir)/xetexdir/XeTeX_ext.h
	$(compile) $(TECKITFLAGS) $(ALL_CFLAGS) $(XETEX_DEFINES) -c $< -o $@

# image support
mfileio.o: $(srcdir)/xetexdir/mfileio.c $(srcdir)/xetexdir/mfileio.h
	$(compile) $(ALL_CFLAGS) -c $< -o $@

numbers.o: $(srcdir)/xetexdir/numbers.c $(srcdir)/xetexdir/numbers.h
	$(compile) $(ALL_CFLAGS) -c $< -o $@

bmpimage.o: $(srcdir)/xetexdir/bmpimage.c $(srcdir)/xetexdir/bmpimage.h
	$(compile) $(ALL_CFLAGS) -c $< -o $@

jpegimage.o: $(srcdir)/xetexdir/jpegimage.c $(srcdir)/xetexdir/jpegimage.h
	$(compile) $(ALL_CFLAGS) -c $< -o $@

pngimage.o: $(srcdir)/xetexdir/pngimage.c $(srcdir)/xetexdir/pngimage.h
	$(compile) $(ALL_CFLAGS) $(LIBPNGCPPFLAGS) $(ZLIBCPPFLAGS) -c $< -o $@

pdfimage.o: $(srcdir)/xetexdir/pdfimage.cpp $(srcdir)/xetexdir/pdfimage.h
	$(CXX) $(ALL_CFLAGS) $(LIBXPDFCPPFLAGS) -c $< -o $@

XeTeX_pic.o: $(srcdir)/xetexdir/XeTeX_pic.c $(srcdir)/xetexdir/XeTeX_ext.h $(XeTeXImageHdrs)
	$(compile) $(TECKITFLAGS) $(ALL_CFLAGS) $(XETEX_DEFINES) -c $< -o $@

# Layout library
xetex_ot_layout_o = \
		XeTeXFontMgr.o \
		XeTeXLayoutInterface.o XeTeXOTLayoutEngine.o \
		XeTeXFontInst.o cmaps.o FontTableCache.o \
		XeTeXOTMath.o \
		$(xetex_platform_layout_o) 

XeTeXLayoutInterface.o: $(srcdir)/xetexdir/XeTeXLayoutInterface.cpp $(XeTeXFontHdrs)
	$(CXX) $(ICUCFLAGS) $(FTFLAGS) $(FONTCONFIGCPPFLAGS) $(ALL_CXXFLAGS) $(XETEX_DEFINES) -c $< -o $@
XeTeXOTLayoutEngine.o: $(srcdir)/xetexdir/XeTeXOTLayoutEngine.cpp $(XeTeXFontHdrs)
	$(CXX) $(ICUCFLAGS) $(FTFLAGS) $(FONTCONFIGCPPFLAGS) $(ALL_CXXFLAGS) $(XETEX_DEFINES) -c $< -o $@

XeTeXFontMgr.o: $(srcdir)/xetexdir/XeTeXFontMgr.cpp  $(XeTeXFontHdrs)
	$(CXX) $(ICUCFLAGS) $(FTFLAGS) $(FONTCONFIGCPPFLAGS) $(ALL_CXXFLAGS) $(XETEX_DEFINES) -c $< -o $@
XeTeXFontMgr_FC.o: $(srcdir)/xetexdir/XeTeXFontMgr_FC.cpp  $(XeTeXFontHdrs)
	$(CXX) $(ICUCFLAGS) $(FTFLAGS) $(FONTCONFIGCPPFLAGS) $(ALL_CXXFLAGS) $(XETEX_DEFINES) -c $< -o $@

XeTeXFontMgr_Mac.o: $(srcdir)/xetexdir/XeTeXFontMgr_Mac.mm  $(XeTeXFontHdrs)
	gcc -ObjC++ $(ICUCFLAGS) $(FTFLAGS) $(ALL_CXXFLAGS) $(XETEX_DEFINES) -c $< -o $@

cmaps.o: $(srcdir)/xetexdir/cmaps.cpp
	$(CXX) $(ICUCFLAGS) $(ALL_CXXFLAGS) $(XETEX_DEFINES) -c $< -o $@
FontTableCache.o: $(srcdir)/xetexdir/FontTableCache.cpp
	$(CXX) $(ICUCFLAGS) $(ALL_CXXFLAGS) $(XETEX_DEFINES) -c $< -o $@

XeTeXFontInst.o: $(srcdir)/xetexdir/XeTeXFontInst.cpp $(XeTeXFontHdrs)
	$(CXX) $(ICUCFLAGS) $(FTFLAGS) $(FONTCONFIGCPPFLAGS) $(ALL_CXXFLAGS) $(XETEX_DEFINES) -c $< -o $@
XeTeXFontInst_Mac.o: $(srcdir)/xetexdir/XeTeXFontInst_Mac.cpp $(XeTeXFontHdrs)
	$(CXX) $(ICUCFLAGS) $(ALL_CXXFLAGS) $(XETEX_DEFINES) -c $< -o $@
XeTeXFontInst_FT2.o: $(srcdir)/xetexdir/XeTeXFontInst_FT2.cpp $(XeTeXFontHdrs)
	$(CXX) $(ICUCFLAGS) $(FTFLAGS) $(FONTCONFIGCPPFLAGS) $(ALL_CXXFLAGS) $(XETEX_DEFINES) -c $< -o $@

XeTeXOTMath.o: $(srcdir)/xetexdir/XeTeXOTMath.cpp $(XeTeXFontHdrs)
	$(CXX) $(ICUCFLAGS) $(FTFLAGS) $(FONTCONFIGCPPFLAGS) $(ALL_CXXFLAGS) $(XETEX_DEFINES) -c $< -o $@

# special rules for files that need the TECkit headers as well
XeTeX_ext.o: $(srcdir)/xetexdir/XeTeX_ext.c xetexd.h
	$(compile) $(ICUCFLAGS) $(FTFLAGS) $(TECKITFLAGS) $(LIBPNGCPPFLAGS) $(LIBXPDFCPPFLAGS) $(ZLIBCPPFLAGS) $(ALL_CFLAGS) $(XETEX_DEFINES) -c $< -o $@
XeTeX_mac.o: $(srcdir)/xetexdir/XeTeX_mac.c xetexd.h
	$(compile) $(ICUCFLAGS) $(TECKITFLAGS) $(ALL_CFLAGS) $(XETEX_DEFINES) -c $< -o $@

trans.o: $(srcdir)/xetexdir/trans.c
	$(compile) $(ALL_CFLAGS) $(XETEX_DEFINES) -c $< -o $@

# Making xetex.
xetex: $(xetex_o) $(xetex_add_o) $(xetex_images_o) $(xetex_ot_layout_o) $(EXTRADEPS)
	@CXXHACKLINK@ $(xetex_o) $(xetex_add_o) $(xetex_images_o) $(xetex_ot_layout_o) \
	$(FONTCONFIGLDFLAGS) $(socketlibs) $(xetexlibs) $(EXTRALIBS) \
	@CXXHACKLDLIBS@ @CXXLDEXTRA@ @PTHREAD_CFLAGS@ @PTHREAD_LIBS@

# C file dependencies
$(xetex_c) xetexcoerce.h xetexd.h: xetex.p $(web2c_texmf)
	$(web2c) xetex
xetexextra.c: lib/texmfmp.c xetexdir/xetexextra.h
	sed s/TEX-OR-MF-OR-MP/xetex/ $(srcdir)/lib/texmfmp.c >$@
xetexdir/xetexextra.h: xetexdir/xetexextra.in xetexdir/xetex.version xetexdir/etex.version
	test -d xetexdir || mkdir xetexdir
	sed -e s/XETEX-VERSION/`cat xetexdir/xetex.version`/ \
	    -e s/ETEX-VERSION/`cat xetexdir/etex.version`/ \
	  $(srcdir)/xetexdir/xetexextra.in >$@

xetex_pool.c: xetex.pool
	perl $(srcdir)/xetexdir/pool2c.pl $< $@

# Tangling
xetex.p xetex.pool: ./otangle xetex.web # xetex.ch
	./otangle xetex.web # xetex.ch

# Generation of the web [and ch] file.
#   Sources for xetex.web:
xetex_web_srcs = $(srcdir)/tex.web \
  $(srcdir)/etexdir/etex.ch \
  $(srcdir)/etexdir/tex.ch0 \
  $(srcdir)/tex.ch \
  $(srcdir)/etexdir/tex.ch1 \
  $(srcdir)/etexdir/tex.ech \
  $(srcdir)/xetexdir/xetex-new.ch \
  $(srcdir)/xetexdir/xetex-noenc.ch \
  $(srcdir)/xetexdir/xetex-upwards.ch \
  $(srcdir)/xetexdir/xetex-otmath.ch
xetex.web: tie xetexdir/xetex.mk $(xetex_web_srcs)
	$(TIE) -m xetex.web $(xetex_web_srcs)

################## FIXME: the rest of this isn't properly updated for xetex yet...
##################        e.g., we don't have real xetex tests to run!

# Tests...
#check: @XETEX@ xetex-check
#xetex-check: etrip xetex.fmt
# Test truncation (but don't bother showing the warning msg).
#	./xetex --progname=xetex --output-comment="`cat $(srcdir)/PROJECTS`" \
#	  $(srcdir)/tests/hello 2>/dev/null \
#	  && ./dvitype hello.dvi | grep olaf@infovore.xs4all.nl >/dev/null
# \openout should show up in \write's.
#	./xetex --progname=xetex $(srcdir)/tests/openout && grep xfoo openout.log
# one.two.tex -> one.two.log
#	./xetex --progname=xetex $(srcdir)/tests/one.two && ls -l one.two.log
# uno.dos -> uno.log
#	./xetex --progname=xetex $(srcdir)/tests/uno.dos && ls -l uno.log
#	./xetex --progname=xetex $(srcdir)/tests/just.texi && ls -l just.log
#	-./xetex --progname=xetex $(srcdir)/tests/batch.tex
#	./xetex --progname=xetex --shell $(srcdir)/tests/write18 | grep echo
#	./xetex --mltex --progname=xeinitex $(srcdir)/tests/mltextst
#	-./xetex --progname=xetex </dev/null
#	-PATH=`pwd`:$(kpathsea_dir):$(kpathsea_srcdir):$$PATH \
#	  WEB2C=$(kpathsea_srcdir) TMPDIR=.. \
#	  ./xetex --progname=xetex '\nonstopmode\font\foo=nonesuch\end'

# Cleaning up.
clean:: xetex-clean
xetex-clean: # etrip-clean
	$(LIBTOOL) --mode=clean $(RM) xetex
	rm -f $(xetex_o) $(xetex_c) xetexextra.c xetex_pool.c xetexcoerce.h xetexd.h
	rm -f xetexdir/xetexextra.h xetexdir/xetex.version
	rm -f xetex.p xetex.pool xetex.web xetex.ch
	rm -f xetex.fmt xetex.log
	rm -f hello.dvi hello.log xfoo.out openout.log one.two.log uno.log
	rm -f just.log batch.log write18.log mltextst.log texput.log
	rm -f missfont.log
	rm -rf tfm

# Dumps
all_xefmts = xetex.fmt $(xefmts)

dumps: @XETEX@ xefmts
xefmts: $(all_xefmts)

xefmtdir = $(web2cdir)/xetex
$(xefmtdir)::
	$(SHELL) $(top_srcdir)/../mkinstalldirs ${DESTDIR}$(xefmtdir)

xetex.fmt: xetex
	$(dumpenv) $(MAKE) progname=xetex files="xetex.ini unicode-letters.tex plain.tex cmr10.tfm" prereq-check
	$(dumpenv) ./xetex --progname=xetex --jobname=xetex --ini \*\\input xetex.ini \\dump </dev/null

xelatex.fmt: xetex
	$(dumpenv) $(MAKE) progname=xelatex files="xelatex.ini unicode-letters.tex latex.ltx" prereq-check
	$(dumpenv) ./xetex --progname=xelatex --jobname=xelatex --ini \*\\input xelatex.ini </dev/null


# Install
install-xetex: install-xetex-exec install-xetex-data
install-xetex-exec: install-xetex-programs install-xetex-links
install-xetex-data: @FMU@ install-xetex-dumps
install-xetex-dumps: install-xetex-fmts

install-programs: @XETEX@ install-xetex-programs
install-xetex-programs: xetex $(bindir)
	for p in xetex; do $(INSTALL_LIBTOOL_PROG) $$p ${DESTDIR}$(bindir); done

install-links: @XETEX@ install-xetex-links
install-xetex-links: install-xetex-programs
	#cd $(bindir) && (rm -f xeinitex xevirtex; \
	#  $(LN) xetex xeinitex; $(LN) xetex xevirtex)

install-fmts: @XETEX@ install-xetex-fmts
install-xetex-fmts: xefmts $(xefmtdir)
	xefmts="$(all_xefmts)"; \
	  for f in $$xefmts; do $(INSTALL_DATA) $$f ${DESTDIR}$(xefmtdir)/$$f; done
	xefmts="$(xefmts)"; \
	  for f in $$xefmts; do base=`basename $$f .fmt`; \
	    (cd ${DESTDIR}$(bindir) && (rm -f $$base; $(LN) xetex $$base)); done

install-data:: @XETEX@ install-xetex-data

# end of xetex.mk