From: orbea <[email protected]>
Signed-off-by: Lars Wendler <[email protected]>
---
eclass/cmake.eclass | 22 ++++++++--------------
eclass/meson.eclass | 4 ++--
eclass/ninja-utils.eclass | 37 +++++++++++++++++++++++++++++++++++--
3 files changed, 45 insertions(+), 18 deletions(-)
diff --git a/eclass/cmake.eclass b/eclass/cmake.eclass
index 4bd09459ea6..935ee1d8c81 100644
--- a/eclass/cmake.eclass
+++ b/eclass/cmake.eclass
@@ -52,9 +52,9 @@ _CMAKE_ECLASS=1
# @DEFAULT_UNSET
# @DESCRIPTION:
# Specify a makefile generator to be used by cmake.
-# At this point only "emake" and "ninja" are supported.
-# The default is set to "ninja".
-: ${CMAKE_MAKEFILE_GENERATOR:=ninja}
+# At this point only "emake", "eninja" and "ninja" are supported.
+# The default is set to "eninja".
+: ${CMAKE_MAKEFILE_GENERATOR:=eninja}
# @ECLASS-VARIABLE: CMAKE_REMOVE_MODULES_LIST
# @DESCRIPTION:
@@ -117,8 +117,8 @@ case ${CMAKE_MAKEFILE_GENERATOR} in
emake)
BDEPEND="sys-devel/make"
;;
- ninja)
- BDEPEND="dev-util/ninja"
+ eninja|ninja)
+ BDEPEND="|| ( dev-util/ninja dev-util/samurai )"
;;
*)
eerror "Unknown value for \${CMAKE_MAKEFILE_GENERATOR}"
@@ -335,13 +335,6 @@ cmake_src_prepare() {
die "FATAL: Unable to find CMakeLists.txt"
fi
- # 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."
- fi
-
local modules_list
if [[ $(declare -p CMAKE_REMOVE_MODULES_LIST) == "declare -a"* ]]; then
modules_list=( "${CMAKE_REMOVE_MODULES_LIST[@]}" )
@@ -534,7 +527,7 @@ cmake_src_configure() {
local generator_name
case ${CMAKE_MAKEFILE_GENERATOR} in
- ninja) generator_name="Ninja" ;;
+ eninja|ninja) generator_name="Ninja" ;;
emake) generator_name="Unix Makefiles" ;;
esac
@@ -592,8 +585,9 @@ cmake_build() {
*) emake VERBOSE=1 "$@" ;;
esac
;;
- ninja)
+ eninja|ninja)
[[ -e build.ninja ]] || die "build.ninja not found.
Error during configure stage."
+ CMAKE_MAKEFILE_GENERATOR=eninja
eninja "$@"
;;
esac
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..5008564dabf 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,30 @@ 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 ninja or samurai are enabled but not installed, the build could
fail
+ # this could happen if they are manually enabled (eg. make.conf) but
not installed
+ 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 +82,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