diff options
Diffstat (limited to 'eclass')
-rw-r--r-- | eclass/Manifest.gz | bin | 39150 -> 39147 bytes | |||
-rw-r--r-- | eclass/meson.eclass | 4 | ||||
-rw-r--r-- | eclass/multiprocessing.eclass | 38 | ||||
-rw-r--r-- | eclass/ninja-utils.eclass | 2 | ||||
-rwxr-xr-x | eclass/tests/multiprocessing_makeopts_jobs.sh | 24 |
5 files changed, 58 insertions, 10 deletions
diff --git a/eclass/Manifest.gz b/eclass/Manifest.gz Binary files differindex abd2a7c91235..1659bb77db8c 100644 --- a/eclass/Manifest.gz +++ b/eclass/Manifest.gz diff --git a/eclass/meson.eclass b/eclass/meson.eclass index 5aff3eb58930..4757f3fa5eef 100644 --- a/eclass/meson.eclass +++ b/eclass/meson.eclass @@ -388,8 +388,8 @@ meson_src_compile() { local mesoncompileargs=( -C "${BUILD_DIR}" - --jobs "$(makeopts_jobs "${MAKEOPTS}" 0)" - --load-average "$(makeopts_loadavg "${MAKEOPTS}" 0)" + --jobs "$(get_makeopts_jobs 0)" + --load-average "$(get_makeopts_loadavg 0)" ) case ${MESON_VERBOSE} in diff --git a/eclass/multiprocessing.eclass b/eclass/multiprocessing.eclass index e55be636a02c..13d6a92f2f2e 100644 --- a/eclass/multiprocessing.eclass +++ b/eclass/multiprocessing.eclass @@ -1,4 +1,4 @@ -# Copyright 1999-2022 Gentoo Authors +# Copyright 1999-2023 Gentoo Authors # Distributed under the terms of the GNU General Public License v2 # @ECLASS: multiprocessing.eclass @@ -64,17 +64,35 @@ get_nproc() { fi } +# @FUNCTION: _get_all_makeopts +# @INTERNAL +# @DESCRIPTION: +# Returns ${MAKEOPTS} ${GNUMAKEFLAGS} ${MAKEFLAGS}. +_get_all_makeopts() { + echo "${MAKEOPTS} ${GNUMAKEFLAGS} ${MAKEFLAGS}" +} + +# @FUNCTION: get_makeopts_jobs +# @USAGE: [default-jobs] +# @DESCRIPTION: +# Return the number of jobs extracted from the make options (MAKEOPTS, +# GNUMAKEFLAGS, MAKEFLAGS). If the make options do not specify a number, +# then either the provided default is returned, or 1. +get_makeopts_jobs() { + makeopts_jobs "$(_get_all_makeopts)" "${1:-1}" +} + # @FUNCTION: makeopts_jobs # @USAGE: [${MAKEOPTS}] [${inf:-$(( $(get_nproc) + 1 ))}] # @DESCRIPTION: -# Searches the arguments (defaults to ${MAKEOPTS}) and extracts the jobs number +# Searches the arguments (or sensible defaults) and extracts the jobs number # specified therein. Useful for running non-make tools in parallel too. # i.e. if the user has MAKEOPTS=-j9, this will echo "9" -- we can't return the # number as bash normalizes it to [0, 255]. If the flags haven't specified a # -j flag, then "1" is shown as that is the default `make` uses. If the flags # specify -j without a number, ${inf} is returned (defaults to nproc). makeopts_jobs() { - [[ $# -eq 0 ]] && set -- "${MAKEOPTS}" + [[ $# -eq 0 ]] && set -- "$(_get_all_makeopts)" # This assumes the first .* will be more greedy than the second .* # since POSIX doesn't specify a non-greedy match (i.e. ".*?"). local jobs=$(echo " $* " | sed -r -n \ @@ -83,10 +101,20 @@ makeopts_jobs() { echo ${jobs:-1} } +# @FUNCTION: get_makeopts_loadavg +# @USAGE: [default-loadavg] +# @DESCRIPTION: +# Return the value for the load-average extracted from the make options (MAKEOPTS, +# GNUMAKEFLAGS, MAKEFLAGS). If the make options do not specify a value, then +# either the optional provided default is returned, or 999. +get_makeopts_loadavg() { + makeopts_loadavg "$(_get_all_makeopts)" "${1:-999}" +} + # @FUNCTION: makeopts_loadavg # @USAGE: [${MAKEOPTS}] [${inf:-999}] # @DESCRIPTION: -# Searches the arguments (defaults to ${MAKEOPTS}) and extracts the value set +# Searches the arguments (or sensible defaults) and extracts the value set # for load-average. For make and ninja based builds this will mean new jobs are # not only limited by the jobs-value, but also by the current load - which might # get excessive due to I/O and not just due to CPU load. @@ -95,7 +123,7 @@ makeopts_jobs() { # If no limit is specified or --load-average is used without a number, ${inf} # (defaults to 999) is returned. makeopts_loadavg() { - [[ $# -eq 0 ]] && set -- "${MAKEOPTS}" + [[ $# -eq 0 ]] && set -- "$(_get_all_makeopts)" # This assumes the first .* will be more greedy than the second .* # since POSIX doesn't specify a non-greedy match (i.e. ".*?"). local lavg=$(echo " $* " | sed -r -n \ diff --git a/eclass/ninja-utils.eclass b/eclass/ninja-utils.eclass index 5a211e81131d..859938cb3047 100644 --- a/eclass/ninja-utils.eclass +++ b/eclass/ninja-utils.eclass @@ -72,7 +72,7 @@ esac # Get the value of NINJAOPTS, inferring them from MAKEOPTS if unset. get_NINJAOPTS() { if [[ -z ${NINJAOPTS+set} ]]; then - NINJAOPTS="-j$(makeopts_jobs "${MAKEOPTS}" 999) -l$(makeopts_loadavg "${MAKEOPTS}" 0)" + NINJAOPTS="-j$(get_makeopts_jobs 999) -l$(get_makeopts_loadavg 0)" fi echo "${NINJAOPTS}" } diff --git a/eclass/tests/multiprocessing_makeopts_jobs.sh b/eclass/tests/multiprocessing_makeopts_jobs.sh index 37d5a7257775..56d73ef48b3c 100755 --- a/eclass/tests/multiprocessing_makeopts_jobs.sh +++ b/eclass/tests/multiprocessing_makeopts_jobs.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 1999-2021 Gentoo Authors +# Copyright 1999-2023 Gentoo Authors # Distributed under the terms of the GNU General Public License v2 EAPI=7 @@ -9,7 +9,13 @@ inherit multiprocessing test-makeopts_jobs() { local exp=$1; shift - tbegin "makeopts_jobs($1${2+; inf=${2}}) == ${exp}" + local targs + if [[ -v 1 ]]; then + targs="$1${2+; inf=${2}}" + else + targs="MAKEOPTS=\"${MAKEOPTS}\" GNUMAKEFLAGS=\"${GNUMAKEFLAGS}\" MAKEFLAGS=\"${MAKEFLAGS}\"" + fi + tbegin "makeopts_jobs(${targs}) == ${exp}" local indirect=$(MAKEOPTS="$*" makeopts_jobs) local direct=$(makeopts_jobs "$@") if [[ "${direct}" != "${indirect}" ]] ; then @@ -50,6 +56,20 @@ for (( i = 0; i < ${#tests[@]}; i += 2 )) ; do test-makeopts_jobs "${tests[i]}" "${tests[i+1]}" done +tests=( + 7 "" "--jobs 7" "" + # MAKEFLAGS override GNUMAKEFLAGS + 8 "" "--jobs 7" "--jobs 8" +) + +for (( i = 0; i < ${#tests[@]}; i += 4 )) ; do + MAKEOPTS="${tests[i+1]}" + GNUMAKEFLAGS="${tests[i+2]}" + MAKEFLAGS="${tests[i+3]}" + test-makeopts_jobs "${tests[i]}" + unset MAKEOPTS GNUMAKEFLAGS MAKEFLAGS +done + # test custom inf value test-makeopts_jobs 645 "-j" 645 |