|
1 # |
|
2 # FreeType build system -- top-level sub-Makefile |
|
3 # |
|
4 |
|
5 |
|
6 # Copyright 1996-2001, 2003, 2006, 2008-2010, 2012-2014 by |
|
7 # David Turner, Robert Wilhelm, and Werner Lemberg. |
|
8 # |
|
9 # This file is part of the FreeType project, and may only be used, modified, |
|
10 # and distributed under the terms of the FreeType project license, |
|
11 # LICENSE.TXT. By continuing to use, modify, or distribute this file you |
|
12 # indicate that you have read the license and understand and accept it |
|
13 # fully. |
|
14 |
|
15 |
|
16 # This file is designed for GNU Make, do not use it with another Make tool! |
|
17 # |
|
18 # It works as follows: |
|
19 # |
|
20 # - When invoked for the first time, this Makefile includes the rules found |
|
21 # in `PROJECT/builds/detect.mk'. They are in charge of detecting the |
|
22 # current platform. |
|
23 # |
|
24 # A summary of the detection is displayed, and the file `config.mk' is |
|
25 # created in the current directory. |
|
26 # |
|
27 # - When invoked later, this Makefile includes the rules found in |
|
28 # `config.mk'. This sub-Makefile defines some system-specific variables |
|
29 # (like compiler, compilation flags, object suffix, etc.), then includes |
|
30 # the rules found in `PROJECT/builds/PROJECT.mk', used to build the |
|
31 # library. |
|
32 # |
|
33 # See the comments in `builds/detect.mk' and `builds/PROJECT.mk' for more |
|
34 # details on host platform detection and library builds. |
|
35 |
|
36 |
|
37 # First of all, check whether we have `$(value ...)'. We do this by testing |
|
38 # for `$(eval ...)' which has been introduced in the same GNU make version. |
|
39 |
|
40 eval_available := |
|
41 $(eval eval_available := T) |
|
42 ifneq ($(eval_available),T) |
|
43 $(error FreeType's build system needs a Make program which supports $$(value)) |
|
44 endif |
|
45 |
|
46 |
|
47 .PHONY: all dist distclean modules setup |
|
48 |
|
49 |
|
50 # The `space' variable is used to avoid trailing spaces in defining the |
|
51 # `T' variable later. |
|
52 # |
|
53 empty := |
|
54 space := $(empty) $(empty) |
|
55 |
|
56 |
|
57 # The main configuration file, defining the `XXX_MODULES' variables. We |
|
58 # prefer a `modules.cfg' file in OBJ_DIR over TOP_DIR. |
|
59 # |
|
60 ifndef MODULES_CFG |
|
61 MODULES_CFG := $(TOP_DIR)/modules.cfg |
|
62 ifneq ($(wildcard $(OBJ_DIR)/modules.cfg),) |
|
63 MODULES_CFG := $(OBJ_DIR)/modules.cfg |
|
64 endif |
|
65 endif |
|
66 |
|
67 |
|
68 # FTMODULE_H, as its name suggests, indicates where the FreeType module |
|
69 # class file resides. |
|
70 # |
|
71 FTMODULE_H ?= $(OBJ_DIR)/ftmodule.h |
|
72 |
|
73 |
|
74 include $(MODULES_CFG) |
|
75 |
|
76 |
|
77 # The list of modules we are using. |
|
78 # |
|
79 MODULES := $(FONT_MODULES) \ |
|
80 $(HINTING_MODULES) \ |
|
81 $(RASTER_MODULES) \ |
|
82 $(AUX_MODULES) |
|
83 |
|
84 |
|
85 CONFIG_MK ?= config.mk |
|
86 |
|
87 # If no configuration sub-makefile is present, or if `setup' is the target |
|
88 # to be built, run the auto-detection rules to figure out which |
|
89 # configuration rules file to use. |
|
90 # |
|
91 # Note that the configuration file is put in the current directory, which is |
|
92 # not necessarily $(TOP_DIR). |
|
93 |
|
94 # If `config.mk' is not present, set `check_platform'. |
|
95 # |
|
96 ifeq ($(wildcard $(CONFIG_MK)),) |
|
97 check_platform := 1 |
|
98 endif |
|
99 |
|
100 # If `setup' is one of the targets requested, set `check_platform'. |
|
101 # |
|
102 ifneq ($(findstring setup,$(MAKECMDGOALS)),) |
|
103 check_platform := 1 |
|
104 endif |
|
105 |
|
106 # Include the automatic host platform detection rules when we need to |
|
107 # check the platform. |
|
108 # |
|
109 ifdef check_platform |
|
110 |
|
111 all modules: setup |
|
112 |
|
113 include $(TOP_DIR)/builds/detect.mk |
|
114 |
|
115 # This rule makes sense for Unix only to remove files created by a run of |
|
116 # the configure script which hasn't been successful (so that no |
|
117 # `config.mk' has been created). It uses the built-in $(RM) command of |
|
118 # GNU make. Similarly, `nul' is created if e.g. `make setup windows' has |
|
119 # been erroneously used. |
|
120 # |
|
121 # Note: This test is duplicated in `builds/unix/detect.mk'. |
|
122 # |
|
123 is_unix := $(strip $(wildcard /sbin/init) \ |
|
124 $(wildcard /usr/sbin/init) \ |
|
125 $(wildcard /dev/null) \ |
|
126 $(wildcard /hurd/auth)) |
|
127 ifneq ($(is_unix),) |
|
128 |
|
129 distclean: |
|
130 $(RM) builds/unix/config.cache |
|
131 $(RM) builds/unix/config.log |
|
132 $(RM) builds/unix/config.status |
|
133 $(RM) builds/unix/unix-def.mk |
|
134 $(RM) builds/unix/unix-cc.mk |
|
135 $(RM) builds/unix/freetype2.pc |
|
136 $(RM) nul |
|
137 |
|
138 endif # test is_unix |
|
139 |
|
140 # IMPORTANT: |
|
141 # |
|
142 # `setup' must be defined by the host platform detection rules to create |
|
143 # the `config.mk' file in the current directory. |
|
144 |
|
145 else |
|
146 |
|
147 # A configuration sub-Makefile is present -- simply run it. |
|
148 # |
|
149 all: single |
|
150 |
|
151 BUILD_PROJECT := yes |
|
152 include $(CONFIG_MK) |
|
153 |
|
154 endif # test check_platform |
|
155 |
|
156 |
|
157 # We always need the list of modules in ftmodule.h. |
|
158 # |
|
159 all setup: $(FTMODULE_H) |
|
160 |
|
161 |
|
162 # The `modules' target unconditionally rebuilds the module list. |
|
163 # |
|
164 modules: |
|
165 $(FTMODULE_H_INIT) |
|
166 $(FTMODULE_H_CREATE) |
|
167 $(FTMODULE_H_DONE) |
|
168 |
|
169 include $(TOP_DIR)/builds/modules.mk |
|
170 |
|
171 |
|
172 # This target builds the tarballs. |
|
173 # |
|
174 # Not to be run by a normal user -- there are no attempts to make it |
|
175 # generic. |
|
176 |
|
177 # we check for `dist', not `distclean' |
|
178 ifneq ($(findstring distx,$(MAKECMDGOALS)x),) |
|
179 FT_H := include/freetype.h |
|
180 |
|
181 major := $(shell sed -n 's/.*FREETYPE_MAJOR[^0-9]*\([0-9]\+\)/\1/p' < $(FT_H)) |
|
182 minor := $(shell sed -n 's/.*FREETYPE_MINOR[^0-9]*\([0-9]\+\)/\1/p' < $(FT_H)) |
|
183 patch := $(shell sed -n 's/.*FREETYPE_PATCH[^0-9]*\([0-9]\+\)/\1/p' < $(FT_H)) |
|
184 |
|
185 version := $(major).$(minor).$(patch) |
|
186 winversion := $(major)$(minor)$(patch) |
|
187 endif |
|
188 |
|
189 dist: |
|
190 -rm -rf tmp |
|
191 rm -f freetype-$(version).tar.gz |
|
192 rm -f freetype-$(version).tar.bz2 |
|
193 rm -f ft$(winversion).zip |
|
194 |
|
195 for d in `find . -wholename '*/.git' -prune \ |
|
196 -o -type f \ |
|
197 -o -print` ; do \ |
|
198 mkdir -p tmp/$$d ; \ |
|
199 done ; |
|
200 |
|
201 currdir=`pwd` ; \ |
|
202 for f in `find . -wholename '*/.git' -prune \ |
|
203 -o -name .gitignore \ |
|
204 -o -name .mailmap \ |
|
205 -o -type d \ |
|
206 -o -print` ; do \ |
|
207 ln -s $$currdir/$$f tmp/$$f ; \ |
|
208 done |
|
209 |
|
210 @# Prevent generation of .pyc files. Python follows (soft) links if |
|
211 @# the link's directory is write protected, so we have temporarily |
|
212 @# disable write access here too. |
|
213 chmod -w src/tools/docmaker |
|
214 |
|
215 cd tmp ; \ |
|
216 $(MAKE) devel ; \ |
|
217 $(MAKE) do-dist |
|
218 |
|
219 chmod +w src/tools/docmaker |
|
220 |
|
221 mv tmp freetype-$(version) |
|
222 |
|
223 tar cfh - freetype-$(version) \ |
|
224 | gzip -9 -c > freetype-$(version).tar.gz |
|
225 tar cfh - freetype-$(version) \ |
|
226 | bzip2 -c > freetype-$(version).tar.bz2 |
|
227 |
|
228 @# Use CR/LF for zip files. |
|
229 zip -lr9 ft$(winversion).zip freetype-$(version) |
|
230 |
|
231 rm -fr freetype-$(version) |
|
232 |
|
233 |
|
234 # The locations of the latest `config.guess' and `config.sub' versions (from |
|
235 # GNU `config' git repository), relative to the `tmp' directory used during |
|
236 # `make dist'. |
|
237 # |
|
238 CONFIG_GUESS = ~/git/config/config.guess |
|
239 CONFIG_SUB = ~/git/config/config.sub |
|
240 |
|
241 |
|
242 # Don't say `make do-dist'. Always use `make dist' instead. |
|
243 # |
|
244 .PHONY: do-dist |
|
245 |
|
246 do-dist: distclean refdoc |
|
247 @# Without removing the files, `autoconf' and friends follow links. |
|
248 rm -f builds/unix/aclocal.m4 |
|
249 rm -f builds/unix/configure.ac |
|
250 rm -f builds/unix/configure |
|
251 |
|
252 sh autogen.sh |
|
253 rm -rf builds/unix/autom4te.cache |
|
254 |
|
255 cp $(CONFIG_GUESS) builds/unix |
|
256 cp $(CONFIG_SUB) builds/unix |
|
257 |
|
258 # EOF |