dev-ros/qt_gui_cpp: Bump to 0.3.11.
[gentoo.git] / eclass / cmake-utils.eclass
index 07f719a62a8c1eb0fdc6c6f2f39cc9db6c5026ed..d69c79f83b414f1c5aeb6328e93b424e9acf7f4b 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright 1999-2017 Gentoo Foundation
+# Copyright 1999-2018 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
 # @ECLASS: cmake-utils.eclass
@@ -9,6 +9,7 @@
 # Maciej Mrozowski <reavertm@gentoo.org>
 # (undisclosed contributors)
 # Original author: Zephyrus (zephyrus@mirach.it)
+# @SUPPORTED_EAPIS: 5 6
 # @BLURB: common ebuild functions for cmake-based packages
 # @DESCRIPTION:
 # The cmake-utils eclass makes creating ebuilds for cmake-based packages much easier.
@@ -44,6 +45,7 @@ _CMAKE_UTILS_ECLASS=1
 : ${CMAKE_BUILD_TYPE:=Gentoo}
 
 # @ECLASS-VARIABLE: CMAKE_IN_SOURCE_BUILD
+# @DEFAULT_UNSET
 # @DESCRIPTION:
 # Set to enable in-source build.
 
@@ -56,7 +58,7 @@ _CMAKE_UTILS_ECLASS=1
 # @ECLASS-VARIABLE: CMAKE_MIN_VERSION
 # @DESCRIPTION:
 # Specify the minimum required CMake version.
-: ${CMAKE_MIN_VERSION:=3.7.2}
+: ${CMAKE_MIN_VERSION:=3.9.6}
 
 # @ECLASS-VARIABLE: CMAKE_REMOVE_MODULES
 # @DESCRIPTION:
@@ -87,56 +89,43 @@ _CMAKE_UTILS_ECLASS=1
 # but not used. Might give false-positives.
 # "no" to disable (default) or anything else to enable.
 
-# @ECLASS-VARIABLE: PREFIX
-# @DESCRIPTION:
-# Eclass respects PREFIX variable, though it's not recommended way to set
-# install/lib/bin prefixes.
-# Use -DCMAKE_INSTALL_PREFIX=... CMake variable instead.
-: ${PREFIX:=/usr}
-
-# @ECLASS-VARIABLE: WANT_CMAKE
-# @DESCRIPTION:
-# Specify if cmake-utils eclass should depend on cmake optionally or not.
-# This is useful when only part of application is using cmake build system.
-# Valid values are: always [default], optional (where the value is the useflag
-# used for optionality)
-#
-# This is banned in EAPI 6 and later.
-: ${WANT_CMAKE:=always}
-
 # @ECLASS-VARIABLE: CMAKE_EXTRA_CACHE_FILE
+# @DEFAULT_UNSET
 # @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.
 
+# @ECLASS-VARIABLE: CMAKE_UTILS_QA_SRC_DIR_READONLY
+# @DEFAULT_UNSET
+# @DESCRIPTION:
+# After running cmake-utils_src_prepare, sets ${S} to read-only. This is
+# a user flag and should under _no circumstances_ be set in the ebuild.
+# Helps in improving QA of build systems that write to source tree.
+
 case ${EAPI} in
-       2|4|5) : ${CMAKE_WARN_UNUSED_CLI:=no} ;;
+       5) : ${CMAKE_WARN_UNUSED_CLI:=no} ;;
        6) : ${CMAKE_WARN_UNUSED_CLI:=yes} ;;
        *) die "EAPI=${EAPI:-0} is not supported" ;;
 esac
 
-inherit toolchain-funcs multilib flag-o-matic eutils multiprocessing versionator
+inherit toolchain-funcs ninja-utils flag-o-matic multiprocessing xdg-utils
+
+case ${EAPI} in
+       5|6) inherit eutils multilib ;;
+esac
 
 EXPORT_FUNCTIONS src_prepare src_configure src_compile src_test src_install
 
