MINGW-packages icon indicating copy to clipboard operation
MINGW-packages copied to clipboard

[cmake] FindPython architecture check broken on clangarm64

Open jeremyd2019 opened this issue 10 months ago • 5 comments

From build of mingw-w64-freecad (https://github.com/msys2-arm/msys2-autobuild/actions/runs/8575422878/job/23504484155#step:11:6142):

  CMake Error at C:/msys64/clangarm64/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:230 (message):
    Could NOT find Python (missing: Python_EXECUTABLE Interpreter) (found
    suitable version "3.11.8", minimum required is "3")
  
        Reason given by package: 
            Interpreter: Wrong architecture for the interpreter "C:/msys64/clangarm64/bin/python.exe"

This appears to be down to this check in share/cmake/FindPython/Support.cmake:

      execute_process (COMMAND ${launcher} "${_${_PYTHON_PREFIX}_EXECUTABLE}" -c
        "import sys, sysconfig; sys.stdout.write(sysconfig.get_platform())"
        RESULT_VARIABLE result
        OUTPUT_VARIABLE platform
        ERROR_QUIET
        OUTPUT_STRIP_TRAILING_WHITESPACE)
      string(TOUPPER "${platform}" platform)
      if (result OR ((target_arm AND NOT platform MATCHES "ARM") OR
                     (NOT target_arm AND platform MATCHES "ARM")))
        # interpreter not usable or has wrong architecture

In this case, sysconfig.get_platform() returns mingw_aarch64, it does not contain arm.

jeremyd2019 avatar Apr 06 '24 00:04 jeremyd2019

Not:

Administrator@WIN-K0UDL7621KH CLANGARM64 ~
# cat > CMakeLists.txt
cmake_minimum_required(VERSION 3.16)
project(test CXX)
find_package(Python 3.11 REQUIRED COMPONENTS Interpreter Development)

Administrator@WIN-K0UDL7621KH CLANGARM64 ~
# cmake -GNinja
CMake Warning:
  No source or binary directory provided.  Both will be assumed to be the
  same as the current working directory, but note that this warning will
  become a fatal error in future CMake releases.


-- The CXX compiler identification is Clang 18.1.3
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: C:/msys64/clangarm64/bin/c++.exe - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
CMake Error at C:/msys64/clangarm64/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:230 (message):
  Could NOT find Python (missing: Python_EXECUTABLE Interpreter) (found
  suitable version "3.11.8", minimum required is "3.11")

      Reason given by package:
          Interpreter: Wrong architecture for the interpreter "C:/msys64/clangarm64/bin/python.exe"

Call Stack (most recent call first):
  C:/msys64/clangarm64/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:600 (_FPHSA_FAILURE_MESSAGE)
  C:/msys64/clangarm64/share/cmake/Modules/FindPython/Support.cmake:3867 (find_package_handle_standard_args)
  C:/msys64/clangarm64/share/cmake/Modules/FindPython.cmake:574 (include)
  CMakeLists.txt:3 (find_package)


-- Configuring incomplete, errors occurred!

jeremyd2019 avatar Apr 06 '24 06:04 jeremyd2019

cmake 3.29.1:

 -- CMAKE_SYSTEM_PROCESSOR: ARM64

cmake 3.28.3:

-- CMAKE_SYSTEM_PROCESSOR: ARM64

I also tried the last test too, and that still failed. I went back "major" versions of cmake until it worked. That was mingw-w64-clang-aarch64-cmake-3.26.4-4-any.pkg.tar.zst. mingw-w64-clang-aarch64-cmake-3.27.9-1-any.pkg.tar.zst was the newer version that failed.

in 3.26.4, CMAKE_SYSTEM_PROCESSOR was still ARM64

jeremyd2019 avatar Apr 06 '24 16:04 jeremyd2019

Just the usual monthly cumulative updates

jeremyd2019 avatar Apr 06 '24 17:04 jeremyd2019

Runner now has the 23H2 enablement update installed. I don't expect much for behavior changes since it is just an enablement update after all...

I noticed there was a cmake update and a python update since this report, but I don't think either did anything that would fix it. Changing the python "platform" tag at this point would be a major breakage (@naveen521kk). I would probably think about patching https://github.com/Kitware/CMake/blob/1d31a00ee45545a7943e8b413b60b658b1565367/Modules/FindPython/Support.cmake#L975-L976 to check for ARM or AARCH in the platform instead of just ARM. I don't know cmake syntax that well, so I don't know if the MATCHES operator has a syntax to do regex like "ARM|AARCH" or if it would have to be done by adding additional ORs...

jeremyd2019 avatar Apr 12 '24 17:04 jeremyd2019

Changing the python "platform" tag at this point would be a major breakage (@naveen521kk)

Indeed. However, we could do it over at Python 3.12 if we need it. I would suggest including arm for all the arm-based platforms.

naveen521kk avatar Apr 12 '24 17:04 naveen521kk

This was patched in aab4485c08c94b56d9961a016a1206f42ac48dce, but it might still make sense to consider changing the platform in 3.12 (I opened an issue on cpython-mingw to track this).

jeremyd2019 avatar Jul 11 '24 05:07 jeremyd2019