11c585a0b39539aed7318ed48e7b4e397af16651
[platform/upstream/gstreamer.git] / meson.build
1 project('All GStreamer modules', 'c',
2   version : '1.15.0.1',
3   meson_version : '>= 0.42.0',
4   default_options : ['buildtype=debugoptimized'])
5
6 gst_version = '>= @0@'.format(meson.project_version())
7 gst_branch = 'master'
8
9 glib_req = '>= 2.40.0'
10
11 subprojects = [
12     'gstreamer',
13     'gst-plugins-base',
14     'gst-plugins-good',
15 ]
16
17 cc = meson.get_compiler('c')
18
19 # Make it possible to use msys2 built zlib which fails
20 # when not using the mingw toolchain as it uses unistd.h
21 if not meson.is_subproject() and cc.get_id() == 'msvc'
22   uname = find_program('uname', required: false)
23   if uname.found()
24     ret = run_command(uname, '-o')
25     if ret.returncode() == 0 and ret.stdout().to_lower() == 'msys'
26       ret = run_command(uname, '-r')
27       # The kernel version returned by uname is actually the msys version
28       if ret.returncode() == 0 and ret.stdout().startswith('2')
29         # If a system zlib is found, disable UNIX features in zlib.h and zconf.h
30         if cc.find_library('z').found()
31           add_global_arguments('-DZ_SOLO', language: 'c')
32         endif
33       endif
34     endif
35   endif
36 endif
37
38 # FIXME Remove that check once we have ffmpeg as a gst-libav subproject
39 libavfilter_dep = dependency('libavfilter', version: '>= 6.47.100', required: false)
40 gst_libav = []
41 if libavfilter_dep.found()
42     cc = meson.get_compiler('c')
43     check_ffmpeg_src = '''#include <libavcodec/avcodec.h>
44     #if LIBAVCODEC_VERSION_MICRO >= 100
45     /* FFmpeg uses 100+ as its micro version */
46     #else
47     #error libav provider should be FFmpeg
48     #endif'''
49     if cc.compiles(check_ffmpeg_src, dependencies : libavfilter_dep, name : 'whether libav is provided by FFmpeg')
50         gst_libav = ['gst-libav']
51     endif
52 endif
53
54 if gst_libav.length() == 0
55     message('WARNING: gst-libav not built as ffmpeg >= n3.1.2 not found on the system')
56 endif
57
58 if get_option('enable_python')
59     subprojects += ['gst-python']
60 endif
61
62 if not get_option('disable_gst_plugins_ugly')
63     subprojects += ['gst-plugins-ugly']
64 endif
65
66 if not get_option('disable_gst_plugins_bad')
67     subprojects += ['gst-plugins-bad']
68 endif
69
70 if not get_option('disable_gst_libav')
71     subprojects += gst_libav
72 endif
73
74 if not get_option('disable_gst_omx')
75     subprojects += ['gst-omx']
76 endif
77
78 if not get_option('disable_gstreamer_vaapi')
79   if dependency('libva', version: ['>= 0.30.4', '!= 0.99.0'], required : false).found()
80     subprojects += ['gstreamer-vaapi']
81   else
82     message('WARNING: not building gstreamer-vaapi module, missing libva')
83   endif
84 endif
85
86 if not get_option('disable_gst_devtools')
87   if dependency('json-glib-1.0', required : false).found()
88     subprojects += ['gst-devtools']
89   else
90     message('WARNING: not building gst-devtools module, missing glib-json-1.0')
91   endif
92 endif
93
94 if not get_option('disable_gst_editing_services')
95   if dependency('libxml-2.0', required : false).found()
96     subprojects += ['gst-editing-services']
97   else
98     message('WARNING: not building gst-editing-services module, missing libxml-2.0')
99   endif
100 endif
101
102 if not get_option('disable_rtsp_server')
103     subprojects += ['gst-rtsp-server']
104 endif
105
106 if not get_option('disable_gstreamer_sharp')
107   if add_languages('cs', required : false)
108     if meson.version().version_compare('>=0.43')
109       subprojects += ['gstreamer-sharp']
110     else
111       message('WARNING: Not building gstreamer-sharp as meson >=0.43 not found.')
112     endif
113   else
114     message('WARNING: Not building gstreamer-sharp as no CS compiler found.')
115   endif
116 endif
117
118 python3 = import('python3').find_python()
119 symlink = '''
120 import os
121
122 os.symlink(os.path.join('@1@', 'subprojects', '@0@'),
123     os.path.join('@1@', '@0@'))
124 '''
125
126 foreach custom_subproj: get_option('custom_subprojects').split(',')
127     if custom_subproj != ''
128         message ('Adding custom subproject ' + custom_subproj)
129         subprojects += [custom_subproj]
130     endif
131 endforeach
132
133 message('Building subprojects: ' + ', '.join(subprojects))
134 foreach subproj: subprojects
135     default_options = []
136     if get_option('disable_introspection')
137         default_options += ['disable_introspection=true']
138     endif
139     subproject(subproj, version: gst_version, default_options: default_options)
140
141     cmdres = run_command(python3, '-c', symlink.format(subproj, meson.current_source_dir()))
142     if cmdres.returncode() == 0
143        message('Created symlink to ' + subproj)
144     else
145        message('Could not create symlink to @0@'.format(subproj))
146     endif
147 endforeach
148
149 setenv = find_program('gst-uninstalled.py')
150 run_target('uninstalled', command : [setenv, '--builddir=@0@'.format(meson.build_root()),
151            '--srcdir=@0@'.format(meson.source_root()),
152            '--gst-version=@0@'.format(gst_branch)])
153
154 update = find_program('git-update')
155 run_target('git-update', command : [update])
156 run_target('update', command : [update,
157     '--builddir=@0@'.format(meson.current_build_dir())])