diff options
author | Andres Freund <andres@anarazel.de> | 2023-03-07 16:14:18 -0800 |
---|---|---|
committer | Andres Freund <andres@anarazel.de> | 2023-03-08 11:12:10 -0800 |
commit | 0d237aeebaee17943af14159b83a202a3744dbb4 (patch) | |
tree | 9d30f2da1b076d2f8d83307c46f8d47b638b123f | |
parent | 87e4f24d82939ef532b68f37fc66e6a48cff2cd9 (diff) | |
download | postgresql-0d237aeebaee17943af14159b83a202a3744dbb4.tar.gz postgresql-0d237aeebaee17943af14159b83a202a3744dbb4.zip |
meson: Add target for installing test files & improve install_test_files
The changes in b6a0d469cae prevented installation of the test files during a
normal install. However, the buildfarm intentionally tries to trun the tests
against a "real" installation. The new install-test-files target provides that
ability.
Because we want to install into a normal directory, I removed the necessary
munging of the target paths from meson.build and moved it into
install-test-files. I also added DESTDIR support, so that installing can
redirect the directory if desired. That's used for the tmp_install/
installation now.
I didn't like the number of arguments necessary for install_test_files, so I
changed it to use
--install target list of files
which makes it easier to use for further directories, if/when we need them.
Discussion: https://postgr.es/m/20230308012940.edexipb3vqylcu6r@awork3.anarazel.de
-rw-r--r-- | meson.build | 32 | ||||
-rw-r--r-- | src/tools/install_test_files | 25 |
2 files changed, 33 insertions, 24 deletions
diff --git a/meson.build b/meson.build index f1ce4cb8e03..2409cc2254d 100644 --- a/meson.build +++ b/meson.build @@ -2830,6 +2830,22 @@ generated_sources_ac += {'': ['GNUmakefile']} testprep_targets += test_install_libs +# command to install files used for tests, which aren't installed by default +install_test_files = files('src/tools/install_test_files') +install_test_files_args = [ + install_test_files, + '--prefix', dir_prefix, + '--install', contrib_data_dir, test_install_data, + '--install', dir_lib_pkg, test_install_libs, +] + +# Target installing files required for installcheck of various modules +run_target('install-test-files', + command: [python] + install_test_files_args, + depends: testprep_targets, +) + + # If there are any files in the source directory that we also generate in the # build directory, they might get preferred over the newly generated files, # e.g. because of a #include "file", which always will search in the current @@ -2922,21 +2938,9 @@ test('tmp_install', is_parallel: false, suite: ['setup']) -# get full paths of test_install_libs to copy them -test_install_libs_fp = [] -foreach lib: test_install_libs - test_install_libs_fp += lib.full_path() -endforeach - -install_test_files = files('src/tools/install_test_files') test('install_test_files', - python, args: [ - install_test_files, - '--datadir', test_install_location / contrib_data_args['install_dir'], - '--libdir', test_install_location / dir_lib_pkg, - '--install-data', test_install_data, - '--install-libs', test_install_libs_fp, - ], + python, + args: install_test_files_args + ['--destdir', test_install_destdir], priority: setup_tests_priority, is_parallel: false, suite: ['setup']) diff --git a/src/tools/install_test_files b/src/tools/install_test_files index e6ecdae10f8..8e0b36a74d1 100644 --- a/src/tools/install_test_files +++ b/src/tools/install_test_files @@ -6,23 +6,28 @@ import argparse import shutil import os +from pathlib import PurePath parser = argparse.ArgumentParser() -parser.add_argument('--datadir', type=str) -parser.add_argument('--libdir', type=str) -parser.add_argument('--install-data', type=str, nargs='*') -parser.add_argument('--install-libs', type=str, nargs='*') +parser.add_argument('--destdir', type=str, default=os.environ.get('DESTDIR', None)) +parser.add_argument('--prefix', type=str) +parser.add_argument('--install', type=str, nargs='+', action='append') args = parser.parse_args() +def copy_files(prefix: str, destdir: str, targetdir: str, src_list: list): + if not os.path.isabs(targetdir): + targetdir = os.path.join(prefix, targetdir) -def copy_files(src_list: list, dest: str): - os.makedirs(dest, exist_ok=True) + if destdir is not None: + # copy of meson's logic for joining destdir and install paths + targetdir = str(PurePath(destdir, *PurePath(targetdir).parts[1:])) - for src in src_list: - shutil.copy2(src, dest) + os.makedirs(targetdir, exist_ok=True) + for src in src_list: + shutil.copy2(src, targetdir) -copy_files(args.install_data, args.datadir) -copy_files(args.install_libs, args.libdir) +for installs in args.install: + copy_files(args.prefix, args.destdir, installs[0], installs[1:]) |