1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-08-10 17:55:39 +02:00

Various enhancements to download-build-gdb.sh

I ran shellcheck [1] on the script and it found various minor things to
improve.

 - Use $(...) instead of `...` to run commands in a subshell.
 - Wrap all variables in quotes, in case there are spaces.

At the same time, I noticed a few other things:

 - Use "#!/usr/bin/env bash" instead of "#!/bin/bash", in case the user
   uses a bash not at /bin/bash.
 - Use "set -o errexit" instead of "set -e" for better readability.
 - Use "set -o nounset" to generate errors if trying to read unset
   variables.
 - Pass CXXFLAGS in addition to CFLAGS, since GDB is now in C++.
 - Use ${CFLAGS:-} instead of ${CFLAGS}, in case CFLAGS is not set
   (because of "set -o nounset").
 - Don't check for result of getopt.  If it fails, the script ends
   immediatly due to errexit.

[1] http://www.shellcheck.net/

Change-Id: If73f3510e46ca80d542d47c29c55b48b8b0bc697
Signed-off-by: Simon Marchi <simon.marchi@polymtl.ca>
This commit is contained in:
Simon Marchi 2017-03-23 11:06:23 -04:00
parent 5bec70f68f
commit 184747164d

View file

@ -1,4 +1,4 @@
#!/bin/bash #!/usr/bin/env bash
# * Copyright (c) 2015 Ericsson and others. # * Copyright (c) 2015 Ericsson and others.
# * All rights reserved. This program and the accompanying materials # * All rights reserved. This program and the accompanying materials
@ -10,10 +10,13 @@
# * Simon Marchi (Ericsson) - Initial implementation # * Simon Marchi (Ericsson) - Initial implementation
# Stop the script if any command fails # Stop the script if any command fails
set -e set -o errexit
# Consider using an unset variable as an error
set -o nounset
# Make sure getopt is the command and not the bash built-in # Make sure getopt is the command and not the bash built-in
if [[ `getopt --version` != *"getopt"* ]]; then if [[ $(getopt --version) != *"getopt"* ]]; then
echo "getopt command not found." echo "getopt command not found."
exit 1 exit 1
fi fi
@ -63,7 +66,7 @@ function help_and_exit() {
echo " $ $0 all" echo " $ $0 all"
echo "" echo ""
exit $1 exit "$1"
} }
# Output a visible header # Output a visible header
@ -89,7 +92,7 @@ function check_supported() {
*) *)
echo "Error: version ${version} is not supported by this script." echo "Error: version ${version} is not supported by this script."
echo "" echo ""
help_and_exit help_and_exit 1
;; ;;
esac esac
} }
@ -163,7 +166,8 @@ function configure_gdb() {
local version="$1" local version="$1"
local build="${build_dir}/gdb-${version}" local build="${build_dir}/gdb-${version}"
local cflags="-Wno-error -g -O0" local cflags="-Wno-error -g3 -O0"
local cxxflags="-Wno-error -g3 -O0"
echo_header "Configuring in ${build}" echo_header "Configuring in ${build}"
@ -175,11 +179,12 @@ function configure_gdb() {
;; ;;
esac esac
# Let the user specify some CFLAGS # If there is already some CFLAGS/CXXFLAGS in the environment, add them to the mix.
cflags="${cflags} ${CFLAGS}" cflags="${cflags} ${CFLAGS:-}"
cxxflags="${cxxflags} ${CXXFLAGS:-}"
# Need to use eval to allow the ${dryrun} trick to work with the env var command at the start. # Need to use eval to allow the ${dryrun} trick to work with the env var command at the start.
eval ${dryrun} 'CFLAGS="${cflags}" ./configure --prefix="${install_dir}/gdb-${version}"' eval ${dryrun} 'CFLAGS="${cflags}" CXXFLAGS="${cxxflags}" ./configure --prefix="${install_dir}/gdb-${version}"'
${dryrun} popd ${dryrun} popd
} }
@ -245,14 +250,9 @@ function symlink_gdb() {
fi fi
} }
# Start argument parsing # Start argument parsing. The script will exit (thanks to errexit) if bad arguments are passed.
args=$(getopt -o b:dhj: -l "base-dir:,dry-run,help,jobs" -n "$0" -- "$@"); args=$(getopt -o b:dhj: -l "base-dir:,dry-run,help,jobs" -n "$0" -- "$@");
# Bad arguments ?
if [ $? -ne 0 ]; then
exit 1
fi
eval set -- "$args" eval set -- "$args"
while true; do while true; do