commit:     75a308e0686ff3757855e05ff06e9ba7418a0458
Author:     Michał Górny <mgorny <AT> gentoo <DOT> org>
AuthorDate: Tue Apr 16 15:26:58 2024 +0000
Commit:     Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Fri Apr 19 18:46:46 2024 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=75a308e0

distutils-r1.eclass: Pass arguments to scikit-build-core

Support passing DISTUTILS_ARGS to scikit-build-core, along with some
standard arguments that:

- ensure that CFLAGS, CXXFLAGS, CPPFLAGS and so on, are respected
- respect CMAKE_BUILD_TYPE, along with the default of RelWithDebInfo
- enable verbose builds
- disable stripping

Signed-off-by: Michał Górny <mgorny <AT> gentoo.org>

 eclass/distutils-r1.eclass | 43 +++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 43 insertions(+)

diff --git a/eclass/distutils-r1.eclass b/eclass/distutils-r1.eclass
index ddcba288d85c..a67122a59a33 100644
--- a/eclass/distutils-r1.eclass
+++ b/eclass/distutils-r1.eclass
@@ -454,6 +454,9 @@ unset -f _distutils_set_globals
 # For meson-python, the arguments will be passed as `meson setup`
 # arguments.
 #
+# For scikit-build-core, the arguments will be passed as `cmake`
+# options (e.g. `-DFOO=BAR` form should be used).
+#
 # For setuptools, the arguments will be passed as first parameters
 # to setup.py invocations (via esetup.py), as well as to the PEP517
 # backend.  For future compatibility, only global options should be used
@@ -1412,6 +1415,46 @@ distutils_pep517_install() {
                                EOF
                        )
                        ;;
+               scikit-build-core)
+                       # TODO: split out the config/toolchain logic from 
cmake.eclass
+                       # for now, we copy the most important bits
+                       local 
CMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE:-RelWithDebInfo}
+                       cat >> "${BUILD_DIR}"/config.cmake <<- _EOF_ || die
+                               set(CMAKE_ASM_FLAGS_${CMAKE_BUILD_TYPE^^} "" 
CACHE STRING "")
+                               set(CMAKE_ASM-ATT_FLAGS_${CMAKE_BUILD_TYPE^^} 
"" CACHE STRING "")
+                               set(CMAKE_C_FLAGS_${CMAKE_BUILD_TYPE^^} "" 
CACHE STRING "")
+                               set(CMAKE_CXX_FLAGS_${CMAKE_BUILD_TYPE^^} "" 
CACHE STRING "")
+                               set(CMAKE_Fortran_FLAGS_${CMAKE_BUILD_TYPE^^} 
"" CACHE STRING "")
+                               
set(CMAKE_EXE_LINKER_FLAGS_${CMAKE_BUILD_TYPE^^} "" CACHE STRING "")
+                               
set(CMAKE_MODULE_LINKER_FLAGS_${CMAKE_BUILD_TYPE^^} "" CACHE STRING "")
+                               
set(CMAKE_SHARED_LINKER_FLAGS_${CMAKE_BUILD_TYPE^^} "" CACHE STRING "")
+                               
set(CMAKE_STATIC_LINKER_FLAGS_${CMAKE_BUILD_TYPE^^} "" CACHE STRING "")
+                       _EOF_
+
+                       # hack around CMake ignoring CPPFLAGS
+                       local -x CFLAGS="${CFLAGS} ${CPPFLAGS}"
+                       local -x CXXFLAGS="${CXXFLAGS} ${CPPFLAGS}"
+
+                       local cmake_args=(
+                               "-C${BUILD_DIR}/config.cmake"
+                               "${DISTUTILS_ARGS[@]}"
+                       )
+
+                       # NB: we need to pass strings for boolean fields
+                       # 
https://github.com/scikit-build/scikit-build-core/issues/707
+                       config_settings=$(
+                               "${EPYTHON}" - "${cmake_args[@]}" <<-EOF || die
+                                       import json
+                                       import sys
+                                       print(json.dumps({
+                                               "cmake.args": 
";".join(sys.argv[1:]),
+                                               "cmake.build-type": 
"${CMAKE_BUILD_TYPE}",
+                                               "cmake.verbose": "true",
+                                               "install.strip": "false",
+                                       }))
+                               EOF
+                       )
+                       ;;
                setuptools)
                        if in_iuse debug && use debug; then
                                local -x SETUPTOOLS_RUST_CARGO_PROFILE=dev

Reply via email to