From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id OWZGOV0klWpimBYAWB0awg (envelope-from ) for ; Mon, 31 Aug 2026 02:51:09 -0400 Authentication-Results: simark.ca; dkim=pass (1024-bit key; unprotected) header.d=suse.de header.i=@suse.de header.a=rsa-sha256 header.s=susede2_rsa header.b=gdX62d1J; dkim=pass header.d=suse.de header.i=@suse.de header.a=ed25519-sha256 header.s=susede2_ed25519 header.b=79TdP/EJ; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.a=rsa-sha256 header.s=susede2_rsa header.b=CyIgXjda; dkim=neutral header.d=suse.de header.i=@suse.de header.a=ed25519-sha256 header.s=susede2_ed25519 header.b=wzKFMxnn; dkim-atps=neutral Received: by simark.ca (Postfix, from userid 112) id E30C91E09B; Mon, 31 Aug 2026 02:51:09 -0400 (EDT) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-25) on simark.ca X-Spam-Level: X-Spam-Status: No, score=-5.4 required=5.0 tests=ARC_SIGNED,ARC_VALID,BAYES_00, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI, RCVD_IN_DNSWL_MED autolearn=ham autolearn_force=no version=4.0.1 Received: from vm01.sourceware.org (vm01.sourceware.org [IPv6:2620:52:6:3111::32]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by simark.ca (Postfix) with ESMTPS id F11CA1E09B for ; Mon, 31 Aug 2026 02:51:08 -0400 (EDT) Received: from vm01.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 7B3374BA23FE for ; Mon, 31 Aug 2026 06:51:07 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 7B3374BA23FE Authentication-Results: sourceware.org; dkim=pass (1024-bit key, unprotected) header.d=suse.de header.i=@suse.de header.a=rsa-sha256 header.s=susede2_rsa header.b=gdX62d1J; dkim=pass header.d=suse.de header.i=@suse.de header.a=ed25519-sha256 header.s=susede2_ed25519 header.b=79TdP/EJ; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.a=rsa-sha256 header.s=susede2_rsa header.b=CyIgXjda; dkim=neutral header.d=suse.de header.i=@suse.de header.a=ed25519-sha256 header.s=susede2_ed25519 header.b=wzKFMxnn Received: from smtp-out1.suse.de (smtp-out1.suse.de [195.135.223.130]) by sourceware.org (Postfix) with ESMTPS id 7A6DE4BA2E20 for ; Mon, 31 Aug 2026 06:50:29 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 7A6DE4BA2E20 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=suse.de Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=suse.de ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 7A6DE4BA2E20 Authentication-Results: sourceware.org; arc=none smtp.remote-ip=195.135.223.130 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1788159029; cv=none; b=p1BGoSyreup35bZRYwQ8qsuqpHZ3xbsQl989Srxe33jyoFq6/UK1qWcVi02yFU78nlFNVe+kcgAvb8jkwlx2Aq31asaGULF2Vj6DfT92muwuf1NCWS/WchuIlFuXCJ5vt2VLnBlBh5BdSYrRByvH0hMDGlWmqUQhDrkV9gbAu+Q= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1788159029; c=relaxed/simple; bh=vW1k7xyPaqrKzjeE2LyMlHe8TZd2XkriDd8K54x08F4=; h=DKIM-Signature:DKIM-Signature:DKIM-Signature:DKIM-Signature:From: To:Subject:Date:Message-ID:MIME-Version; b=sGNd5u0JEwscDaxroqx3BqjaMEEeGGQSh6uZrLgeHo2GfWVEAdoNxB68wdezNUV+9Il+cpvOnNsqqtvhXl6tg/kMvBJvj2Ixb9s3eDksqS8AP1bOPsLQQE+cG3PpVpRW0UggySuQT4JRm17hok1qJL3Me7pCxKBTjW+o31i5XQQ= ARC-Authentication-Results: i=1; sourceware.org; dkim=pass (1024-bit key, unprotected) header.d=suse.de header.i=@suse.de header.a=rsa-sha256 header.s=susede2_rsa header.b=gdX62d1J; dkim=pass header.d=suse.de header.i=@suse.de header.a=ed25519-sha256 header.s=susede2_ed25519 header.b=79TdP/EJ; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.a=rsa-sha256 header.s=susede2_rsa header.b=CyIgXjda; dkim=neutral header.d=suse.de header.i=@suse.de header.a=ed25519-sha256 header.s=susede2_ed25519 header.b=wzKFMxnn DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 7A6DE4BA2E20 Received: from imap1.dmz-prg2.suse.org (unknown [10.150.64.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by smtp-out1.suse.de (Postfix) with ESMTPS id 52C972251F for ; Mon, 31 Aug 2026 06:50:20 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1788159024; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=38pGh0CcGNqNgTcB6IT9/XnPdMHIjFQaRwbtN8kwPLI=; b=gdX62d1JAoqzFLfrEe4rP3XA1aPtouqMaaHmb/lTvvGufEeCh7HcCdUpq1ul5Sy9iNThZU aiQk2ysQ9GFPtpCQGbrQH8j/UZHF7k0ADZx5Ag3SakJBArKkk/D//0IgthiB6cErXeHGw0 xww0FffasMpmcQDcvY5x7uIYEiyoRSc= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1788159024; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=38pGh0CcGNqNgTcB6IT9/XnPdMHIjFQaRwbtN8kwPLI=; b=79TdP/EJy4M+EqOt0OrctGICBkIowcMuAf3Hi/sqnHWoBKwdlnd4ZZOmfHmEWXdXxBWtrx vgxevYMUkxZAwlAA== Authentication-Results: smtp-out1.suse.de; none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1788159020; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=38pGh0CcGNqNgTcB6IT9/XnPdMHIjFQaRwbtN8kwPLI=; b=CyIgXjdaps8nXBi+LYhcqN+1kW0XQ6ALhNSkmsDHx3wyxJjVuJAuAA17axksTBn/Jg93/L gQTeJvw4CkxQNHfEEJNCLASaqUiuRDcc3UPGXFm/nSa3NsK76BeYUTSGWqE+ygjbLlpn6Z 7f4pPkWhtRMRjOIdBRKJijZ5iwXAzng= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1788159020; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=38pGh0CcGNqNgTcB6IT9/XnPdMHIjFQaRwbtN8kwPLI=; b=wzKFMxnnYRpDxqASc1qO5eLnn7iDuMDTws8ucgb4zQ8zYQV9tnyY0ySceFduhIL06BQt3j Xl6WlE1f01SiH9Bw== Received: from imap1.dmz-prg2.suse.org (localhost [127.0.0.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by imap1.dmz-prg2.suse.org (Postfix) with ESMTPS id EE5C513694 for ; Mon, 31 Aug 2026 06:50:19 +0000 (UTC) Received: from dovecot-director2.suse.de ([2a07:de40:b281:106:10:150:64:167]) by imap1.dmz-prg2.suse.org with ESMTPSA id qGrhOCsklWrOMAAAD6G6ig (envelope-from ) for ; Mon, 31 Aug 2026 06:50:19 +0000 From: Tom de Vries To: gdb-patches@sourceware.org Subject: [PATCH 2/2] [gdb] Make gdb_mbuild.sh shellcheck-clean Date: Mon, 31 Aug 2026 08:50:19 +0200 Message-ID: <20260831065019.3494642-3-tdevries@suse.de> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260831065019.3494642-1-tdevries@suse.de> References: <20260831065019.3494642-1-tdevries@suse.de> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spamd-Result: default: False [-2.80 / 50.00]; BAYES_HAM(-3.00)[100.00%]; MID_CONTAINS_FROM(1.00)[]; NEURAL_HAM_LONG(-1.00)[-1.000]; R_MISSING_CHARSET(0.50)[]; NEURAL_HAM_SHORT(-0.20)[-0.993]; MIME_GOOD(-0.10)[text/plain]; ARC_NA(0.00)[]; RCPT_COUNT_ONE(0.00)[1]; RCVD_VIA_SMTP_AUTH(0.00)[]; MIME_TRACE(0.00)[0:+]; DKIM_SIGNED(0.00)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519]; PREVIOUSLY_DELIVERED(0.00)[gdb-patches@sourceware.org]; FROM_EQ_ENVFROM(0.00)[]; FROM_HAS_DN(0.00)[]; DBL_BLOCKED_OPENRESOLVER(0.00)[imap1.dmz-prg2.suse.org:helo,suse.de:mid]; RCVD_COUNT_TWO(0.00)[2]; TO_MATCH_ENVRCPT_ALL(0.00)[]; TO_DN_NONE(0.00)[]; RCVD_TLS_ALL(0.00)[] X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gdb-patches-bounces~public-inbox=simark.ca@sourceware.org Make gdb/gdb_mbuild.sh shellcheck-clean: - add missing quoting - move unreachable code into comment - add shellcheck ignore for "to be implemented" functionality - make targexp an array, and change shell type to bash - use $() and $(()) - use makejobs="$1" instead of makejobs="-j $1" - use read -r - use '' for trap argument - remove useless cat - add "|| exit 1" after cd - don't use [] in tr arguments --- gdb/contrib/shellcheck.sh | 1 - gdb/gdb_mbuild.sh | 102 +++++++++++++++++++------------------- 2 files changed, 52 insertions(+), 51 deletions(-) diff --git a/gdb/contrib/shellcheck.sh b/gdb/contrib/shellcheck.sh index a3e80a553f4..1d01471c12d 100755 --- a/gdb/contrib/shellcheck.sh +++ b/gdb/contrib/shellcheck.sh @@ -46,7 +46,6 @@ for f in "$@"; do | gdb/contrib/cc-with-tweaks.sh \ | gdb/contrib/gdb-add-index.sh \ | gdb/gdb_buildall.sh \ - | gdb/gdb_mbuild.sh \ | gdb/testsuite/lib/pdtrace.in) # Skip unclean files. continue diff --git a/gdb/gdb_mbuild.sh b/gdb/gdb_mbuild.sh index 705bb1f6f1f..c07ef724d88 100755 --- a/gdb/gdb_mbuild.sh +++ b/gdb/gdb_mbuild.sh @@ -1,4 +1,4 @@ -#!/bin/sh +#!/bin/bash # Multi-build script for testing compilation of all maintained # configs of GDB. @@ -44,19 +44,20 @@ Usage: gdb_mbuild.sh [ ... ] MAKE (make)" EOF exit 1; -cat < Run builds in parallel. - On a single cpu machine, 1 is recommended. -NOTYET + + # Not yet implemented: + # -b Run builds in parallel. + # On a single cpu machine, 1 is recommended. } ### COMMAND LINE OPTIONS makejobs= +# shellcheck disable=SC2034 # Not yet implemented. maxbuilds=1 keepgoing= force=false -targexp="" +targexp=() verbose=0 keep=false while test $# -gt 0 @@ -66,12 +67,13 @@ do # Number of parallel make jobs. shift test $# -ge 1 || usage - makejobs="-j $1" + makejobs="$1" ;; -b | -c ) # Number of builds to fire off in parallel. shift test $# -ge 1 || usage + # shellcheck disable=SC2034 # Not yet implemented. maxbuilds=$1 ;; -k ) @@ -85,7 +87,7 @@ do # A regular expression for selecting targets shift test $# -ge 1 || usage - targexp="${targexp} -e ${1}" + targexp=("${targexp[@]}" "-e" "${1}") ;; -f ) # Force a rebuild @@ -93,7 +95,7 @@ do ;; -v ) # Be more, and more, and more, verbose - verbose=`expr ${verbose} + 1` + verbose=$((verbose + 1)) ;; -* ) usage ;; *) break ;; @@ -112,10 +114,10 @@ fi # Convert these to absolute directory paths. # Where the sources live -srcdir=`cd $1 && /bin/pwd` || exit 1 +srcdir=$(cd "$1" && /bin/pwd) || exit 1 # Where the builds occur -builddir=`cd $2 && /bin/pwd` || exit 1 +builddir=$(cd "$2" && /bin/pwd) || exit 1 ### ENVIRONMENT PARAMETERS @@ -127,14 +129,14 @@ export MAKE # Where to look for the list of targets to test maintainers=${srcdir}/gdb/MAINTAINERS -if [ ! -r ${maintainers} ] +if [ ! -r "${maintainers}" ] then - echo Maintainers file ${maintainers} not found + echo "Maintainers file ${maintainers} not found" exit 1 fi # Get the list of targets and the build options -alltarg=`cat ${maintainers} | tr -s '[\t]' '[ ]' | sed -n ' +alltarg=$(tr -s '\t' ' ' < "${maintainers}" | sed -n ' /^[ ]*[-a-z0-9\.]*[ ]*[(]*--target=.*/ !d s/^.*--target=// s/).*$// @@ -150,12 +152,12 @@ h b loop :end p -' | if test "${targexp}" = "" +' | if test ${#targexp[@]} -eq 0 then grep -v -e broken -e OBSOLETE else - grep ${targexp} -fi` + grep "${targexp[@]}" +fi) # Usage: fail . Should the build @@ -185,11 +187,11 @@ fail () log () { - if test ${verbose} -ge $1 + if test ${verbose} -ge "$1" then - tee $2 + tee "$2" else - cat > $2 + cat > "$2" fi } @@ -203,7 +205,7 @@ echo "" # For each target, configure, build and test it. -echo "$alltarg" | while read target gdbopts simopts +echo "$alltarg" | while read -r target gdbopts simopts do trap "exit 1" 1 2 15 @@ -214,24 +216,24 @@ do if ${force} then - echo forcing ${target} ... - rm -rf ${dir} - elif test -f ${dir} + echo "forcing ${target} ..." + rm -rf "${dir}" + elif test -f "${dir}" then echo "${target}" continue else - echo ${target} ... + echo "${target} ..." fi # Did the previous configure attempt fail? If it did # restart from scratch. - if test -d ${dir} -a ! -r ${dir}/Makefile + if test -d "${dir}" -a ! -r "${dir}/Makefile" then - echo ... removing partially configured ${target} - rm -rf ${dir} - if test -d ${dir} + echo "... removing partially configured ${target}" + rm -rf "${dir}" + if test -d "${dir}" then echo "${target}: unable to remove directory ${dir}" exit 1 @@ -240,8 +242,8 @@ do # From now on, we're in this target's build directory - mkdir -p ${dir} - cd ${dir} || exit 1 + mkdir -p "${dir}" + cd "${dir}" || exit 1 # Configure, if not already. Should this go back to being # separate and done in parallel? @@ -252,16 +254,16 @@ do test -z "${simopts}" && simopts="${gdbopts}" # The config options __target="--target=${target}" - __enable_gdb_build_warnings=`test -z "${gdbopts}" \ - || echo "--enable-gdb-build-warnings=${gdbopts}"` - __enable_sim_build_warnings=`test -z "${simopts}" \ - || echo "--enable-sim-build-warnings=${simopts}"` + __enable_gdb_build_warnings=$(test -z "${gdbopts}" \ + || echo "--enable-gdb-build-warnings=${gdbopts}") + __enable_sim_build_warnings=$(test -z "${simopts}" \ + || echo "--enable-sim-build-warnings=${simopts}") __configure="${srcdir}/configure \ ${__target} \ ${__enable_gdb_build_warnings} \ ${__enable_sim_build_warnings}" - echo ... ${__configure} - trap "echo Removing partially configured ${dir} directory ...; rm -rf ${dir}; exit 1" 1 2 15 + echo "... ${__configure}" + trap 'echo "Removing partially configured ${dir} directory ..."; rm -rf "${dir}"; exit 1' 1 2 15 ${__configure} 2>&1 | log 2 Config.log trap "exit 1" 1 2 15 fi @@ -275,16 +277,16 @@ do # the follow-on code knows things failed. Stops the follow-on # code thinking that a failed rebuild succeeded (executable # left around from previous build). - echo ... ${make} ${keepgoing} ${makejobs} ${target} - ( ${make} ${keepgoing} ${makejobs} all-gdb || rm -f gdb/gdb gdb/gdb.exe + echo "... ${make} ${keepgoing} ${makejobs:+-j $makejobs} ${target}" + ( ${make} ${keepgoing} ${makejobs:+-j $makejobs} all-gdb || rm -f gdb/gdb gdb/gdb.exe ) 2>&1 | log 1 Build.log fi fail "compile failed" ! -x gdb/gdb -a ! -x gdb/gdb.exe # Check that the built GDB can at least print it's architecture. - echo ... run ${target} - rm -f core gdb.core ${dir}/gdb/x + echo "... run ${target}" + rm -f core gdb.core "${dir}/gdb/x" cat < x maint print architecture quit @@ -294,7 +296,7 @@ EOF fail "gdb printed no output" ! -s Gdb.log grep -e internal-error Gdb.log && fail "gdb panic" 1 - echo ... cleanup ${target} + echo "... cleanup ${target}" # Create a sed script that cleans up the output from GDB. rm -f mbuild.sed @@ -303,9 +305,9 @@ EOF # name. sed -n -e '/<0x0*>/d' -e 's/^.*<0x\([0-9a-f]*\)>.*$/0x\1/p' Gdb.log \ | sort -u \ - | while read addr + | while read -r addr do - func="`addr2line -f -e ./gdb/gdb -s ${addr} | sed -n -e 1p`" + func="$(addr2line -f -e ./gdb/gdb -s "${addr}" | sed -n -e 1p)" test ${verbose} -gt 0 && echo "${addr} ${func}" 1>&2 echo "s/<${addr}>/<${func}>/g" done >> mbuild.sed @@ -317,20 +319,20 @@ EOF # Replace the build directory with a file as semaphore that stops # a rebuild. (should the logs be saved?) - cd ${builddir} + cd "${builddir}" || exit 1 if ${keep} then : else - rm -f ${target}.tmp - mv ${target}/Mbuild.log ${target}.tmp - rm -rf ${target} - mv ${target}.tmp ${target} + rm -f "${target}.tmp" + mv "${target}/Mbuild.log" "${target}.tmp" + rm -rf "${target}" + mv "${target}.tmp" "${target}" fi # Success! - echo ... ${target} built + echo "... ${target} built" done -- 2.51.0