From 31a703b008f7d907a9b871118c9240bde4d7f5d0 Mon Sep 17 00:00:00 2001 From: Ernesto de Gracia Herranz Date: Wed, 3 Apr 2024 16:46:45 +0200 Subject: [PATCH 1/8] fix: sysroot property --- conan/tools/meson/toolchain.py | 8 +++ .../functional/toolchains/meson/test_meson.py | 61 +++++++++++++++++++ 2 files changed, 69 insertions(+) diff --git a/conan/tools/meson/toolchain.py b/conan/tools/meson/toolchain.py index b7f945b31e9..a7867b825ea 100644 --- a/conan/tools/meson/toolchain.py +++ b/conan/tools/meson/toolchain.py @@ -396,6 +396,14 @@ def _sanitize_format(v): # These link_args have already the LDFLAGS env value so let's add only the new possible ones self.objc_link_args.extend(apple_flags + extra_flags["ldflags"]) self.objcpp_link_args.extend(apple_flags + extra_flags["ldflags"]) + # Meson properties + sys_root = self._conanfile.conf.get("tools.build:sysroot", check_type=str) + if sys_root: + self.properties["sys_root"] = sys_root + self.c_args.append("--sysroot=" + sys_root) + self.cpp_args.append("--sysroot=" + sys_root) + self.c_link_args.append("--sysroot=" + sys_root) + self.cpp_link_args.append("--sysroot=" + sys_root) if self.libcxx: self.cpp_args.append(self.libcxx) diff --git a/conans/test/functional/toolchains/meson/test_meson.py b/conans/test/functional/toolchains/meson/test_meson.py index e519a25f21f..97472a5985a 100644 --- a/conans/test/functional/toolchains/meson/test_meson.py +++ b/conans/test/functional/toolchains/meson/test_meson.py @@ -309,3 +309,64 @@ def build(self): client.run("build .") assert "unrecognized character escape sequence" not in str(client.out) # if Visual assert "unknown escape sequence" not in str(client.out) # if mingw + + +@pytest.mark.tool("meson") +@pytest.mark.skipif(sys.version_info.minor < 8, reason="Latest Meson versions needs Python >= 3.8") +@pytest.mark.skipif(platform.system() != "Darwin", reason="Requires apple-clang") +def test_meson_sysroot_flag(): + """ + Testing when users pass tools.build:sysroot on the profile + """ + profile = textwrap.dedent(""" + [settings] + os = Macos + os.version=10.11 + arch = armv7 + compiler = apple-clang + compiler.version = 12.0 + compiler.libcxx = libc++ + + [conf] + tools.build:sysroot = /my/new/sysroot/path + """) + myfilename = textwrap.dedent(""" + [project options] + my_option = 'fake-option' + """) + conanfile = textwrap.dedent(""" + from conan import ConanFile + from conan.tools.meson import Meson + class Pkg(ConanFile): + name = "test_name" + version = "1.0" + settings = "os", "compiler", "build_type", "arch" + generators = "MesonToolchain" + exports_sources = "meson.build", "src/*" + def build(self): + meson = Meson(self) + meson.configure() + meson.build() + def layout(self): + self.folders.build = "./test-build" + """) + client = TestClient() + client.save({"conanfile.py": conanfile, + "build/myfilename.ini": myfilename, + "meson.build": "project('tutorial', 'cpp')", # dummy one + "profile": profile}) + + client.run("install . -pr=profile") + client.run("build . -pr=profile", assert_error=False) + + # Check the meson configuration file + conan_meson = client.load("conan_meson_cross.ini") + assert re.search(r"sys_root = '/my/new/sysroot/path'", conan_meson) + assert re.search(r"c_args =.+--sysroot=/my/new/sysroot/path.+", conan_meson) + assert re.search(r"c_link_args =.+--sysroot=/my/new/sysroot/path.+", conan_meson) + assert re.search(r"cpp_args =.+--sysroot=/my/new/sysroot/path.+", conan_meson) + assert re.search(r"cpp_link_args =.+--sysroot=/my/new/sysroot/path.+", conan_meson) + + # Check the meson-log.txt + conan_log = client.load("./test-build/meson-logs/meson-log.txt") + assert r"--sysroot=/my/new/sysroot/path" in conan_log From b39adc40d9d839b9bc02dfe41e5f9a08c2e5f30a Mon Sep 17 00:00:00 2001 From: Ernesto de Gracia Herranz Date: Fri, 5 Apr 2024 15:57:26 +0200 Subject: [PATCH 2/8] remove flags --- conan/tools/meson/toolchain.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/conan/tools/meson/toolchain.py b/conan/tools/meson/toolchain.py index a7867b825ea..c373aae5036 100644 --- a/conan/tools/meson/toolchain.py +++ b/conan/tools/meson/toolchain.py @@ -400,10 +400,10 @@ def _sanitize_format(v): sys_root = self._conanfile.conf.get("tools.build:sysroot", check_type=str) if sys_root: self.properties["sys_root"] = sys_root - self.c_args.append("--sysroot=" + sys_root) - self.cpp_args.append("--sysroot=" + sys_root) - self.c_link_args.append("--sysroot=" + sys_root) - self.cpp_link_args.append("--sysroot=" + sys_root) + # self.c_args.append("--sysroot=" + sys_root) + # self.cpp_args.append("--sysroot=" + sys_root) + # self.c_link_args.append("--sysroot=" + sys_root) + # self.cpp_link_args.append("--sysroot=" + sys_root) if self.libcxx: self.cpp_args.append(self.libcxx) From a6556a89dd83af2ddb1da1e09516f03761e2c503 Mon Sep 17 00:00:00 2001 From: Uilian Ries Date: Mon, 8 Apr 2024 15:43:11 +0200 Subject: [PATCH 3/8] make linux test pass Signed-off-by: Uilian Ries --- conan/tools/meson/toolchain.py | 8 +- .../functional/toolchains/meson/test_meson.py | 82 ++++++++++++++++++- 2 files changed, 85 insertions(+), 5 deletions(-) diff --git a/conan/tools/meson/toolchain.py b/conan/tools/meson/toolchain.py index c373aae5036..a7867b825ea 100644 --- a/conan/tools/meson/toolchain.py +++ b/conan/tools/meson/toolchain.py @@ -400,10 +400,10 @@ def _sanitize_format(v): sys_root = self._conanfile.conf.get("tools.build:sysroot", check_type=str) if sys_root: self.properties["sys_root"] = sys_root - # self.c_args.append("--sysroot=" + sys_root) - # self.cpp_args.append("--sysroot=" + sys_root) - # self.c_link_args.append("--sysroot=" + sys_root) - # self.cpp_link_args.append("--sysroot=" + sys_root) + self.c_args.append("--sysroot=" + sys_root) + self.cpp_args.append("--sysroot=" + sys_root) + self.c_link_args.append("--sysroot=" + sys_root) + self.cpp_link_args.append("--sysroot=" + sys_root) if self.libcxx: self.cpp_args.append(self.libcxx) diff --git a/conans/test/functional/toolchains/meson/test_meson.py b/conans/test/functional/toolchains/meson/test_meson.py index 97472a5985a..765bb8069ca 100644 --- a/conans/test/functional/toolchains/meson/test_meson.py +++ b/conans/test/functional/toolchains/meson/test_meson.py @@ -9,7 +9,7 @@ from conans.model.recipe_ref import RecipeReference from conans.test.assets.sources import gen_function_cpp, gen_function_h from conans.test.functional.toolchains.meson._base import TestMesonBase -from conans.test.utils.tools import TestClient +from conans.test.utils.tools import TestClient, GenConanfile class MesonToolchainTest(TestMesonBase): @@ -370,3 +370,83 @@ def layout(self): # Check the meson-log.txt conan_log = client.load("./test-build/meson-logs/meson-log.txt") assert r"--sysroot=/my/new/sysroot/path" in conan_log + + +@pytest.mark.tool("autotools") +@pytest.mark.tool("meson") +@pytest.mark.skipif(platform.system() != "Linux", reason="Requires --sysroot on Linux") +def test_meson_sysroot_flag_cross(): + """ + Testing when users pass tools.build:sysroot on the profile + """ + profile = textwrap.dedent(""" + [settings] + os=Linux + arch=armv8 + compiler=gcc + compiler.version=8 + compiler.libcxx=libstdc++11 + build_type=Release + + [conf] + tools.build:sysroot = /my/new/sysroot/path + tools.build:compiler_executables={"c": "gcc", "cpp": "g++"} + """) + myfilename = textwrap.dedent(""" + [project options] + my_option = 'fake-option' + """) + conanfile = textwrap.dedent(""" + from conan import ConanFile + from conan.tools.meson import MesonToolchain, Meson + from conan.tools.gnu import PkgConfigDeps + class Pkg(ConanFile): + name = "test_name" + version = "1.0" + settings = "os", "compiler", "build_type", "arch" + exports_sources = "meson.build", "src/*" + #tool_requires = "pkgconf/2.1.0" + def build(self): + meson = Meson(self) + meson.configure() + meson.build() + def layout(self): + self.folders.build = "./test-build" + def requirements(self): + self.requires("foo/1.0") + def generate(self): + tc = MesonToolchain(self) + tc.generate() + tc = PkgConfigDeps(self) + tc.generate() + """) + meson_build = textwrap.dedent(""" + project('test_name', 'cpp') + pkg = import('pkgconfig') + zdep = dependency('foo', version : '>=0.1') + shared_library('test_name', 'src/test_name.cpp', install: true, dependencies : zdep) + install_headers('src/test_name.h') + """) + client = TestClient() + client.save({"conanfile.py": conanfile, + "build/myfilename.ini": myfilename, + "meson.build": meson_build, + "profile": profile, + "foo/conanfile.py": GenConanfile("foo", "1.0")}) + + client.run("create foo") + client.run("install . -pr:h=profile") + client.run("build . -pr:h=profile", assert_error=True) + + # Check the meson configuration file + print(f"CACHE: {client.cache_folder}") + conan_meson = client.load("conan_meson_cross.ini") + assert "sys_root = '/my/new/sysroot/path'\n" in conan_meson + assert re.search(r"c_args =.+--sysroot=/my/new/sysroot/path.+", conan_meson) + assert re.search(r"c_link_args =.+--sysroot=/my/new/sysroot/path.+", conan_meson) + assert re.search(r"cpp_args =.+--sysroot=/my/new/sysroot/path.+", conan_meson) + assert re.search(r"cpp_link_args =.+--sysroot=/my/new/sysroot/path.+", conan_meson) + + # Check the meson-log.txt + conan_log = client.load("./test-build/meson-logs/meson-log.txt") + assert r"--sysroot=/my/new/sysroot/path" in conan_log From 1a677ef572d96a5e9c6eb54ae9c56748559873b6 Mon Sep 17 00:00:00 2001 From: Uilian Ries Date: Tue, 9 Apr 2024 11:51:52 +0200 Subject: [PATCH 4/8] simplify meson toolchain test Signed-off-by: Uilian Ries --- .../functional/toolchains/meson/test_meson.py | 167 ++++++------------ 1 file changed, 52 insertions(+), 115 deletions(-) diff --git a/conans/test/functional/toolchains/meson/test_meson.py b/conans/test/functional/toolchains/meson/test_meson.py index 765bb8069ca..467d41695f0 100644 --- a/conans/test/functional/toolchains/meson/test_meson.py +++ b/conans/test/functional/toolchains/meson/test_meson.py @@ -9,7 +9,7 @@ from conans.model.recipe_ref import RecipeReference from conans.test.assets.sources import gen_function_cpp, gen_function_h from conans.test.functional.toolchains.meson._base import TestMesonBase -from conans.test.utils.tools import TestClient, GenConanfile +from conans.test.utils.tools import TestClient class MesonToolchainTest(TestMesonBase): @@ -312,73 +312,19 @@ def build(self): @pytest.mark.tool("meson") +@pytest.mark.skipif(platform.system() != "Linux", reason="Requires --sysroot on Linux") @pytest.mark.skipif(sys.version_info.minor < 8, reason="Latest Meson versions needs Python >= 3.8") -@pytest.mark.skipif(platform.system() != "Darwin", reason="Requires apple-clang") -def test_meson_sysroot_flag(): - """ - Testing when users pass tools.build:sysroot on the profile - """ - profile = textwrap.dedent(""" - [settings] - os = Macos - os.version=10.11 - arch = armv7 - compiler = apple-clang - compiler.version = 12.0 - compiler.libcxx = libc++ - - [conf] - tools.build:sysroot = /my/new/sysroot/path - """) - myfilename = textwrap.dedent(""" - [project options] - my_option = 'fake-option' - """) - conanfile = textwrap.dedent(""" - from conan import ConanFile - from conan.tools.meson import Meson - class Pkg(ConanFile): - name = "test_name" - version = "1.0" - settings = "os", "compiler", "build_type", "arch" - generators = "MesonToolchain" - exports_sources = "meson.build", "src/*" - def build(self): - meson = Meson(self) - meson.configure() - meson.build() - def layout(self): - self.folders.build = "./test-build" - """) - client = TestClient() - client.save({"conanfile.py": conanfile, - "build/myfilename.ini": myfilename, - "meson.build": "project('tutorial', 'cpp')", # dummy one - "profile": profile}) +def test_meson_sysroot_app(): + """Testing when users pass tools.build:sysroot on the profile with Meson - client.run("install . -pr=profile") - client.run("build . -pr=profile", assert_error=False) - - # Check the meson configuration file - conan_meson = client.load("conan_meson_cross.ini") - assert re.search(r"sys_root = '/my/new/sysroot/path'", conan_meson) - assert re.search(r"c_args =.+--sysroot=/my/new/sysroot/path.+", conan_meson) - assert re.search(r"c_link_args =.+--sysroot=/my/new/sysroot/path.+", conan_meson) - assert re.search(r"cpp_args =.+--sysroot=/my/new/sysroot/path.+", conan_meson) - assert re.search(r"cpp_link_args =.+--sysroot=/my/new/sysroot/path.+", conan_meson) - - # Check the meson-log.txt - conan_log = client.load("./test-build/meson-logs/meson-log.txt") - assert r"--sysroot=/my/new/sysroot/path" in conan_log + The generated conan_meson_cross.ini needs to contain both sys_root property to fill the + PKG_CONFIG_PATH and the compiler flags with --sysroot. - -@pytest.mark.tool("autotools") -@pytest.mark.tool("meson") -@pytest.mark.skipif(platform.system() != "Linux", reason="Requires --sysroot on Linux") -def test_meson_sysroot_flag_cross(): - """ - Testing when users pass tools.build:sysroot on the profile + When cross-building, Meson needs both compiler_executables in the config, otherwise it will fail + when running setup. """ + sysroot = "/my/new/sysroot/path" + client = TestClient() profile = textwrap.dedent(""" [settings] os=Linux @@ -389,64 +335,55 @@ def test_meson_sysroot_flag_cross(): build_type=Release [conf] - tools.build:sysroot = /my/new/sysroot/path + tools.build:sysroot=%s tools.build:compiler_executables={"c": "gcc", "cpp": "g++"} - """) - myfilename = textwrap.dedent(""" - [project options] - my_option = 'fake-option' - """) - conanfile = textwrap.dedent(""" - from conan import ConanFile - from conan.tools.meson import MesonToolchain, Meson - from conan.tools.gnu import PkgConfigDeps - class Pkg(ConanFile): - name = "test_name" - version = "1.0" - settings = "os", "compiler", "build_type", "arch" - exports_sources = "meson.build", "src/*" - #tool_requires = "pkgconf/2.1.0" - def build(self): - meson = Meson(self) - meson.configure() - meson.build() - def layout(self): - self.folders.build = "./test-build" - def requirements(self): - self.requires("foo/1.0") - def generate(self): - tc = MesonToolchain(self) - tc.generate() - tc = PkgConfigDeps(self) - tc.generate() - """) + tools.build:verbosity=verbose + tools.compilation:verbosity=verbose + """ % sysroot) + conanfile = textwrap.dedent(f""" + from conan import ConanFile + from conan.tools.meson import Meson + from conan.tools.files import copy + from conan.tools.layout import basic_layout + import os + class Pkg(ConanFile): + settings = "os", "compiler", "build_type", "arch" + exports_sources = "meson.build", "src/*" + generators = "MesonToolchain" + def build(self): + meson = Meson(self) + meson.configure() + meson.build() + def layout(self): + self.folders.generators = '{client.cache_folder}/build/gen_folder' + self.folders.build = "{client.cache_folder}/build" + """) meson_build = textwrap.dedent(""" - project('test_name', 'cpp') - pkg = import('pkgconfig') - zdep = dependency('foo', version : '>=0.1') - shared_library('test_name', 'src/test_name.cpp', install: true, dependencies : zdep) - install_headers('src/test_name.h') - """) - client = TestClient() + project('foobar', 'cpp') + executable('foobar', 'src/main.cpp') + """) + main_cpp = textwrap.dedent("int main() { return 0; }") + client.save({"conanfile.py": conanfile, - "build/myfilename.ini": myfilename, "meson.build": meson_build, "profile": profile, - "foo/conanfile.py": GenConanfile("foo", "1.0")}) + "src/main.cpp": main_cpp, + }) - client.run("create foo") - client.run("install . -pr:h=profile") - client.run("build . -pr:h=profile", assert_error=True) + client.run("create . --name=foobar --version=0.1.0 -pr:h=profile -pr:b=default") # Check the meson configuration file - print(f"CACHE: {client.cache_folder}") - conan_meson = client.load("conan_meson_cross.ini") - assert "sys_root = '/my/new/sysroot/path'\n" in conan_meson - assert re.search(r"c_args =.+--sysroot=/my/new/sysroot/path.+", conan_meson) - assert re.search(r"c_link_args =.+--sysroot=/my/new/sysroot/path.+", conan_meson) - assert re.search(r"cpp_args =.+--sysroot=/my/new/sysroot/path.+", conan_meson) - assert re.search(r"cpp_link_args =.+--sysroot=/my/new/sysroot/path.+", conan_meson) + conan_meson = client.load(os.path.join(client.cache_folder, "build", "gen_folder", "conan_meson_cross.ini")) + assert f"sys_root = '{sysroot}'\n" in conan_meson + assert re.search(r"c_args =.+--sysroot={}.+".format(sysroot), conan_meson) + assert re.search(r"c_link_args =.+--sysroot={}.+".format(sysroot), conan_meson) + assert re.search(r"cpp_args =.+--sysroot={}.+".format(sysroot), conan_meson) + assert re.search(r"cpp_link_args =.+--sysroot={}.+".format(sysroot), conan_meson) # Check the meson-log.txt - conan_log = client.load("./test-build/meson-logs/meson-log.txt") - assert r"--sysroot=/my/new/sysroot/path" in conan_log + meson_log = client.load(os.path.join(client.cache_folder, "build", "meson-logs", "meson-log.txt")) + assert re.search(r"Detecting linker via:.+--sysroot={}".format(sysroot), meson_log) + + # Check compiler calls based on Conan output + assert re.search(r"\[1/2\].+--sysroot=/my/new/sysroot/path", client.out) + assert re.search(r"\[2/2\].+--sysroot=/my/new/sysroot/path", client.out) From 0ed695186ea2626dcbda1e6b04db14c86346b5b0 Mon Sep 17 00:00:00 2001 From: Ernesto de Gracia Herranz Date: Wed, 29 May 2024 19:17:36 +0200 Subject: [PATCH 5/8] fran review --- conan/tools/meson/toolchain.py | 20 +++--- .../functional/toolchains/meson/test_meson.py | 71 ++++++------------- 2 files changed, 31 insertions(+), 60 deletions(-) diff --git a/conan/tools/meson/toolchain.py b/conan/tools/meson/toolchain.py index aa1d4cb9183..d00f29145d6 100644 --- a/conan/tools/meson/toolchain.py +++ b/conan/tools/meson/toolchain.py @@ -245,6 +245,11 @@ def __init__(self, conanfile, backend=None, native=False): default_comp = "cl" default_comp_cpp = "cl" + # Read configuration for sys_root property (honoring existing conf) + self._sys_root = self._conanfile_conf.get("tools.build:sysroot", check_type=str) + if self._sys_root: + self.properties["sys_root"] = self._sys_root + # Read configuration for compilers compilers_by_conf = self._conanfile_conf.get("tools.build:compiler_executables", default={}, check_type=dict) @@ -404,10 +409,11 @@ def _get_extra_flags(self): linker_scripts = self._conanfile_conf.get("tools.build:linker_scripts", default=[], check_type=list) linker_script_flags = ['-T"' + linker_script + '"' for linker_script in linker_scripts] defines = [f"-D{d}" for d in self._conanfile.conf.get("tools.build:defines", default=[], check_type=list)] + sys_root = [f"--sysroot={self._sys_root}"] if self._sys_root else [""] return { - "cxxflags": cxxflags, - "cflags": cflags, - "ldflags": sharedlinkflags + exelinkflags + linker_script_flags, + "cxxflags": cxxflags + sys_root, + "cflags": cflags + sys_root, + "ldflags": sharedlinkflags + exelinkflags + linker_script_flags + sys_root, "defines": defines } @@ -442,14 +448,6 @@ def _context(self): # These link_args have already the LDFLAGS env value so let's add only the new possible ones self.objc_link_args.extend(apple_flags + extra_flags["ldflags"]) self.objcpp_link_args.extend(apple_flags + extra_flags["ldflags"]) - # Meson properties - sys_root = self._conanfile.conf.get("tools.build:sysroot", check_type=str) - if sys_root: - self.properties["sys_root"] = sys_root - self.c_args.append("--sysroot=" + sys_root) - self.cpp_args.append("--sysroot=" + sys_root) - self.c_link_args.append("--sysroot=" + sys_root) - self.cpp_link_args.append("--sysroot=" + sys_root) if self.libcxx: self.cpp_args.append(self.libcxx) diff --git a/test/functional/toolchains/meson/test_meson.py b/test/functional/toolchains/meson/test_meson.py index 0c1fa507627..40e23b3d82d 100644 --- a/test/functional/toolchains/meson/test_meson.py +++ b/test/functional/toolchains/meson/test_meson.py @@ -6,6 +6,7 @@ import pytest +from conan.test.assets.genconanfile import GenConanfile from conans.model.recipe_ref import RecipeReference from conan.test.assets.sources import gen_function_cpp, gen_function_h from test.functional.toolchains.meson._base import TestMesonBase @@ -325,65 +326,37 @@ def test_meson_sysroot_app(): """ sysroot = "/my/new/sysroot/path" client = TestClient() - profile = textwrap.dedent(""" + profile = textwrap.dedent(f""" [settings] - os=Linux - arch=armv8 - compiler=gcc - compiler.version=8 - compiler.libcxx=libstdc++11 - build_type=Release + os = Macos + arch = armv8 + compiler = apple-clang + compiler.version = 13.0 + compiler.libcxx = libc++ [conf] - tools.build:sysroot=%s - tools.build:compiler_executables={"c": "gcc", "cpp": "g++"} + tools.build:sysroot={sysroot} tools.build:verbosity=verbose tools.compilation:verbosity=verbose - """ % sysroot) - conanfile = textwrap.dedent(f""" - from conan import ConanFile - from conan.tools.meson import Meson - from conan.tools.files import copy - from conan.tools.layout import basic_layout - import os - class Pkg(ConanFile): - settings = "os", "compiler", "build_type", "arch" - exports_sources = "meson.build", "src/*" - generators = "MesonToolchain" - def build(self): - meson = Meson(self) - meson.configure() - meson.build() - def layout(self): - self.folders.generators = '{client.cache_folder}/build/gen_folder' - self.folders.build = "{client.cache_folder}/build" """) - meson_build = textwrap.dedent(""" - project('foobar', 'cpp') - executable('foobar', 'src/main.cpp') + profile_build = textwrap.dedent(f""" + [settings] + os = Macos + arch = x86_64 + compiler = apple-clang + compiler.version = 13.0 + compiler.libcxx = libc++ """) - main_cpp = textwrap.dedent("int main() { return 0; }") - - client.save({"conanfile.py": conanfile, - "meson.build": meson_build, - "profile": profile, - "src/main.cpp": main_cpp, - }) - - client.run("create . --name=foobar --version=0.1.0 -pr:h=profile -pr:b=default") - + client.save({"conanfile.py": GenConanfile(name="hello", version="0.1") + .with_settings("os", "arch", "compiler", "build_type") + .with_generator("MesonToolchain"), + "build": profile_build, + "host": profile}) + client.run("install . -pr:h host -pr:b build") # Check the meson configuration file - conan_meson = client.load(os.path.join(client.cache_folder, "build", "gen_folder", "conan_meson_cross.ini")) + conan_meson = client.load(os.path.join(client.current_folder, "conan_meson_cross.ini")) assert f"sys_root = '{sysroot}'\n" in conan_meson assert re.search(r"c_args =.+--sysroot={}.+".format(sysroot), conan_meson) assert re.search(r"c_link_args =.+--sysroot={}.+".format(sysroot), conan_meson) assert re.search(r"cpp_args =.+--sysroot={}.+".format(sysroot), conan_meson) assert re.search(r"cpp_link_args =.+--sysroot={}.+".format(sysroot), conan_meson) - - # Check the meson-log.txt - meson_log = client.load(os.path.join(client.cache_folder, "build", "meson-logs", "meson-log.txt")) - assert re.search(r"Detecting linker via:.+--sysroot={}".format(sysroot), meson_log) - - # Check compiler calls based on Conan output - assert re.search(r"\[1/2\].+--sysroot=/my/new/sysroot/path", client.out) - assert re.search(r"\[2/2\].+--sysroot=/my/new/sysroot/path", client.out) From 621a9712046a782952a6d7041456995c1ed1301e Mon Sep 17 00:00:00 2001 From: Francisco Ramirez de Anton Date: Thu, 30 May 2024 09:23:30 +0200 Subject: [PATCH 6/8] Reallocated meson test functional -> integration --- .../functional/toolchains/meson/test_meson.py | 50 ------------------- .../toolchains/meson/test_mesontoolchain.py | 50 ++++++++++++++++++- 2 files changed, 49 insertions(+), 51 deletions(-) diff --git a/test/functional/toolchains/meson/test_meson.py b/test/functional/toolchains/meson/test_meson.py index 40e23b3d82d..319695e99a0 100644 --- a/test/functional/toolchains/meson/test_meson.py +++ b/test/functional/toolchains/meson/test_meson.py @@ -310,53 +310,3 @@ def build(self): client.run("build .") assert "unrecognized character escape sequence" not in str(client.out) # if Visual assert "unknown escape sequence" not in str(client.out) # if mingw - - -@pytest.mark.tool("meson") -@pytest.mark.skipif(platform.system() != "Linux", reason="Requires --sysroot on Linux") -@pytest.mark.skipif(sys.version_info.minor < 8, reason="Latest Meson versions needs Python >= 3.8") -def test_meson_sysroot_app(): - """Testing when users pass tools.build:sysroot on the profile with Meson - - The generated conan_meson_cross.ini needs to contain both sys_root property to fill the - PKG_CONFIG_PATH and the compiler flags with --sysroot. - - When cross-building, Meson needs both compiler_executables in the config, otherwise it will fail - when running setup. - """ - sysroot = "/my/new/sysroot/path" - client = TestClient() - profile = textwrap.dedent(f""" - [settings] - os = Macos - arch = armv8 - compiler = apple-clang - compiler.version = 13.0 - compiler.libcxx = libc++ - - [conf] - tools.build:sysroot={sysroot} - tools.build:verbosity=verbose - tools.compilation:verbosity=verbose - """) - profile_build = textwrap.dedent(f""" - [settings] - os = Macos - arch = x86_64 - compiler = apple-clang - compiler.version = 13.0 - compiler.libcxx = libc++ - """) - client.save({"conanfile.py": GenConanfile(name="hello", version="0.1") - .with_settings("os", "arch", "compiler", "build_type") - .with_generator("MesonToolchain"), - "build": profile_build, - "host": profile}) - client.run("install . -pr:h host -pr:b build") - # Check the meson configuration file - conan_meson = client.load(os.path.join(client.current_folder, "conan_meson_cross.ini")) - assert f"sys_root = '{sysroot}'\n" in conan_meson - assert re.search(r"c_args =.+--sysroot={}.+".format(sysroot), conan_meson) - assert re.search(r"c_link_args =.+--sysroot={}.+".format(sysroot), conan_meson) - assert re.search(r"cpp_args =.+--sysroot={}.+".format(sysroot), conan_meson) - assert re.search(r"cpp_link_args =.+--sysroot={}.+".format(sysroot), conan_meson) diff --git a/test/integration/toolchains/meson/test_mesontoolchain.py b/test/integration/toolchains/meson/test_mesontoolchain.py index b7a2742f774..d7c1e352fc1 100644 --- a/test/integration/toolchains/meson/test_mesontoolchain.py +++ b/test/integration/toolchains/meson/test_mesontoolchain.py @@ -1,13 +1,14 @@ import os import platform +import re import textwrap import pytest from conan.test.assets.genconanfile import GenConanfile +from conan.test.utils.tools import TestClient from conan.tools.files import load from conan.tools.meson import MesonToolchain -from conan.test.utils.tools import TestClient def test_apple_meson_keep_user_custom_flags(): @@ -534,3 +535,50 @@ def test_compiler_path_with_spaces(): conan_meson_native = client.load("conan_meson_native.ini") assert "c = 'c compiler path with spaces'" in conan_meson_native assert "cpp = 'cpp compiler path with spaces'" in conan_meson_native + + +def test_meson_sysroot_app(): + """Testing when users pass tools.build:sysroot on the profile with Meson + + The generated conan_meson_cross.ini needs to contain both sys_root property to fill the + PKG_CONFIG_PATH and the compiler flags with --sysroot. + + When cross-building, Meson needs both compiler_executables in the config, otherwise it will fail + when running setup. + """ + sysroot = "/my/new/sysroot/path" + client = TestClient() + profile = textwrap.dedent(f""" + [settings] + os = Macos + arch = armv8 + compiler = apple-clang + compiler.version = 13.0 + compiler.libcxx = libc++ + + [conf] + tools.build:sysroot={sysroot} + tools.build:verbosity=verbose + tools.compilation:verbosity=verbose + """) + profile_build = textwrap.dedent(f""" + [settings] + os = Macos + arch = x86_64 + compiler = apple-clang + compiler.version = 13.0 + compiler.libcxx = libc++ + """) + client.save({"conanfile.py": GenConanfile(name="hello", version="0.1") + .with_settings("os", "arch", "compiler", "build_type") + .with_generator("MesonToolchain"), + "build": profile_build, + "host": profile}) + client.run("install . -pr:h host -pr:b build") + # Check the meson configuration file + conan_meson = client.load(os.path.join(client.current_folder, "conan_meson_cross.ini")) + assert f"sys_root = '{sysroot}'\n" in conan_meson + assert re.search(r"c_args =.+--sysroot={}.+".format(sysroot), conan_meson) + assert re.search(r"c_link_args =.+--sysroot={}.+".format(sysroot), conan_meson) + assert re.search(r"cpp_args =.+--sysroot={}.+".format(sysroot), conan_meson) + assert re.search(r"cpp_link_args =.+--sysroot={}.+".format(sysroot), conan_meson) From d94d34ef89e8582942d2bf9240f39ded44689b21 Mon Sep 17 00:00:00 2001 From: Francisco Ramirez de Anton Date: Thu, 30 May 2024 09:24:32 +0200 Subject: [PATCH 7/8] Removed useless import --- test/functional/toolchains/meson/test_meson.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/test/functional/toolchains/meson/test_meson.py b/test/functional/toolchains/meson/test_meson.py index 319695e99a0..8298c17b910 100644 --- a/test/functional/toolchains/meson/test_meson.py +++ b/test/functional/toolchains/meson/test_meson.py @@ -6,11 +6,10 @@ import pytest -from conan.test.assets.genconanfile import GenConanfile -from conans.model.recipe_ref import RecipeReference from conan.test.assets.sources import gen_function_cpp, gen_function_h -from test.functional.toolchains.meson._base import TestMesonBase from conan.test.utils.tools import TestClient +from conans.model.recipe_ref import RecipeReference +from test.functional.toolchains.meson._base import TestMesonBase class MesonToolchainTest(TestMesonBase): From 8bef89d0f908abf26a3c8c5b93219f99f423d41e Mon Sep 17 00:00:00 2001 From: Francisco Ramirez de Anton Date: Thu, 30 May 2024 10:04:14 +0200 Subject: [PATCH 8/8] SDK path --- test/integration/toolchains/meson/test_mesontoolchain.py | 1 + 1 file changed, 1 insertion(+) diff --git a/test/integration/toolchains/meson/test_mesontoolchain.py b/test/integration/toolchains/meson/test_mesontoolchain.py index d7c1e352fc1..602b4bb9a43 100644 --- a/test/integration/toolchains/meson/test_mesontoolchain.py +++ b/test/integration/toolchains/meson/test_mesontoolchain.py @@ -560,6 +560,7 @@ def test_meson_sysroot_app(): tools.build:sysroot={sysroot} tools.build:verbosity=verbose tools.compilation:verbosity=verbose + tools.apple:sdk_path=/my/sdk/path """) profile_build = textwrap.dedent(f""" [settings]