X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=gdb%2Fgdb_mbuild.sh;h=0d4c28e87b17269c4b7f36eb89fae077d4a1162a;hb=8c9ae6df3c244a7a738085ab461cb098df1d46f6;hp=49d18cfbd260c68ae9e3e7361a9182bba4d131b0;hpb=dbad9d940fa38d09449054b341782a1316147ad7;p=binutils-gdb.git diff --git a/gdb/gdb_mbuild.sh b/gdb/gdb_mbuild.sh index 49d18cfbd26..0d4c28e87b1 100755 --- a/gdb/gdb_mbuild.sh +++ b/gdb/gdb_mbuild.sh @@ -3,23 +3,27 @@ # Multi-build script for testing compilation of all maintained # configs of GDB. -# Copyright 2002 Free Software Foundation, Inc. +# Copyright (C) 2002-2022 Free Software Foundation, Inc. # Contributed by Richard Earnshaw (rearnsha@arm.com) # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or +# the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. - +# # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. - +# # You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# along with this program. If not, see . + +# Make certain that the script is not running in an internationalized +# environment. +LANG=c ; export LANG +LC_ALL=c ; export LC_ALL usage() { @@ -27,8 +31,9 @@ usage() Usage: gdb_mbuild.sh [ ... ] Options: -j Run in parallel. Passed to make. - On a single cpu machine, 2 is recommended. + On a single cpu machine, 2 is recommended. -k Keep going. Do not stop after the first build fails. + --keep Keep builds. Do not remove each build when finished. -e Regular expression for selecting the targets to build. -f Force rebuild. Even rebuild previously built directories. -v Be more (and more, and more) verbose. @@ -53,6 +58,7 @@ keepgoing= force=false targexp="" verbose=0 +keep=false while test $# -gt 0 do case "$1" in @@ -72,6 +78,9 @@ do # Should we soldier on after the first build fails? keepgoing=-k ;; + --keep ) + keep=true + ;; -e ) # A regular expression for selecting targets shift @@ -80,7 +89,8 @@ do ;; -f ) # Force a rebuild - force=true ; shift ;; + force=true ; + ;; -v ) # Be more, and more, and more, verbose verbose=`expr ${verbose} + 1` @@ -185,7 +195,7 @@ log () -# Warn the user of what is comming, print the list of targets +# Warn the user of what is coming, print the list of targets echo "$alltarg" echo "" @@ -199,7 +209,7 @@ do trap "exit 1" 1 2 15 dir=${builddir}/${target} - # Should a scratch rebuild be forced, for perhaphs the entire + # Should a scratch rebuild be forced, for perhaps the entire # build be skipped? if ${force} @@ -261,8 +271,13 @@ do if test ! -x gdb/gdb -a ! -x gdb/gdb.exe then + # Iff the build fails remove the final build target so that + # 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 2>&1 | log 1 Build.log + ( ${make} ${keepgoing} ${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 @@ -284,7 +299,6 @@ EOF # Create a sed script that cleans up the output from GDB. rm -f mbuild.sed touch mbuild.sed || exit 1 - # Rules to replace <0xNNNN> with the corresponding function's # name. sed -n -e '/<0x0*>/d' -e 's/^.*<0x\([0-9a-f]*\)>.*$/0x\1/p' Gdb.log \ @@ -295,18 +309,25 @@ EOF test ${verbose} -gt 0 && echo "${addr} ${func}" 1>&2 echo "s/<${addr}>/<${func}>/g" done >> mbuild.sed - # Rules to strip the leading paths off of file names. echo 's/"\/.*\/gdb\//"gdb\//g' >> mbuild.sed + # Run the script + sed -f mbuild.sed Gdb.log > Mbuild.log # Replace the build directory with a file as semaphore that stops # a rebuild. (should the logs be saved?) cd ${builddir} - rm -f ${target}.tmp - sed -f ${target}/mbuild.sed ${target}/Gdb.log > ${target}.tmp - rm -rf ${target} - mv ${target}.tmp ${target} + + if ${keep} + then + : + else + rm -f ${target}.tmp + mv ${target}/Mbuild.log ${target}.tmp + rm -rf ${target} + mv ${target}.tmp ${target} + fi # Success! echo ... ${target} built