From: orbea <or...@riseup.net>

Signed-off-by: Lars Wendler <polynomia...@gentoo.org>
---
 eclass/cmake.eclass       | 10 +++++-----
 eclass/meson.eclass       |  4 ++--
 eclass/ninja-utils.eclass | 35 +++++++++++++++++++++++++++++++++--
 3 files changed, 40 insertions(+), 9 deletions(-)

diff --git a/eclass/cmake.eclass b/eclass/cmake.eclass
index 4bd09459ea6..c0c22394a31 100644
--- a/eclass/cmake.eclass
+++ b/eclass/cmake.eclass
@@ -118,7 +118,7 @@ case ${CMAKE_MAKEFILE_GENERATOR} in
                BDEPEND="sys-devel/make"
                ;;
        ninja)
-               BDEPEND="dev-util/ninja"
+               BDEPEND="|| ( dev-util/ninja dev-util/samurai )"
                ;;
        *)
                eerror "Unknown value for \${CMAKE_MAKEFILE_GENERATOR}"
@@ -337,9 +337,9 @@ cmake_src_prepare() {
 
        # 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 [[ ${CMAKE_MAKEFILE_GENERATOR} == ninja ]] && ! has_version -b 
dev-util/ninja; then
-               eerror "CMAKE_MAKEFILE_GENERATOR is set to ninja, but ninja is 
not installed."
-               die "Please install dev-util/ninja or unset 
CMAKE_MAKEFILE_GENERATOR."
+       if [[ ${CMAKE_MAKEFILE_GENERATOR} == ninja ]] && ! has_version -b 
dev-util/ninja && ! has_version -b dev-util/samurai; then
+               eerror "CMAKE_MAKEFILE_GENERATOR is set to ninja, but neither 
ninja or samurai are installed."
+               die "Please install dev-util/ninja, dev-util/samurai or unset 
CMAKE_MAKEFILE_GENERATOR."
        fi
 
        local modules_list
@@ -653,7 +653,7 @@ cmake_src_install() {
 
        _cmake_check_build_dir
        pushd "${BUILD_DIR}" > /dev/null || die
-       DESTDIR="${D}" ${CMAKE_MAKEFILE_GENERATOR} install "$@" ||
+       DESTDIR="${D}" eninja install "$@" ||
                die "died running ${CMAKE_MAKEFILE_GENERATOR} install"
        popd > /dev/null || die
 
diff --git a/eclass/meson.eclass b/eclass/meson.eclass
index d0ce5adb355..ea02402aa83 100644
--- a/eclass/meson.eclass
+++ b/eclass/meson.eclass
@@ -1,4 +1,4 @@
-# Copyright 2017-2020 Gentoo Authors
+# Copyright 2017-2021 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
 # @ECLASS: meson.eclass
@@ -55,7 +55,7 @@ if [[ -z ${_MESON_ECLASS} ]]; then
 _MESON_ECLASS=1
 
 MESON_DEPEND=">=dev-util/meson-0.54.0
-       >=dev-util/ninja-1.8.2
+       || ( >=dev-util/ninja-1.8.2 dev-util/samurai )
        dev-util/meson-format-array
 "
 
diff --git a/eclass/ninja-utils.eclass b/eclass/ninja-utils.eclass
index ca8d67191dc..3b23d4c002a 100644
--- a/eclass/ninja-utils.eclass
+++ b/eclass/ninja-utils.eclass
@@ -1,4 +1,4 @@
-# Copyright 1999-2018 Gentoo Foundation
+# Copyright 1999-2021 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
 # @ECLASS: ninja-utils.eclass
@@ -27,6 +27,15 @@ case ${EAPI:-0} in
        *) die "EAPI=${EAPI} is not yet supported" ;;
 esac
 
+# @ECLASS-VARIABLE: NINJA
+# @PRE_INHERIT
+# @DEFAULT_UNSET
+# @DESCRIPTION:
+# Specify a compatible ninja implementation to be used by eninja.
+# At this point only "ninja" and "samu" are supported.
+# The default is set to "ninja".
+: ${NINJA:=ninja}
+
 # @ECLASS-VARIABLE: NINJAOPTS
 # @DEFAULT_UNSET
 # @DESCRIPTION:
@@ -36,6 +45,28 @@ esac
 
 inherit multiprocessing
 
+_ninja_to_use() {
+       case "${NINJA}" in
+               ninja)
+                       local ninja=dev-util/${NINJA}
+               ;;
+               samu)
+                       local ninja=dev-util/samurai
+               ;;
+               *)
+                       eerror "Unknown value for \${NINJA}"
+                       die "Value ${NINJA} is not supported"
+               ;;
+       esac
+
+       if ! has_version -b $ninja; then
+               eerror "Value ${NINJA} for \${NINJA} is not installed"
+               die "Please install $ninja"
+       fi
+
+       echo ${NINJA}
+}
+
 # @FUNCTION: eninja
 # @USAGE: [<args>...]
 # @DESCRIPTION:
@@ -49,7 +80,7 @@ eninja() {
        if [[ -z ${NINJAOPTS+set} ]]; then
                NINJAOPTS="-j$(makeopts_jobs) -l$(makeopts_loadavg 
"${MAKEOPTS}" 0)"
        fi
-       set -- ninja -v ${NINJAOPTS} "$@"
+       set -- "$(_ninja_to_use)" -v ${NINJAOPTS} "$@"
        echo "$@" >&2
        "$@" || die "${nonfatal_args[@]}" "${*} failed"
 }
-- 
2.31.1


Reply via email to