download_and_compile.sh: use getopt instead of bash's getopts. Add --help.
The main advantage of getopt is that it allows one to define long options. Help can now be obtained with 'download_and_compile.sh --help', in addition to the already-existing '-h' option. [ This is the getopt tool shipped in Debian's util-linux package, which is marked as Essential, therefore should always be present on a Debian system. ] Try to improve formatting of the --help message, so that it is better suited to document options that have a short as well as a long form. Make the presentation of this help message a bit more standard.
This commit is contained in:
parent
d073c54c0d
commit
305a501ef3
1 changed files with 81 additions and 52 deletions
|
@ -42,6 +42,21 @@ FGVERSION="release/$(git ls-remote --heads https://git.code.sf.net/p/flightgear/
|
||||||
#############################################################"
|
#############################################################"
|
||||||
# Some helper functions for redundant tasks
|
# Some helper functions for redundant tasks
|
||||||
|
|
||||||
|
# Return 0 if $1 is identical to one of $2, $3, etc., else return 1.
|
||||||
|
_elementIn(){
|
||||||
|
local valueToCheck="$1"
|
||||||
|
local e
|
||||||
|
|
||||||
|
shift
|
||||||
|
for e; do
|
||||||
|
if [[ "$e" == "$valueToCheck" ]]; then
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
function _logSep(){
|
function _logSep(){
|
||||||
echo "***********************************" >> $LOGFILE
|
echo "***********************************" >> $LOGFILE
|
||||||
}
|
}
|
||||||
|
@ -183,12 +198,39 @@ function _find_package_alternative(){
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function _usage() {
|
||||||
|
echo "$PROGNAME [OPTION...] [--] [COMPONENT...]"
|
||||||
|
echo "Download and compile components belonging to the FlightGear ecosystem."
|
||||||
|
echo
|
||||||
|
echo "Without any COMPONENT listed, or if ALL is specified, recompile all"
|
||||||
|
echo "components listed in the WHATTOBUILDALL variable. Each COMPONENT may"
|
||||||
|
echo "be one of the following words:"
|
||||||
|
echo
|
||||||
|
echo " ALL, CMAKE, OSG, PLIB, OPENRTI, SIMGEAR, FGFS, DATA, FGRUN, FGO, FGX,"
|
||||||
|
echo " OPENRADAR, ATCPIE, TERRAGEAR, TERRAGEARGUI"
|
||||||
|
echo
|
||||||
|
echo "Available options:"
|
||||||
|
echo " -h, --help show this help message and exit"
|
||||||
|
echo " -e compile FlightGear with --with-eventinput option (experimental)"
|
||||||
|
echo " -i compile SimGear and FlightGear with -D ENABLE_RTI=ON option (experimental)"
|
||||||
|
echo " -b RELEASE_TYPE default=RelWithDebInfo"
|
||||||
|
echo " set build type to RELEASE_TYPE (Release|RelWithDebInfo|Debug)"
|
||||||
|
echo " -a y|n y=do an apt-get update, n=don't default=y"
|
||||||
|
echo " -p y|n y=download packages, n=don't default=y"
|
||||||
|
echo " -c y|n y=compile programs, n=don't default=y"
|
||||||
|
echo " -d y|n y=fetch programs from internet (cvs, svn, etc...), n=don't default=y"
|
||||||
|
echo " -j X pass -jX to the Make program"
|
||||||
|
echo " -O X pass -OX to the Make program"
|
||||||
|
echo " -r y|n y=reconfigure programs before compiling them, n=don't reconfigure default=y"
|
||||||
|
echo " -s compile only the last known stable versions"
|
||||||
|
}
|
||||||
|
|
||||||
#######################################################
|
#######################################################
|
||||||
# set script to stop if an error occours
|
# set script to stop if an error occours
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
LOGFILE=compilation_log.txt
|
LOGFILE=compilation_log.txt
|
||||||
WHATTOBUILD=
|
|
||||||
#AVAILABLE VALUES: CMAKE PLIB OPENRTI OSG SIMGEAR FGFS DATA FGRUN FGO FGX OPENRADAR ATCPIE TERRAGEAR TERRAGEARGUI
|
#AVAILABLE VALUES: CMAKE PLIB OPENRTI OSG SIMGEAR FGFS DATA FGRUN FGO FGX OPENRADAR ATCPIE TERRAGEAR TERRAGEARGUI
|
||||||
WHATTOBUILDALL=(SIMGEAR FGFS DATA)
|
WHATTOBUILDALL=(SIMGEAR FGFS DATA)
|
||||||
STABLE=
|
STABLE=
|
||||||
|
@ -205,69 +247,56 @@ FG_CMAKEARGS=""
|
||||||
|
|
||||||
declare -a UNMATCHED_OPTIONAL_PKG_ALTERNATIVES
|
declare -a UNMATCHED_OPTIONAL_PKG_ALTERNATIVES
|
||||||
|
|
||||||
while getopts "shc:p:a:d:r:j:O:ib:" OPTION; do
|
# getopt is from the util-linux package (in Debian). Contrary to bash's getopts
|
||||||
case $OPTION in
|
# built-in function, it allows one to define long options.
|
||||||
s) STABLE="STABLE" ;;
|
TEMP=$(getopt -o '+shc:p:a:d:r:j:O:ib:' \
|
||||||
h) HELP="HELP" ;;
|
--longoptions help \
|
||||||
a) APT_GET_UPDATE=$OPTARG ;;
|
-n "$PROGNAME" -- "$@")
|
||||||
c) COMPILE=$OPTARG ;;
|
|
||||||
p) DOWNLOAD_PACKAGES=$OPTARG ;;
|
case $? in
|
||||||
d) DOWNLOAD=$OPTARG ;;
|
0) : ;;
|
||||||
r) RECONFIGURE=$OPTARG ;;
|
1) _usage >&2; exit 1 ;;
|
||||||
j) JOPTION=" -j"$OPTARG" " ;;
|
*) exit 1 ;;
|
||||||
O) OOPTION=" -O"$OPTARG" " ;;
|
esac
|
||||||
i) OPENRTI="OPENRTI" ;;
|
|
||||||
b) BUILD_TYPE="$OPTARG" ;;
|
# Don't remove the quotes around $TEMP!
|
||||||
?) HELP="HELP" ;;
|
eval set -- "$TEMP"
|
||||||
|
|
||||||
|
while true; do
|
||||||
|
case "$1" in
|
||||||
|
-s) STABLE="STABLE"; shift ;;
|
||||||
|
-a) APT_GET_UPDATE="$2"; shift 2 ;;
|
||||||
|
-c) COMPILE="$2"; shift 2 ;;
|
||||||
|
-p) DOWNLOAD_PACKAGES="$2"; shift 2 ;;
|
||||||
|
-d) DOWNLOAD="$2"; shift 2 ;;
|
||||||
|
-r) RECONFIGURE="$2"; shift 2 ;;
|
||||||
|
-j) JOPTION=" -j$2"; shift 2 ;;
|
||||||
|
-O) OOPTION=" -O$2"; shift 2 ;;
|
||||||
|
-i) OPENRTI="OPENRTI"; shift ;;
|
||||||
|
-b) BUILD_TYPE="$2"; shift 2 ;;
|
||||||
|
-h|--help) _usage; exit 0 ;;
|
||||||
|
--) shift; break ;;
|
||||||
|
*) echo "$PROGNAME: unexpected option '$1'; please report a bug." >&2
|
||||||
|
exit 1 ;;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
shift $(($OPTIND - 1))
|
|
||||||
|
|
||||||
if [ ! "$#" = "0" ]; then
|
declare -a WHATTOBUILD=()
|
||||||
for arg in $*
|
|
||||||
do
|
if [[ $# == 0 ]] || _elementIn ALL "$@"; then
|
||||||
WHATTOBUILD=( "${WHATTOBUILD[@]}" "$arg" )
|
|
||||||
done
|
|
||||||
else
|
|
||||||
WHATTOBUILD=( "${WHATTOBUILDALL[@]}" )
|
WHATTOBUILD=( "${WHATTOBUILDALL[@]}" )
|
||||||
|
else
|
||||||
|
WHATTOBUILD=( "$@" )
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ "$(declare -p WHATTOBUILD)" =~ '['([0-9]+)']="ALL"' ]]; then
|
if [[ "$STABLE" != "STABLE" ]]; then
|
||||||
WHATTOBUILD=( "${WHATTOBUILDALL[@]}" )
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$STABLE" = "STABLE" ]; then
|
|
||||||
FGVERSION=$FGVERSION
|
|
||||||
else
|
|
||||||
FGVERSION="next"
|
FGVERSION="next"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$OPENRTI" = "OPENRTI" ]; then
|
if [ "$OPENRTI" = "OPENRTI" ]; then
|
||||||
SG_CMAKEARGS="$SG_CMAKEARGS -DENABLE_RTI=ON;"
|
SG_CMAKEARGS="$SG_CMAKEARGS -DENABLE_RTI=ON;"
|
||||||
FG_CMAKEARGS="$FG_CMAKEARGS -DENABLE_RTI=ON;"
|
FG_CMAKEARGS="$FG_CMAKEARGS -DENABLE_RTI=ON;"
|
||||||
WHATTOBUILD=( "${WHATTOBUILD[@]}" OPENRTI )
|
WHATTOBUILD+=( "OPENRTI" )
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$HELP" = "HELP" ]; then
|
|
||||||
echo "$0 Version $VERSION"
|
|
||||||
echo "Usage:"
|
|
||||||
echo "./$0 [-h] [-s] [-e] [-f] [-i] [-g] [-a y|n] [-c y|n] [-p y|n] [-d y|n] [-r y|n] [ALL|CMAKE|OSG|PLIB|OPENRTI|SIMGEAR|FGFS|DATA|FGRUN|FGO|FGX|OPENRADAR|ATCPIE|TERRAGEAR|TERRAGEARGUI]"
|
|
||||||
echo "* without options or with ALL it recompiles the content of the WHATTOBUILDALL variable."
|
|
||||||
echo "* Feel you free to customize the WHATTOBUILDALL variable available on the top of this script"
|
|
||||||
echo "Switches:"
|
|
||||||
echo "* -h show this help"
|
|
||||||
echo "* -e compile FlightGear with --with-eventinput option (experimental)"
|
|
||||||
echo "* -i compile SimGear and FlightGear with -D ENABLE_RTI=ON option (experimental)"
|
|
||||||
echo "* -b Release|RelWithDebInfo|Debug set build type default=RelWithDebInfo"
|
|
||||||
echo "* -a y|n y=do an apt-get update n=skip apt-get update default=y"
|
|
||||||
echo "* -p y|n y=download packages n=skip download packages default=y"
|
|
||||||
echo "* -c y|n y=compile programs n=do not compile programs default=y"
|
|
||||||
echo "* -d y|n y=fetch programs from internet (cvs, svn, etc...) n=do not fetch default=y"
|
|
||||||
echo "* -j X Add -jX to the make compilation default=None"
|
|
||||||
echo "* -O X Add -OX to the make compilation default=None"
|
|
||||||
echo "* -r y|n y=reconfigure programs before compiling them n=do not reconfigure default=y"
|
|
||||||
echo "* -s compile only last stable known versions default=y"
|
|
||||||
exit
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
#######################################################
|
#######################################################
|
||||||
|
|
Loading…
Add table
Reference in a new issue