meson: Add target for installing test files & improve install_test_files

The changes in b6a0d469ca 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
This commit is contained in:
Andres Freund 2023-03-07 16:14:18 -08:00
parent 87e4f24d82
commit 0d237aeeba
2 changed files with 33 additions and 24 deletions

View File

@ -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'])

View File

@ -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:]))
os.makedirs(targetdir, exist_ok=True)
for src in src_list:
shutil.copy2(src, dest)
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:])