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