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