summaryrefslogtreecommitdiff
path: root/eclass
diff options
context:
space:
mode:
authorMichał Górny <mgorny@gentoo.org>2022-10-28 11:59:52 +0200
committerMichał Górny <mgorny@gentoo.org>2022-11-15 17:34:06 +0100
commit95a6dff78a57dde2133dba050d16cae2c5113b23 (patch)
tree716b2c63015ca685576519dd58e6cd88eb3f69af /eclass
parentscons-utils.eclass: Default SCONS_MIN_VERSION to current stable (diff)
downloadgentoo-95a6dff78a57dde2133dba050d16cae2c5113b23.tar.gz
gentoo-95a6dff78a57dde2133dba050d16cae2c5113b23.tar.bz2
gentoo-95a6dff78a57dde2133dba050d16cae2c5113b23.zip
scons-utils.eclass: Reuse makeopts_jobs
Closes: https://github.com/gentoo/gentoo/pull/27999 Signed-off-by: Michał Górny <mgorny@gentoo.org>
Diffstat (limited to 'eclass')
-rw-r--r--eclass/scons-utils.eclass102
-rwxr-xr-xeclass/tests/scons-utils.sh64
2 files changed, 4 insertions, 162 deletions
diff --git a/eclass/scons-utils.eclass b/eclass/scons-utils.eclass
index cbe92f6fc385..acb51300f348 100644
--- a/eclass/scons-utils.eclass
+++ b/eclass/scons-utils.eclass
@@ -71,8 +71,8 @@
# @DEFAULT_UNSET
# @DESCRIPTION:
# The default set of options to pass to scons. Similar to MAKEOPTS,
-# supposed to be set in make.conf. If unset, escons() will use cleaned
-# up MAKEOPTS instead.
+# supposed to be set in make.conf. If unset, escons() will set -j
+# based on MAKEOPTS.
# @ECLASS_VARIABLE: EXTRA_ESCONS
# @USER_VARIABLE
@@ -148,11 +148,8 @@ escons() {
die "EPYTHON unset in escons"
fi
- # if SCONSOPTS are _unset_, use cleaned MAKEOPTS
- if [[ ! ${SCONSOPTS+set} ]]; then
- local SCONSOPTS
- _scons_clean_makeopts
- fi
+ # if SCONSOPTS are unset, grab -j from MAKEOPTS
+ : "${SCONSOPTS:=-j$(makeopts_jobs)}"
# pass ebuild environment variables through!
local -x GENTOO_SCONS_ENV_PASSTHROUGH=1
@@ -161,94 +158,3 @@ escons() {
echo "${@}" >&2
"${@}" || die -n "escons failed."
}
-
-# @FUNCTION: _scons_clean_makeopts
-# @USAGE: [makeflags] [...]
-# @INTERNAL
-# @DESCRIPTION:
-# Strip the supplied makeflags (or ${MAKEOPTS} if called without
-# an argument) of options not supported by SCons and make sure --jobs
-# gets an argument. Output the resulting flag list (suitable
-# for an assignment to SCONSOPTS).
-_scons_clean_makeopts() {
- local new_makeopts=()
-
- debug-print-function ${FUNCNAME} "${@}"
-
- if [[ ${#} -eq 0 ]]; then
- debug-print "Using MAKEOPTS: [${MAKEOPTS}]"
- set -- ${MAKEOPTS}
- else
- # unquote if necessary
- set -- ${*}
- fi
-
- # empty MAKEOPTS give out empty SCONSOPTS
- # thus, we do need to worry about the initial setup
- if [[ ${*} = ${_SCONS_CACHE_MAKEOPTS} ]]; then
- SCONSOPTS=${_SCONS_CACHE_SCONSOPTS}
- debug-print "Cache hit: [${SCONSOPTS}]"
- return
- fi
- _SCONS_CACHE_MAKEOPTS=${*}
-
- while [[ ${#} -gt 0 ]]; do
- case ${1} in
- # clean, simple to check -- we like that
- --jobs=*|--keep-going)
- new_makeopts+=( ${1} )
- ;;
- # need to take a look at the next arg and guess
- --jobs)
- if [[ ${#} -gt 1 && ${2} =~ ^[0-9]+$ ]]; then
- new_makeopts+=( ${1} ${2} )
- shift
- else
- # no value means no limit, let's pass a default instead
- new_makeopts+=( ${1}=$(( $(get_nproc) + 1 )) )
- fi
- ;;
- # strip other long options
- --*)
- ;;
- # short option hell
- -*)
- local str new_optstr
- new_optstr=
- str=${1#-}
-
- while [[ -n ${str} ]]; do
- case ${str} in
- k*)
- new_optstr+=k
- ;;
- # -j needs to come last
- j)
- if [[ ${#} -gt 1 && ${2} =~ ^[0-9]+$ ]]; then
- new_optstr+="j ${2}"
- shift
- else
- new_optstr+="j $(( $(get_nproc) + 1 ))"
- fi
- ;;
- # otherwise, everything after -j is treated as an arg
- j*)
- new_optstr+=${str}
- break
- ;;
- esac
- str=${str#?}
- done
-
- if [[ -n ${new_optstr} ]]; then
- new_makeopts+=( -${new_optstr} )
- fi
- ;;
- esac
- shift
- done
-
- SCONSOPTS=${new_makeopts[*]}
- _SCONS_CACHE_SCONSOPTS=${SCONSOPTS}
- debug-print "New SCONSOPTS: [${SCONSOPTS}]"
-}
diff --git a/eclass/tests/scons-utils.sh b/eclass/tests/scons-utils.sh
deleted file mode 100755
index 5f1cd2036047..000000000000
--- a/eclass/tests/scons-utils.sh
+++ /dev/null
@@ -1,64 +0,0 @@
-#!/bin/bash
-# Copyright 1999-2021 Gentoo Authors
-# Distributed under the terms of the GNU General Public License v2
-
-EAPI=7
-_PYTHON_R1=1
-source tests-common.sh || exit
-
-inherit scons-utils
-
-test-scons_clean_makeopts() {
- tbegin "scons_clean_makeopts() for ${1}"
-
- local SCONSOPTS ret=0
- _scons_clean_makeopts ${1}
-
- if [[ ${SCONSOPTS} != ${2-${1}} ]]; then
- eerror "Self-test failed:"
- eindent
- eerror "MAKEOPTS: ${1}"
- eerror "Expected: ${2-${1}}"
- eerror "Actual: ${SCONSOPTS}"
- eoutdent
- ret=1
- fi
-
- tend ${ret}
- return ${ret}
-}
-
-# jobcount expected for non-specified state
-jc=$(( $(get_nproc) + 1 ))
-# failed test counter
-failed=0
-
-# sane MAKEOPTS
-test-scons_clean_makeopts '--jobs=14 -k'
-test-scons_clean_makeopts '--jobs=14 -k'
-test-scons_clean_makeopts '--jobs 15 -k'
-test-scons_clean_makeopts '--jobs=16 --keep-going'
-test-scons_clean_makeopts '-j17 --keep-going'
-test-scons_clean_makeopts '-j 18 --keep-going'
-
-# needing cleaning
-test-scons_clean_makeopts '--jobs -k' "--jobs=${jc} -k"
-test-scons_clean_makeopts '--jobs --keep-going' "--jobs=${jc} --keep-going"
-test-scons_clean_makeopts '-kj' "-kj ${jc}"
-
-# broken by definition (but passed as it breaks make as well)
-test-scons_clean_makeopts '-jk'
-test-scons_clean_makeopts '--jobs=randum'
-test-scons_clean_makeopts '-kjrandum'
-
-# needing stripping
-test-scons_clean_makeopts '--load-average=25 -kj16' '-kj16'
-test-scons_clean_makeopts '--load-average 25 -k -j17' '-k -j17'
-test-scons_clean_makeopts '-j2 HOME=/tmp' '-j2'
-test-scons_clean_makeopts '--jobs funnystuff -k' "--jobs=${jc} -k"
-
-# bug #388961
-test-scons_clean_makeopts '--jobs -l3' "--jobs=${jc}"
-test-scons_clean_makeopts '-j -l3' "-j ${jc}"
-
-texit