From 7feae3fc5b68d9ab363a97d32df526df69e330bf Mon Sep 17 00:00:00 2001 From: SSE4 Date: Mon, 15 Feb 2021 12:52:56 +0700 Subject: [PATCH] - fix M1 detection Signed-off-by: SSE4 --- conans/client/conf/detect.py | 27 ++++++++++------------- conans/client/tools/oss.py | 2 ++ conans/test/unittests/util/detect_test.py | 17 ++++++++++++++ 3 files changed, 31 insertions(+), 15 deletions(-) diff --git a/conans/client/conf/detect.py b/conans/client/conf/detect.py index 35717d4393c..dd824389846 100644 --- a/conans/client/conf/detect.py +++ b/conans/client/conf/detect.py @@ -6,7 +6,7 @@ from conans.client.conf.compiler_id import UNKNOWN_COMPILER, LLVM_GCC, detect_compiler_id from conans.client.output import Color -from conans.client.tools import detected_os, OSInfo +from conans.client.tools import detected_os, detected_architecture, OSInfo from conans.client.tools.win import latest_visual_studio_version_installed from conans.model.version import Version from conans.util.conan_v2_mode import CONAN_V2_MODE_ENVVAR @@ -259,31 +259,28 @@ def _detect_compiler_version(result, output, profile_path): def _detect_os_arch(result, output): - architectures = {'i386': 'x86', - 'i686': 'x86', - 'i86pc': 'x86', - 'amd64': 'x86_64', - 'aarch64': 'armv8', - 'sun4v': 'sparc'} + from conans.client.conf import get_default_settings_yml + from conans.model.settings import Settings + the_os = detected_os() result.append(("os", the_os)) result.append(("os_build", the_os)) - platform_machine = platform.machine().lower() - if platform_machine: - arch = architectures.get(platform_machine, platform_machine) + arch = detected_architecture() + + if arch: if arch.startswith('arm'): - for a in ("armv6", "armv7hf", "armv7", "armv8"): + settings = Settings.loads(get_default_settings_yml()) + defined_architectures = settings.arch.values_range + defined_arm_architectures = [v for v in defined_architectures if v.startswith("arm")] + + for a in defined_arm_architectures: if arch.startswith(a): arch = a break else: output.error("Your ARM '%s' architecture is probably not defined in settings.yml\n" "Please check your conan.conf and settings.yml files" % arch) - elif arch.startswith('e2k'): - arch = OSInfo.get_e2k_architecture() or arch - elif OSInfo().is_aix: - arch = OSInfo.get_aix_architecture() or arch result.append(("arch", arch)) result.append(("arch_build", arch)) diff --git a/conans/client/tools/oss.py b/conans/client/tools/oss.py index aefbd5b3da6..e6f69a4b68a 100644 --- a/conans/client/tools/oss.py +++ b/conans/client/tools/oss.py @@ -111,6 +111,8 @@ def detected_architecture(): return "s390x" elif "s390" in machine: return "s390" + elif "sun4v" in machine: + return "sparc" elif "e2k" in machine: return OSInfo.get_e2k_architecture() diff --git a/conans/test/unittests/util/detect_test.py b/conans/test/unittests/util/detect_test.py index 20e54afdf01..6cefc202368 100644 --- a/conans/test/unittests/util/detect_test.py +++ b/conans/test/unittests/util/detect_test.py @@ -68,3 +68,20 @@ def test_detect_aix(self, processor, bitness, version, expected_arch): self.assertEqual("AIX", result['os_build']) self.assertEqual(expected_arch, result['arch']) self.assertEqual(expected_arch, result['arch_build']) + + @parameterized.expand([ + ['arm64', 'armv8'], + ['i386', 'x86'], + ['i686', 'x86'], + ['i86pc', 'x86'], + ['amd64', 'x86_64'], + ['aarch64', 'armv8'], + ['sun4v', 'sparc'] + ]) + def test_detect_arch(self, machine, expected_arch): + with mock.patch("platform.machine", mock.MagicMock(return_value=machine)): + result = detect_defaults_settings(output=TestBufferConanOutput(), + profile_path=DEFAULT_PROFILE_NAME) + result = dict(result) + self.assertEqual(expected_arch, result['arch']) + self.assertEqual(expected_arch, result['arch_build'])