mirror of
https://github.com/qemu/qemu.git
synced 2024-12-13 14:33:31 +08:00
iotests: explicitly pass source/build dir to 'check' command
The 'check' script has some rather dubious logic whereby it assumes that if invoked as a symlink, then it is running from a separate source tree and build tree, otherwise it assumes the current working directory is a combined source and build tree. This doesn't work if you want to invoke the 'check' script using its full source tree path while still using a split source and build tree layout. This would be a typical situation with meson if you ask it to find the 'check' script path using files('check'). Rather than trying to make the logic more magical, add support for explicitly passing the dirs using --source-dir and --build-dir. If either is omitted the current logic is maintained. Signed-off-by: Daniel P. Berrangé <berrange@redhat.com> Reviewed-by: Thomas Huth <thuth@redhat.com> Acked-by: Hanna Czenczek <hreitz@redhat.com> Tested-by: Thomas Huth <thuth@redhat.com> Message-Id: <20230303160727.3977246-2-berrange@redhat.com> Signed-off-by: Alex Bennée <alex.bennee@linaro.org> Message-Id: <20230315174331.2959-19-alex.bennee@linaro.org>
This commit is contained in:
parent
85b983485b
commit
0c8076b024
@ -26,9 +26,23 @@ from findtests import TestFinder
|
||||
from testenv import TestEnv
|
||||
from testrunner import TestRunner
|
||||
|
||||
def get_default_path(follow_link=False):
|
||||
"""
|
||||
Try to automagically figure out the path we are running from.
|
||||
"""
|
||||
# called from the build tree?
|
||||
if os.path.islink(sys.argv[0]):
|
||||
if follow_link:
|
||||
return os.path.dirname(os.readlink(sys.argv[0]))
|
||||
else:
|
||||
return os.path.dirname(os.path.abspath(sys.argv[0]))
|
||||
else: # or source tree?
|
||||
return os.getcwd()
|
||||
|
||||
def make_argparser() -> argparse.ArgumentParser:
|
||||
p = argparse.ArgumentParser(description="Test run options")
|
||||
p = argparse.ArgumentParser(
|
||||
description="Test run options",
|
||||
formatter_class=argparse.ArgumentDefaultsHelpFormatter)
|
||||
|
||||
p.add_argument('-n', '--dry-run', action='store_true',
|
||||
help='show me, do not run tests')
|
||||
@ -113,6 +127,11 @@ def make_argparser() -> argparse.ArgumentParser:
|
||||
'middle of the process.')
|
||||
g_sel.add_argument('tests', metavar='TEST_FILES', nargs='*',
|
||||
help='tests to run, or "--" followed by a command')
|
||||
g_sel.add_argument('--build-dir', default=get_default_path(),
|
||||
help='Path to iotests build directory')
|
||||
g_sel.add_argument('--source-dir',
|
||||
default=get_default_path(follow_link=True),
|
||||
help='Path to iotests build directory')
|
||||
|
||||
return p
|
||||
|
||||
@ -120,7 +139,9 @@ def make_argparser() -> argparse.ArgumentParser:
|
||||
if __name__ == '__main__':
|
||||
args = make_argparser().parse_args()
|
||||
|
||||
env = TestEnv(imgfmt=args.imgfmt, imgproto=args.imgproto,
|
||||
env = TestEnv(source_dir=args.source_dir,
|
||||
build_dir=args.build_dir,
|
||||
imgfmt=args.imgfmt, imgproto=args.imgproto,
|
||||
aiomode=args.aiomode, cachemode=args.cachemode,
|
||||
imgopts=args.imgopts, misalign=args.misalign,
|
||||
debug=args.debug, valgrind=args.valgrind,
|
||||
|
@ -170,7 +170,8 @@ class TestEnv(ContextManager['TestEnv']):
|
||||
if not isxfile(b):
|
||||
sys.exit('Not executable: ' + b)
|
||||
|
||||
def __init__(self, imgfmt: str, imgproto: str, aiomode: str,
|
||||
def __init__(self, source_dir: str, build_dir: str,
|
||||
imgfmt: str, imgproto: str, aiomode: str,
|
||||
cachemode: Optional[str] = None,
|
||||
imgopts: Optional[str] = None,
|
||||
misalign: bool = False,
|
||||
@ -211,14 +212,8 @@ class TestEnv(ContextManager['TestEnv']):
|
||||
# which are needed to initialize some environment variables. They are
|
||||
# used by init_*() functions as well.
|
||||
|
||||
if os.path.islink(sys.argv[0]):
|
||||
# called from the build tree
|
||||
self.source_iotests = os.path.dirname(os.readlink(sys.argv[0]))
|
||||
self.build_iotests = os.path.dirname(os.path.abspath(sys.argv[0]))
|
||||
else:
|
||||
# called from the source tree
|
||||
self.source_iotests = os.getcwd()
|
||||
self.build_iotests = self.source_iotests
|
||||
self.source_iotests = source_dir
|
||||
self.build_iotests = build_dir
|
||||
|
||||
self.build_root = os.path.join(self.build_iotests, '..', '..')
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user