mesonbuild / meson-python

Meson PEP 517 Python build backend
https://mesonbuild.com/meson-python/
MIT License
118 stars 59 forks source link

Build error when `numpy` is build with `pep517` backend: `ERROR: Unhandled python exception` #554

Closed barracuda156 closed 6 months ago

barracuda156 commented 6 months ago

I am not sure if this is a meson bug as the output states, but it only happens when pep715 is used, everything else being identical.

--->  Building py311-numpy
Executing:  cd "/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_python_py-numpy/py311-numpy/work/numpy-1.26.1" && /opt/local/Library/Frameworks/Python.framework/Versions/3.11/bin/python3.11 -m build --no-isolation --wheel --outdir /opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_python_py-numpy/py311-numpy/work 
* Getting build dependencies for wheel...
* Building wheel...
+ /opt/local/Library/Frameworks/Python.framework/Versions/3.11/bin/python3.11 /opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_python_py-numpy/py311-numpy/work/numpy-1.26.1/vendored-meson/meson/meson.py setup /opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_python_py-numpy/py311-numpy/work/numpy-1.26.1 /opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_python_py-numpy/py311-numpy/work/numpy-1.26.1/.mesonpy-001lpxq4/build -Dbuildtype=release -Db_ndebug=if-release -Db_vscrt=md --native-file=/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_python_py-numpy/py311-numpy/work/numpy-1.26.1/.mesonpy-001lpxq4/build/meson-python-native-file.ini
Traceback (most recent call last):
  File "/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_python_py-numpy/py311-numpy/work/numpy-1.26.1/vendored-meson/meson/mesonbuild/mesonmain.py", line 194, in run
    return options.run_func(options)
           ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_python_py-numpy/py311-numpy/work/numpy-1.26.1/vendored-meson/meson/mesonbuild/msetup.py", line 358, in run
    app.generate()
  File "/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_python_py-numpy/py311-numpy/work/numpy-1.26.1/vendored-meson/meson/mesonbuild/msetup.py", line 183, in generate
    return self._generate(env, capture, vslite_ctx)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_python_py-numpy/py311-numpy/work/numpy-1.26.1/vendored-meson/meson/mesonbuild/msetup.py", line 228, in _generate
    intr.run()
  File "/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_python_py-numpy/py311-numpy/work/numpy-1.26.1/vendored-meson/meson/mesonbuild/interpreter/interpreter.py", line 2997, in run
    super().run()
  File "/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_python_py-numpy/py311-numpy/work/numpy-1.26.1/vendored-meson/meson/mesonbuild/interpreterbase/interpreterbase.py", line 164, in run
    self.evaluate_codeblock(self.ast, start=1)
  File "/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_python_py-numpy/py311-numpy/work/numpy-1.26.1/vendored-meson/meson/mesonbuild/interpreterbase/interpreterbase.py", line 190, in evaluate_codeblock
    raise e
  File "/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_python_py-numpy/py311-numpy/work/numpy-1.26.1/vendored-meson/meson/mesonbuild/interpreterbase/interpreterbase.py", line 182, in evaluate_codeblock
    self.evaluate_statement(cur)
  File "/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_python_py-numpy/py311-numpy/work/numpy-1.26.1/vendored-meson/meson/mesonbuild/interpreterbase/interpreterbase.py", line 196, in evaluate_statement
    return self.function_call(cur)
           ^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_python_py-numpy/py311-numpy/work/numpy-1.26.1/vendored-meson/meson/mesonbuild/interpreterbase/interpreterbase.py", line 521, in function_call
    res = func(node, func_args, kwargs)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_python_py-numpy/py311-numpy/work/numpy-1.26.1/vendored-meson/meson/mesonbuild/interpreterbase/decorators.py", line 277, in wrapper
    return f(*nargs, **wrapped_kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_python_py-numpy/py311-numpy/work/numpy-1.26.1/vendored-meson/meson/mesonbuild/interpreterbase/decorators.py", line 596, in wrapper
    return f(*wrapped_args, **wrapped_kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_python_py-numpy/py311-numpy/work/numpy-1.26.1/vendored-meson/meson/mesonbuild/interpreter/interpreter.py", line 2409, in func_subdir
    self.evaluate_codeblock(codeblock)
  File "/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_python_py-numpy/py311-numpy/work/numpy-1.26.1/vendored-meson/meson/mesonbuild/interpreterbase/interpreterbase.py", line 190, in evaluate_codeblock
    raise e
  File "/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_python_py-numpy/py311-numpy/work/numpy-1.26.1/vendored-meson/meson/mesonbuild/interpreterbase/interpreterbase.py", line 182, in evaluate_codeblock
    self.evaluate_statement(cur)
  File "/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_python_py-numpy/py311-numpy/work/numpy-1.26.1/vendored-meson/meson/mesonbuild/interpreterbase/interpreterbase.py", line 206, in evaluate_statement
    return self.evaluate_if(cur)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_python_py-numpy/py311-numpy/work/numpy-1.26.1/vendored-meson/meson/mesonbuild/interpreterbase/interpreterbase.py", line 301, in evaluate_if
    self.evaluate_codeblock(i.block)
  File "/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_python_py-numpy/py311-numpy/work/numpy-1.26.1/vendored-meson/meson/mesonbuild/interpreterbase/interpreterbase.py", line 190, in evaluate_codeblock
    raise e
  File "/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_python_py-numpy/py311-numpy/work/numpy-1.26.1/vendored-meson/meson/mesonbuild/interpreterbase/interpreterbase.py", line 182, in evaluate_codeblock
    self.evaluate_statement(cur)
  File "/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_python_py-numpy/py311-numpy/work/numpy-1.26.1/vendored-meson/meson/mesonbuild/interpreterbase/interpreterbase.py", line 228, in evaluate_statement
    self.evaluate_foreach(cur)
  File "/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_python_py-numpy/py311-numpy/work/numpy-1.26.1/vendored-meson/meson/mesonbuild/interpreterbase/interpreterbase.py", line 472, in evaluate_foreach
    self.evaluate_codeblock(node.block)
  File "/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_python_py-numpy/py311-numpy/work/numpy-1.26.1/vendored-meson/meson/mesonbuild/interpreterbase/interpreterbase.py", line 190, in evaluate_codeblock
    raise e
  File "/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_python_py-numpy/py311-numpy/work/numpy-1.26.1/vendored-meson/meson/mesonbuild/interpreterbase/interpreterbase.py", line 182, in evaluate_codeblock
    self.evaluate_statement(cur)
  File "/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_python_py-numpy/py311-numpy/work/numpy-1.26.1/vendored-meson/meson/mesonbuild/interpreterbase/interpreterbase.py", line 206, in evaluate_statement
    return self.evaluate_if(cur)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_python_py-numpy/py311-numpy/work/numpy-1.26.1/vendored-meson/meson/mesonbuild/interpreterbase/interpreterbase.py", line 306, in evaluate_if
    self.evaluate_codeblock(node.elseblock)
  File "/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_python_py-numpy/py311-numpy/work/numpy-1.26.1/vendored-meson/meson/mesonbuild/interpreterbase/interpreterbase.py", line 190, in evaluate_codeblock
    raise e
  File "/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_python_py-numpy/py311-numpy/work/numpy-1.26.1/vendored-meson/meson/mesonbuild/interpreterbase/interpreterbase.py", line 182, in evaluate_codeblock
    self.evaluate_statement(cur)
  File "/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_python_py-numpy/py311-numpy/work/numpy-1.26.1/vendored-meson/meson/mesonbuild/interpreterbase/interpreterbase.py", line 198, in evaluate_statement
    self.assignment(cur)
  File "/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_python_py-numpy/py311-numpy/work/numpy-1.26.1/vendored-meson/meson/mesonbuild/interpreterbase/interpreterbase.py", line 635, in assignment
    value = self.evaluate_statement(node.value)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_python_py-numpy/py311-numpy/work/numpy-1.26.1/vendored-meson/meson/mesonbuild/interpreterbase/interpreterbase.py", line 196, in evaluate_statement
    return self.function_call(cur)
           ^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_python_py-numpy/py311-numpy/work/numpy-1.26.1/vendored-meson/meson/mesonbuild/interpreterbase/interpreterbase.py", line 521, in function_call
    res = func(node, func_args, kwargs)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_python_py-numpy/py311-numpy/work/numpy-1.26.1/vendored-meson/meson/mesonbuild/interpreterbase/decorators.py", line 826, in wrapped
    return f(*wrapped_args, **wrapped_kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_python_py-numpy/py311-numpy/work/numpy-1.26.1/vendored-meson/meson/mesonbuild/interpreterbase/decorators.py", line 826, in wrapped
    return f(*wrapped_args, **wrapped_kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_python_py-numpy/py311-numpy/work/numpy-1.26.1/vendored-meson/meson/mesonbuild/interpreterbase/decorators.py", line 826, in wrapped
    return f(*wrapped_args, **wrapped_kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  [Previous line repeated 4 more times]
  File "/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_python_py-numpy/py311-numpy/work/numpy-1.26.1/vendored-meson/meson/mesonbuild/interpreterbase/decorators.py", line 109, in wrapped
    ret = f(*wrapped_args, **wrapped_kwargs)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_python_py-numpy/py311-numpy/work/numpy-1.26.1/vendored-meson/meson/mesonbuild/interpreterbase/decorators.py", line 127, in wrapped
    return f(*wrapped_args, **wrapped_kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_python_py-numpy/py311-numpy/work/numpy-1.26.1/vendored-meson/meson/mesonbuild/interpreterbase/decorators.py", line 277, in wrapper
    return f(*nargs, **wrapped_kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_python_py-numpy/py311-numpy/work/numpy-1.26.1/vendored-meson/meson/mesonbuild/interpreterbase/decorators.py", line 596, in wrapper
    return f(*wrapped_args, **wrapped_kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_python_py-numpy/py311-numpy/work/numpy-1.26.1/vendored-meson/meson/mesonbuild/interpreter/interpreter.py", line 1774, in func_dependency
    d = df.lookup(kwargs)
        ^^^^^^^^^^^^^^^^^
  File "/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_python_py-numpy/py311-numpy/work/numpy-1.26.1/vendored-meson/meson/mesonbuild/interpreter/dependencyfallbacks.py", line 355, in lookup
    dep = func(kwargs, func_args, func_kwargs)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_python_py-numpy/py311-numpy/work/numpy-1.26.1/vendored-meson/meson/mesonbuild/interpreter/dependencyfallbacks.py", line 87, in _do_dependency
    dep = dependencies.find_external_dependency(name, self.environment, kwargs)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_python_py-numpy/py311-numpy/work/numpy-1.26.1/vendored-meson/meson/mesonbuild/dependencies/detect.py", line 124, in find_external_dependency
    d = c()
        ^^^
  File "/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_python_py-numpy/py311-numpy/work/numpy-1.26.1/vendored-meson/meson/mesonbuild/dependencies/blas_lapack.py", line 524, in __init__
    if environment.machines[for_machine].is_darwin() and self.check_macOS_recent_enough():
                                                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_python_py-numpy/py311-numpy/work/numpy-1.26.1/vendored-meson/meson/mesonbuild/dependencies/blas_lapack.py", line 529, in check_macOS_recent_enough
    sdk_version = subprocess.run(cmd, capture_output=True, check=True, text=True).stdout.strip()
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/local/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/subprocess.py", line 571, in run
    raise CalledProcessError(retcode, process.args,
subprocess.CalledProcessError: Command '['xcrun', '-sdk', 'macosx', '--show-sdk-version']' returned non-zero exit status 64.
The Meson build system
Version: 1.2.99
Source dir: /opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_python_py-numpy/py311-numpy/work/numpy-1.26.1
Build dir: /opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_python_py-numpy/py311-numpy/work/numpy-1.26.1/.mesonpy-001lpxq4/build
Build type: native build
Project name: NumPy
Project version: 1.26.1
C compiler for the host machine: /opt/local/bin/gcc-mp-12 (gcc 12.3.0 "gcc-mp-12 (MacPorts gcc12 12.3.0_0) 12.3.0")
C linker for the host machine: /opt/local/bin/gcc-mp-12 ld64 97.17
C++ compiler for the host machine: /opt/local/bin/g++-mp-12 (gcc 12.3.0 "g++-mp-12 (MacPorts gcc12 12.3.0_0) 12.3.0")
C++ linker for the host machine: /opt/local/bin/g++-mp-12 ld64 97.17
Cython compiler for the host machine: /opt/local/bin/cython-3.11 (cython 0.29.36)
Host machine cpu family: ppc
Host machine cpu: power macintosh
Program python found: YES (/opt/local/Library/Frameworks/Python.framework/Versions/3.11/bin/python3.11)
Found pkg-config: /opt/local/bin/pkg-config (0.29.2)
Run-time dependency python found: YES 3.11
Has header "Python.h" with dependency python-3.11: YES 
Compiler for C supports arguments -fno-strict-aliasing: YES 
Message: Disabling CPU feature detection due to unsupported architecture: "ppc"
Configuring npy_cpu_dispatch_config.h using configuration
Message: 
CPU Optimization Options
  baseline:
    Requested : none
    Enabled   : 
  dispatch:
    Requested : none
    Enabled   : 

Library m found: YES
Found CMake: /opt/local/bin/cmake (3.27.2)
WARNING: CMake Toolchain: Failed to determine CMake compilers state
Run-time dependency scipy-openblas found: NO (tried pkgconfig, framework and cmake)
WARNING: MKLROOT env var set to /opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_python_py-numpy/py311-numpy/work/numpy-1.26.1/.mesonpy-001lpxq4/build/None, but not pointing to an MKL install
Run-time dependency mkl found: NO (tried pkgconfig and system)
WARNING: MKLROOT env var set to /opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_python_py-numpy/py311-numpy/work/numpy-1.26.1/.mesonpy-001lpxq4/build/None, but not pointing to an MKL install
Run-time dependency mkl found: NO (tried pkgconfig and system)

../../numpy/meson.build:119:13: ERROR: Unhandled python exception

    This is a Meson bug and should be reported!

ERROR Backend subprocess exited when trying to invoke build_wheel
Command failed:  cd "/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_python_py-numpy/py311-numpy/work/numpy-1.26.1" && /opt/local/Library/Frameworks/Python.framework/Versions/3.11/bin/python3.11 -m build --no-isolation --wheel --outdir /opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_python_py-numpy/py311-numpy/work

P. S. Ignore “unsupported architecture” claim: arch detection has been broken in numpy forever, but it is not the cause of the error.

dnicolodi commented 6 months ago

This error comes from a code path present only in the version of Meson vendored in NumPy.

From the look of it, you are trying to build NumPy on a macOS version that is so old that the platform detection code used by NumPy does not even run, let alone return a valid output. What does xcrun -sdk macosx --show-sdk-version return on your system?

barracuda156 commented 6 months ago

@dnicolodi This is invalid syntax for xcrun on < 10.7 (corrected: <= 10.7):

svacchanda$ xcrun -sdk macosx --show-sdk-version
xcrun: error: unrecognized option: --show-sdk-version

usage: 
xcrun [-verbose] [-no-cache] [-kill-cache] [-sdk <sdkroot>] [-log] [-run] <utility> [utility argument(s) ...]
xcrun [-verbose] [-no-cache] [-kill-cache] [-sdk <sdkroot>] -find <utility> 
<tool> [tool arguments ...]

Generally speaking, it should be avoided in any case, since there may be more than one SDK present and not necessarily one will build against a matching SDK (matching one is a norm, but not requirement).

dnicolodi commented 6 months ago

This is a NumPy issue. Please report it to the NumPy project. There isn't anything meson-python can do about it.

barracuda156 commented 6 months ago

@dnicolodi Got it, thank you. I brought is here only because the log explicitly stated This is a Meson bug and should be reported!.

The error does not appear related to xcrun or SDK though, what fails is this:

blas = dependency(_name, modules: ['cblas'] + blas_interface, required: false)

Relevant code chunk is:

# First try scipy-openblas, and if found don't look for cblas or lapack, we
# know what's inside the scipy-openblas wheels already.
if blas_name == 'openblas' or blas_name == 'auto'
  blas = dependency('scipy-openblas', required: false)
  if blas.found()
    blas_name = 'scipy-openblas'
  endif
endif
if blas_name == 'auto'
  foreach _name : get_option('blas-order')
    if _name == 'mkl'
      blas = dependency('mkl',
        modules: ['cblas'] + blas_interface + mkl_opts,
        required: false,  # may be required, but we need to emit a custom error message
        version: mkl_version_req,
      )
      # Insert a second try with MKL, because we may be rejecting older versions
      # or missing it because no pkg-config installed. If so, we need to retry
      # with MKL SDL, and drop the version constraint (this always worked).
      if not blas.found() and mkl_may_use_sdl
        blas = dependency('mkl', modules: ['cblas', 'sdl: true'], required: false)
      endif
    else
      if _name == 'flexiblas' and use_ilp64
        _name = 'flexiblas64'
      endif
      blas = dependency(_name, modules: ['cblas'] + blas_interface, required: false)
    endif
    if blas.found()
      break
    endif
  endforeach
else
  if blas_name == 'mkl'
    blas = dependency('mkl',
      modules: ['cblas'] + blas_interface + mkl_opts,
      required: false,
      version: mkl_version_req,
    )
    # Same deal as above - try again for MKL
    if not blas.found() and mkl_may_use_sdl
      blas = dependency('mkl', modules: ['cblas', 'sdl: true'], required: false)
    endif
  else
    blas = dependency(blas_name, modules: ['cblas'] + blas_interface, required: false)
  endif
endif

And it only fails when pep517 (meson-python) is used, not otherwise. (So no, it is not a problem of old macOS as such.)

rgommers commented 6 months ago

I brought is here only because the log explicitly stated This is a Meson bug and should be reported!.

That is because it's a feature that is about to be upstreamed into Meson, but already present in NumPy's vendored copy of Meson. Right now it's indeed a NumPy bug. If you wouldn't mind opening a new issue on the NumPy issue tracker, I'll look into fixing it.

dnicolodi commented 6 months ago

The error does not appear related to xcrun or SDK though

The raised exception is subprocess.CalledProcessError: Command '['xcrun', '-sdk', 'macosx', '--show-sdk-version']' returned non-zero exit status 64. so I don't see how this is not related to xcrun.

barracuda156 commented 6 months ago

xcrun spits an error due to wrong syntax, but it does not break the build, at least from what it looks:

1) de facto, the build continues to run until BLAS variants evaluation, consistently; 2) the error log points to a chunk of code related to BLAS variants, apparently to this one: https://github.com/numpy/numpy/blob/08e6252fc38d3b463879afce733c889df2af1d34/numpy/meson.build#L111

BTW, xcrun fails identically with R, and nothing gets broken with it, every package installs, ignoring the silly error.

barracuda156 commented 6 months ago

UPD. I will investigate today if it in fact xcrun causing the breakage and the log misattributes it to BLAS search.

barracuda156 commented 6 months ago

@dnicolodi You were right on this issue, it is xcrun: the log mislead me, pointing meson.build. What fails is the following from mesonbuild/dependencies/blas_lapack.py:

    def check_macOS_recent_enough(self) -> bool:
        # We need the SDK to be >=13.3 (meaning at least XCode 14.3)
        cmd = ['xcrun', '-sdk', 'macosx', '--show-sdk-version']
        sdk_version = subprocess.run(cmd, capture_output=True, check=True, text=True).stdout.strip()
        macos_version = platform.mac_ver()[0]
        deploy_target = os.environ.get('MACOSX_DEPLOYMENT_TARGET', macos_version)
        return sdk_version >= '13.3' and deploy_target >= '13.3'

I do not know why this restriction, it is totally unjustified. And yeah, this xcrun syntax has to be fixed or the whole chunk rewritten in a better way.

Thank you for pointing this out, I will add a note to the issue in numpy upstream.