diff options
author | Paolo Bonzini <pbonzini@redhat.com> | 2020-10-26 08:33:19 -0400 |
---|---|---|
committer | Paolo Bonzini <pbonzini@redhat.com> | 2020-12-14 10:42:32 +0100 |
commit | 879e9d19f5d0db2450de2dfd6fdc9a31043f64ab (patch) | |
tree | 3fd193346467f8f4271ae7dbd7f933428abfec4c /mesonbuild/mintro.py | |
parent | bab108742244bdfde769ea34424a0c0722a460c2 (diff) | |
download | meson-879e9d19f5d0db2450de2dfd6fdc9a31043f64ab.zip meson-879e9d19f5d0db2450de2dfd6fdc9a31043f64ab.tar.gz meson-879e9d19f5d0db2450de2dfd6fdc9a31043f64ab.tar.bz2 |
mintro: export functions to load the meson-info files
With the next patch, "meson test" will be using the targets introspection
information. Provide helper functions to share bits of code between
mintro.py and mtest.py.
Diffstat (limited to 'mesonbuild/mintro.py')
-rw-r--r-- | mesonbuild/mintro.py | 47 |
1 files changed, 30 insertions, 17 deletions
diff --git a/mesonbuild/mintro.py b/mesonbuild/mintro.py index d36927f..f6262c3 100644 --- a/mesonbuild/mintro.py +++ b/mesonbuild/mintro.py @@ -385,12 +385,25 @@ def print_results(options: argparse.Namespace, results: T.Sequence[T.Tuple[str, print(json.dumps(out, indent=indent)) return 0 +def get_infodir(builddir: T.Optional[str] = None) -> str: + infodir = 'meson-info' + if builddir is not None: + infodir = os.path.join(builddir, infodir) + return infodir + +def get_info_file(infodir: str, kind: T.Optional[str] = None) -> str: + return os.path.join(infodir, + 'meson-info.json' if not kind else 'intro-{}.json'.format(kind)) + +def load_info_file(infodir: str, kind: T.Optional[str] = None) -> T.Any: + with open(get_info_file(infodir, kind), 'r') as fp: + return json.load(fp) + def run(options: argparse.Namespace) -> int: datadir = 'meson-private' - infodir = 'meson-info' + infodir = get_infodir(options.builddir) if options.builddir is not None: datadir = os.path.join(options.builddir, datadir) - infodir = os.path.join(options.builddir, infodir) indent = 4 if options.indent else None results = [] # type: T.List[T.Tuple[str, T.Union[dict, T.List[T.Any]]]] sourcedir = '.' if options.builddir == 'meson.build' else options.builddir[:-11] @@ -411,17 +424,18 @@ def run(options: argparse.Namespace) -> int: results += [(key, val.no_bd(intr))] return print_results(options, results, indent) - infofile = get_meson_info_file(infodir) - if not os.path.isdir(datadir) or not os.path.isdir(infodir) or not os.path.isfile(infofile): - print('Current directory is not a meson build directory.\n' - 'Please specify a valid build dir or change the working directory to it.\n' - 'It is also possible that the build directory was generated with an old\n' - 'meson version. Please regenerate it in this case.') - return 1 - - with open(infofile, 'r') as fp: - raw = json.load(fp) + try: + raw = load_info_file(infodir) intro_vers = raw.get('introspection', {}).get('version', {}).get('full', '0.0.0') + except FileNotFoundError: + if not os.path.isdir(datadir) or not os.path.isdir(infodir): + print('Current directory is not a meson build directory.\n' + 'Please specify a valid build dir or change the working directory to it.') + else: + print('Introspection file {} does not exist.\n' + 'It is also possible that the build directory was generated with an old\n' + 'meson version. Please regenerate it in this case.'.format(get_info_file(infodir))) + return 1 vers_to_check = get_meson_introspection_required_version() for i in vers_to_check: @@ -437,12 +451,11 @@ def run(options: argparse.Namespace) -> int: continue if not options.all and not getattr(options, i, False): continue - curr = os.path.join(infodir, 'intro-{}.json'.format(i)) - if not os.path.isfile(curr): - print('Introspection file {} does not exist.'.format(curr)) + try: + results += [(i, load_info_file(infodir, i))] + except FileNotFoundError: + print('Introspection file {} does not exist.'.format(get_info_file(infodir, i))) return 1 - with open(curr, 'r') as fp: - results += [(i, json.load(fp))] return print_results(options, results, indent) |