Configure subprojects in the right order

Use an array instead of a dict to make sure we iterate over
the list of subprojects in the right order, which is first
GStreamer core, then gst-plugins-base, then other things.

Without this subprojects might get configured in random order,
in which case gstreamer or gst-plugins-base libs might get picked
up via pkg-config if they are also available installed, instead of
being picked up from the subproject. This breaks all kinds of
assumptions in gst-build and will likely have strange effects
and/or lead to build failures such as

subprojects/gst-plugins-good/tests/check/meson.build:144:2:
ERROR: 'gstreamer-plugins-base-1.0' is not a pkgconfig dependency
This commit is contained in:
Tim-Philipp Müller 2019-02-18 16:13:07 +00:00
parent a9bcc8f0ee
commit 7ea556d034

View file

@ -30,22 +30,23 @@ if not meson.is_subproject() and cc.get_id() == 'msvc'
endif endif
endif endif
subprojects = { # Ordered list of subprojects (dict has no ordering guarantees)
'gstreamer': {}, subprojects = [
'gst-plugins-base': {}, ['gstreamer', {}],
'gst-plugins-good': {}, ['gst-plugins-base', {}],
'gst-plugins-bad': { 'option': get_option('bad') }, ['gst-plugins-good', {}],
'gst-plugins-ugly': { 'option': get_option('ugly') }, ['gst-plugins-bad', { 'option': get_option('bad') }],
'pygobject': { 'option': get_option('python') }, ['gst-plugins-ugly', { 'option': get_option('ugly') }],
'gst-python': { 'option': get_option('python') }, ['gst-libav', { 'option': get_option('libav') }],
'gst-omx': { 'option': get_option('omx'), }, ['gst-rtsp-server', { 'option': get_option('rtsp_server') }],
'gst-libav': { 'option': get_option('libav') }, ['gst-devtools', { 'option': get_option('devtools') }],
'gstreamer-vaapi': { 'option': get_option('vaapi') }, ['gst-editing-services', { 'option': get_option('ges') }],
'gst-rtsp-server': { 'option': get_option('rtsp_server') }, ['gstreamer-vaapi', { 'option': get_option('vaapi') }],
'gst-devtools': { 'option': get_option('devtools') }, ['gst-omx', { 'option': get_option('omx'), }],
'gst-editing-services': { 'option': get_option('ges') }, ['gstreamer-sharp', { 'option': get_option('sharp') }],
'gstreamer-sharp': { 'option': get_option('sharp') }, ['pygobject', { 'option': get_option('python') }],
} ['gst-python', { 'option': get_option('python') }],
]
python3 = import('python3').find_python() python3 = import('python3').find_python()
symlink = ''' symlink = '''
@ -63,7 +64,9 @@ endif
subproject('orc', required: get_option('orc')) subproject('orc', required: get_option('orc'))
subprojects_names = [] subprojects_names = []
foreach project_name, build_infos: subprojects foreach sp : subprojects
project_name = sp[0]
build_infos = sp[1]
is_required = build_infos.get('option', true) is_required = build_infos.get('option', true)
subproj = subproject(project_name, version: gst_version, required: is_required) subproj = subproject(project_name, version: gst_version, required: is_required)
if subproj.found() if subproj.found()