meson: refine dependencies of many feature checks

This commit is contained in:
sfan5 2024-03-23 20:04:37 +01:00
parent af69b268c2
commit 52638a4cac
1 changed files with 55 additions and 41 deletions

View File

@ -516,7 +516,7 @@ endif
features += {'glob-posix': cc.has_function('glob', prefix: '#include <glob.h>')} features += {'glob-posix': cc.has_function('glob', prefix: '#include <glob.h>')}
features += {'glob-win32': win32 and not posix} features += {'glob-win32': win32 and not features['glob-posix']}
if features['glob-win32'] if features['glob-win32']
sources += files('osdep/glob-win.c') sources += files('osdep/glob-win.c')
endif endif
@ -712,13 +712,13 @@ if features['lua']
sources += files('player/lua.c') sources += files('player/lua.c')
endif endif
if not features['lua'] and lua_opt == 'enabled' if not features['lua'] and lua_opt == 'enabled'
error('lua enabled but no suitable lua version could be found!') error('Lua enabled but no suitable Lua version could be found!')
endif endif
rubberband = dependency('rubberband', version: '>= 1.8.0', required: get_option('rubberband')) rubberband = dependency('rubberband', version: '>= 1.8.0', required: get_option('rubberband'))
features += {'rubberband': rubberband.found()} features += {'rubberband': rubberband.found()}
features += {'rubberband-3': rubberband.version().version_compare('>= 3.0.0')}
if features['rubberband'] if features['rubberband']
features += {'rubberband-3': rubberband.version().version_compare('>= 3.0.0')}
dependencies += rubberband dependencies += rubberband
sources += files('audio/filter/af_rubberband.c') sources += files('audio/filter/af_rubberband.c')
endif endif
@ -786,11 +786,12 @@ if features['alsa']
sources += files('audio/out/ao_alsa.c') sources += files('audio/out/ao_alsa.c')
endif endif
audiounit_opt = get_option('audiounit').require(darwin)
audiounit = { audiounit = {
'deps': dependency('appleframeworks', modules: ['Foundation', 'AudioToolbox'], 'deps': dependency('appleframeworks', modules: ['Foundation', 'AudioToolbox'],
required: get_option('audiounit')), required: audiounit_opt),
'symbol': cc.has_header_symbol('AudioToolbox/AudioToolbox.h', 'kAudioUnitSubType_RemoteIO', 'symbol': cc.has_header_symbol('AudioToolbox/AudioToolbox.h', 'kAudioUnitSubType_RemoteIO',
required: get_option('audiounit')), required: audiounit_opt),
} }
features += {'audiounit': audiounit['deps'].found() and audiounit['symbol']} features += {'audiounit': audiounit['deps'].found() and audiounit['symbol']}
if features['audiounit'] if features['audiounit']
@ -879,7 +880,8 @@ if features['sndio']
sources += files('audio/out/ao_sndio.c') sources += files('audio/out/ao_sndio.c')
endif endif
wasapi = cc.has_header_symbol('audioclient.h', 'IAudioClient', required: get_option('wasapi')) wasapi = cc.has_header_symbol('audioclient.h', 'IAudioClient', required:
get_option('wasapi').require(win32))
features += {'wasapi': wasapi} features += {'wasapi': wasapi}
if features['wasapi'] if features['wasapi']
sources += files('audio/out/ao_wasapi.c', sources += files('audio/out/ao_wasapi.c',
@ -923,7 +925,11 @@ if features['drm']
'video/out/vo_drm.c') 'video/out/vo_drm.c')
endif endif
gbm = dependency('gbm', version: '>=17.1.0', required: get_option('gbm')) gbm_opt = get_option('gbm').require(
features['drm'],
error_message: 'drm was not found!'
)
gbm = dependency('gbm', version: '>= 17.1.0', required: gbm_opt)
features += {'gbm': gbm.found()} features += {'gbm': gbm.found()}
if features['gbm'] if features['gbm']
dependencies += gbm dependencies += gbm
@ -944,7 +950,8 @@ if features['sdl2-video']
sources += files('video/out/vo_sdl.c') sources += files('video/out/vo_sdl.c')
endif endif
shaderc = dependency('shaderc', required: get_option('shaderc').require(features['win32-desktop'])) shaderc = dependency('shaderc', required:
get_option('shaderc').require(features['win32-desktop']))
features += {'shaderc': shaderc.found()} features += {'shaderc': shaderc.found()}
if features['shaderc'] if features['shaderc']
dependencies += shaderc dependencies += shaderc
@ -963,7 +970,8 @@ if features['posix']
features += {'posix-shm': cc.has_function('shm_open', prefix: '#include <sys/mman.h>')} features += {'posix-shm': cc.has_function('shm_open', prefix: '#include <sys/mman.h>')}
endif endif
spirv_cross = dependency('spirv-cross-c-shared', required: get_option('spirv-cross').require(features['win32-desktop'])) spirv_cross = dependency('spirv-cross-c-shared', required:
get_option('spirv-cross').require(features['win32-desktop']))
features += {'spirv-cross': spirv_cross.found()} features += {'spirv-cross': spirv_cross.found()}
if features['spirv-cross'] if features['spirv-cross']
dependencies += spirv_cross dependencies += spirv_cross
@ -1110,12 +1118,11 @@ if features['gl-x11']
sources += files('video/out/opengl/context_glx.c') sources += files('video/out/opengl/context_glx.c')
endif endif
gl_dxinterop_d3d = gl_win32.allowed() and \
cc.has_header_symbol('GL/wglext.h', 'WGL_ACCESS_READ_ONLY_NV',
prefix: '#include <GL/gl.h>')
gl_dxinterop_gl = features['gl-win32'] and cc.has_header_symbol('d3d9.h', 'IDirect3D9Ex')
gl_dxinterop = get_option('gl-dxinterop').require( gl_dxinterop = get_option('gl-dxinterop').require(
gl_dxinterop_d3d and gl_dxinterop_gl and gl_win32.allowed(), features['gl-win32'] and
cc.has_header_symbol('GL/wglext.h', 'WGL_ACCESS_READ_ONLY_NV',
prefix: '#include <GL/gl.h>') and
cc.has_header_symbol('d3d9.h', 'IDirect3D9Ex'),
error_message: 'gl-dxinterop could not be found!', error_message: 'gl-dxinterop could not be found!',
) )
features += {'gl-dxinterop': gl_dxinterop.allowed()} features += {'gl-dxinterop': gl_dxinterop.allowed()}
@ -1184,7 +1191,7 @@ if features['egl-android']
endif endif
egl_drm = get_option('egl-drm').require( egl_drm = get_option('egl-drm').require(
features['drm'] and features['egl'] and gbm.found() and gl_allowed, features['drm'] and features['egl'] and features['gbm'] and gl_allowed,
error_message: 'either drm, egl, or gbm could not be found!', error_message: 'either drm, egl, or gbm could not be found!',
) )
features += {'egl-drm': egl_drm.allowed()} features += {'egl-drm': egl_drm.allowed()}
@ -1193,8 +1200,12 @@ if features['egl-drm']
sources += files('video/out/opengl/context_drm_egl.c') sources += files('video/out/opengl/context_drm_egl.c')
endif endif
egl_wayland = dependency('wayland-egl', version: '>= 9.0.0', required: get_option('egl-wayland')) egl_wayland_opt = get_option('egl-wayland').require(
features += {'egl-wayland': features['egl'] and egl_wayland.found() and gl_allowed and features['wayland']} features['egl'] and features['wayland'] and gl_allowed,
error_message: 'either egl or wayland could not be found!',
)
egl_wayland = dependency('wayland-egl', version: '>= 9.0.0', required: egl_wayland_opt)
features += {'egl-wayland': egl_wayland.found()}
if features['egl-wayland'] if features['egl-wayland']
dependencies += egl_wayland dependencies += egl_wayland
features += {'gl': true} features += {'gl': true}
@ -1283,15 +1294,6 @@ if features['ffnvcodec']
sources += files('video/cuda.c') sources += files('video/cuda.c')
endif endif
android_media_ndk = get_option('android-media-ndk').require(
features['android'] and cc.has_header_symbol('media/NdkImageReader.h', 'AIMAGE_FORMAT_PRIVATE')
)
features += {'android-media-ndk': android_media_ndk.allowed()}
if features['android-media-ndk']
# header only, library is dynamically loaded
sources += files('video/out/hwdec/hwdec_aimagereader.c')
endif
cuda_hwaccel = get_option('cuda-hwaccel').require( cuda_hwaccel = get_option('cuda-hwaccel').require(
features['ffnvcodec'], features['ffnvcodec'],
error_message: 'ffnvcodec was not found!', error_message: 'ffnvcodec was not found!',
@ -1305,7 +1307,7 @@ cuda_interop = get_option('cuda-interop').require(
features['cuda-hwaccel'] and (features['gl'] or features['vulkan']), features['cuda-hwaccel'] and (features['gl'] or features['vulkan']),
error_message: 'cuda-hwaccel and either gl or vulkan were not found!', error_message: 'cuda-hwaccel and either gl or vulkan were not found!',
) )
features += {'cuda-interop': cuda_interop.allowed() and (features['gl'] or features['vulkan'])} features += {'cuda-interop': cuda_interop.allowed()}
if features['cuda-interop'] and features['gl'] if features['cuda-interop'] and features['gl']
sources += files('video/out/hwdec/hwdec_cuda_gl.c') sources += files('video/out/hwdec/hwdec_cuda_gl.c')
endif endif
@ -1313,13 +1315,22 @@ if features['cuda-interop'] and features['vulkan']
sources += files('video/out/hwdec/hwdec_cuda_vk.c') sources += files('video/out/hwdec/hwdec_cuda_vk.c')
endif endif
android_media_ndk = get_option('android-media-ndk').require(
features['android'] and cc.has_header_symbol('media/NdkImageReader.h', 'AIMAGE_FORMAT_PRIVATE')
)
features += {'android-media-ndk': android_media_ndk.allowed()}
if features['android-media-ndk']
# header only, library is dynamically loaded
sources += files('video/out/hwdec/hwdec_aimagereader.c')
endif
vulkan_interop = get_option('vulkan-interop').require( vulkan_interop = get_option('vulkan-interop').require(
features['vulkan'] and vulkan.version().version_compare('>=1.3.238') and features['vulkan'] and vulkan.version().version_compare('>=1.3.238') and
libavutil.version().version_compare('>=58.11.100'), libavutil.version().version_compare('>=58.11.100'),
error_message: 'Vulkan Interop requires vulkan headers >= 1.3.238, and libavutil >= 58.11.100', error_message: 'Vulkan Interop requires vulkan headers >= 1.3.238, and libavutil >= 58.11.100',
) )
features += {'vulkan-interop': vulkan_interop.allowed()} features += {'vulkan-interop': vulkan_interop.allowed()}
if vulkan_interop.allowed() if features['vulkan-interop']
sources += files('video/out/hwdec/hwdec_vulkan.c') sources += files('video/out/hwdec/hwdec_vulkan.c')
endif endif
@ -1333,7 +1344,7 @@ if features['d3d-hwaccel']
'video/filter/vf_d3d11vpp.c') 'video/filter/vf_d3d11vpp.c')
endif endif
if features['d3d-hwaccel'] and egl_angle.allowed() if features['d3d-hwaccel'] and features['egl-angle']
sources += files('video/out/opengl/hwdec_d3d11egl.c') sources += files('video/out/opengl/hwdec_d3d11egl.c')
endif endif
if features['d3d-hwaccel'] and features['d3d11'] if features['d3d-hwaccel'] and features['d3d11']
@ -1361,7 +1372,9 @@ if features['gl-dxinterop-d3d9']
sources += files('video/out/opengl/hwdec_dxva2gldx.c') sources += files('video/out/opengl/hwdec_dxva2gldx.c')
endif endif
ios_gl = cc.has_header_symbol('OpenGLES/ES3/glext.h', 'GL_RGB32F', required: get_option('ios-gl')) # this is an arbitrary GLES 3.x symbol
ios_gl = cc.has_header_symbol('OpenGLES/ES3/glext.h', 'GL_RGB32F', required:
get_option('ios-gl').require(darwin))
features += {'ios-gl': ios_gl} features += {'ios-gl': ios_gl}
if features['ios-gl'] if features['ios-gl']
sources += files('video/out/hwdec/hwdec_ios_gl.m') sources += files('video/out/hwdec/hwdec_ios_gl.m')
@ -1369,29 +1382,30 @@ endif
libva = dependency('libva', version: '>= 1.1.0', required: get_option('vaapi')) libva = dependency('libva', version: '>= 1.1.0', required: get_option('vaapi'))
vaapi_drm = dependency('libva-drm', version: '>= 1.1.0', vaapi_drm = dependency('libva-drm', version: '>= 1.1.0', required:
required: get_option('vaapi-drm').require(libva.found() and features['drm'])) get_option('vaapi-drm').require(libva.found() and features['drm']))
features += {'vaapi-drm': vaapi_drm.found()} features += {'vaapi-drm': vaapi_drm.found()}
if features['vaapi-drm'] if features['vaapi-drm']
dependencies += vaapi_drm dependencies += vaapi_drm
endif endif
vaapi_wayland = dependency('libva-wayland', version: '>= 1.1.0', vaapi_wayland = dependency('libva-wayland', version: '>= 1.1.0', required:
required: get_option('vaapi-wayland').require(libva.found() and features['wayland'])) get_option('vaapi-wayland').require(libva.found() and features['wayland']))
features += {'vaapi-wayland': vaapi_wayland.found()} features += {'vaapi-wayland': vaapi_wayland.found()}
if features['vaapi-wayland'] if features['vaapi-wayland']
dependencies += vaapi_wayland dependencies += vaapi_wayland
endif endif
vaapi_x11 = dependency('libva-x11', version: '>= 1.1.0', vaapi_x11 = dependency('libva-x11', version: '>= 1.1.0', required:
required: get_option('vaapi-x11').require(libva.found() and features['x11'])) get_option('vaapi-x11').require(libva.found() and features['x11']))
features += {'vaapi-x11': vaapi_x11.found()} features += {'vaapi-x11': vaapi_x11.found()}
if features['vaapi-x11'] if features['vaapi-x11']
dependencies += vaapi_x11 dependencies += vaapi_x11
sources += files('video/out/vo_vaapi.c') sources += files('video/out/vo_vaapi.c')
endif endif
vaapi_win32 = dependency('libva-win32', required: get_option('vaapi-win32').require(libva.found())) vaapi_win32 = dependency('libva-win32', required:
get_option('vaapi-win32').require(libva.found() and win32))
features += {'vaapi-win32': vaapi_win32.found()} features += {'vaapi-win32': vaapi_win32.found()}
if features['vaapi-win32'] if features['vaapi-win32']
dependencies += vaapi_win32 dependencies += vaapi_win32
@ -1410,8 +1424,7 @@ if features['vaapi']
'video/out/hwdec/dmabuf_interop_pl.c') 'video/out/hwdec/dmabuf_interop_pl.c')
endif endif
dmabuf_interop_gl = features['egl'] and features['drm'] features += {'dmabuf-interop-gl': features['egl'] and features['drm']}
features += {'dmabuf-interop-gl': dmabuf_interop_gl}
if features['dmabuf-interop-gl'] if features['dmabuf-interop-gl']
sources += files('video/out/hwdec/dmabuf_interop_gl.c') sources += files('video/out/hwdec/dmabuf_interop_gl.c')
endif endif
@ -1430,7 +1443,7 @@ if features['vdpau']
'video/vdpau_mixer.c') 'video/vdpau_mixer.c')
endif endif
features += {'vdpau-gl-x11': vdpau.found() and gl_x11.allowed()} features += {'vdpau-gl-x11': features['vdpau'] and gl_x11.allowed()}
if features['vdpau'] and features['vdpau-gl-x11'] if features['vdpau'] and features['vdpau-gl-x11']
sources += files('video/out/opengl/hwdec_vdpau.c') sources += files('video/out/opengl/hwdec_vdpau.c')
endif endif
@ -1440,7 +1453,8 @@ videotoolbox_gl = get_option('videotoolbox-gl').require(
error_message: 'gl-cocoa nor ios-gl could be found!', error_message: 'gl-cocoa nor ios-gl could be found!',
) )
features += {'videotoolbox-gl': videotoolbox_gl.allowed()} features += {'videotoolbox-gl': videotoolbox_gl.allowed()}
corevideo = dependency('appleframeworks', modules: ['CoreVideo'], required: get_option('videotoolbox-pl')) corevideo = dependency('appleframeworks', modules: ['CoreVideo'], required:
get_option('videotoolbox-pl').require(darwin))
videotoolbox_pl = get_option('videotoolbox-pl').require( videotoolbox_pl = get_option('videotoolbox-pl').require(
features['vulkan'] and corevideo.found(), features['vulkan'] and corevideo.found(),
error_message: 'vulkan or CV metal support could be found!', error_message: 'vulkan or CV metal support could be found!',