-CMAKEDEPEND=""
-case ${WANT_CMAKE} in
-       always)
-               ;;
-       *)
-               [[ ${EAPI} == [2345] ]] || die "WANT_CMAKE is banned in EAPI 6 and later"
-               IUSE+=" ${WANT_CMAKE}"
-               CMAKEDEPEND+="${WANT_CMAKE}? ( "
-               ;;
-esac
+[[ ${WANT_CMAKE} ]] && eqawarn "\${WANT_CMAKE} has been removed and is a no-op now"
+[[ ${PREFIX} ]] && die "\${PREFIX} has been removed and is a no-op now"
 
 case ${CMAKE_MAKEFILE_GENERATOR} in
        emake)
-               CMAKEDEPEND+=" sys-devel/make"
+               DEPEND="sys-devel/make"
                ;;
        ninja)
-               CMAKEDEPEND+=" dev-util/ninja"
+               DEPEND="dev-util/ninja"
                ;;
        *)
                eerror "Unknown value for \${CMAKE_MAKEFILE_GENERATOR}"
@@ -145,14 +134,9 @@ case ${CMAKE_MAKEFILE_GENERATOR} in
 esac
 
 if [[ ${PN} != cmake ]]; then
-       CMAKEDEPEND+=" >=dev-util/cmake-${CMAKE_MIN_VERSION}"
+       DEPEND+=" >=dev-util/cmake-${CMAKE_MIN_VERSION}"
 fi
 
-[[ ${WANT_CMAKE} = always ]] || CMAKEDEPEND+=" )"
-
-DEPEND="${CMAKEDEPEND}"
-unset CMAKEDEPEND
-
 # Internal functions used by cmake-utils_use_*
 _cmake_use_me_now() {
        debug-print-function ${FUNCNAME} "$@"
@@ -160,7 +144,7 @@ _cmake_use_me_now() {
        local arg=$2
        [[ ! -z $3 ]] && arg=$3
 
-       [[ ${EAPI} == [2345] ]] || die "${FUNCNAME[1]} is banned in EAPI 6 and later: use -D$1<related_CMake_variable>=\"\$(usex $2)\" instead"
+       [[ ${EAPI} == 5 ]] || die "${FUNCNAME[1]} is banned in EAPI 6 and later: use -D$1<related_CMake_variable>=\"\$(usex $2)\" instead"
 
        local uper capitalised x
        [[ -z $2 ]] && die "cmake-utils_use-$1 <USE flag> [<flag name>]"
@@ -182,7 +166,7 @@ _cmake_use_me_now_inverted() {
        local arg=$2
        [[ ! -z $3 ]] && arg=$3
 
-       if [[ ${EAPI} != [2345] && "${FUNCNAME[1]}" != cmake-utils_use_find_package ]] ; then
+       if [[ ${EAPI} != 5 && "${FUNCNAME[1]}" != cmake-utils_use_find_package ]] ; then
                die "${FUNCNAME[1]} is banned in EAPI 6 and later: use -D$1<related_CMake_variable>=\"\$(usex $2)\" instead"
        fi
 
@@ -241,9 +225,18 @@ _cmake_generator_to_use() {
                ninja)
                        # if ninja is enabled but not installed, the build could fail
                        # this could happen if ninja is manually enabled (eg. make.conf) but not installed
-                       if ! ROOT=/ has_version dev-util/ninja; then
-                               die "CMAKE_MAKEFILE_GENERATOR is set to ninja, but ninja is not installed. Please install dev-util/ninja or unset CMAKE_MAKEFILE_GENERATOR."
-                       fi
+                       case ${EAPI} in
+                               5|6)
+                                       if ! ROOT=/ has_version dev-util/ninja; then
+                                               die "CMAKE_MAKEFILE_GENERATOR is set to ninja, but ninja is not installed. Please install dev-util/ninja or unset CMAKE_MAKEFILE_GENERATOR."
+                                       fi
+                               ;;
+                               *)
+                                       if ! has_version -b dev-util/ninja; then
+                                               die "CMAKE_MAKEFILE_GENERATOR is set to ninja, but ninja is not installed. Please install dev-util/ninja or unset CMAKE_MAKEFILE_GENERATOR."
+                                       fi
+                               ;;
+                       esac
                        generator_name="Ninja"
                        ;;
                emake)
