This repository has been archived by the owner on Nov 23, 2021. It is now read-only.
forked from GStreamer/gst-build
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmeson.build
177 lines (153 loc) · 6.63 KB
/
meson.build
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
project('All GStreamer modules', 'c',
version : '1.17.0.1',
meson_version : '>= 0.48.0',
default_options : ['buildtype=debugoptimized'])
gst_version = '>= @0@'.format(meson.project_version())
gst_branch = 'master'
glib_req = '>= 2.44.0'
build_system = build_machine.system()
cc = meson.get_compiler('c')
python3 = import('python').find_installation()
# Ensure that we're not being run from inside the gst-uninstalled env
# because that will confuse meson, and it might find the already-built
# gstreamer. It's fine if people run `ninja` as long as it doesn't run
# reconfigure because ninja doesn't care about the env.
ensure_not_uninstalled = '''
import os
assert('GST_ENV' not in os.environ)
'''
cmdres = run_command(python3, '-c', ensure_not_uninstalled)
if cmdres.returncode() != 0
error('Do not run `ninja` or `meson` for gst-build inside the uninstalled environment, you will run into problems')
endif
documented_projects = ''
# Make it possible to use msys2 built zlib which fails
# when not using the mingw toolchain as it uses unistd.h
if not meson.is_subproject() and cc.get_id() == 'msvc'
uname = find_program('uname', required: false)
if uname.found()
ret = run_command(uname, '-o')
if ret.returncode() == 0 and ret.stdout().to_lower() == 'msys'
ret = run_command(uname, '-r')
# The kernel version returned by uname is actually the msys version
if ret.returncode() == 0 and ret.stdout().startswith('2')
# If a system zlib is found, disable UNIX features in zlib.h and zconf.h
if cc.find_library('z').found()
add_global_arguments('-DZ_SOLO', language: 'c')
endif
endif
endif
endif
endif
# Ordered list of subprojects (dict has no ordering guarantees)
subprojects = [
['gstreamer', {'build-hotdoc': true, 'has-plugins': true}],
['gst-plugins-base', {'build-hotdoc': true, 'has-plugins': true}],
['gst-plugins-good', {'build-hotdoc': true, 'has-plugins': true}],
['libnice', { 'option': get_option('libnice'), 'match_gst_version': false}],
['gst-plugins-bad', { 'option': get_option('bad'), 'build-hotdoc': true, 'has-plugins': true}],
['gst-plugins-ugly', { 'option': get_option('ugly'), 'build-hotdoc': true, 'has-plugins': true}],
['gst-libav', { 'option': get_option('libav'), 'build-hotdoc': true, 'has-plugins': true}],
['gst-rtsp-server', { 'option': get_option('rtsp_server'), 'build-hotdoc': true }],
['gst-devtools', { 'option': get_option('devtools'), 'build-hotdoc': true }],
['gst-integration-testsuites', { 'option': get_option('devtools') }],
['gst-editing-services', { 'option': get_option('ges'), 'build-hotdoc': true, 'has-plugins': true}],
['gstreamer-vaapi', { 'option': get_option('vaapi'), 'build-hotdoc': true, 'has-plugins': true}],
['gst-omx', { 'option': get_option('omx'), 'build-hotdoc': true, 'has-plugins': true}],
['gstreamer-sharp', { 'option': get_option('sharp') }],
['pygobject', { 'option': get_option('python'), 'match_gst_version': false }],
['gst-python', { 'option': get_option('python'), 'has-plugins': true}],
['gst-examples', { 'option': get_option('examples'), 'match_gst_versions': false}],
]
symlink = '''
import os
os.symlink(os.path.join('@1@', 'subprojects', '@0@'),
os.path.join('@1@', '@0@'))
'''
if build_system == 'windows'
subproject('win-flex-bison-binaries')
subproject('win-nasm')
endif
pathsep = host_machine.system() == 'windows' ? ';' : ':'
subproject('orc', required: get_option('orc'))
subprojects_names = []
plugins_doc_caches = []
all_plugins = ''
foreach sp : subprojects
project_name = sp[0]
build_infos = sp[1]
is_required = build_infos.get('option', true)
match_gst_version = build_infos.get('match_gst_version', true)
if match_gst_version
subproj = subproject(project_name, version: gst_version, required: is_required)
else
subproj = subproject(project_name, required: is_required)
endif
if subproj.found()
# Replace by using subproject.get_variable('plugins', [])
# when https://github.com/mesonbuild/meson/pull/5426/files
# is merged and released
if build_infos.has_key('has-plugins', default: false)
plugins = subproj.get_variable('plugins')
else
plugins = []
endif
foreach plugin: plugins
all_plugins += pathsep + plugin.full_path()
endforeach
subprojects_names += [project_name]
cmdres = run_command(python3, '-c', symlink.format(project_name, meson.current_source_dir()))
if cmdres.returncode() == 0
message('Created symlink to ' + project_name)
endif
if not meson.is_cross_build() and build_infos.has_key('build-hotdoc', default: false)
if plugins.length() > 0
plugins_doc_caches += [subproj.get_variable('plugins_doc_dep')]
endif
if documented_projects != ''
documented_projects += ','
endif
documented_projects += project_name
endif
endif
endforeach
plugins_doc_dep = custom_target('plugins-doc-cache',
command: [python3, '-c', 'print("Built all doc caches")'],
input: plugins_doc_caches,
output: 'plugins_doc_caches',
capture: true,
)
foreach custom_subproj: get_option('custom_subprojects').split(',')
if custom_subproj != ''
message ('Adding custom subproject ' + custom_subproj)
subproject(custom_subproj)
subprojects_names += [custom_subproj]
endif
endforeach
if meson.is_cross_build() or build_machine.system() == 'windows'
if get_option('doc').enabled()
error('Documentation enabled but building the doc while cross building or building on windows is not supported yet.')
endif
message('Documentation not built as building the documentation while cross building or building on windows is not supported yet.')
else
hotdoc_p = find_program('hotdoc', required : get_option('doc'))
if hotdoc_p.found()
if documented_projects != ''
subproject('gst-docs', default_options: 'built_subprojects=' + documented_projects)
message('Gst docs subprojects: ' + documented_projects)
endif
else
message('Not building documentation as hotdoc was not found')
endif
endif
cmdres = run_command(python3, find_program('scripts/generate_plugins_path.py'), '--builddir',
meson.build_root(), all_plugins)
assert(cmdres.returncode() == 0, 'Could not create plugins path: @0@'.format(cmdres.stderr()))
message('Building subprojects: ' + ', '.join(subprojects_names))
setenv = find_program('gst-uninstalled.py')
run_target('uninstalled', command : [setenv, '--builddir=@0@'.format(meson.build_root()),
'--srcdir=@0@'.format(meson.source_root())])
update = find_program('git-update')
run_target('git-update', command : [update])
run_target('update', command : [update,
'--builddir=@0@'.format(meson.current_build_dir())])