diff options
author | Jussi Pakkanen <jpakkane@gmail.com> | 2019-01-13 19:50:10 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-01-13 19:50:10 +0200 |
commit | 49557e15ec62c7db21b3619d957e4f65772660d6 (patch) | |
tree | bfab1c95f5e609f67384dc445540dc207e8de390 | |
parent | e02b79dc1e2e154b26a4dd6d4fff324d803b92ed (diff) | |
parent | 5c139032b80cda76a111744b745c04dacc17df42 (diff) | |
download | meson-49557e15ec62c7db21b3619d957e4f65772660d6.zip meson-49557e15ec62c7db21b3619d957e4f65772660d6.tar.gz meson-49557e15ec62c7db21b3619d957e4f65772660d6.tar.bz2 |
Merge pull request #4731 from mensinda/introBreak2
mintro: Changes to the introspection API
-rw-r--r-- | docs/markdown/snippets/introspect_breaking_format.md | 11 | ||||
-rw-r--r-- | mesonbuild/mintro.py | 16 | ||||
-rwxr-xr-x | run_unittests.py | 30 |
3 files changed, 29 insertions, 28 deletions
diff --git a/docs/markdown/snippets/introspect_breaking_format.md b/docs/markdown/snippets/introspect_breaking_format.md new file mode 100644 index 0000000..c96c82c --- /dev/null +++ b/docs/markdown/snippets/introspect_breaking_format.md @@ -0,0 +1,11 @@ +## Changed the JSON format of the introspection + +All paths used in the meson introspection JSON format are now absolute. This +affects the `filename` key in the targets introspection and the output of +`--buildsystem-files`. + +Furthermore, the `filename` and `install_filename` keys in the targets +introspection are now lists of strings with identical length. + +The `--traget-files` option is now deprecated, since the same information +can be acquired from the `--tragets` introspection API. diff --git a/mesonbuild/mintro.py b/mesonbuild/mintro.py index df9fe73..829a05f 100644 --- a/mesonbuild/mintro.py +++ b/mesonbuild/mintro.py @@ -117,6 +117,7 @@ def list_installed(installdata): def list_targets(builddata: build.Build, installdata, backend: backends.Backend): tlist = [] + build_dir = builddata.environment.get_build_dir() # Fast lookup table for installation files install_lookuptable = {} @@ -128,24 +129,18 @@ def list_targets(builddata: build.Build, installdata, backend: backends.Backend) if not isinstance(target, build.Target): raise RuntimeError('The target object in `builddata.get_targets()` is not of type `build.Target`. Please file a bug with this error message.') - # TODO Change this to the full list in a seperate PR - fname = [os.path.join(target.subdir, x) for x in target.get_outputs()] - if len(fname) == 1: - fname = fname[0] - t = { 'name': target.get_basename(), 'id': idname, 'type': target.get_typename(), - 'filename': fname, + 'filename': [os.path.join(build_dir, target.subdir, x) for x in target.get_outputs()], 'build_by_default': target.build_by_default, 'target_sources': backend.get_introspection_data(idname, target) } if installdata and target.should_install(): t['installed'] = True - # TODO Change this to the full list in a seperate PR - t['install_filename'] = [install_lookuptable.get(x, None) for x in target.get_outputs()][0] + t['install_filename'] = [install_lookuptable.get(x, None) for x in target.get_outputs()] else: t['installed'] = False tlist.append(t) @@ -299,6 +294,7 @@ def list_buildoptions_from_source(sourcedir, backend, indent): print(json.dumps(list_buildoptions(intr.coredata), indent=indent)) def list_target_files(target_name, targets, builddata: build.Build): + sys.stderr.write("WARNING: The --target-files introspection API is deprecated. Use --targets instead.\n") result = [] tgt = None @@ -314,7 +310,6 @@ def list_target_files(target_name, targets, builddata: build.Build): for i in tgt['target_sources']: result += i['sources'] + i['generated_sources'] - # TODO Remove this line in a future PR with other breaking changes result = list(map(lambda x: os.path.relpath(x, builddata.environment.get_source_dir()), result)) return result @@ -387,6 +382,7 @@ def find_buildsystem_files_list(src_dir): def list_buildsystem_files(builddata: build.Build): src_dir = builddata.environment.get_source_dir() filelist = find_buildsystem_files_list(src_dir) + filelist = [os.path.join(src_dir, x) for x in filelist] return filelist def list_deps(coredata: cdata.CoreData): @@ -531,7 +527,7 @@ def run(options): targets_file = os.path.join(infodir, 'intro-targets.json') with open(targets_file, 'r') as fp: targets = json.load(fp) - builddata = build.load(options.builddir) # TODO remove this in a breaking changes PR + builddata = build.load(options.builddir) results += [('target_files', list_target_files(options.target_files, targets, builddata))] # Extract introspection information from JSON diff --git a/run_unittests.py b/run_unittests.py index 55a5bd6..5f3181d 100755 --- a/run_unittests.py +++ b/run_unittests.py @@ -1439,7 +1439,7 @@ class AllPlatformTests(BasePlatformTests): # Get name of static library targets = self.introspect('--targets') self.assertEqual(len(targets), 1) - libname = targets[0]['filename'] # TODO Change filename back to a list again + libname = targets[0]['filename'][0] # Build and get contents of static library self.build() before = self._run(['ar', 't', os.path.join(self.builddir, libname)]).split() @@ -1496,8 +1496,8 @@ class AllPlatformTests(BasePlatformTests): intro = self.introspect('--targets') if intro[0]['type'] == 'executable': intro = intro[::-1] - self.assertPathListEqual([intro[0]['install_filename']], ['/usr/lib/libstat.a']) - self.assertPathListEqual([intro[1]['install_filename']], ['/usr/bin/prog' + exe_suffix]) + self.assertPathListEqual(intro[0]['install_filename'], ['/usr/lib/libstat.a']) + self.assertPathListEqual(intro[1]['install_filename'], ['/usr/bin/prog' + exe_suffix]) def test_install_introspection_multiple_outputs(self): ''' @@ -1514,14 +1514,10 @@ class AllPlatformTests(BasePlatformTests): intro = self.introspect('--targets') if intro[0]['type'] == 'executable': intro = intro[::-1] - #self.assertPathListEqual(intro[0]['install_filename'], ['/usr/include/diff.h', '/usr/bin/diff.sh']) - #self.assertPathListEqual(intro[1]['install_filename'], ['/opt/same.h', '/opt/same.sh']) - #self.assertPathListEqual(intro[2]['install_filename'], ['/usr/include/first.h', None]) - #self.assertPathListEqual(intro[3]['install_filename'], [None, '/usr/bin/second.sh']) - self.assertPathListEqual([intro[0]['install_filename']], ['/usr/include/diff.h']) - self.assertPathListEqual([intro[1]['install_filename']], ['/opt/same.h']) - self.assertPathListEqual([intro[2]['install_filename']], ['/usr/include/first.h']) - self.assertPathListEqual([intro[3]['install_filename']], [None]) + self.assertPathListEqual(intro[0]['install_filename'], ['/usr/include/diff.h', '/usr/bin/diff.sh']) + self.assertPathListEqual(intro[1]['install_filename'], ['/opt/same.h', '/opt/same.sh']) + self.assertPathListEqual(intro[2]['install_filename'], ['/usr/include/first.h', None]) + self.assertPathListEqual(intro[3]['install_filename'], [None, '/usr/bin/second.sh']) def test_uninstall(self): exename = os.path.join(self.installdir, 'usr/bin/prog' + exe_suffix) @@ -2569,7 +2565,6 @@ int main(int argc, char **argv) { for t in t_intro: id = t['id'] tf_intro = self.introspect(['--target-files', id]) - #tf_intro = list(map(lambda x: os.path.relpath(x, testdir), tf_intro)) TODO make paths absolute in future PR self.assertEqual(tf_intro, expected[id]) self.wipe() @@ -2584,9 +2579,6 @@ int main(int argc, char **argv) { for t in t_intro: id = t['id'] tf_intro = self.introspect(['--target-files', id]) - print(tf_intro) - #tf_intro = list(map(lambda x: os.path.relpath(x, testdir), tf_intro)) TODO make paths absolute in future PR - print(tf_intro) self.assertEqual(tf_intro, expected[id]) self.wipe() @@ -3180,7 +3172,7 @@ recommended as it is not supported on some platforms''') ('name', str), ('id', str), ('type', str), - ('filename', str), + ('filename', list), ('build_by_default', bool), ('target_sources', list), ('installed', bool), @@ -3231,7 +3223,9 @@ recommended as it is not supported on some platforms''') self.assertDictEqual(buildopts_to_find, {}) # Check buildsystem_files - self.assertPathListEqual(res['buildsystem_files'], ['meson.build', 'sharedlib/meson.build', 'staticlib/meson.build']) + bs_files = ['meson.build', 'sharedlib/meson.build', 'staticlib/meson.build'] + bs_files = [os.path.join(testdir, x) for x in bs_files] + self.assertPathListEqual(res['buildsystem_files'], bs_files) # Check dependencies dependencies_to_find = ['threads'] @@ -4417,7 +4411,7 @@ class LinuxlikeTests(BasePlatformTests): break self.assertIsInstance(docbook_target, dict) ifile = self.introspect(['--target-files', 'generated-gdbus-docbook@cus'])[0] - self.assertListEqual([t['filename']], ['gdbus/generated-gdbus-doc-' + os.path.basename(ifile)]) + self.assertListEqual(t['filename'], [os.path.join(self.builddir, 'gdbus/generated-gdbus-doc-' + os.path.basename(ifile))]) def test_build_rpath(self): if is_cygwin(): |