diff --git a/docs/markdown/IDE-integration.md b/docs/markdown/IDE-integration.md index 5f0c0a66ff64..e23b77a8aab6 100644 --- a/docs/markdown/IDE-integration.md +++ b/docs/markdown/IDE-integration.md @@ -70,6 +70,15 @@ The possible values for `section` are: To set the options, use the `meson configure` command. +It is also possible to get the default buildoptions without a build directory by providing the root `meson.build` instead of a build directory to `meson introspect --buildoptions`. + +Running `--buildoptions` without a build directory produces the same output as running +it with a freshly configured build directory. + +However, this behavior is not guaranteed if subprojects are present. Due to internal +limitations all subprojects are processed even if they are never used in a real meson run. +Because of this options for the subprojects can differ. + ## Tests Compilation and unit tests are done as usual by running the `ninja` and `ninja test` commands. A JSON formatted result log can be found in `workspace/project/builddir/meson-logs/testlog.json`. diff --git a/docs/markdown/snippets/introspect_buildoptions_no_bd.md b/docs/markdown/snippets/introspect_buildoptions_no_bd.md new file mode 100644 index 000000000000..f00847447169 --- /dev/null +++ b/docs/markdown/snippets/introspect_buildoptions_no_bd.md @@ -0,0 +1,11 @@ +## `introspect --buildoptions` can now be used without configured build directory + +It is now possible to run `meson introspect --buildoptions /path/to/meson.build` +without a configured build directory. + +Running `--buildoptions` without a build directory produces the same output as running +it with a freshly configured build directory. + +However, this behavior is not guaranteed if subprojects are present. Due to internal +limitations all subprojects are processed even if they are never used in a real meson run. +Because of this options for the subprojects can differ. \ No newline at end of file diff --git a/run_unittests.py b/run_unittests.py index 91daa1b2f318..92df6d15147d 100755 --- a/run_unittests.py +++ b/run_unittests.py @@ -1186,7 +1186,12 @@ def introspect_directory(self, directory, args): args = [args] out = subprocess.check_output(self.mintro_command + args + [directory], universal_newlines=True) - return json.loads(out) + try: + obj = json.loads(out) + except Exception as e: + print(out) + raise e + return obj def assertPathEqual(self, path1, path2): ''' @@ -3053,6 +3058,15 @@ def test_introspect_projectinfo_subprojects(self): } self.assertDictEqual(res, expected) + def test_introspect_buildoptions_without_configured_build(self): + testdir = os.path.join(self.unit_test_dir, '51 introspect buildoptions') + testfile = os.path.join(testdir, 'meson.build') + res_nb = self.introspect_directory(testfile, ['--buildoptions'] + self.meson_args) + self.init(testdir, default_args=False) + res_wb = self.introspect('--buildoptions') + self.maxDiff = None + self.assertListEqual(res_nb, res_wb) + class FailureTests(BasePlatformTests): ''' diff --git a/test cases/unit/51 introspect buildoptions/c_compiler.py b/test cases/unit/51 introspect buildoptions/c_compiler.py new file mode 100644 index 000000000000..c7241e7e0975 --- /dev/null +++ b/test cases/unit/51 introspect buildoptions/c_compiler.py @@ -0,0 +1,3 @@ +#!/usr/bin/env python3 + +print('c') diff --git a/test cases/unit/51 introspect buildoptions/meson.build b/test cases/unit/51 introspect buildoptions/meson.build new file mode 100644 index 000000000000..e94ef6170c5d --- /dev/null +++ b/test cases/unit/51 introspect buildoptions/meson.build @@ -0,0 +1,11 @@ +project('introspect buildargs', ['c'], default_options: ['c_std=c11', 'cpp_std=c++14', 'buildtype=release']) + +subA = subproject('projectA') + +r = run_command(find_program('c_compiler.py')) +if r.returncode() != 0 + error('FAILED') +endif + +add_languages(r.stdout().strip(), required: true) +add_languages('afgggergearvearghergervergreaergaergasv', required: false) diff --git a/test cases/unit/51 introspect buildoptions/meson_options.txt b/test cases/unit/51 introspect buildoptions/meson_options.txt new file mode 100644 index 000000000000..61f9a8db4dc5 --- /dev/null +++ b/test cases/unit/51 introspect buildoptions/meson_options.txt @@ -0,0 +1,2 @@ +option('max_register_count', type: 'integer', min: 0, value: 125) +option('use_external_fmt', type: 'boolean', value: false) diff --git a/test cases/unit/51 introspect buildoptions/subprojects/evilFile.txt b/test cases/unit/51 introspect buildoptions/subprojects/evilFile.txt new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/test cases/unit/51 introspect buildoptions/subprojects/projectA/meson.build b/test cases/unit/51 introspect buildoptions/subprojects/projectA/meson.build new file mode 100644 index 000000000000..1ab9ee8a5e9e --- /dev/null +++ b/test cases/unit/51 introspect buildoptions/subprojects/projectA/meson.build @@ -0,0 +1,3 @@ +project('introspect subproject A', 'c', default_options: ['cpp_std=c++11', 'buildtype=debug']) + +add_languages('cpp') diff --git a/test cases/unit/51 introspect buildoptions/subprojects/projectA/meson_options.txt b/test cases/unit/51 introspect buildoptions/subprojects/projectA/meson_options.txt new file mode 100644 index 000000000000..fa77f954a3fd --- /dev/null +++ b/test cases/unit/51 introspect buildoptions/subprojects/projectA/meson_options.txt @@ -0,0 +1 @@ +option('subproj_var', type: 'boolean', value: false) diff --git a/test cases/unit/51 introspect buildoptions/subprojects/projectBad/meson.build b/test cases/unit/51 introspect buildoptions/subprojects/projectBad/meson.build new file mode 100644 index 000000000000..500c1b9cc3ae --- /dev/null +++ b/test cases/unit/51 introspect buildoptions/subprojects/projectBad/meson.build @@ -0,0 +1,9 @@ +pfggggaergaeg(sdgrgjgn)aga + +rgqeh +th +thtr +e +tb +tbqebt +tbqebttrtt \ No newline at end of file diff --git a/test cases/unit/51 introspect buildoptions/subprojects/projectBad/meson_options.txt b/test cases/unit/51 introspect buildoptions/subprojects/projectBad/meson_options.txt new file mode 100644 index 000000000000..f15d3529f73c --- /dev/null +++ b/test cases/unit/51 introspect buildoptions/subprojects/projectBad/meson_options.txt @@ -0,0 +1 @@ +option('should_not_appear', type: 'integer', min: 0, value: 125)