Meson: Fix check for linker args
[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 disable_registry = get_option('disable_registry')
154 if not disable_registry
155   gst_registry = ['gstregistrybinary.c']
156 else
157   gst_registry = []
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 disable_gst_debug
165   gst_cdata.set('GST_DISABLE_GST_DEBUG_DEFINE', '#define GST_DISABLE_GST_DEBUG 1')
166 else
167   gst_cdata.set('GST_DISABLE_GST_DEBUG_DEFINE', '#undef GST_DISABLE_GST_DEBUG')
168 endif
169
170 if disable_registry
171   gst_cdata.set('GST_DISABLE_REGISTRY_DEFINE', '#define GST_DISABLE_REGISTRY 1')
172 else
173   gst_cdata.set('GST_DISABLE_REGISTRY_DEFINE', '#undef GST_DISABLE_REGISTRY')
174 endif
175
176 # FIXME: add --disable-parse option? (but autotools doesn't seem to set this
177 # define properly at all either even though it does expose the option)
178 gst_cdata.set('GST_DISABLE_PARSE_DEFINE', '#undef GST_DISABLE_PARSE')
179
180 # FIXME: add --disable-plugin option?
181 gst_cdata.set('GST_DISABLE_PLUGIN_DEFINE', '#undef GST_DISABLE_PLUGIN')
182
183 configure_file(input : 'gstconfig.h.in',
184   output : 'gstconfig.h',
185   install_dir : 'include/gstreamer-1.0/gst',
186   configuration : gst_cdata)
187
188 version_cdata = configuration_data()
189 version_cdata.set('GST_VERSION_MAJOR', gst_version_major)
190 version_cdata.set('GST_VERSION_MINOR', gst_version_minor)
191 version_cdata.set('GST_VERSION_MICRO', gst_version_micro)
192 version_cdata.set('GST_VERSION_NANO', gst_version_nano)
193
194 gst_version_h = configure_file(input : 'gstversion.h.in',
195   output : 'gstversion.h',
196   install_dir : 'include/gstreamer-1.0/gst',
197   configuration : version_cdata)
198
199 gst_enums = gnome.mkenums_simple('gstenumtypes',
200   sources : gst_headers,
201   header_prefix : '#include <gst/gstconfig.h>',
202   body_prefix : '#include "gst/gst_private.h"\n#include <gst/gst.h>',
203   decorator : 'GST_API',
204   install_header : true,
205   install_dir : join_paths(get_option('includedir'), 'gstreamer-1.0/gst'))
206
207 gstenum_h = gst_enums[1]
208 gstenum_c = gst_enums[0]
209
210
211 subdir('parse')
212 subdir('printf')
213
214 libgst_c_args = gst_c_args + [
215   '-D_GNU_SOURCE',
216   '-DGST_EXPORTS',
217   '-DG_LOG_DOMAIN=g_log_domain_gstreamer',
218   '-DGST_DISABLE_DEPRECATED',
219 ]
220
221 disable_tracer_hooks = get_option('disable_tracer_hooks')
222 if disable_tracer_hooks
223   libgst_c_args += ['-DGST_DISABLE_GST_TRACER_HOOKS']
224 endif
225
226 # Make it possible to build both static and shared versions
227 # at the same time. By default use shared for unit tests etc.
228 # This choice is arbitrary.
229 if libtype != 'shared'
230   libgst_static = static_library('gstreamer-1.0', gst_sources,
231     gstenum_h, gstenum_c, grammar, parser, gst_registry,
232     c_args : [libgst_c_args],
233     include_directories : [configinc,
234       # HACK, change include paths in .y and .l in final version.
235       include_directories('parse')],
236     install : true,
237     link_with : printf_lib,
238     dependencies : [gobject_dep, gmodule_dep, glib_dep, mathlib] + backtrace_deps  + platform_deps,
239   )
240   libgst = libgst_static
241 endif
242
243 # Make sure that subproject building gir files work
244 gst_incdirs = [configinc]
245 gst_gen_sources = [gstenum_h]
246 if libtype != 'static'
247   libgst_shared = shared_library('gstreamer-1.0', gst_sources,
248     gstenum_h, gstenum_c, grammar, parser, gst_registry,
249     version : libversion,
250     soversion : soversion,
251     c_args : libgst_c_args,
252     include_directories : [configinc,
253       # HACK, change include paths in .y and .l in final version.
254       include_directories('parse')],
255     link_with : printf_lib,
256     install : true,
257     dependencies : [gobject_dep, gmodule_dep, glib_dep, mathlib, dl_dep] + backtrace_deps
258                      + platform_deps,
259   )
260   libgst = libgst_shared
261   if build_gir
262     gst_gir_extra_args = gir_init_section + [ '--c-include=gst/gst.h' ]
263     if meson.is_subproject()
264       # FIXME: There must be a better way to do this
265       # Need to pass the include path to find gst/gst.h and gst/gstenumtypes.h (built)
266       gst_gir_extra_args += ['--cflags-begin',
267           '-I' + meson.current_source_dir() + '/..',
268           '-I' + meson.current_build_dir() + '/..',
269           '--cflags-end']
270     endif
271
272     gst_incdirs += [configinc]
273     gst_gen_sources += [gnome.generate_gir(libgst_shared,
274       sources : gst_sources + gst_headers + gst_enums + [gst_version_h],
275       namespace : 'Gst',
276       nsversion : apiversion,
277       identifier_prefix : 'Gst',
278       symbol_prefix : 'gst',
279       export_packages : 'gstreamer-1.0',
280       includes : ['GLib-2.0', 'GObject-2.0', 'GModule-2.0' ],
281       install : true,
282       extra_args : gst_gir_extra_args,
283     )]
284   endif
285 endif
286
287 gst_dep = declare_dependency(link_with : libgst,
288   include_directories : gst_incdirs,
289   dependencies : [glib_dep, gobject_dep, gmodule_dep],
290   # Everything that uses libgst needs this built to compile
291   sources : gst_gen_sources,
292 )