meson: Maintain macOS ABI through dylib versioning
[platform/upstream/gstreamer.git] / gst / meson.build
1 gst_sources = [
2   'gst.c',
3   'gstobject.c',
4   'gstallocator.c',
5   'gstbin.c',
6   'gstbuffer.c',
7   'gstbufferlist.c',
8   'gstbufferpool.c',
9   'gstbus.c',
10   'gstcaps.c',
11   'gstcapsfeatures.c',
12   'gstchildproxy.c',
13   'gstclock.c',
14   'gstcontext.c',
15   'gstcontrolbinding.c',
16   'gstcontrolsource.c',
17   'gstdatetime.c',
18   'gstdebugutils.c',
19   'gstdevice.c',
20   'gstdeviceprovider.c',
21   'gstdeviceproviderfactory.c',
22   'gstdynamictypefactory.c',
23   'gstelement.c',
24   'gstelementfactory.c',
25   'gsterror.c',
26   'gstevent.c',
27   'gstformat.c',
28   'gstghostpad.c',
29   'gstdevicemonitor.c',
30   'gstinfo.c',
31   'gstiterator.c',
32   'gstatomicqueue.c',
33   'gstmessage.c',
34   'gstmeta.c',
35   'gstmemory.c',
36   'gstminiobject.c',
37   'gstpad.c',
38   'gstpadtemplate.c',
39   'gstparamspecs.c',
40   'gstpipeline.c',
41   'gstplugin.c',
42   'gstpluginfeature.c',
43   'gstpluginloader.c',
44   'gstpoll.c',
45   'gstpreset.c',
46   'gstprotection.c',
47   'gstquark.c',
48   'gstquery.c',
49   'gstregistry.c',
50   'gstregistrychunks.c',
51   'gstpromise.c',
52   'gstsample.c',
53   'gstsegment.c',
54   'gststreamcollection.c',
55   'gststreams.c',
56   'gststructure.c',
57   'gstsystemclock.c',
58   'gsttaglist.c',
59   'gsttagsetter.c',
60   'gsttask.c',
61   'gsttaskpool.c',
62   'gsttoc.c',
63   'gsttocsetter.c',
64   'gsttracer.c',
65   'gsttracerfactory.c',
66   'gsttracerrecord.c',
67   'gsttracerutils.c',
68   'gsttypefind.c',
69   'gsttypefindfactory.c',
70   'gsturi.c',
71   'gstutils.c',
72   'gstvalue.c',
73   'gstparse.c',
74 ]
75
76 gst_headers = [
77   'gst.h',
78   'glib-compat.h',
79   'gstobject.h',
80   'gstallocator.h',
81   'gstbin.h',
82   'gstbuffer.h',
83   'gstbufferlist.h',
84   'gstbufferpool.h',
85   'gstbus.h',
86   'gstcaps.h',
87   'gstcapsfeatures.h',
88   'gstchildproxy.h',
89   'gstclock.h',
90   'gstcompat.h',
91   'gstcontext.h',
92   'gstcontrolbinding.h',
93   'gstcontrolsource.h',
94   'gstdatetime.h',
95   'gstdebugutils.h',
96   'gstelement.h',
97   'gstelementmetadata.h',
98   'gstdevice.h',
99   'gstdeviceprovider.h',
100   'gstdeviceproviderfactory.h',
101   'gstdynamictypefactory.h',
102   'gstelementfactory.h',
103   'gsterror.h',
104   'gstevent.h',
105   'gstformat.h',
106   'gstghostpad.h',
107   'gstdevicemonitor.h',
108   'gstinfo.h',
109   'gstiterator.h',
110   'gstatomicqueue.h',
111   'gstmacros.h',
112   'gstmessage.h',
113   'gstmeta.h',
114   'gstmemory.h',
115   'gstminiobject.h',
116   'gstpad.h',
117   'gstpadtemplate.h',
118   'gstparamspecs.h',
119   'gstpipeline.h',
120   'gstplugin.h',
121   'gstpluginfeature.h',
122   'gstpoll.h',
123   'gstpreset.h',
124   'gstprotection.h',
125   'gstquery.h',
126   'gstpromise.h',
127   'gstsample.h',
128   'gstsegment.h',
129   'gststreamcollection.h',
130   'gststreams.h',
131   'gststructure.h',
132   'gstsystemclock.h',
133   'gsttaglist.h',
134   'gsttagsetter.h',
135   'gsttask.h',
136   'gsttaskpool.h',
137   'gsttoc.h',
138   'gsttocsetter.h',
139   'gsttracer.h',
140   'gsttracerfactory.h',
141   'gsttracerrecord.h',
142   'gsttypefind.h',
143   'gsttypefindfactory.h',
144   'gsturi.h',
145   'gstutils.h',
146   'gstvalue.h',
147   'gstregistry.h',
148   'gstparse.h',
149   'math-compat.h',
150 ]
151 install_headers(gst_headers, subdir : 'gstreamer-1.0/gst')
152
153 gst_registry = get_option('registry')
154 if gst_registry
155   gst_registry_sources = ['gstregistrybinary.c']
156 else
157   gst_registry_sources = []
158 endif
159
160 # Make copy so configure_file consumes the copy and we can
161 # still add to the original cdata later.
162 gst_cdata = cdata
163
164 if gst_debug
165   gst_cdata.set('GST_DISABLE_GST_DEBUG_DEFINE', '#undef GST_DISABLE_GST_DEBUG')
166 else
167   gst_cdata.set('GST_DISABLE_GST_DEBUG_DEFINE', '#define GST_DISABLE_GST_DEBUG 1')
168 endif
169
170 if gst_registry
171   gst_cdata.set('GST_DISABLE_REGISTRY_DEFINE', '#undef GST_DISABLE_REGISTRY')
172 else
173   gst_cdata.set('GST_DISABLE_REGISTRY_DEFINE', '#define GST_DISABLE_REGISTRY 1')
174 endif
175
176 gst_parse = get_option('gst_parse')
177 if gst_parse
178   gst_cdata.set('GST_DISABLE_PARSE_DEFINE', '#undef GST_DISABLE_PARSE')
179 else
180   gst_cdata.set('GST_DISABLE_PARSE_DEFINE', '#define GST_DISABLE_PARSE 1')
181 endif
182
183 # FIXME: add --disable-plugin option?
184 gst_cdata.set('GST_DISABLE_PLUGIN_DEFINE', '#undef GST_DISABLE_PLUGIN')
185
186 configure_file(input : 'gstconfig.h.in',
187   output : 'gstconfig.h',
188   install_dir : join_paths(get_option('includedir'), 'gstreamer-1.0/gst'),
189   configuration : gst_cdata)
190
191 version_cdata = configuration_data()
192 version_cdata.set('GST_VERSION_MAJOR', gst_version_major)
193 version_cdata.set('GST_VERSION_MINOR', gst_version_minor)
194 version_cdata.set('GST_VERSION_MICRO', gst_version_micro)
195 version_cdata.set('GST_VERSION_NANO', gst_version_nano)
196
197 gst_version_h = configure_file(input : 'gstversion.h.in',
198   output : 'gstversion.h',
199   install_dir : join_paths(get_option('includedir'), 'gstreamer-1.0/gst'),
200   configuration : version_cdata)
201
202 gst_enums = gnome.mkenums_simple('gstenumtypes',
203   sources : gst_headers,
204   header_prefix : '#include <gst/gstconfig.h>',
205   body_prefix : '#include "gst/gst_private.h"\n#include <gst/gst.h>',
206   decorator : 'GST_API',
207   install_header : true,
208   install_dir : join_paths(get_option('includedir'), 'gstreamer-1.0/gst'))
209
210 gstenum_h = gst_enums[1]
211 gstenum_c = gst_enums[0]
212
213 gst_parse_sources = []
214 if gst_parse
215   subdir('parse')
216 endif
217
218 subdir('printf')
219
220 libgst_c_args = gst_c_args + [
221   '-D_GNU_SOURCE',
222   '-DGST_EXPORTS',
223   '-DG_LOG_DOMAIN=g_log_domain_gstreamer',
224   '-DGST_DISABLE_DEPRECATED',
225 ]
226
227 tracer_hooks = get_option('tracer_hooks')
228 if not tracer_hooks
229   libgst_c_args += ['-DGST_DISABLE_GST_TRACER_HOOKS']
230 endif
231
232 # Make sure that subproject building gir files work
233 gst_incdirs = [configinc]
234 gst_gen_sources = [gstenum_h]
235 libgst = library('gstreamer-1.0', gst_sources,
236   gstenum_h, gstenum_c, gst_parse_sources, gst_registry_sources,
237   version : libversion,
238   soversion : soversion,
239   darwin_versions : osxversion,
240   c_args : libgst_c_args,
241   include_directories : [configinc,
242     # HACK, change include paths in .y and .l in final version.
243     include_directories('parse')],
244   link_with : printf_lib,
245   install : true,
246   dependencies : [gobject_dep, gmodule_dep, glib_dep, mathlib, dl_dep] + backtrace_deps
247                    + platform_deps,
248 )
249
250 if build_gir
251   gst_gir_extra_args = gir_init_section + [ '--c-include=gst/gst.h' ]
252   if meson.is_subproject()
253     # FIXME: There must be a better way to do this
254     # Need to pass the include path to find gst/gst.h and gst/gstenumtypes.h (built)
255     gst_gir_extra_args += ['--cflags-begin',
256       '-I' + meson.current_source_dir() + '/..',
257       '-I' + meson.current_build_dir() + '/..',
258       '--cflags-end']
259   endif
260
261   gst_incdirs += [configinc]
262   gst_gen_sources += [gnome.generate_gir(libgst,
263     sources : gst_sources + gst_headers + gst_enums + [gst_version_h],
264     namespace : 'Gst',
265     nsversion : apiversion,
266     identifier_prefix : 'Gst',
267     symbol_prefix : 'gst',
268     export_packages : 'gstreamer-1.0',
269     includes : ['GLib-2.0', 'GObject-2.0', 'GModule-2.0' ],
270     install : true,
271     extra_args : gst_gir_extra_args,
272   )]
273 endif
274
275 gst_dep = declare_dependency(link_with : libgst,
276   include_directories : gst_incdirs,
277   dependencies : [glib_dep, gobject_dep, gmodule_dep],
278   # Everything that uses libgst needs this built to compile
279   sources : gst_gen_sources,
280 )