From 0de17de04abb73ba06150846fd45564f95ca88f4 Mon Sep 17 00:00:00 2001 From: memsharded Date: Wed, 15 Feb 2023 10:13:31 +0100 Subject: [PATCH] [develop2] remove MesonDeps --- conan/tools/meson/__init__.py | 1 - conan/tools/meson/meson.py | 5 - conan/tools/meson/mesondeps.py | 107 ------------------ conans/client/generators/__init__.py | 2 +- .../meson/test_meson_and_gnu_deps_flags.py | 61 +++------- 5 files changed, 14 insertions(+), 162 deletions(-) delete mode 100644 conan/tools/meson/mesondeps.py diff --git a/conan/tools/meson/__init__.py b/conan/tools/meson/__init__.py index b1fe7d9b9a9..02ff5168f2d 100644 --- a/conan/tools/meson/__init__.py +++ b/conan/tools/meson/__init__.py @@ -1,4 +1,3 @@ from conan.tools.meson.meson import Meson -from conan.tools.meson.mesondeps import MesonDeps from conan.tools.meson.toolchain import MesonToolchain diff --git a/conan/tools/meson/meson.py b/conan/tools/meson/meson.py index 8ba968ec1da..c0da99511a8 100644 --- a/conan/tools/meson/meson.py +++ b/conan/tools/meson/meson.py @@ -2,7 +2,6 @@ from conan.tools.build import build_jobs from conan.tools.meson.toolchain import MesonToolchain -from conan.tools.meson.mesondeps import MesonDeps class Meson(object): @@ -31,7 +30,6 @@ def configure(self, reconfigure=False): generators_folder = self._conanfile.generators_folder cross = os.path.join(generators_folder, MesonToolchain.cross_filename) native = os.path.join(generators_folder, MesonToolchain.native_filename) - deps_flags = os.path.join(generators_folder, MesonDeps.filename) # extra machine files layer meson_filenames = [] if os.path.exists(cross): cmd_param = " --cross-file" @@ -40,9 +38,6 @@ def configure(self, reconfigure=False): cmd_param = " --native-file" meson_filenames.append(native) - if os.path.exists(deps_flags): - meson_filenames.append(deps_flags) - machine_files = self._conanfile.conf.get("tools.meson.mesontoolchain:extra_machine_files", default=[], check_type=list) if machine_files: diff --git a/conan/tools/meson/mesondeps.py b/conan/tools/meson/mesondeps.py deleted file mode 100644 index a5c6e34c89a..00000000000 --- a/conan/tools/meson/mesondeps.py +++ /dev/null @@ -1,107 +0,0 @@ -import textwrap - -from jinja2 import Template - -from conan.internal import check_duplicated_generator -from conan.tools.gnu.gnudeps_flags import GnuDepsFlags -from conan.tools.meson.helpers import to_meson_value -from conans.model.build_info import CppInfo -from conans.util.files import save - - -class MesonDeps: - """Generator that manages all the GNU flags from all the dependencies""" - - filename = "conan_meson_deps_flags.ini" - - _meson_file_template = textwrap.dedent(""" - [constants] - deps_c_args = {{c_args}} - deps_c_link_args = {{c_link_args}} - deps_cpp_args = {{cpp_args}} - deps_cpp_link_args = {{cpp_link_args}} - """) - - def __init__(self, conanfile): - self._conanfile = conanfile - self._ordered_deps = [] - # constants - self.c_args = [] - self.c_link_args = [] - self.cpp_args = [] - self.cpp_link_args = [] - - # TODO: Add all this logic to GnuDepsFlags? Distinguish between GnuFlags and GnuDepsFlags? - @property - def ordered_deps(self): - if not self._ordered_deps: - deps = self._conanfile.dependencies.host.topological_sort - self._ordered_deps = [dep for dep in reversed(deps.values())] - return self._ordered_deps - - def _get_cpp_info(self): - ret = CppInfo() - for dep in self.ordered_deps: - dep_cppinfo = dep.cpp_info.aggregated_components() - # In case we have components, aggregate them, we do not support isolated - # "targets" with autotools - ret.merge(dep_cppinfo) - return ret - - def _rpaths_flags(self): - flags = [] - for dep in self.ordered_deps: - flags.extend(["-Wl,-rpath -Wl,{}".format(libdir) for libdir in dep.cpp_info.libdirs - if dep.options.get_safe("shared", False)]) - return flags - - def get_gnu_flags(self): - flags = GnuDepsFlags(self._conanfile, self._get_cpp_info()) - - # cpp_flags - cpp_flags = [] - cpp_flags.extend(flags.include_paths) - cpp_flags.extend(flags.defines) - - # Ldflags - ldflags = flags.sharedlinkflags - ldflags.extend(flags.exelinkflags) - ldflags.extend(flags.frameworks) - ldflags.extend(flags.framework_paths) - ldflags.extend(flags.lib_paths) - - # set the rpath in Macos so that the library are found in the configure step - if self._conanfile.settings.get_safe("os") == "Macos": - ldflags.extend(self._rpaths_flags()) - - # libs - libs = flags.libs - libs.extend(flags.system_libs) - - # cflags - cflags = flags.cflags - cxxflags = flags.cxxflags - return cflags, cxxflags, cpp_flags, ldflags, libs - - def _context(self): - cflags, cxxflags, cpp_flags, ldflags, _ = self.get_gnu_flags() - self.c_args.extend(cflags + cpp_flags) - self.cpp_args.extend(cxxflags + cpp_flags) - self.c_link_args.extend(ldflags) - self.cpp_link_args.extend(ldflags) - - return { - "c_args": to_meson_value(self.c_args), - "c_link_args": to_meson_value(self.c_link_args), - "cpp_args": to_meson_value(self.cpp_args), - "cpp_link_args": to_meson_value(self.cpp_link_args), - } - - def _content(self): - context = self._context() - content = Template(self._meson_file_template).render(context) - return content - - def generate(self): - check_duplicated_generator(self, self._conanfile) - save(self.filename, self._content()) diff --git a/conans/client/generators/__init__.py b/conans/client/generators/__init__.py index 6b330c83308..da5ec38f31b 100644 --- a/conans/client/generators/__init__.py +++ b/conans/client/generators/__init__.py @@ -7,7 +7,7 @@ from conans.util.files import save, mkdir, chdir _generators = {"CMakeToolchain": "conan.tools.cmake", "CMakeDeps": "conan.tools.cmake", - "MesonToolchain": "conan.tools.meson", "MesonDeps": "conan.tools.meson", + "MesonToolchain": "conan.tools.meson", "MSBuildDeps": "conan.tools.microsoft", "MSBuildToolchain": "conan.tools.microsoft", "NMakeToolchain": "conan.tools.microsoft", "NMakeDeps": "conan.tools.microsoft", "VCVars": "conan.tools.microsoft", diff --git a/conans/test/functional/toolchains/meson/test_meson_and_gnu_deps_flags.py b/conans/test/functional/toolchains/meson/test_meson_and_gnu_deps_flags.py index 82b68f1cffd..0d7930e5d18 100644 --- a/conans/test/functional/toolchains/meson/test_meson_and_gnu_deps_flags.py +++ b/conans/test/functional/toolchains/meson/test_meson_and_gnu_deps_flags.py @@ -2,55 +2,19 @@ import platform import textwrap -from conans.test.assets.sources import gen_function_cpp +import pytest + from conans.test.functional.toolchains.meson._base import TestMesonBase from conans.test.utils.tools import TestClient class TestMesonToolchainAndGnuFlags(TestMesonBase): - def test_mesondeps(self): - client = TestClient(path_with_spaces=False) - client.run("new cmake_lib -d name=hello -d version=0.1") - client.run("create .") - app = gen_function_cpp(name="main", includes=["hello"], calls=["hello"]) - - conanfile_py = textwrap.dedent(""" - from conan import ConanFile - from conan.tools.meson import Meson - - class App(ConanFile): - settings = "os", "arch", "compiler", "build_type" - requires = "hello/0.1" - generators = "MesonDeps", "MesonToolchain" - - def layout(self): - self.folders.build = "build" - - def build(self): - meson = Meson(self) - meson.configure() - meson.build() - """) - - meson_build = textwrap.dedent(""" - project('tutorial', 'cpp') - cxx = meson.get_compiler('cpp') - hello = cxx.find_library('hello', required: true) - executable('demo', 'main.cpp', dependencies: hello) - """) - - client.save({"conanfile.py": conanfile_py, - "meson.build": meson_build, - "main.cpp": app}, - clean_first=True) - - client.run("build .") - assert "[2/2] Linking target demo" in client.out - + @pytest.mark.tool("meson") + @pytest.mark.tool("pkg_config") def test_mesondeps_flags_are_being_appended_and_not_replacing_toolchain_ones(self): """ - Test MesonDeps and MesonToolchain are keeping all the flags/definitions defined + Test PkgConfigDeps and MesonToolchain are keeping all the flags/definitions defined from both generators and nothing is being messed up. """ client = TestClient(path_with_spaces=False) @@ -69,7 +33,6 @@ class HelloConan(ConanFile): version = "0.1" def package_info(self): - self.cpp_info.libs = ["hello"] self.cpp_info.cxxflags = [{}] self.cpp_info.defines = ['DEF1=one_string', 'DEF2=other_string'] """.format(deps_flags)) @@ -84,16 +47,16 @@ class OtherConan(ConanFile): version = "0.1" def package_info(self): - self.cpp_info.libs = ["other"] self.cpp_info.defines = ['DEF3=simple_string'] """) client.save({"conanfile.py": conanfile_py}, clean_first=True) client.run("create .") - # Consumer using MesonDeps and MesonToolchain + # Consumer using PkgConfigDeps and MesonToolchain conanfile_py = textwrap.dedent(""" from conan import ConanFile - from conan.tools.meson import Meson, MesonDeps, MesonToolchain + from conan.tools.meson import Meson, MesonToolchain + from conan.tools.gnu import PkgConfigDeps class App(ConanFile): settings = "os", "arch", "compiler", "build_type" @@ -103,8 +66,8 @@ def layout(self): self.folders.build = "build" def generate(self): - tc = MesonDeps(self) - tc.generate() + deps = PkgConfigDeps(self) + deps.generate() tc = MesonToolchain(self) tc.preprocessor_definitions["VAR"] = "VALUE" tc.preprocessor_definitions["VAR2"] = "VALUE2" @@ -119,8 +82,10 @@ def build(self): meson_build = textwrap.dedent(""" project('tutorial', 'cpp') cxx = meson.get_compiler('cpp') + hello = dependency('hello', version : '>=0.1') + other = dependency('other', version : '>=0.1') # It's not needed to declare "hello/0.1" as a dependency, only interested in flags - executable('demo', 'main.cpp') + executable('demo', 'main.cpp', dependencies: [hello, other]) """) main = textwrap.dedent("""