8cfe4ac7c3825d3bb9fe4805077e6876137c908b
[platform/upstream/harfbuzz.git] / src / Makefile.am
1 # Process this file with automake to produce Makefile.in
2
3 SUBDIRS =
4 DIST_SUBDIRS =
5 BUILT_SOURCES =
6 EXTRA_DIST =
7 CLEANFILES =
8 DISTCLEANFILES =
9 MAINTAINERCLEANFILES =
10 DISTCHECK_CONFIGURE_FLAGS = --enable-introspection
11
12 # The following warning options are useful for debugging: -Wpadded
13 #AM_CXXFLAGS =
14
15 # Convenience targets:
16 lib: $(BUILT_SOURCES) libharfbuzz.la
17 fuzzing: $(BUILT_SOURCES) libharfbuzz-fuzzing.la
18
19 lib_LTLIBRARIES = libharfbuzz.la
20
21 include Makefile.sources
22
23 HBCFLAGS =
24 HBLIBS =
25 HBNONPCLIBS =
26 HBDEPS =
27 HBSOURCES =  $(HB_BASE_sources)
28 HBHEADERS = $(HB_BASE_headers)
29 HBNODISTHEADERS = $(HB_NODIST_headers)
30
31 if HAVE_OT
32 HBSOURCES += $(HB_OT_sources)
33 HBHEADERS += $(HB_OT_headers)
34 endif
35
36 if HAVE_FALLBACK
37 HBSOURCES += $(HB_FALLBACK_sources)
38 endif
39
40 if HAVE_PTHREAD
41 HBCFLAGS += $(PTHREAD_CFLAGS)
42 HBNONPCLIBS += $(PTHREAD_LIBS)
43 endif
44
45 if HAVE_GLIB
46 HBCFLAGS += $(GLIB_CFLAGS)
47 HBLIBS   += $(GLIB_LIBS)
48 HBDEPS   += $(GLIB_DEPS)
49 HBSOURCES += $(HB_GLIB_sources)
50 HBHEADERS += $(HB_GLIB_headers)
51 endif
52
53 if HAVE_FREETYPE
54 HBCFLAGS += $(FREETYPE_CFLAGS)
55 HBLIBS   += $(FREETYPE_LIBS)
56 # XXX
57 # The following creates a recursive dependency on FreeType if FreeType is
58 # built with HarfBuzz support enabled.  Newer pkg-config handles that just
59 # fine but pkg-config 0.26 as shipped in Ubuntu 14.04 crashes.  Remove
60 # in a year or two, or otherwise work around it...
61 #HBDEPS   += $(FREETYPE_DEPS)
62 HBSOURCES += $(HB_FT_sources)
63 HBHEADERS += $(HB_FT_headers)
64 endif
65
66 if HAVE_GRAPHITE2
67 HBCFLAGS += $(GRAPHITE2_CFLAGS)
68 HBLIBS   += $(GRAPHITE2_LIBS)
69 HBDEPS   += $(GRAPHITE2_DEPS)
70 HBSOURCES += $(HB_GRAPHITE2_sources)
71 HBHEADERS += $(HB_GRAPHITE2_headers)
72 endif
73
74 if HAVE_UNISCRIBE
75 HBCFLAGS += $(UNISCRIBE_CFLAGS)
76 HBNONPCLIBS += $(UNISCRIBE_LIBS)
77 HBSOURCES += $(HB_UNISCRIBE_sources)
78 HBHEADERS += $(HB_UNISCRIBE_headers)
79 endif
80
81 if HAVE_DIRECTWRITE
82 HBCFLAGS += $(DIRECTWRITE_CXXFLAGS)
83 HBNONPCLIBS += $(DIRECTWRITE_LIBS)
84 HBSOURCES += $(HB_DIRECTWRITE_sources)
85 HBHEADERS += $(HB_DIRECTWRITE_headers)
86 endif
87
88 if HAVE_CORETEXT
89 HBCFLAGS += $(CORETEXT_CFLAGS)
90 HBNONPCLIBS += $(CORETEXT_LIBS)
91 HBSOURCES += $(HB_CORETEXT_sources)
92 HBHEADERS += $(HB_CORETEXT_headers)
93 endif
94
95 if HAVE_UCDN
96 SUBDIRS += hb-ucdn
97 HBCFLAGS += -I$(srcdir)/hb-ucdn
98 HBLIBS   += hb-ucdn/libhb-ucdn.la
99 HBSOURCES += $(HB_UCDN_sources)
100 endif
101 DIST_SUBDIRS += hb-ucdn
102
103
104 # Put the library together
105
106 HBLIBS += $(HBNONPCLIBS)
107
108 if OS_WIN32
109 export_symbols = -export-symbols harfbuzz.def
110 harfbuzz_def_dependency = harfbuzz.def
111 libharfbuzz_la_LINK = $(CXXLINK) $(libharfbuzz_la_LDFLAGS)
112 else
113 # Use a C linker for GCC, not C++; Don't link to libstdc++
114 if HAVE_GCC
115 libharfbuzz_la_LINK = $(LINK) $(libharfbuzz_la_LDFLAGS)
116 else
117 libharfbuzz_la_LINK = $(CXXLINK) $(libharfbuzz_la_LDFLAGS)
118 endif
119 endif
120
121 libharfbuzz_la_SOURCES = $(HBSOURCES) $(HBHEADERS) $(HBNODISTHEADERS)
122 libharfbuzz_la_CPPFLAGS = $(HBCFLAGS)
123 libharfbuzz_la_LDFLAGS = $(AM_LDFLAGS) -version-info $(HB_LIBTOOL_VERSION_INFO) $(export_symbols) -no-undefined
124 libharfbuzz_la_LIBADD = $(HBLIBS)
125 EXTRA_libharfbuzz_la_DEPENDENCIES = $(harfbuzz_def_dependency)
126 pkginclude_HEADERS = $(HBHEADERS)
127 nodist_pkginclude_HEADERS = $(HBNODISTHEADERS)
128 pkgconfigdir = $(libdir)/pkgconfig
129 pkgconfig_DATA = harfbuzz.pc
130 EXTRA_DIST += harfbuzz.pc.in
131
132 FUZZING_CPPFLAGS= \
133         -DHB_NDEBUG \
134         -DHB_MAX_NESTING_LEVEL=3 \
135         -DHB_SANITIZE_MAX_EDITS=3 \
136         -DHB_BUFFER_MAX_EXPANSION_FACTOR=3 \
137         -DHB_BUFFER_MAX_LEN_MIN=8 \
138         -DHB_BUFFER_MAX_LEN_DEFAULT=128 \
139         $(NULL)
140 EXTRA_LTLIBRARIES = libharfbuzz-fuzzing.la
141 libharfbuzz_fuzzing_la_LINK = $(libharfbuzz_la_LINK)
142 libharfbuzz_fuzzing_la_SOURCES = $(libharfbuzz_la_SOURCES)
143 libharfbuzz_fuzzing_la_CPPFLAGS = $(libharfbuzz_la_CPPFLAGS) $(FUZZING_CPPFLAGS)
144 libharfbuzz_fuzzing_la_LDFLAGS = $(libharfbuzz_la_LDFLAGS)
145 libharfbuzz_fuzzing_la_LIBADD = $(libharfbuzz_la_LIBADD)
146 EXTRA_libharfbuzz_fuzzing_la_DEPENDENCIES = $(EXTRA_libharfbuzz_la_DEPENDENCIES)
147 CLEANFILES += libharfbuzz-fuzzing.la
148
149 if HAVE_ICU
150 if HAVE_ICU_BUILTIN
151 HBCFLAGS += $(ICU_CFLAGS)
152 HBLIBS += $(ICU_LIBS)
153 HBSOURCES += $(HB_ICU_sources)
154 HBHEADERS += $(HB_ICU_headers)
155 else
156 lib_LTLIBRARIES += libharfbuzz-icu.la
157 libharfbuzz_icu_la_SOURCES = $(HB_ICU_sources)
158 libharfbuzz_icu_la_CPPFLAGS = $(ICU_CFLAGS)
159 libharfbuzz_icu_la_LDFLAGS = $(AM_LDFLAGS) -version-info $(HB_LIBTOOL_VERSION_INFO) -no-undefined
160 libharfbuzz_icu_la_LIBADD = $(ICU_LIBS) libharfbuzz.la
161 pkginclude_HEADERS += $(HB_ICU_headers)
162 pkgconfig_DATA += harfbuzz-icu.pc
163 endif
164 endif
165 EXTRA_DIST += harfbuzz-icu.pc.in
166
167 if HAVE_GOBJECT
168 lib_LTLIBRARIES += libharfbuzz-gobject.la
169 libharfbuzz_gobject_la_SOURCES = $(HB_GOBJECT_sources)
170 nodist_libharfbuzz_gobject_la_SOURCES = $(HB_GOBJECT_ENUM_sources)
171 libharfbuzz_gobject_la_CPPFLAGS = $(GOBJECT_CFLAGS)
172 libharfbuzz_gobject_la_LDFLAGS = $(AM_LDFLAGS) -version-info $(HB_LIBTOOL_VERSION_INFO) -no-undefined
173 libharfbuzz_gobject_la_LIBADD = $(GOBJECT_LIBS) libharfbuzz.la
174 pkginclude_HEADERS += $(HB_GOBJECT_headers)
175 nodist_pkginclude_HEADERS += $(HB_GOBJECT_ENUM_headers)
176 pkgconfig_DATA += harfbuzz-gobject.pc
177
178 BUILT_SOURCES += \
179         $(HB_GOBJECT_ENUM_sources) \
180         $(HB_GOBJECT_ENUM_headers) \
181         $(NULL)
182 DISTCLEANFILES += \
183         $(HB_GOBJECT_ENUM_sources) \
184         $(HB_GOBJECT_ENUM_headers) \
185         $(NULL)
186 hb-gobject-enums.%: hb-gobject-enums.%.tmpl $(HBHEADERS)
187         $(AM_V_GEN) $(GLIB_MKENUMS) \
188                 --identifier-prefix hb_ --symbol-prefix hb_gobject \
189                 --template $^ | \
190         sed 's/_t_get_type/_get_type/g; s/_T (/ (/g' > "$@" \
191         || ($(RM) "$@"; false)
192 endif
193 EXTRA_DIST += \
194         harfbuzz-gobject.pc.in \
195         hb-gobject-enums.cc.tmpl \
196         hb-gobject-enums.h.tmpl \
197         $(NULL)
198
199
200 %.pc: %.pc.in $(top_builddir)/config.status
201         $(AM_V_GEN) \
202         $(SED)  -e 's@%prefix%@$(prefix)@g' \
203                 -e 's@%exec_prefix%@$(exec_prefix)@g' \
204                 -e 's@%libdir%@$(libdir)@g' \
205                 -e 's@%includedir%@$(includedir)@g' \
206                 -e 's@%libs_private%@$(HBNONPCLIBS)@g' \
207                 -e 's@%requires_private%@$(HBDEPS)@g' \
208                 -e 's@%VERSION%@$(VERSION)@g' \
209         "$<" > "$@" \
210         || ($(RM) "$@"; false)
211
212 CLEANFILES += $(pkgconfig_DATA)
213
214
215 CLEANFILES += harfbuzz.def
216 harfbuzz.def: $(HBHEADERS) $(HBNODISTHEADERS)
217         $(AM_V_GEN) (echo EXPORTS; \
218         (cat $^ || echo 'hb_ERROR ()' ) | \
219         $(EGREP) '^hb_.* \(' | \
220         sed -e 's/ (.*//' | \
221         LANG=C sort; \
222         echo LIBRARY libharfbuzz-0.dll; \
223         ) >"$@"
224         @ ! grep -q hb_ERROR "$@" \
225         || ($(RM) "$@"; false)
226
227
228 GENERATORS = \
229         gen-arabic-table.py \
230         gen-indic-table.py \
231         gen-use-table.py \
232         $(NULL)
233 EXTRA_DIST += $(GENERATORS)
234
235 unicode-tables: arabic-table indic-table use-table
236
237 arabic-table: gen-arabic-table.py ArabicShaping.txt UnicodeData.txt Blocks.txt
238         $(AM_V_GEN) $(builddir)/$^ > hb-ot-shape-complex-arabic-table.hh \
239         || ($(RM) hb-ot-shape-complex-arabic-table.hh; false)
240
241 indic-table: gen-indic-table.py IndicSyllabicCategory-7.0.0.txt IndicMatraCategory-7.0.0.txt Blocks.txt
242         $(AM_V_GEN) $(builddir)/$^ > hb-ot-shape-complex-indic-table.cc \
243         || ($(RM) hb-ot-shape-complex-indic-table.cc; false)
244
245 use-table: gen-use-table.py IndicSyllabicCategory.txt IndicPositionalCategory.txt UnicodeData.txt Blocks.txt
246         $(AM_V_GEN) $(builddir)/$^ > hb-ot-shape-complex-use-table.cc \
247         || ($(RM) hb-ot-shape-complex-use-table.cc; false)
248
249 built-sources: $(BUILT_SOURCES)
250
251 .PHONY: unicode-tables arabic-table indic-table use-table built-sources
252
253 RAGEL_GENERATED = \
254         $(srcdir)/hb-buffer-deserialize-json.hh \
255         $(srcdir)/hb-buffer-deserialize-text.hh \
256         $(srcdir)/hb-ot-shape-complex-indic-machine.hh \
257         $(srcdir)/hb-ot-shape-complex-myanmar-machine.hh \
258         $(srcdir)/hb-ot-shape-complex-use-machine.hh \
259         $(NULL)
260 BUILT_SOURCES += $(RAGEL_GENERATED)
261 EXTRA_DIST += \
262         hb-buffer-deserialize-json.rl \
263         hb-buffer-deserialize-text.rl \
264         hb-ot-shape-complex-indic-machine.rl \
265         hb-ot-shape-complex-myanmar-machine.rl \
266         hb-ot-shape-complex-use-machine.rl \
267         $(NULL)
268 MAINTAINERCLEANFILES += $(RAGEL_GENERATED)
269 $(srcdir)/%.hh: $(srcdir)/%.rl
270         $(AM_V_GEN)(cd $(srcdir) && $(RAGEL) -e -F1 -o "$*.hh" "$*.rl") \
271         || ($(RM) "$@"; false)
272
273 noinst_PROGRAMS = \
274         main \
275         test \
276         test-buffer-serialize \
277         test-size-params \
278         test-would-substitute \
279         $(NULL)
280 bin_PROGRAMS =
281
282 main_SOURCES = main.cc
283 main_CPPFLAGS = $(HBCFLAGS)
284 main_LDADD = libharfbuzz.la $(HBLIBS)
285
286 test_SOURCES = test.cc
287 test_CPPFLAGS = $(HBCFLAGS) $(FREETYPE_CFLAGS)
288 test_LDADD = libharfbuzz.la $(HBLIBS) $(FREETYPE_LIBS)
289
290 test_would_substitute_SOURCES = test-would-substitute.cc
291 test_would_substitute_CPPFLAGS = $(HBCFLAGS) $(FREETYPE_CFLAGS)
292 test_would_substitute_LDADD = libharfbuzz.la $(HBLIBS) $(FREETYPE_LIBS)
293
294 test_size_params_SOURCES = test-size-params.cc
295 test_size_params_CPPFLAGS = $(HBCFLAGS)
296 test_size_params_LDADD = libharfbuzz.la $(HBLIBS)
297
298 test_buffer_serialize_SOURCES = test-buffer-serialize.cc
299 test_buffer_serialize_CPPFLAGS = $(HBCFLAGS)
300 test_buffer_serialize_LDADD = libharfbuzz.la $(HBLIBS)
301
302 dist_check_SCRIPTS = \
303         check-c-linkage-decls.sh \
304         check-defs.sh \
305         check-header-guards.sh \
306         check-includes.sh \
307         check-libstdc++.sh \
308         check-static-inits.sh \
309         check-symbols.sh \
310         $(NULL)
311
312 check_PROGRAMS = \
313         test-ot-tag \
314         $(NULL)
315 test_ot_tag_SOURCES = hb-ot-tag.cc
316 test_ot_tag_CPPFLAGS = $(HBCFLAGS) -DMAIN
317 test_ot_tag_LDADD = libharfbuzz.la $(HBLIBS)
318
319 TESTS = $(dist_check_SCRIPTS) $(check_PROGRAMS)
320 TESTS_ENVIRONMENT = \
321         srcdir="$(srcdir)" \
322         MAKE="$(MAKE) $(AM_MAKEFLAGS)" \
323         HBSOURCES="$(HBSOURCES)" \
324         HBHEADERS="$(HBHEADERS) $(HBNODISTHEADERS)" \
325         $(NULL)
326
327 if HAVE_INTROSPECTION
328
329 -include $(INTROSPECTION_MAKEFILE)
330 INTROSPECTION_GIRS = HarfBuzz-0.0.gir # What does the 0 mean anyway?!
331 INTROSPECTION_SCANNER_ARGS = -I$(srcdir) -n hb --identifier-prefix=hb_ --warn-all
332 INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir)
333 INTROSPECTION_SCANNER_ENV = CC="$(CC)"
334
335 HarfBuzz-0.0.gir: libharfbuzz.la libharfbuzz-gobject.la
336 HarfBuzz_0_0_gir_INCLUDES = GObject-2.0
337 HarfBuzz_0_0_gir_CFLAGS = \
338         $(INCLUDES) \
339         $(HBCFLAGS) \
340         -DHB_H \
341         -DHB_H_IN \
342         -DHB_OT_H \
343         -DHB_OT_H_IN \
344         -DHB_GOBJECT_H \
345         -DHB_GOBJECT_H_IN \
346         -DHB_EXTERN= \
347         $(NULL)
348 HarfBuzz_0_0_gir_LIBS = \
349         libharfbuzz.la \
350         libharfbuzz-gobject.la \
351         $(NULL)
352 HarfBuzz_0_0_gir_FILES = \
353         $(HBHEADERS) \
354         $(HBNODISTHEADERS) \
355         $(HBSOURCES) \
356         $(HB_GOBJECT_ENUM_sources) \
357         $(HB_GOBJECT_ENUM_headers) \
358         $(HB_GOBJECT_sources) \
359         $(HB_GOBJECT_STRUCTS_headers) \
360         $(NULL)
361
362 girdir = $(datadir)/gir-1.0
363 gir_DATA = $(INTROSPECTION_GIRS)
364
365 typelibdir = $(libdir)/girepository-1.0
366 typelib_DATA = $(INTROSPECTION_GIRS:.gir=.typelib)
367
368 CLEANFILES += $(gir_DATA) $(typelib_DATA)
369
370 endif
371
372 -include $(top_srcdir)/git.mk