1LIB_NAME := "libttfautohint"
2
3SRC := $(shell dirname $(realpath $(lastword $(MAKEFILE_LIST))))
4ROOT := $(shell dirname $(shell dirname $(SRC)))
5BUILD := $(ROOT)/build
6TMP := $(BUILD)/temp
7PREFIX := $(BUILD)/local
8
9CPPFLAGS := -I$(PREFIX)/include
10CFLAGS := -g -O2 -fPIC
11CXXFLAGS := -g -O2 -fPIC
12LDFLAGS := -fPIC -L$(PREFIX)/lib -L$(PREFIX)/lib64
13
14# on Windows, libtool cannot be used to build the ttfautohint.dll, we run
15# dllwrap ourselves on the static libraries, so we --disable-shared
16# https://lists.gnu.org/archive/html/freetype-devel/2017-12/msg00013.html
17# http://lists.gnu.org/archive/html/libtool/2017-12/msg00003.html
18LIBTTFAUTOHINT_OPTIONS := --enable-static
19ifeq ($(OS), Windows_NT)
20  LIBTTFAUTOHINT_OPTIONS += --disable-shared
21  LIBTTFAUTOHINT := "$(LIB_NAME).dll"
22else
23  LIBTTFAUTOHINT_OPTIONS += --enable-shared
24  ifeq ($(shell uname -s), Darwin)
25    LIBTTFAUTOHINT := "$(LIB_NAME).dylib"
26    # on macOS, we want a 64-bit only lib targeting >= 10.9, since harfbuzz >= 2.4
27    # requires c++11
28    MACOSX_DEPLOYMENT_TARGET ?= 10.9
29    CFLAGS   += -m64 -arch x86_64 -arch arm64 -mmacosx-version-min=$(MACOSX_DEPLOYMENT_TARGET)
30    CXXFLAGS += -m64 -arch x86_64 -arch arm64 -mmacosx-version-min=$(MACOSX_DEPLOYMENT_TARGET)
31    LDFLAGS  += -m64 -arch x86_64 -arch arm64 -mmacosx-version-min=$(MACOSX_DEPLOYMENT_TARGET)
32  else ifeq ($(shell uname -s), Linux)
33    LIBTTFAUTOHINT := "$(LIB_NAME).so"
34  endif
35endif
36
37all: libttfautohint
38
39libttfautohint: $(PREFIX)/lib/$(LIBTTFAUTOHINT)
40
41freetype: $(TMP)/.freetype-stamp
42
43harfbuzz: $(TMP)/.harfbuzz-stamp
44
45ttfautohint: $(TMP)/.ttfautohint-stamp
46
47$(TMP)/.freetype-stamp:
48	cd $(SRC)/freetype2; ./autogen.sh
49	@rm -rf $(TMP)/freetype
50	@mkdir -p $(TMP)/freetype
51	cd $(TMP)/freetype; $(SRC)/freetype2/configure \
52	  --without-bzip2 \
53	  --without-png \
54	  --without-zlib \
55	  --without-harfbuzz \
56	  --prefix="$(PREFIX)" \
57	  --enable-static \
58	  --disable-shared \
59	  --enable-freetype-config \
60	  PKG_CONFIG=" " \
61	  CFLAGS="$(CPPFLAGS) $(CFLAGS)" \
62	  CXXFLAGS="$(CPPFLAGS) $(CXXFLAGS)" \
63	  LDFLAGS="$(LDFLAGS)"
64	cd $(TMP)/freetype; make
65	cd $(TMP)/freetype; make install
66	@touch $(TMP)/.freetype-stamp
67
68$(TMP)/.harfbuzz-stamp: $(TMP)/.freetype-stamp
69	cd $(SRC)/harfbuzz; NOCONFIGURE=1 ./autogen.sh
70	@rm -rf $(TMP)/harfbuzz
71	@mkdir -p $(TMP)/harfbuzz
72	cd $(TMP)/harfbuzz; $(SRC)/harfbuzz/configure \
73	  --disable-dependency-tracking \
74	  --disable-gtk-doc-html \
75	  --with-glib=no \
76	  --with-cairo=no \
77	  --with-fontconfig=no \
78	  --with-icu=no \
79	  --prefix=$(PREFIX) \
80	  --enable-static \
81	  --disable-shared \
82	  CFLAGS="$(CPPFLAGS) $(CFLAGS)" \
83	  CXXFLAGS="$(CPPFLAGS) $(CXXFLAGS)" \
84	  LDFLAGS="$(LDFLAGS)" \
85	  PKG_CONFIG=true \
86	  FREETYPE_CFLAGS="$(CPPFLAGS)/freetype2" \
87	  FREETYPE_LIBS="$(LDFLAGS) -lfreetype"
88	cd $(TMP)/harfbuzz; make
89	cd $(TMP)/harfbuzz; make install
90	@touch $(TMP)/.harfbuzz-stamp
91
92$(TMP)/.ttfautohint-stamp: $(TMP)/.harfbuzz-stamp
93	cd $(SRC)/ttfautohint; ./bootstrap
94	@rm -rf $(TMP)/ttfautohint
95	@mkdir -p $(TMP)/ttfautohint
96	cd $(TMP)/ttfautohint; $(SRC)/ttfautohint/configure \
97          --disable-dependency-tracking \
98          --without-qt \
99          --without-doc \
100          --prefix="$(PREFIX)" \
101          $(LIBTTFAUTOHINT_OPTIONS) \
102          --with-freetype-config="$(PREFIX)/bin/freetype-config" \
103          CFLAGS="$(CPPFLAGS) -I$(TMP)/ttfautohint/lib $(CFLAGS)" \
104          CXXFLAGS="$(CPPFLAGS) -I$(TMP)/ttfautohint/lib $(CXXFLAGS)" \
105          LDFLAGS="$(LDFLAGS)" \
106          PKG_CONFIG=true \
107          HARFBUZZ_CFLAGS="$(CPPFLAGS)/harfbuzz" \
108          HARFBUZZ_LIBS="$(LDFLAGS) -lharfbuzz -lfreetype"
109	cd $(TMP)/ttfautohint; make
110	cd $(TMP)/ttfautohint; make install
111	@touch $(TMP)/.ttfautohint-stamp
112
113$(PREFIX)/lib/$(LIBTTFAUTOHINT): $(TMP)/.ttfautohint-stamp
114ifeq ($(OS), Windows_NT)
115	dllwrap -v --def $(SRC)/ttfautohint.def -o $@ \
116        $(PREFIX)/lib/libttfautohint.a \
117        $(PREFIX)/lib/libharfbuzz.a \
118        $(PREFIX)/lib/libfreetype.a
119endif
120
121clean:
122	@git submodule foreach git clean -fdx .
123	@rm -rf $(TMP) $(PREFIX)
124
125.PHONY: clean all libttfautohint freetype harfbuzz ttfautohint
126