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