mirror of
https://gitlab.gnome.org/GNOME/gimp.git
synced 2025-07-04 09:53:25 +00:00
meson: share a same environment for all usages of self-built GIMP
In particular GIMP used for unit-testing, or in other cases as a build tool, from the non-installed binaries, can use a same meson `env` object.
This commit is contained in:
parent
9a2de135ee
commit
378e80408d
3 changed files with 99 additions and 34 deletions
|
@ -1 +1 @@
|
||||||
Subproject commit 4d84513963d43acf40965667a7beff449540fb73
|
Subproject commit 500f16b4b4c7d62804a2617be34d74e11706e236
|
|
@ -1,38 +1,23 @@
|
||||||
# XXX: we have a bunch of (manually run?) tests inside libgimp/test/.
|
# XXX: we have a bunch of (manually run?) tests inside libgimp/test/.
|
||||||
# These should either be deleted or transformed into real unit tests.
|
# These should either be deleted or transformed into real unit tests.
|
||||||
|
|
||||||
|
if not meson.can_run_host_binaries()
|
||||||
|
warning('libgimp unit testing disabled in cross-building or similar environments.')
|
||||||
|
subdir_done()
|
||||||
|
endif
|
||||||
|
|
||||||
tests = [
|
tests = [
|
||||||
'palette',
|
'palette',
|
||||||
]
|
]
|
||||||
|
|
||||||
# make GIMP runnable without being installed.
|
# Unit testing environment is based on gimp_run_env with additional environment
|
||||||
env=environment()
|
# variables and added temporary test plug-ins. Ideally I should copy
|
||||||
|
# gimp_run_env, but meson doesn't have such function to create an env variable
|
||||||
menu_paths=meson.project_build_root() / 'menus:' + meson.project_source_root() / 'menus'
|
# from another. So I just modify the main one instead (fortunately here it's not
|
||||||
env.set('GIMP_TESTING_MENUS_PATH', menu_paths)
|
# a big problem).
|
||||||
|
# See: https://github.com/mesonbuild/meson/issues/13045
|
||||||
env.set('GIMP_TESTING_PLUGINDIRS', meson.project_build_root() / 'plug-ins:')
|
gimp_run_env.append('GIMP_TESTING_PLUGINDIRS', meson.project_build_root() / 'libgimp/tests/c-tests/')
|
||||||
env.append('GIMP_TESTING_PLUGINDIRS', meson.project_build_root() / 'plug-ins/python')
|
gimp_run_env.set('GIMP_TESTING_ABS_TOP_SRCDIR', meson.project_source_root())
|
||||||
env.append('GIMP_TESTING_PLUGINDIRS', meson.project_build_root() / 'plug-ins/common/test-plug-ins/')
|
|
||||||
env.append('GIMP_TESTING_PLUGINDIRS', meson.project_build_root() / 'libgimp/tests/c-tests/')
|
|
||||||
|
|
||||||
env.prepend('GI_TYPELIB_PATH', meson.project_build_root() / 'libgimp')
|
|
||||||
env.prepend('LD_LIBRARY_PATH', meson.project_build_root() / 'libgimp')
|
|
||||||
env.prepend('LD_LIBRARY_PATH', meson.project_build_root() / 'libgimpbase')
|
|
||||||
env.prepend('LD_LIBRARY_PATH', meson.project_build_root() / 'libgimpcolor')
|
|
||||||
env.prepend('LD_LIBRARY_PATH', meson.project_build_root() / 'libgimpconfig')
|
|
||||||
env.prepend('LD_LIBRARY_PATH', meson.project_build_root() / 'libgimpmath')
|
|
||||||
env.prepend('LD_LIBRARY_PATH', meson.project_build_root() / 'libgimpmodule')
|
|
||||||
env.prepend('LD_LIBRARY_PATH', meson.project_build_root() / 'libgimpthumb')
|
|
||||||
env.prepend('LD_LIBRARY_PATH', meson.project_build_root() / 'libgimpwidgets')
|
|
||||||
|
|
||||||
env.set('GIMP_TESTING_ABS_TOP_SRCDIR', meson.project_source_root())
|
|
||||||
|
|
||||||
if enable_console_bin
|
|
||||||
gimp_exe=gimpconsole_exe
|
|
||||||
else
|
|
||||||
gimp_exe=gimpmain_exe
|
|
||||||
endif
|
|
||||||
|
|
||||||
run_python_test = find_program('./libgimp-run-python-test.sh')
|
run_python_test = find_program('./libgimp-run-python-test.sh')
|
||||||
run_c_test = find_program('./libgimp-run-c-test.sh')
|
run_c_test = find_program('./libgimp-run-c-test.sh')
|
||||||
|
@ -43,7 +28,7 @@ foreach test_name : tests
|
||||||
py_test = meson.current_source_dir() / basename + '.py'
|
py_test = meson.current_source_dir() / basename + '.py'
|
||||||
test(test_name, run_python_test,
|
test(test_name, run_python_test,
|
||||||
args: [ gimp_exe, py_test ],
|
args: [ gimp_exe, py_test ],
|
||||||
env: env,
|
env: gimp_run_env,
|
||||||
suite: ['libgimp', 'python3'],
|
suite: ['libgimp', 'python3'],
|
||||||
timeout: 60)
|
timeout: 60)
|
||||||
|
|
||||||
|
@ -72,7 +57,7 @@ foreach test_name : tests
|
||||||
|
|
||||||
test(test_name, run_c_test,
|
test(test_name, run_c_test,
|
||||||
args: [ gimp_exe, meson.current_source_dir() / c_test_name, basename ],
|
args: [ gimp_exe, meson.current_source_dir() / c_test_name, basename ],
|
||||||
env: env,
|
env: gimp_run_env,
|
||||||
suite: ['libgimp', 'C'],
|
suite: ['libgimp', 'C'],
|
||||||
timeout: 60)
|
timeout: 60)
|
||||||
endforeach
|
endforeach
|
||||||
|
|
86
meson.build
86
meson.build
|
@ -1790,10 +1790,8 @@ meson.add_dist_script('meson_dist_script.sh',
|
||||||
generate_version_h ? gitversion_h.full_path() : gitversion_h,
|
generate_version_h ? gitversion_h.full_path() : gitversion_h,
|
||||||
meson.project_source_root(), meson.project_build_root())
|
meson.project_source_root(), meson.project_build_root())
|
||||||
|
|
||||||
|
|
||||||
################################################################################
|
################################################################################
|
||||||
# Subdirs
|
# Subdirs: part 1
|
||||||
|
|
||||||
|
|
||||||
rootInclude = include_directories('.')
|
rootInclude = include_directories('.')
|
||||||
appInclude = include_directories('app')
|
appInclude = include_directories('app')
|
||||||
|
@ -1840,6 +1838,88 @@ subdir('plug-ins')
|
||||||
subdir('app')
|
subdir('app')
|
||||||
subdir('app-tools')
|
subdir('app-tools')
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# Make GIMP runnable without being installed for unit-testing or as a build
|
||||||
|
# tool.
|
||||||
|
|
||||||
|
gimp_run_env=environment()
|
||||||
|
|
||||||
|
if meson.can_run_host_binaries()
|
||||||
|
if enable_console_bin
|
||||||
|
gimp_exe=gimpconsole_exe
|
||||||
|
else
|
||||||
|
gimp_exe=gimpmain_exe
|
||||||
|
endif
|
||||||
|
|
||||||
|
menu_paths=meson.global_build_root() / 'menus:' + meson.global_source_root() / 'menus'
|
||||||
|
gimp_run_env.set('GIMP_TESTING_MENUS_PATH', menu_paths)
|
||||||
|
|
||||||
|
gimp_run_env.set('GIMP_TESTING_PLUGINDIRS', meson.global_build_root() / 'plug-ins')
|
||||||
|
gimp_run_env.append('GIMP_TESTING_PLUGINDIRS', meson.global_build_root() / 'plug-ins/python')
|
||||||
|
gimp_run_env.append('GIMP_TESTING_PLUGINDIRS', meson.global_build_root() / 'plug-ins/common/test-plug-ins/')
|
||||||
|
|
||||||
|
gimp_run_env.set('GIMP_TESTING_INTERPRETER_DIRS', meson.global_build_root() / 'plug-ins/python/')
|
||||||
|
gimp_run_env.set('GIMP_TESTING_ENVIRON_DIRS', meson.global_source_root() / 'data/environ/')
|
||||||
|
|
||||||
|
gimp_run_env.prepend('GI_TYPELIB_PATH', prefix / 'lib/girepository-1.0/')
|
||||||
|
gimp_run_env.prepend('GI_TYPELIB_PATH', meson.global_build_root() / 'libgimp')
|
||||||
|
|
||||||
|
gimp_run_env.prepend('LD_LIBRARY_PATH', meson.global_build_root() / 'libgimp')
|
||||||
|
gimp_run_env.prepend('LD_LIBRARY_PATH', meson.global_build_root() / 'libgimpbase')
|
||||||
|
gimp_run_env.prepend('LD_LIBRARY_PATH', meson.global_build_root() / 'libgimpcolor')
|
||||||
|
gimp_run_env.prepend('LD_LIBRARY_PATH', meson.global_build_root() / 'libgimpconfig')
|
||||||
|
gimp_run_env.prepend('LD_LIBRARY_PATH', meson.global_build_root() / 'libgimpmath')
|
||||||
|
gimp_run_env.prepend('LD_LIBRARY_PATH', meson.global_build_root() / 'libgimpmodule')
|
||||||
|
gimp_run_env.prepend('LD_LIBRARY_PATH', meson.global_build_root() / 'libgimpthumb')
|
||||||
|
gimp_run_env.prepend('LD_LIBRARY_PATH', meson.global_build_root() / 'libgimpwidgets')
|
||||||
|
|
||||||
|
if platform_windows
|
||||||
|
# On Windows, DLL are found through PATH rather than LD_LIBRARY_PATH.
|
||||||
|
gimp_run_env.prepend('PATH', meson.global_build_root() / 'libgimp')
|
||||||
|
gimp_run_env.prepend('PATH', meson.global_build_root() / 'libgimpbase')
|
||||||
|
gimp_run_env.prepend('PATH', meson.global_build_root() / 'libgimpcolor')
|
||||||
|
gimp_run_env.prepend('PATH', meson.global_build_root() / 'libgimpconfig')
|
||||||
|
gimp_run_env.prepend('PATH', meson.global_build_root() / 'libgimpmath')
|
||||||
|
gimp_run_env.prepend('PATH', meson.global_build_root() / 'libgimpmodule')
|
||||||
|
gimp_run_env.prepend('PATH', meson.global_build_root() / 'libgimpthumb')
|
||||||
|
gimp_run_env.prepend('PATH', meson.global_build_root() / 'libgimpwidgets')
|
||||||
|
elif platform_osx
|
||||||
|
gimp_run_env.prepend('DYLD_LIBRARY_PATH', meson.global_build_root() / 'libgimp')
|
||||||
|
gimp_run_env.prepend('DYLD_LIBRARY_PATH', meson.global_build_root() / 'libgimpbase')
|
||||||
|
gimp_run_env.prepend('DYLD_LIBRARY_PATH', meson.global_build_root() / 'libgimpcolor')
|
||||||
|
gimp_run_env.prepend('DYLD_LIBRARY_PATH', meson.global_build_root() / 'libgimpconfig')
|
||||||
|
gimp_run_env.prepend('DYLD_LIBRARY_PATH', meson.global_build_root() / 'libgimpmath')
|
||||||
|
gimp_run_env.prepend('DYLD_LIBRARY_PATH', meson.global_build_root() / 'libgimpmodule')
|
||||||
|
gimp_run_env.prepend('DYLD_LIBRARY_PATH', meson.global_build_root() / 'libgimpthumb')
|
||||||
|
gimp_run_env.prepend('DYLD_LIBRARY_PATH', meson.global_build_root() / 'libgimpwidgets')
|
||||||
|
endif
|
||||||
|
else
|
||||||
|
# Cross-builds require an existing native GIMP installed, unless we
|
||||||
|
# can run target binaries.
|
||||||
|
gimp_exe = find_program([gimpconsole_exe_name, gimpmain_exe_name],
|
||||||
|
native: true, required: false)
|
||||||
|
|
||||||
|
if not gimp_exe.found()
|
||||||
|
error('When cross-compiling, the build requires either an exe_wrapper or a native GIMP installed (@0@ or @1@).'.format(gimpconsole_exe_name, gimpmain_exe_name))
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
# Use a temporary config directory in the top build root for 2 reasons: first
|
||||||
|
# because we don't want to pollute any existing user config folder; second
|
||||||
|
# because the default directory may not be writable (we have the case in macOS
|
||||||
|
# CI), but the build dir always is.
|
||||||
|
# XXX We might also want to delete this directory before every use, especially
|
||||||
|
# when using the binary for testing (ensuring we always start from a fresh
|
||||||
|
# config). But for now, let's keep it as-is.
|
||||||
|
gimp_exe_config_dir = custom_target('gimp_exe_config_dir',
|
||||||
|
output: [ '.tmp-config' ],
|
||||||
|
command: [ 'mkdir', '-p', '@OUTDIR@' + '/.tmp-config' ],
|
||||||
|
build_by_default: true)
|
||||||
|
gimp_run_env.set('GIMP3_DIRECTORY', gimp_exe_config_dir.full_path())
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# Subdirs: part 2
|
||||||
|
|
||||||
# gimp-data submodule part 2
|
# gimp-data submodule part 2
|
||||||
subdir('gimp-data/images/')
|
subdir('gimp-data/images/')
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue