diff --git a/conans/client/build/meson.py b/conans/client/build/meson.py index 7cd6eab512f..8edf5f71e97 100644 --- a/conans/client/build/meson.py +++ b/conans/client/build/meson.py @@ -185,10 +185,7 @@ def _build(): else: _build() - def _run_ninja_targets(self, args=None, build_dir=None, targets=None): - if self.backend != "ninja": - raise ConanException("Build only supported with 'ninja' backend") - + 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 @@ -197,7 +194,10 @@ def _run_ninja_targets(self, args=None, build_dir=None, targets=None): 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 [] @@ -214,7 +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) - 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 install(self, args=None, build_dir=None): if not self._conanfile.should_install: @@ -223,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 \ @@ -231,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()