commit:     e530f53abfd8e8f5b99bc7a6acf0f28b8e3f1c5e
Author:     Michael Palimaka <kensington <AT> gentoo <DOT> org>
AuthorDate: Mon Oct 27 13:17:08 2014 +0000
Commit:     Michael Palimaka <kensington <AT> gentoo <DOT> org>
CommitDate: Mon Oct 27 13:17:08 2014 +0000
URL:        http://sources.gentoo.org/gitweb/?p=proj/kde.git;a=commit;h=e530f53a

[eclass] Sync with portage (bug #503216).

---
 eclass/cmake-utils.eclass | 44 ++++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 42 insertions(+), 2 deletions(-)

diff --git a/eclass/cmake-utils.eclass b/eclass/cmake-utils.eclass
index 1ceadb9..803e13f 100644
--- a/eclass/cmake-utils.eclass
+++ b/eclass/cmake-utils.eclass
@@ -106,6 +106,11 @@ CMAKE_REMOVE_MODULES="${CMAKE_REMOVE_MODULES:-yes}"
 # used for optionality)
 : ${WANT_CMAKE:=always}
 
+# @ECLASS-VARIABLE: CMAKE_EXTRA_CACHE_FILE
+# @DESCRIPTION:
+# Specifies an extra cache file to pass to cmake. This is the analog of 
EXTRA_ECONF
+# for econf and is needed to pass TRY_RUN results when cross-compiling.
+# Should be set by user in a per-package basis in /etc/portage/package.env.
 
 CMAKEDEPEND=""
 case ${WANT_CMAKE} in
@@ -454,14 +459,44 @@ enable_cmake-utils_src_configure() {
        cat > "${build_rules}" <<- _EOF_
                SET (CMAKE_AR $(type -P $(tc-getAR)) CACHE FILEPATH "Archive 
manager" FORCE)
                SET (CMAKE_ASM_COMPILE_OBJECT "<CMAKE_C_COMPILER> <DEFINES> 
${CFLAGS} <FLAGS> -o <OBJECT> -c <SOURCE>" CACHE STRING "ASM compile command" 
FORCE)
-               SET (CMAKE_C_COMPILER $(type -P $(tc-getCC)) CACHE FILEPATH "C 
compiler" FORCE)
                SET (CMAKE_C_COMPILE_OBJECT "<CMAKE_C_COMPILER> <DEFINES> 
${CPPFLAGS} <FLAGS> -o <OBJECT> -c <SOURCE>" CACHE STRING "C compile command" 
FORCE)
-               SET (CMAKE_CXX_COMPILER $(type -P $(tc-getCXX)) CACHE FILEPATH 
"C++ compiler" FORCE)
                SET (CMAKE_CXX_COMPILE_OBJECT "<CMAKE_CXX_COMPILER> <DEFINES> 
${CPPFLAGS} <FLAGS> -o <OBJECT> -c <SOURCE>" CACHE STRING "C++ compile command" 
FORCE)
                SET (CMAKE_RANLIB $(type -P $(tc-getRANLIB)) CACHE FILEPATH 
"Archive index generator" FORCE)
                SET (PKG_CONFIG_EXECUTABLE $(type -P $(tc-getPKG_CONFIG)) CACHE 
FILEPATH "pkg-config executable" FORCE)
        _EOF_
 
+       local toolchain_file=${BUILD_DIR}/gentoo_toolchain.cmake
+       cat > ${toolchain_file} <<- _EOF_
+               SET (CMAKE_C_COMPILER $(tc-getCC))
+               SET (CMAKE_CXX_COMPILER $(tc-getCXX))
+       _EOF_
+
+       if tc-is-cross-compiler; then
+               local sysname
+               case "${KERNEL:-linux}" in
+                       Cygwin) sysname="CYGWIN_NT-5.1" ;;
+                       HPUX) sysname="HP-UX" ;;
+                       linux) sysname="Linux" ;;
+                       Winnt) sysname="Windows" ;;
+                       *) sysname="${KERNEL}" ;;
+               esac
+
+               cat >> "${toolchain_file}" <<- _EOF_
+                       SET (CMAKE_SYSTEM_NAME "${sysname}")
+               _EOF_
+
+               if [ "${SYSROOT:-/}" != "/" ] ; then
+                       # When cross-compiling 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_
+                               set(CMAKE_FIND_ROOT_PATH "${SYSROOT}")
+                               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
+       fi
+
        has "${EAPI:-0}" 0 1 2 && ! use prefix && EPREFIX=
 
        if [[ ${EPREFIX} ]]; then
@@ -523,9 +558,14 @@ enable_cmake-utils_src_configure() {
                -DCMAKE_BUILD_TYPE="${CMAKE_BUILD_TYPE}"
                -DCMAKE_INSTALL_DO_STRIP=OFF
                -DCMAKE_USER_MAKE_RULES_OVERRIDE="${build_rules}"
+               -DCMAKE_TOOLCHAIN_FILE="${toolchain_file}"
                "${MYCMAKEARGS}"
        )
 
+       if [[ -n "${CMAKE_EXTRA_CACHE_FILE}" ]] ; then
+               cmakeargs+=( -C "${CMAKE_EXTRA_CACHE_FILE}" )
+       fi
+
        pushd "${BUILD_DIR}" > /dev/null
        debug-print "${LINENO} ${ECLASS} ${FUNCNAME}: mycmakeargs is 
${mycmakeargs_local[*]}"
        echo "${CMAKE_BINARY}" "${cmakeargs[@]}" "${CMAKE_USE_DIR}"

Reply via email to