--- mesonbuild/environment.py.orig 2020-07-05 13:13:14.000000000 -0700 +++ mesonbuild/environment.py 2020-07-14 13:46:43.000000000 -0700 @@ -14,6 +14,7 @@ import itertools import os, platform, re, sys, shutil +import subprocess import typing as T import collections @@ -314,6 +314,23 @@ return 'x86' return os_arch + +def detect_osx_arch() -> str: + """ + per #6187, handle early Mac 64-bit Intel CPU with 64-bit OSX using a **32-bit kernel** + testing this requires old MacOS and hardware, not easily available for cloud CI, + so users needing this functionality may kindly need to help with debugging info. + """ + try: + ret = subprocess.run(['sysctl', '-n', 'hw.cpu64bit_capable'], + universal_newlines=True, stdout=subprocess.PIPE, stderr=subprocess.DEVNULL).stdout + trial = 'x86_64' if ret.strip() == '1' else 'x86' + except subprocess.SubprocessError: + # very old MacOS version with implicit 32-bit CPU due to calling if-elif stack + trial = 'x86' + return trial + + def any_compiler_has_define(compilers: CompilersDict, define): for c in compilers.values(): try: @@ -338,7 +355,11 @@ else: trial = platform.machine().lower() if trial.startswith('i') and trial.endswith('86'): - trial = 'x86' + if mesonlib.is_osx(): + # handle corner case with early Mac 64-bit CPU and older OSX + trial = detect_osx_arch() + else: + trial = 'x86' elif trial == 'bepc': trial = 'x86' elif trial == 'arm64':