blob: f8306a03b71601ca262d1723577e5da9e6fa98d1 [file] [log] [blame]
David Turner046f7a02000-09-15 22:42:06 +00001#
2# FreeType build system -- top-level sub-Makefile
3#
4
Werner Lemberg47a5f412000-10-17 03:38:43 +00005
Werner Lemberg59939242006-01-31 20:17:42 +00006# Copyright 1996-2000, 2001, 2003, 2006 by
Werner Lemberg47a5f412000-10-17 03:38:43 +00007# 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.
David Turner046f7a02000-09-15 22:42:06 +000014
15
16# This file is designed for GNU Make, do not use it with another Make tool!
17#
18# It works as follows:
19#
Werner Lemberg1639c792006-05-06 16:44:58 +000020# - 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.
David Turner046f7a02000-09-15 22:42:06 +000023#
Werner Lemberg1639c792006-05-06 16:44:58 +000024# A summary of the detection is displayed, and the file `config.mk' is
25# created in the current directory.
David Turner046f7a02000-09-15 22:42:06 +000026#
Werner Lemberg1639c792006-05-06 16:44:58 +000027# - 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.
David Turner046f7a02000-09-15 22:42:06 +000032#
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
Werner Lemberge0d15592006-05-10 13:44:47 +000037.PHONY: all dist distclean modules setup
David Turner046f7a02000-09-15 22:42:06 +000038
Werner Lemberg59939242006-01-31 20:17:42 +000039
Werner Lemberg91481f82000-11-04 23:41:02 +000040# The `space' variable is used to avoid trailing spaces in defining the
41# `T' variable later.
42#
43empty :=
44space := $(empty) $(empty)
45
46
Werner Lemberg59939242006-01-31 20:17:42 +000047# The main configuration file, defining the `XXX_MODULES' variables. We
48# prefer a `modules.cfg' file in OBJ_DIR over TOP_DIR.
49#
50ifndef MODULES_CFG
51 MODULES_CFG := $(TOP_DIR)/modules.cfg
52 ifneq ($(wildcard $(OBJ_DIR)/modules.cfg),)
53 MODULES_CFG := $(OBJ_DIR)/modules.cfg
54 endif
55endif
56
57
58# FTMODULE_H, as its name suggests, indicates where the FreeType module
Werner Lemberg1639c792006-05-06 16:44:58 +000059# class file resides.
Werner Lemberg59939242006-01-31 20:17:42 +000060#
Werner Lemberg8a4de0d2006-02-01 07:52:11 +000061FTMODULE_H ?= $(OBJ_DIR)/ftmodule.h
Werner Lemberg59939242006-01-31 20:17:42 +000062
63
64include $(MODULES_CFG)
65
66
67# The list of modules we are using.
68#
69MODULES := $(FONT_MODULES) \
70 $(HINTING_MODULES) \
71 $(RASTER_MODULES) \
72 $(AUX_MODULES)
73
74
Werner Lemberg8a4de0d2006-02-01 07:52:11 +000075CONFIG_MK ?= config.mk
David Turner046f7a02000-09-15 22:42:06 +000076
77# If no configuration sub-makefile is present, or if `setup' is the target
78# to be built, run the auto-detection rules to figure out which
79# configuration rules file to use.
80#
81# Note that the configuration file is put in the current directory, which is
Werner Lemberg89df58f2002-06-14 08:09:25 +000082# not necessarily $(TOP_DIR).
David Turner046f7a02000-09-15 22:42:06 +000083
84# If `config.mk' is not present, set `check_platform'.
85#
86ifeq ($(wildcard $(CONFIG_MK)),)
87 check_platform := 1
88endif
89
90# If `setup' is one of the targets requested, set `check_platform'.
91#
92ifneq ($(findstring setup,$(MAKECMDGOALS)),)
93 check_platform := 1
94endif
95
96# Include the automatic host platform detection rules when we need to
97# check the platform.
98#
99ifdef check_platform
100
Werner Lemberg59939242006-01-31 20:17:42 +0000101 all modules: setup
David Turner046f7a02000-09-15 22:42:06 +0000102
Werner Lemberg89df58f2002-06-14 08:09:25 +0000103 include $(TOP_DIR)/builds/detect.mk
David Turner046f7a02000-09-15 22:42:06 +0000104
David Turner046f7a02000-09-15 22:42:06 +0000105 # This rule makes sense for Unix only to remove files created by a run
106 # of the configure script which hasn't been successful (so that no
107 # `config.mk' has been created). It uses the built-in $(RM) command of
Werner Lemberg594f0c92000-12-20 22:09:41 +0000108 # GNU make. Similarly, `nul' is created if e.g. `make setup win32' has
109 # been erroneously used.
David Turner046f7a02000-09-15 22:42:06 +0000110 #
Werner Lemberg59939242006-01-31 20:17:42 +0000111 # Note: This test is duplicated in `builds/unix/detect.mk'.
Werner Lemberga64c55b2001-05-12 06:40:50 +0000112 #
Werner Lemberg858f3102003-06-09 04:46:30 +0000113 is_unix := $(strip $(wildcard /sbin/init) \
114 $(wildcard /usr/sbin/init) \
115 $(wildcard /hurd/auth))
David Turnerebe85f52001-05-11 14:25:57 +0000116 ifneq ($(is_unix),)
117
David Turnerebe85f52001-05-11 14:25:57 +0000118 distclean:
Werner Lembergbd547dc2000-09-22 21:23:29 +0000119 $(RM) builds/unix/config.cache
120 $(RM) builds/unix/config.log
121 $(RM) builds/unix/config.status
122 $(RM) builds/unix/unix-def.mk
123 $(RM) builds/unix/unix-cc.mk
Werner Lemberg5e3614f2003-09-12 19:38:13 +0000124 $(RM) builds/unix/freetype2.pc
Werner Lemberg594f0c92000-12-20 22:09:41 +0000125 $(RM) nul
David Turner046f7a02000-09-15 22:42:06 +0000126
David Turnerebe85f52001-05-11 14:25:57 +0000127 endif # test is_unix
128
David Turner046f7a02000-09-15 22:42:06 +0000129 # IMPORTANT:
130 #
131 # `setup' must be defined by the host platform detection rules to create
132 # the `config.mk' file in the current directory.
133
134else
135
136 # A configuration sub-Makefile is present -- simply run it.
137 #
138 all: single
139
David Turner046f7a02000-09-15 22:42:06 +0000140 BUILD_PROJECT := yes
141 include $(CONFIG_MK)
142
143endif # test check_platform
144
Werner Lemberg858f3102003-06-09 04:46:30 +0000145
Werner Lemberg59939242006-01-31 20:17:42 +0000146# We always need the list of modules in ftmodule.h.
147#
148all setup: $(FTMODULE_H)
149
150
151# The `modules' target unconditionally rebuilds the module list.
152#
153modules:
154 $(FTMODULE_H_INIT)
155 $(FTMODULE_H_CREATE)
156 $(FTMODULE_H_DONE)
157
158include $(TOP_DIR)/builds/modules.mk
159
160
Werner Lemberge0d15592006-05-10 13:44:47 +0000161# This target builds the tarballs.
162#
163# Not to be run by a normal user -- there are no attempts to make it
164# generic.
165
Werner Lemberg4e1d6c02006-12-09 08:20:37 +0000166ifneq ($(findstring dist,$(MAKECMDGOALS)),)
167 FT_H := include/freetype/freetype.h
168
169 major := $(shell sed -n 's/.*FREETYPE_MAJOR.*\([0-9]\+\)/\1/p' < $(FT_H))
170 minor := $(shell sed -n 's/.*FREETYPE_MINOR.*\([0-9]\+\)/\1/p' < $(FT_H))
171 patch := $(shell sed -n 's/.*FREETYPE_PATCH.*\([0-9]\+\)/\1/p' < $(FT_H))
172
173 version := $(major).$(minor).$(patch)
174 winversion := $(major)$(minor)$(patch)
175endif
176
Werner Lemberge0d15592006-05-10 13:44:47 +0000177dist:
178 -rm -rf tmp
Werner Lemberg4e1d6c02006-12-09 08:20:37 +0000179 rm -f freetype-$(version).tar.gz
180 rm -f freetype-$(version).tar.bz2
181 rm -f ft$(winversion).zip
Werner Lemberge0d15592006-05-10 13:44:47 +0000182
183 for d in `find . -wholename '*/CVS' -prune \
184 -o -type f \
185 -o -print` ; do \
186 mkdir -p tmp/$$d ; \
187 done ;
188
189 currdir=`pwd` ; \
190 for f in `find . -wholename '*/CVS' -prune \
191 -o -name .cvsignore \
192 -o -type d \
193 -o -print` ; do \
194 ln -s $$currdir/$$f tmp/$$f ; \
195 done
196
197 @# Prevent generation of .pyc files. Python follows (soft) links if
198 @# the link's directory is write protected, so we have temporarily
199 @# disable write access here too.
200 chmod -w src/tools/docmaker
201
202 cd tmp ; \
203 $(MAKE) devel ; \
204 $(MAKE) do-dist
205
206 chmod +w src/tools/docmaker
207
Werner Lemberg4e1d6c02006-12-09 08:20:37 +0000208 mv tmp freetype-$(version)
Werner Lemberge0d15592006-05-10 13:44:47 +0000209
Werner Lemberg4e1d6c02006-12-09 08:20:37 +0000210 tar cfh - freetype-$(version) \
211 | gzip -c > freetype-$(version).tar.gz
212 tar cfh - freetype-$(version) \
213 | bzip2 -c > freetype-$(version).tar.bz2
Werner Lemberge0d15592006-05-10 13:44:47 +0000214
215 @# Use CR/LF for zip files.
Werner Lemberg4e1d6c02006-12-09 08:20:37 +0000216 zip -lr ft$(winversion).zip freetype-$(version)
Werner Lemberge0d15592006-05-10 13:44:47 +0000217
Werner Lemberg4e1d6c02006-12-09 08:20:37 +0000218 rm -fr freetype-$(version)
Werner Lemberge0d15592006-05-10 13:44:47 +0000219
220
221# The locations of the latest `config.guess' and `config.sub' versions (from
222# GNU `config' CVS), relative to the `tmp' directory used during `make dist'.
223#
224CONFIG_GUESS = ../../../config/config.guess
225CONFIG_SUB = ../../../config/config.sub
226
227
228# Don't say `make do-dist'. Always use `make dist' instead.
229#
230.PHONY: do-dist
231
232do-dist: distclean refdoc
233 @# Without removing the files, `autoconf' and friends follow links.
234 rm -f builds/unix/aclocal.m4
Werner Lemberg3d69a192006-05-10 13:47:22 +0000235 rm -f builds/unix/configure.ac
236 rm -f builds/unix/configure
Werner Lemberge0d15592006-05-10 13:44:47 +0000237
238 sh autogen.sh
239 rm -rf builds/unix/autom4te.cache
240
241 cp $(CONFIG_GUESS) builds/unix
242 cp $(CONFIG_SUB) builds/unix
243
David Turner046f7a02000-09-15 22:42:06 +0000244# EOF