On Tue, 13 Dec 2016 10:36:16 +0100 Michał Górny wrote:
> Support passing custom values for 'infinity' in makeopts_jobs()
> and makeopts_loadavg(). This can be used e.g. when a build system does
> not support --loadavg, and therefore '--jobs 999' would most likely
> be a really bad idea. Combined with get_nproc(), this can be used to
> provide a sane replacement instead.
> ---
> eclass/multiprocessing.eclass | 17 ++++++++++-------
> 1 file changed, 10 insertions(+), 7 deletions(-)
>
> diff --git a/eclass/multiprocessing.eclass b/eclass/multiprocessing.eclass
> index 0d241cdc15b6..b7d5f435f888 100644
> --- a/eclass/multiprocessing.eclass
> +++ b/eclass/multiprocessing.eclass
> @@ -79,26 +79,27 @@ get_nproc() {
> }
>
> # @FUNCTION: makeopts_jobs
> -# @USAGE: [${MAKEOPTS}]
> +# @USAGE: [${MAKEOPTS}] [${inf:-999}]
> # @DESCRIPTION:
> # Searches the arguments (defaults to ${MAKEOPTS}) 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. Since
> there's
> -# no way to represent infinity, we return 999 if the user has -j without a
> number.
> +# no way to represent infinity, we return ${inf} (defaults to 999) if the
> user
> +# has -j without a number.
> makeopts_jobs() {
> [[ $# -eq 0 ]] && set -- ${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 \
> -e
> 's:.*[[:space:]](-[a-z]*j|--jobs[=[:space:]])[[:space:]]*([0-9]+).*:\2:p' \
> - -e 's:.*[[:space:]](-[a-z]*j|--jobs)[[:space:]].*:999:p')
> + -e "s:.*[[:space:]](-[a-z]*j|--jobs)[[:space:]].*:${2:-999}:p")
> echo ${jobs:-1}
> }
>
> # @FUNCTION: makeopts_loadavg
> -# @USAGE: [${MAKEOPTS}]
> +# @USAGE: [${MAKEOPTS}] [${inf:-999}]
> # @DESCRIPTION:
> # Searches the arguments (defaults to ${MAKEOPTS}) and extracts the value set
> # for load-average. For make and ninja based builds this will mean new jobs
> are
> @@ -106,15 +107,17 @@ makeopts_jobs() {
> # get excessive due to I/O and not just due to CPU load.
> # Be aware that the returned number might be a floating-point number. Test
> # whether your software supports that.
> +# If no limit is specified or --load-average is used without a number, ${inf}
> +# (defaults to 999) is returned.
Why not to feed default ${inf} from get_nproc() by default?
This will make ebuild writing easier.
> makeopts_loadavg() {
> [[ $# -eq 0 ]] && set -- ${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 \
> -e
> 's:.*[[:space:]](-[a-z]*l|--(load-average|max-load)[=[:space:]])[[:space:]]*([0-9]+|[0-9]+\.[0-9]+).*:\3:p'
> \
> - -e
> 's:.*[[:space:]](-[a-z]*l|--(load-average|max-load))[[:space:]].*:999:p')
> - # Default to 999 since the default is to not use a load limit.
> - echo ${lavg:-999}
> + -e
> "s:.*[[:space:]](-[a-z]*l|--(load-average|max-load))[[:space:]].*:${2:-999}:p")
> + # Default to ${inf} since the default is to not use a load limit.
> + echo ${lavg:-${2:-999}}
> }
>
> # @FUNCTION: multijob_init
Best regards,
Andrew Savchenko
pgp1LYXCsvhhG.pgp
Description: PGP signature
