build: Set the module path in the build

Instead of trying to find the module by traversing from the executable,
have meson hardcode the path. I *think* this is a little less fragile.
This commit is contained in:
James Westman 2022-06-11 00:22:19 -05:00
parent 75475d1a45
commit e78fae4f12
No known key found for this signature in database
GPG key ID: CE2DBA0ADB654EA6
2 changed files with 26 additions and 18 deletions

View file

@ -21,18 +21,19 @@
import os, sys import os, sys
# Try to find the python module, assuming the current file is installed to (prefix)/bin # These variables should be set by meson. If they aren't, we're running
dirname = os.path.join(os.path.dirname(os.path.dirname(__file__)), "share", "blueprint-compiler") # uninstalled, and we might have to guess some values.
if os.path.isdir(os.path.join(dirname, "blueprintcompiler")):
sys.path.insert(0, dirname)
# Get the configured (or, if running from source, not configured) version number
version = "@VERSION@" version = "@VERSION@"
module_path = "@MODULE_PATH@"
libdir = "@LIBDIR@"
def literal(key): if version == "\u0040VERSION@":
return "@" + key + "@" version = "uninstalled"
else:
# If Meson set the configuration values, insert the module path it set
sys.path.insert(0, module_path)
from blueprintcompiler import main from blueprintcompiler import main
if __name__ == "__main__": if __name__ == "__main__":
main.main("uninstalled" if version == literal("VERSION") else version) main.main(version)

View file

@ -17,22 +17,29 @@ configure_file(
install_dir: join_paths(datadir, 'pkgconfig'), install_dir: join_paths(datadir, 'pkgconfig'),
) )
config = configuration_data({
'VERSION': meson.project_version(),
'LIBDIR': get_option('prefix') / get_option('libdir'),
})
if meson.is_subproject()
config.set('MODULE_PATH', meson.current_source_dir())
else
config.set('MODULE_PATH', py.get_install_dir())
endif
blueprint_compiler = configure_file( blueprint_compiler = configure_file(
input: 'blueprint-compiler.py', input: 'blueprint-compiler.py',
output: 'blueprint-compiler', output: 'blueprint-compiler',
configuration: { configuration: config,
'VERSION': meson.project_version(),
},
install: not meson.is_subproject(), install: not meson.is_subproject(),
install_dir: get_option('bindir'), install_dir: get_option('bindir'),
) )
# Don't use the output configure_file here--that file is in the build directory if meson.is_subproject()
# and won't be able to find the python modules in the source directory. meson.override_find_program('blueprint-compiler', blueprint_compiler)
meson.override_find_program('blueprint-compiler', find_program('blueprint-compiler.py')) else
install_subdir('blueprintcompiler', install_dir: py.get_install_dir())
if not meson.is_subproject()
install_subdir('blueprintcompiler', install_dir: datadir / 'blueprint-compiler')
endif endif
subdir('tests') subdir('tests')