[PATCH 1/3] cmake.eclass: cmake_src_configure: Move conditionals into heredoc, write once
Andreas Sturmlechner <[email protected]> Sat, 06 Jun 2026 00:49:23 +0200
| Newsgroups | gmane.linux.gentoo.devel |
|---|---|
| Message-ID | <[email protected]> |
Full patch series: https://github.com/gentoo/gentoo/pull/46293
---
eclass/cmake.eclass | 106 ++++++++++++++++++++------------------------
1 file changed, 49 insertions(+), 57 deletions(-)
diff --git a/eclass/cmake.eclass b/eclass/cmake.eclass
index 5ea90aa4da24..a0bcdfd19596 100644
--- a/eclass/cmake.eclass
+++ b/eclass/cmake.eclass
@@ -561,9 +561,10 @@ cmake_src_configure() {
# Fix xdg collision with sandbox
xdg_environment_reset
+ local libdir=$(get_libdir)
+
# Prepare Gentoo override rules (set valid compiler, append CPPFLAGS etc.)
local build_rules=${BUILD_DIR}/gentoo_rules.cmake
-
cat > "${build_rules}" <<- _EOF_ || die
set(CMAKE_ASM_COMPILE_OBJECT "<CMAKE_ASM_COMPILER> <DEFINES> <INCLUDES> ${CPPFLAGS} <FLAGS> -o <OBJECT> -c <SOURCE>" CACHE STRING "ASM compile command" FORCE)
set(CMAKE_ASM-ATT_COMPILE_OBJECT "<CMAKE_ASM-ATT_COMPILER> <DEFINES> <INCLUDES> ${CPPFLAGS} <FLAGS> -o <OBJECT> -c -x assembler <SOURCE>" CACHE STRING "ASM-ATT compile command" FORCE)
@@ -571,10 +572,41 @@ cmake_src_configure() {
set(CMAKE_C_COMPILE_OBJECT "<CMAKE_C_COMPILER> <DEFINES> <INCLUDES> ${CPPFLAGS} <FLAGS> -o <OBJECT> -c <SOURCE>" CACHE STRING "C compile command" FORCE)
set(CMAKE_CXX_COMPILE_OBJECT "<CMAKE_CXX_COMPILER> <DEFINES> <INCLUDES> ${CPPFLAGS} <FLAGS> -o <OBJECT> -c <SOURCE>" CACHE STRING "C++ compile command" FORCE)
set(CMAKE_Fortran_COMPILE_OBJECT "<CMAKE_Fortran_COMPILER> <DEFINES> <INCLUDES> ${FCFLAGS} <FLAGS> -o <OBJECT> -c <SOURCE>" CACHE STRING "Fortran compile command" FORCE)
+
+ # in Prefix we need rpath and must ensure cmake gets our default linker path
+ # right ... except for Darwin hosts
+ if($(usex prefix-guest 1 0)) # if use prefix-guest
+ if(NOT APPLE)
+ set(CMAKE_SKIP_RPATH OFF CACHE BOOL "" FORCE)
+ set(CMAKE_PLATFORM_REQUIRED_RUNTIME_PATH "${EPREFIX}/usr/${CHOST}/lib/gcc;${EPREFIX}/usr/${CHOST}/lib;${EPREFIX}/usr/${libdir};${EPREFIX}/${libdir}" CACHE STRING "" FORCE)
+ else()
+ set(CMAKE_PREFIX_PATH "${EPREFIX}/usr" CACHE STRING "" FORCE)
+ set(CMAKE_MACOSX_RPATH ON CACHE BOOL "" FORCE)
+ set(CMAKE_SKIP_BUILD_RPATH OFF CACHE BOOL "" FORCE)
+ set(CMAKE_SKIP_RPATH OFF CACHE BOOL "" FORCE)
+ set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE CACHE BOOL "" FORCE)
+ endif()
+ endif()
_EOF_
local myCC=$(tc-getCC) myCXX=$(tc-getCXX) myFC=$(tc-getFC)
+ # We are using the C compiler for assembly by default.
+ local -x ASMFLAGS=${CFLAGS}
+ local -x PKG_CONFIG=$(tc-getPKG_CONFIG)
+
+ if tc-is-cross-compiler; then
+ local sysname
+ case "${KERNEL:-linux}" in
+ Cygwin) sysname="CYGWIN_NT-5.1" ;;
+ HPUX) sysname="HP-UX" ;;
+ Hurd) sysname="GNU" ;;
+ linux) sysname="Linux" ;;
+ Winnt) sysname="Windows" ;;
+ *) sysname="${KERNEL}" ;;
+ esac
+ fi
+
# !!! IMPORTANT NOTE !!!
# Single slash below is intentional. CMake is weird and wants the
# CMAKE_*_VARIABLES split into two elements: the first one with
@@ -590,64 +622,26 @@ cmake_src_configure() {
set(CMAKE_AR $(type -P $(tc-getAR)) CACHE FILEPATH "Archive manager" FORCE)
set(CMAKE_RANLIB $(type -P $(tc-getRANLIB)) CACHE FILEPATH "Archive index generator" FORCE)
set(CMAKE_SYSTEM_PROCESSOR "${CHOST%%-*}")
- _EOF_
-
- # We are using the C compiler for assembly by default.
- local -x ASMFLAGS=${CFLAGS}
- local -x PKG_CONFIG=$(tc-getPKG_CONFIG)
-
- if tc-is-cross-compiler; then
- local sysname
- case "${KERNEL:-linux}" in
- Cygwin) sysname="CYGWIN_NT-5.1" ;;
- HPUX) sysname="HP-UX" ;;
- Hurd) sysname="GNU" ;;
- linux) sysname="Linux" ;;
- Winnt)
- sysname="Windows"
- cat >> "${toolchain_file}" <<- _EOF_ || die
- set(CMAKE_RC_COMPILER $(tc-getRC))
- _EOF_
- ;;
- *) sysname="${KERNEL}" ;;
- esac
- cat >> "${toolchain_file}" <<- _EOF_ || die
- set(CMAKE_SYSTEM_NAME "${sysname}")
- _EOF_
- fi
-
- if [[ ${SYSROOT:-/} != / ]] ; then
# When building with a sysroot (e.g. with crossdev's emerge wrappers)
# we need to tell cmake to use libs/headers from the sysroot but programs from / only.
- cat >> "${toolchain_file}" <<- _EOF_ || die
+ if($(if [[ ${SYSROOT:-/} != / ]] ; then echo 1; else echo 0; fi)) # if \${SYSROOT:-/} != /
set(CMAKE_SYSROOT "${ESYSROOT}")
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
- _EOF_
- fi
+ endif()
- if use prefix-guest; then
- cat >> "${build_rules}" <<- _EOF_ || die
- # in Prefix we need rpath and must ensure cmake gets our default linker path
- # right ... except for Darwin hosts
- if(NOT APPLE)
- set(CMAKE_SKIP_RPATH OFF CACHE BOOL "" FORCE)
- set(CMAKE_PLATFORM_REQUIRED_RUNTIME_PATH "${EPREFIX}/usr/${CHOST}/lib/gcc;${EPREFIX}/usr/${CHOST}/lib;${EPREFIX}/usr/$(get_libdir);${EPREFIX}/$(get_libdir)" CACHE STRING "" FORCE)
- else()
- set(CMAKE_PREFIX_PATH "${EPREFIX}/usr" CACHE STRING "" FORCE)
- set(CMAKE_MACOSX_RPATH ON CACHE BOOL "" FORCE)
- set(CMAKE_SKIP_BUILD_RPATH OFF CACHE BOOL "" FORCE)
- set(CMAKE_SKIP_RPATH OFF CACHE BOOL "" FORCE)
- set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE CACHE BOOL "" FORCE)
+ if($(tc-is-cross-compiler && echo 1 || echo 0)) # if tc-is-cross-compiler
+ set(CMAKE_SYSTEM_NAME "${sysname}")
+ if(CMAKE_SYSTEM_NAME STREQUAL "Windows")
+ set(CMAKE_RC_COMPILER $(tc-getRC))
endif()
- _EOF_
- fi
+ endif()
+ _EOF_
# Common configure parameters (invariants)
local common_config=${BUILD_DIR}/gentoo_common_config.cmake
- local libdir=$(get_libdir)
cat > "${common_config}" <<- _EOF_ || die
set(CMAKE_GENTOO_BUILD ON CACHE BOOL "Indicate Gentoo package build")
set(LIB_SUFFIX ${libdir/lib} CACHE STRING "library path suffix" FORCE)
@@ -664,19 +658,17 @@ cmake_src_configure() {
set(CMAKE_TLS_VERIFY ON CACHE BOOL "")
set(CMAKE_COMPILE_WARNING_AS_ERROR OFF CACHE BOOL "")
set(CMAKE_LINK_WARNING_AS_ERROR OFF CACHE BOOL "")
- _EOF_
- # See bug 689410
- if [[ "${ARCH}" == riscv ]]; then
- echo 'set(CMAKE_FIND_LIBRARY_CUSTOM_LIB_SUFFIX '"${libdir#lib}"' CACHE STRING "library search suffix" FORCE)' >> "${common_config}" || die
- fi
+ # See Gentoo-bug 689410
+ if($(if [[ "${ARCH}" == riscv ]]; then echo 1; else echo 0; fi)) # if \${ARCH} == riscv
+ set(CMAKE_FIND_LIBRARY_CUSTOM_LIB_SUFFIX '"${libdir#lib}"' CACHE STRING "library search suffix" FORCE)
+ endif()
- if [[ "${NOCOLOR}" = true || "${NOCOLOR}" = yes ]]; then
- echo 'set(CMAKE_COLOR_MAKEFILE OFF CACHE BOOL "pretty colors during make" FORCE)' >> "${common_config}" || die
- fi
+ if($(if [[ "${NOCOLOR}" = true || "${NOCOLOR}" = yes ]]; then echo 1; else echo 0; fi)) # if NOCOLOR=(true|yes)
+ set(CMAKE_COLOR_MAKEFILE OFF CACHE BOOL "pretty colors during make" FORCE)
+ endif()
- # Wipe the default optimization flags out of CMake
- cat >> ${common_config} <<- _EOF_ || die
+ # Wipe the default optimization flags out of CMake
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 "")
--
2.54.0
signature.asc
(application/pgp-signature, 829 B)
-----BEGIN PGP SIGNATURE----- iQIvBAABCgCZFiEE34gXUSooizdYNDu3S5FW4z0PgBkFAmojUnMbFIAAAAAABAAO bWFudTIsMi41KzEuMTIsMiwyXxSAAAAAAC4AKGlzc3Vlci1mcHJAbm90YXRpb25z Lm9wZW5wZ3AuZmlmdGhob3JzZW1hbi5uZXRERjg4MTc1MTJBMjg4QjM3NTgzNDNC Qjc0QjkxNTZFMzNEMEY4MDE5AAoJEEuRVuM9D4AZF6kL/AlSZ3uZcTKtK6utXq/B p9TJ2nGbhanTIjuweByWtZxndXonPtxMaRdAlm779ieOhQKNAYg2hISRoIO13UsI USExta7uVV73+kFz5g8xcvmh2FLIvbT4Q7Uiy65G7/gjROGkKK/lfFy2gS8XkrC/ VgB/2AdPCeotmH+xoAc+/WDESetRuyfb+Tpy39XOMcsB4Xkw8Xp3mnpc60SOtBGp WgsjfTN0chOtBW7SaDuOhRr4OrD1ldGsuuzTT+WSbX69/UNS/j2mWHPYPsROH2QE tS3yhFi1iO7gvOHOIAgN5sESToQ3yyKmygR5/tcF+c7kPwXfkmUbjM0H9Znj7GsC JNSsb8dHbs42z0CSbYAFjc3VCwWiZTr4c3Y6VHoI7+k13urcd/Gj7/3TZonpKGgy 2ndRcvdF2rfLvIGFS2mvB64xEsvDCXdg2iWuTqI4Ptv410i48Xmw/w61deYZey1C K/hBowxvdrGuhR8xf/HDeoQXioL4cMsDTy2yDNQIQKe4fA== =xCi/ -----END PGP SIGNATURE-----