@@ -282,7 +275,7 @@ cmake_comment_add_subdirectory() {
 # Comment out an add_subdirectory call in CMakeLists.txt in the current directory
 # Banned in EAPI 6 and later - use cmake_comment_add_subdirectory instead.
 comment_add_subdirectory() {
-       [[ ${EAPI} == [2345] ]] || die "comment_add_subdirectory is banned in EAPI 6 and later - use cmake_comment_add_subdirectory instead"
+       [[ ${EAPI} == 5 ]] || die "comment_add_subdirectory is banned in EAPI 6 and later - use cmake_comment_add_subdirectory instead"
 
        cmake_comment_add_subdirectory "$@"
 }
@@ -314,7 +307,7 @@ cmake-utils_use_enable() { _cmake_use_me_now ENABLE_ "$@" ; }
 # if foo is enabled and -DCMAKE_DISABLE_FIND_PACKAGE_LibFoo=ON if it is disabled.
 # This can be used to make find_package optional.
 cmake-utils_use_find_package() {
-       if [[ ${EAPI} != [2345] && "$#" != 2 ]] ; then
+       if [[ ${EAPI} != 5 && "$#" != 2 ]] ; then
                die "Usage: cmake-utils_use_find_package <USE flag> <package name>"
        fi
 
@@ -450,12 +443,15 @@ _cmake_cleanup_cmake() {
        _cmake_modify-cmakelists
 }
 
-enable_cmake-utils_src_prepare() {
+# @FUNCTION: cmake-utils_src_prepare
+# @DESCRIPTION:
+# Apply ebuild and user patches.
+cmake-utils_src_prepare() {
        debug-print-function ${FUNCNAME} "$@"
 
        pushd "${S}" > /dev/null || die
 
-       if [[ ${EAPI} != [2345] ]]; then
+       if [[ ${EAPI} != 5 ]]; then
                default_src_prepare
                _cmake_cleanup_cmake
        else
@@ -467,6 +463,13 @@ enable_cmake-utils_src_prepare() {
        fi
 
        popd > /dev/null || die
+
+       # make ${S} read-only in order to detect broken build-systems
+       if [[ ${CMAKE_UTILS_QA_SRC_DIR_READONLY} && ! ${CMAKE_IN_SOURCE_BUILD} ]]; then
+               chmod -R a-w "${S}"
+       fi
+
+       _CMAKE_UTILS_SRC_PREPARE_HAS_RUN=1
 }
 
 # @VARIABLE: mycmakeargs
@@ -484,15 +487,23 @@ enable_cmake-utils_src_prepare() {
 # }
 # @CODE
 
-enable_cmake-utils_src_configure() {
+# @FUNCTION: cmake-utils_src_configure
+# @DESCRIPTION:
+# General function for configuring with cmake. Default behaviour is to start an
+# out-of-source build.
+cmake-utils_src_configure() {
        debug-print-function ${FUNCNAME} "$@"
 
-       [[ ${EAPI} == [2345] ]] && _cmake_cleanup_cmake
+       if [[ ! ${_CMAKE_UTILS_SRC_PREPARE_HAS_RUN} ]]; then
+               eqawarn "cmake-utils_src_prepare has not been run, please open a bug on https://bugs.gentoo.org/"
+       fi
+
+       [[ ${EAPI} == 5 ]] && _cmake_cleanup_cmake
 
        _cmake_check_build_dir
 
        # Fix xdg collision with sandbox
-       local -x XDG_CONFIG_HOME="${T}"
+       xdg_environment_reset
 
        # @SEE CMAKE_BUILD_TYPE
        if [[ ${CMAKE_BUILD_TYPE} = Gentoo ]]; then
@@ -505,21 +516,14 @@ enable_cmake-utils_src_configure() {
 
        # Prepare Gentoo override rules (set valid compiler, append CPPFLAGS etc.)
        local build_rules=${BUILD_DIR}/gentoo_rules.cmake
-       # Since cmake-3.4.0_rc1 "<FLAGS>" no longer contains includes and thus
-       # we need to add "<INCLUDES>"
-       local includes=
-       if [[ ${PN} == cmake ]] ; then
-               if $(version_is_at_least 3.4.0 $(get_version_component_range 1-3 ${PV})) ; then
-                       includes="<INCLUDES>"
-               fi
-       elif ROOT=/ has_version \>=dev-util/cmake-3.4.0_rc1 ; then
-               includes="<INCLUDES>"
-       fi
+
        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_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)
+               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)
+               SET (CMAKE_ASM-ATT_LINK_FLAGS "-nostdlib" CACHE STRING "ASM-ATT link flags" FORCE)
+               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)
        _EOF_
 
        local myCC=$(tc-getCC) myCXX=$(tc-getCXX) myFC=$(tc-getFC)
@@ -532,6 +536,7 @@ enable_cmake-utils_src_configure() {
        local toolchain_file=${BUILD_DIR}/gentoo_toolchain.cmake
        cat > ${toolchain_file} <<- _EOF_ || die
                SET (CMAKE_ASM_COMPILER "${myCC/ /;}")
+               SET (CMAKE_ASM-ATT_COMPILER "${myCC/ /;}")
                SET (CMAKE_C_COMPILER "${myCC/ /;}")
                SET (CMAKE_CXX_COMPILER "${myCXX/ /;}")
                SET (CMAKE_Fortran_COMPILER "${myFC/ /;}")
@@ -567,16 +572,14 @@ enable_cmake-utils_src_configure() {
                        # 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_ || die
-                               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)
+                               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
 
-       [[ ${EAPI} == 2 ]] && ! use prefix && local EPREFIX=
-
        if [[ ${EPREFIX} ]]; then
                cat >> "${build_rules}" <<- _EOF_ || die
                        # in Prefix we need rpath and must ensure cmake gets our default linker path
@@ -588,13 +591,11 @@ enable_cmake-utils_src_configure() {
 
                        ELSE ()
 
-                       SET(CMAKE_PREFIX_PATH "${EPREFIX}${PREFIX}" CACHE STRING "" FORCE)
-                       SET(CMAKE_SKIP_BUILD_RPATH OFF CACHE BOOL "" FORCE)
-                       SET(CMAKE_SKIP_RPATH OFF CACHE BOOL "" FORCE)
-                       SET(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE CACHE BOOL "")
-                       SET(CMAKE_INSTALL_RPATH "${EPREFIX}${PREFIX}/lib;${EPREFIX}/usr/${CHOST}/lib/gcc;${EPREFIX}/usr/${CHOST}/lib;${EPREFIX}/usr/$(get_libdir);${EPREFIX}/$(get_libdir)" CACHE STRING "" FORCE)
-                       SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE CACHE BOOL "" FORCE)
-                       SET(CMAKE_INSTALL_NAME_DIR "${EPREFIX}${PREFIX}/lib" CACHE STRING "" FORCE)
+                       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 (NOT APPLE)
                _EOF_
@@ -607,13 +608,22 @@ enable_cmake-utils_src_configure() {
                SET (CMAKE_GENTOO_BUILD ON CACHE BOOL "Indicate Gentoo package build")
                SET (LIB_SUFFIX ${libdir/lib} CACHE STRING "library path suffix" FORCE)
                SET (CMAKE_INSTALL_LIBDIR ${libdir} CACHE PATH "Output directory for libraries")
+               SET (CMAKE_INSTALL_INFODIR "${EPREFIX}/usr/share/info" CACHE PATH "")
+               SET (CMAKE_INSTALL_MANDIR "${EPREFIX}/usr/share/man" CACHE PATH "")
        _EOF_
        [[ "${NOCOLOR}" = true || "${NOCOLOR}" = yes ]] && echo 'SET (CMAKE_COLOR_MAKEFILE OFF CACHE BOOL "pretty colors during make" FORCE)' >> "${common_config}"
 
+       if [[ ${EAPI} != [56] ]]; then
+               cat >> "${common_config}" <<- _EOF_ || die
+                       SET (CMAKE_INSTALL_DOCDIR "${EPREFIX}/usr/share/doc/${PF}" CACHE PATH "")
+               _EOF_
+       fi
+
        # Wipe the default optimization flags out of CMake
-       if [[ ${CMAKE_BUILD_TYPE} != Gentoo ]] && ! has "${EAPI}" 2 3 4 5; then
+       if [[ ${CMAKE_BUILD_TYPE} != Gentoo && ${EAPI} != 5 ]]; then
                cat >> ${common_config} <<- _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 "")
@@ -630,7 +640,7 @@ enable_cmake-utils_src_configure() {
        local mycmakeargstype=$(declare -p mycmakeargs 2>&-)
        if [[ "${mycmakeargstype}" != "declare -a mycmakeargs="* ]]; then
                if [[ -n "${mycmakeargstype}" ]] ; then
-                       if [[ ${EAPI} == [2345] ]]; then
+                       if [[ ${EAPI} == 5 ]]; then
                                eqawarn "Declaring mycmakeargs as a variable is deprecated. Please use an array instead."
                        else
                                die "Declaring mycmakeargs as a variable is banned in EAPI=${EAPI}. Please use an array instead."
@@ -648,16 +658,16 @@ enable_cmake-utils_src_configure() {
        fi
 
        # Common configure parameters (overridable)
-       # NOTE CMAKE_BUILD_TYPE can be only overriden via CMAKE_BUILD_TYPE eclass variable
+       # NOTE CMAKE_BUILD_TYPE can be only overridden via CMAKE_BUILD_TYPE eclass variable
        # No -DCMAKE_BUILD_TYPE=xxx definitions will be in effect.
        local cmakeargs=(
                ${warn_unused_cli}
                -C "${common_config}"
                -G "$(_cmake_generator_to_use)"
-               -DCMAKE_INSTALL_PREFIX="${EPREFIX}${PREFIX}"
+               -DCMAKE_INSTALL_PREFIX="${EPREFIX}/usr"
                "${mycmakeargs_local[@]}"
                -DCMAKE_BUILD_TYPE="${CMAKE_BUILD_TYPE}"
-               $([[ ${EAPI} == [2345] ]] && echo -DCMAKE_INSTALL_DO_STRIP=OFF)
+               $([[ ${EAPI} == 5 ]] && echo -DCMAKE_INSTALL_DO_STRIP=OFF)
                -DCMAKE_USER_MAKE_RULES_OVERRIDE="${build_rules}"
                -DCMAKE_TOOLCHAIN_FILE="${toolchain_file}"
                "${MYCMAKEARGS}"
@@ -674,50 +684,16 @@ enable_cmake-utils_src_configure() {
        popd > /dev/null || die
 }
 
-enable_cmake-utils_src_compile() {
+# @FUNCTION: cmake-utils_src_compile
+# @DESCRIPTION:
+# General function for compiling with cmake.
+# Automatically detects the build type. All arguments are passed to emake.
+cmake-utils_src_compile() {
        debug-print-function ${FUNCNAME} "$@"
 
        cmake-utils_src_make "$@"
 }
 
-_ninjaopts_from_makeopts() {
-       if [[ ${NINJAOPTS+set} == set ]]; then
-               return 0
-       fi
-       local ninjaopts=()
-       set -- ${MAKEOPTS}
-       while (( $# )); do
-               case $1 in
-                       -j|-l)
-                               if [[ $# -eq 1 || $2 == -* ]]; then
-                                       if [[ $1 == -j ]]; then
-                                               # absurdly high job limit
-                                               ninjaopts+=( $1 9999 )
-                                       else # -l
-                                               # remove load limit (like make does for -l)
-                                               ninjaopts+=( $1 0 )
-                                       fi
-                                       shift 1
-                               else
-                                       ninjaopts+=( $1 $2 )
-                                       shift 2
-                               fi
-                               ;;
-                       -j*|-l*)
-                               ninjaopts+=( $1 )
-                               shift 1
-                               ;;
-                       -k)
-                               # -k 0 = any number of tasks can fail
-                               ninjaopts+=( $1 0 )
-                               shift 1
-                               ;;
-                       *) shift ;;
-               esac
-       done
-       export NINJAOPTS="${ninjaopts[*]}"
-}
-
 # @FUNCTION: _cmake_ninja_src_make
 # @INTERNAL
 # @DESCRIPTION:
@@ -727,16 +703,7 @@ _cmake_ninja_src_make() {
 
        [[ -e build.ninja ]] || die "build.ninja not found. Error during configure stage."
 
-       _ninjaopts_from_makeopts
-
-       if [[ "${CMAKE_VERBOSE}" != "OFF" ]]; then
-               set -- ninja ${NINJAOPTS} -v "$@"
-       else
-               set -- ninja ${NINJAOPTS} "$@"
-       fi
-
-       echo "$@"
-       "$@" || die
+       eninja "$@"
 }
 
 # @FUNCTION: _cmake_emake_src_make
@@ -771,7 +738,10 @@ cmake-utils_src_make() {
        popd > /dev/null || die
 }
 
-enable_cmake-utils_src_test() {
+# @FUNCTION: cmake-utils_src_test
+# @DESCRIPTION:
+# Function for testing the package. Automatically detects the build type.
+cmake-utils_src_test() {
        debug-print-function ${FUNCNAME} "$@"
 
        _cmake_check_build_dir
@@ -804,7 +774,10 @@ enable_cmake-utils_src_test() {
        fi
 }
 
-enable_cmake-utils_src_install() {
+# @FUNCTION: cmake-utils_src_install
+# @DESCRIPTION:
+# Function for installing the package. Automatically detects the build type.
+cmake-utils_src_install() {
        debug-print-function ${FUNCNAME} "$@"
 
        _cmake_check_build_dir
@@ -817,51 +790,4 @@ enable_cmake-utils_src_install() {
        popd > /dev/null || die
 }
 
-# @FUNCTION: cmake-utils_src_prepare
-# @DESCRIPTION:
-# Apply ebuild and user patches.
-cmake-utils_src_prepare() {
-       _cmake_execute_optionally "src_prepare" "$@"
-}
-
-# @FUNCTION: cmake-utils_src_configure
-# @DESCRIPTION:
-# General function for configuring with cmake. Default behaviour is to start an
-# out-of-source build.
-cmake-utils_src_configure() {
-       _cmake_execute_optionally "src_configure" "$@"
-}
-
-# @FUNCTION: cmake-utils_src_compile
-# @DESCRIPTION:
-# General function for compiling with cmake.
-# Automatically detects the build type. All arguments are passed to emake.
-cmake-utils_src_compile() {
-       _cmake_execute_optionally "src_compile" "$@"
-}
-
-# @FUNCTION: cmake-utils_src_test
-# @DESCRIPTION:
-# Function for testing the package. Automatically detects the build type.
-cmake-utils_src_test() {
-       _cmake_execute_optionally "src_test" "$@"
-}
-
-# @FUNCTION: cmake-utils_src_install
-# @DESCRIPTION:
-# Function for installing the package. Automatically detects the build type.
-cmake-utils_src_install() {
-       _cmake_execute_optionally "src_install" "$@"
-}
-
-# Optionally executes phases based on WANT_CMAKE variable/USE flag.
-_cmake_execute_optionally() {
-       local phase="$1" ; shift
-       if [[ ${WANT_CMAKE} = always ]]; then
-               enable_cmake-utils_${phase} "$@"
-       else
-               use ${WANT_CMAKE} && enable_cmake-utils_${phase} "$@"
-       fi
-}
-
 fi