From da8fc024f58489bba3fbe48ab57cf4adf6b0726b Mon Sep 17 00:00:00 2001 From: Marvin Schmidt Date: Tue, 27 Jul 2021 21:04:59 +0200 Subject: [PATCH] build: Allow to specify which system lua to use On Exherbo we allow to install different Lua ABIs in parallel and users can choose per-package which Lua ABI to use, e.g. media/wireplumber LUA_ABIS: -* 5.3 However, wireplumber's build system doesn't provide a way of explicitly requesting a specific version, which makes the build non-deterministic, since you get a different result if you install today with Lua 5.3 installed and reinstall tomorrow after installing Lua 5.4. To fix this, I introduced a `system-lua-version` option that allows to specify an explicit Lua version to check for and build against: > $ meson .. -Dsystem-lua=true -Dsystem-lua-version=5.4 > The Meson build system > Version: 0.58.0 > Source dir: /mnt/development/scm/freedesktop/wireplumber > Build dir: /mnt/development/scm/freedesktop/wireplumber/build/reconfigure > Build type: native build > Project name: wireplumber > Project version: 0.4.1 > [...] > Run-time dependency lua-5.4 found: YES 5.4.3 > [...] > Build targets in project: 56 > > wireplumber 0.4.1 > > Lua version : 5.4.3 (system) > systemd conf data : YES If the specified version isn't found, the build will fail loudly: > $ meson .. -Dsystem-lua=true -Dsystem-lua-version=5.5 > [...] > Found CMake: /usr/host/bin/cmake (3.20.5) > Run-time dependency lua-5.5 found: NO (tried pkgconfig and cmake) > Run-time dependency lua5.5 found: NO (tried pkgconfig and cmake) > > ../meson.build:50:6: ERROR: Problem encountered: Specified Lua version "5.5" not found --- meson.build | 54 +++++++++++++++++++++++++++++------------------ meson_options.txt | 3 +++ 2 files changed, 36 insertions(+), 21 deletions(-) diff --git a/meson.build b/meson.build index 7ad0328a..ac663c12 100644 --- a/meson.build +++ b/meson.build @@ -39,27 +39,39 @@ threads_dep = dependency('threads') system_lua = get_option('system-lua') if system_lua - lua_dep = dependency('lua-5.4', required: false) - if not lua_dep.found() - lua_dep = dependency('lua5.4', required: false) - endif - if not lua_dep.found() - lua_dep = dependency('lua54', required: false) - endif - if not lua_dep.found() - lua_dep = dependency('lua-5.3', required: false) - endif - if not lua_dep.found() - lua_dep = dependency('lua5.3', required: false) - endif - if not lua_dep.found() - lua_dep = dependency('lua53', required: false) - endif - if not lua_dep.found() - lua_dep = dependency('lua', version: ['>=5.3.0'], required: false) - endif - if not lua_dep.found() - error ('Could not find lua. Lua version 5.4 or 5.3 required') + if get_option('system-lua-version') != 'auto' + lua_version_requested = get_option('system-lua-version') + lua_dep = dependency('lua-' + lua_version_requested, required: false) + if not lua_dep.found() + lua_dep = dependency('lua' + lua_version_requested, required: false) + endif + + if not lua_dep.found() + error('Specified Lua version "' + lua_version_requested + '" not found') + endif + else + lua_dep = dependency('lua-5.4', required: false) + if not lua_dep.found() + lua_dep = dependency('lua5.4', required: false) + endif + if not lua_dep.found() + lua_dep = dependency('lua54', required: false) + endif + if not lua_dep.found() + lua_dep = dependency('lua-5.3', required: false) + endif + if not lua_dep.found() + lua_dep = dependency('lua5.3', required: false) + endif + if not lua_dep.found() + lua_dep = dependency('lua53', required: false) + endif + if not lua_dep.found() + lua_dep = dependency('lua', version: ['>=5.3.0'], required: false) + endif + if not lua_dep.found() + error ('Could not find lua. Lua version 5.4 or 5.3 required') + endif endif else lua_proj = subproject('lua', default_options: ['default_library=static']) diff --git a/meson_options.txt b/meson_options.txt index a152fbda..f93feb8f 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -4,6 +4,9 @@ option('doc', type : 'feature', value : 'auto', description: 'Enable documentation.') option('system-lua', type : 'boolean', value : 'false', description : 'Use lua from the system instead of the bundled one') +option('system-lua-version', + type: 'string', value : 'auto', + description: 'The system lua version to use or "auto" for auto-detection') option('systemd', type: 'feature', value: 'auto', description: 'Enable installing systemd units')