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