From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from lists.gentoo.org (pigeon.gentoo.org [208.92.234.80]) by finch.gentoo.org (Postfix) with ESMTP id 8513D1384B4 for ; Fri, 1 Jan 2016 16:49:54 +0000 (UTC) Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id 938CA21C10E; Fri, 1 Jan 2016 16:41:59 +0000 (UTC) Received: from smtp.gentoo.org (smtp.gentoo.org [140.211.166.183]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by pigeon.gentoo.org (Postfix) with ESMTPS id D66D821C0FE for ; Fri, 1 Jan 2016 16:41:57 +0000 (UTC) Received: from localhost.localdomain (d202-251.icpnet.pl [109.173.202.251]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: mgorny) by smtp.gentoo.org (Postfix) with ESMTPSA id 943ED340A66; Fri, 1 Jan 2016 16:41:56 +0000 (UTC) From: =?UTF-8?q?Micha=C5=82=20G=C3=B3rny?= To: gentoo-dev@lists.gentoo.org Cc: =?UTF-8?q?Micha=C5=82=20G=C3=B3rny?= Subject: [gentoo-dev] [PATCH 14/15] scons-utils.eclass: Use nproc when --jobs is used without an argument Date: Fri, 1 Jan 2016 17:41:20 +0100 Message-Id: <1451666481-22145-15-git-send-email-mgorny@gentoo.org> X-Mailer: git-send-email 2.6.4 In-Reply-To: <1451666481-22145-1-git-send-email-mgorny@gentoo.org> References: <1451666481-22145-1-git-send-email-mgorny@gentoo.org> Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Id: Gentoo Linux mail X-BeenThere: gentoo-dev@lists.gentoo.org Reply-to: gentoo-dev@lists.gentoo.org X-Archives-Salt: 68f72bc9-d0b2-4510-90ce-10dbe35dce78 X-Archives-Hash: 6361fb176cec544a6f3cdd79c98f8fac Try to guess the number of processors when --jobs is passed without an argument. We can't use a high number equivalent to GNU make behavior (no limit) since SCons does not have an equivalent of --load-avg option. Still, this is better than assuming some random, fixed number. --- eclass/scons-utils.eclass | 30 ++++++++++++++++++++++++++++-- eclass/tests/scons-utils.sh | 2 +- 2 files changed, 29 insertions(+), 3 deletions(-) diff --git a/eclass/scons-utils.eclass b/eclass/scons-utils.eclass index 3185282..89618f9 100644 --- a/eclass/scons-utils.eclass +++ b/eclass/scons-utils.eclass @@ -149,6 +149,32 @@ escons() { return ${ret} } +# @FUNCTION: _scons_get_default_jobs +# @INTERNAL +# @DESCRIPTION: +# Output the default number of jobs, used if -j is used without +# argument. Tries to figure out the number of logical CPUs, falling +# back to hardcoded constant. +_scons_get_default_jobs() { + local nproc + + if type -P nproc &>/dev/null; then + # GNU + nproc=$(nproc) + elif type -P python &>/dev/null; then + # fallback to python2.6+ + # note: this may fail (raise NotImplementedError) + nproc=$(python -c 'import multiprocessing; print(multiprocessing.cpu_count());' 2>/dev/null) + fi + + if [[ ${nproc} ]]; then + echo $(( nproc + 1 )) + else + # random default + echo 5 + fi +} + # @FUNCTION: _scons_clean_makeopts # @INTERNAL # @USAGE: [makeflags] [...] @@ -192,7 +218,7 @@ _scons_clean_makeopts() { shift else # no value means no limit, let's pass a random int - new_makeopts+=( ${1}=5 ) + new_makeopts+=( ${1}=$(_scons_get_default_jobs) ) fi ;; # strip other long options @@ -215,7 +241,7 @@ _scons_clean_makeopts() { new_optstr+="j ${2}" shift else - new_optstr+="j 5" + new_optstr+="j $(_scons_get_default_jobs)" fi ;; # otherwise, everything after -j is treated as an arg diff --git a/eclass/tests/scons-utils.sh b/eclass/tests/scons-utils.sh index 6355c54..fcb5125 100755 --- a/eclass/tests/scons-utils.sh +++ b/eclass/tests/scons-utils.sh @@ -28,7 +28,7 @@ test-scons_clean_makeopts() { } # jobcount expected for non-specified state -jc=5 +jc=$(_scons_get_default_jobs) # failed test counter failed=0 -- 2.6.4