From e4f219c8e97c97a635190bf44e2948dad9d6685e Mon Sep 17 00:00:00 2001 From: Makogan Date: Thu, 27 Jan 2022 21:37:31 -0500 Subject: [PATCH 1/2] Allow meson wrapper to use backends other than ninja --- conans/client/build/meson.py | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/conans/client/build/meson.py b/conans/client/build/meson.py index 7cd6eab512f..f773a8ab5d0 100644 --- a/conans/client/build/meson.py +++ b/conans/client/build/meson.py @@ -185,6 +185,17 @@ def _build(): else: _build() + def _run_meson_targets(self, args=None, build_dir=None, targets=None): + args = args or [] + build_dir = build_dir or self.build_dir or self._conanfile.build_folder + + arg_list = join_arguments([ + '-C "%s"' % build_dir, + args_to_string(args), + args_to_string(targets) + ]) + self._run("meson compile %s" % arg_list) + def _run_ninja_targets(self, args=None, build_dir=None, targets=None): if self.backend != "ninja": raise ConanException("Build only supported with 'ninja' backend") @@ -214,7 +225,11 @@ def build(self, args=None, build_dir=None, targets=None): if not self._conanfile.should_build: return conan_v2_error("build_type setting should be defined.", not self._build_type) - self._run_ninja_targets(args=args, build_dir=build_dir, targets=targets) + if self.backend == "ninja": + self._run_ninja_targets(args=args, build_dir=build_dir, targets=targets) + else: + self._run_meson_targets(args=args, build_dir=build_dir, targets=targets) + def install(self, args=None, build_dir=None): if not self._conanfile.should_install: From 293c1d6c2400afe34d471a6c0dfab8d2d2fa13cd Mon Sep 17 00:00:00 2001 From: Francisco Ramirez de Anton Date: Tue, 1 Feb 2022 13:10:21 +0100 Subject: [PATCH 2/2] Minor refactor and adding a UT --- conans/client/build/meson.py | 29 +++++-------------- .../test/unittests/client/build/meson_test.py | 15 ++++++++++ 2 files changed, 22 insertions(+), 22 deletions(-) diff --git a/conans/client/build/meson.py b/conans/client/build/meson.py index f773a8ab5d0..8edf5f71e97 100644 --- a/conans/client/build/meson.py +++ b/conans/client/build/meson.py @@ -194,21 +194,10 @@ def _run_meson_targets(self, args=None, build_dir=None, targets=None): args_to_string(args), args_to_string(targets) ]) - self._run("meson compile %s" % arg_list) - - def _run_ninja_targets(self, args=None, build_dir=None, targets=None): - if self.backend != "ninja": - raise ConanException("Build only supported with 'ninja' backend") - - args = args or [] - build_dir = build_dir or self.build_dir or self._conanfile.build_folder - - arg_list = join_arguments([ - '-C "%s"' % build_dir, - args_to_string(args), - args_to_string(targets) - ]) - self._run("ninja %s" % arg_list) + # FIXME: We are assuming for other backends that meson version is > 0.55.0 + # so you can use new command "meson compile" + command = "ninja" if self.backend == "ninja" else "meson compile" + self._run("%s %s" % (command, arg_list)) def _run_meson_command(self, subcommand=None, args=None, build_dir=None): args = args or [] @@ -225,11 +214,7 @@ def build(self, args=None, build_dir=None, targets=None): if not self._conanfile.should_build: return conan_v2_error("build_type setting should be defined.", not self._build_type) - if self.backend == "ninja": - self._run_ninja_targets(args=args, build_dir=build_dir, targets=targets) - else: - self._run_meson_targets(args=args, build_dir=build_dir, targets=targets) - + self._run_meson_targets(args=args, build_dir=build_dir, targets=targets) def install(self, args=None, build_dir=None): if not self._conanfile.should_install: @@ -238,7 +223,7 @@ def install(self, args=None, build_dir=None): if not self.options.get('prefix'): raise ConanException("'prefix' not defined for 'meson.install()'\n" "Make sure 'package_folder' is defined") - self._run_ninja_targets(args=args, build_dir=build_dir, targets=["install"]) + self._run_meson_targets(args=args, build_dir=build_dir, targets=["install"]) def test(self, args=None, build_dir=None, targets=None): if not self._conanfile.should_test or not get_env("CONAN_RUN_TESTS", True) or \ @@ -246,7 +231,7 @@ def test(self, args=None, build_dir=None, targets=None): return if not targets: targets = ["test"] - self._run_ninja_targets(args=args, build_dir=build_dir, targets=targets) + self._run_meson_targets(args=args, build_dir=build_dir, targets=targets) def meson_install(self, args=None, build_dir=None): if not self._conanfile.should_install: diff --git a/conans/test/unittests/client/build/meson_test.py b/conans/test/unittests/client/build/meson_test.py index 6a2adf025d7..fff323de274 100644 --- a/conans/test/unittests/client/build/meson_test.py +++ b/conans/test/unittests/client/build/meson_test.py @@ -183,6 +183,21 @@ def test_folders(self): self.assertEqual("meson install -C \"%s\"" % build_expected, conan_file.command) + def test_other_backend(self): + conan_file = ConanFileMock() + conan_file.deps_cpp_info = MockDepsCppInfo() + conan_file.settings = Settings() + conan_file.folders.set_base_package(os.getcwd()) + meson = Meson(conan_file, backend="vs") + meson.configure() + self.assertIn("--backend=vs", conan_file.command) + meson.build() + self.assertIn("meson compile -C", conan_file.command) + meson.install() + self.assertIn("meson compile -C", conan_file.command) + meson.test() + self.assertIn("meson compile -C", conan_file.command) + def test_prefix(self): conan_file = ConanFileMock() conan_file.deps_cpp_info = MockDepsCppInfo()