meson: use gnome.mkenums() with template files for enum file gen
[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   'gstsample.c',
52   'gstsegment.c',
53   'gststreamcollection.c',
54   'gststreams.c',
55   'gststructure.c',
56   'gstsystemclock.c',
57   'gsttaglist.c',
58   'gsttagsetter.c',
59   'gsttask.c',
60   'gsttaskpool.c',
61   'gsttoc.c',
62   'gsttocsetter.c',
63   'gsttracer.c',
64   'gsttracerfactory.c',
65   'gsttracerrecord.c',
66   'gsttracerutils.c',
67   'gsttypefind.c',
68   'gsttypefindfactory.c',
69   'gsturi.c',
70   'gstutils.c',
71   'gstvalue.c',
72   'gstparse.c',
73 ]
74
75 gst_headers = [
76   'gst.h',
77   'glib-compat.h',
78   'gstobject.h',
79   'gstallocator.h',
80   'gstbin.h',
81   'gstbuffer.h',
82   'gstbufferlist.h',
83   'gstbufferpool.h',
84   'gstbus.h',
85   'gstcaps.h',
86   'gstcapsfeatures.h',
87   'gstchildproxy.h',
88   'gstclock.h',
89   'gstcompat.h',
90   'gstcontext.h',
91   'gstcontrolbinding.h',
92   'gstcontrolsource.h',
93   'gstdatetime.h',
94   'gstdebugutils.h',
95   'gstelement.h',
96   'gstelementmetadata.h',
97   'gstdevice.h',
98   'gstdeviceprovider.h',
99   'gstdeviceproviderfactory.h',
100   'gstdynamictypefactory.h',
101   'gstelementfactory.h',
102   'gsterror.h',
103   'gstevent.h',
104   'gstformat.h',
105   'gstghostpad.h',
106   'gstdevicemonitor.h',
107   'gstinfo.h',
108   'gstiterator.h',
109   'gstatomicqueue.h',
110   'gstmacros.h',
111   'gstmessage.h',
112   'gstmeta.h',
113   'gstmemory.h',
114   'gstminiobject.h',
115   'gstpad.h',
116   'gstpadtemplate.h',
117   'gstparamspecs.h',
118   'gstpipeline.h',
119   'gstplugin.h',
120   'gstpluginfeature.h',
121   'gstpoll.h',
122   'gstpreset.h',
123   'gstprotection.h',
124   'gstquery.h',
125   'gstsample.h',
126   'gstsegment.h',
127   'gststreamcollection.h',
128   'gststreams.h',
129   'gststructure.h',
130   'gstsystemclock.h',
131   'gsttaglist.h',
132   'gsttagsetter.h',
133   'gsttask.h',
134   'gsttaskpool.h',
135   'gsttoc.h',
136   'gsttocsetter.h',
137   'gsttracer.h',
138   'gsttracerfactory.h',
139   'gsttracerrecord.h',
140   'gsttypefind.h',
141   'gsttypefindfactory.h',
142   'gsturi.h',
143   'gstutils.h',
144   'gstvalue.h',
145   'gstregistry.h',
146   'gstparse.h',
147   'math-compat.h',
148 ]
149 install_headers(gst_headers, subdir : 'gstreamer-1.0/gst')
150
151 if not get_option('disable_registry')
152   gst_registry = ['gstregistrybinary.c']
153 else
154   gst_registry = []
155 endif
156
157 configure_file(input : 'gstconfig.h.in',
158   output : 'gstconfig.h',
159   install_dir : 'include/gstreamer-1.0/gst',
160   configuration : cdata)
161 configure_file(input : 'gstversion.h.in',
162   output : 'gstversion.h',
163   install_dir : 'include/gstreamer-1.0/gst',
164   configuration : cdata)
165
166 gst_enums = gnome.mkenums('gstenumtypes',
167   sources : gst_headers,
168   h_template : 'gstenumtypes.h.template',
169   c_template : 'gstenumtypes.c.template',
170   install_header : true,
171   install_dir : join_paths(get_option('includedir'), 'gstreamer-1.0/gst'))
172
173 gstenum_h = gst_enums[0]
174 gstenum_c = gst_enums[1]
175
176
177 subdir('parse')
178 subdir('printf')
179
180 libgst_c_args = gst_c_args + [
181   '-D_GNU_SOURCE',
182   '-DGST_EXPORTS',
183   '-DG_LOG_DOMAIN=g_log_domain_gstreamer',
184   '-DGST_DISABLE_DEPRECATED',
185 ]
186
187 # Make it possible to build both static and shared versions
188 # at the same time. By default use shared for unit tests etc.
189 # This choice is arbitrary.
190 if libtype != 'shared'
191   libgst_static = static_library('gstreamer-1.0', gst_sources,
192     gstenum_h, gstenum_c, grammar, parser, gst_registry,
193     c_args : [libgst_c_args],
194     include_directories : [configinc,
195       # HACK, change include paths in .y and .l in final version.
196       include_directories('parse')],
197     install : true,
198     link_with : printf_lib,
199     dependencies : [gobject_dep, gmodule_dep, glib_dep, mathlib, unwind_dep, dw_dep] + platform_deps,
200   )
201   libgst = libgst_static
202 endif
203
204 # Make sure that subproject building gir files work
205 gst_incdirs = [configinc]
206 gst_gen_sources = [gstenum_h]
207 if libtype != 'static'
208   libgst_shared = shared_library('gstreamer-1.0', gst_sources,
209     gstenum_h, gstenum_c, grammar, parser, gst_registry,
210     version : libversion,
211     soversion : soversion,
212     c_args : libgst_c_args,
213     include_directories : [configinc,
214       # HACK, change include paths in .y and .l in final version.
215       include_directories('parse')],
216     link_with : printf_lib,
217     install : true,
218     dependencies : [gobject_dep, gmodule_dep, glib_dep, mathlib, dl_dep,
219                     unwind_dep, dw_dep] + platform_deps,
220     vs_module_defs: vs_module_defs_dir + 'libgstreamer.def',
221   )
222   libgst = libgst_shared
223   if build_gir
224     gst_gir_extra_args = gir_init_section + [ '--c-include=gst/gst.h' ]
225     if meson.is_subproject()
226       # FIXME: There must be a better way to do this
227       # Need to pass the include path to find gst/gst.h and gst/gstenumtypes.h (built)
228       gst_gir_extra_args += ['--cflags-begin',
229           '-I' + meson.current_source_dir() + '/..',
230           '-I' + meson.current_build_dir() + '/..',
231           '--cflags-end']
232     endif
233
234     gst_incdirs += [include_directories(meson.current_build_dir() + '/..')]
235     gst_gen_sources += [gnome.generate_gir(libgst_shared,
236       sources : gst_sources + gst_headers,
237       namespace : 'Gst',
238       nsversion : apiversion,
239       identifier_prefix : 'Gst',
240       symbol_prefix : 'gst',
241       export_packages : 'gstreamer-1.0',
242       includes : ['GLib-2.0', 'GObject-2.0', 'GModule-2.0' ],
243       install : true,
244       extra_args : gst_gir_extra_args,
245     )]
246   endif
247 endif
248
249 gst_dep = declare_dependency(link_with : libgst,
250   include_directories : gst_incdirs,
251   dependencies : [glib_dep, gobject_dep, gmodule_dep],
252   # Everything that uses libgst needs this built to compile
253   sources : gst_gen_sources,
254 )