download_and_compile.sh: add options --lts and --component-branch
Option --lts builds the latest LTS release of components SIMGEAR, FGFS and DATA. The presence of option -s or --lts affects the version or branch checked out for each component; however, passing none of these options doesn't imply that development versions will be used for everything---this selects development versions for FlightGear and possibly closely-related software, but for the rest, we aim at something reasonably usable, as in "current release". For each component, the default version selected depending on whether -s, --lts or none of these was given, can be overridden using '--component-branch COMPONENT=BRANCH' (without the quotes). For instance: download_and_compile.sh --lts \ --component-branch OSG=OpenSceneGraph-3.6 SIMGEAR FGFS DATA OSG will build the latest LTS release of FlightGear against the OpenSceneGraph-3.6 branch of OpenSceneGraph. Option --component-branch may be used several times and always overrides the defaults determined by the presence or absence of -s or -lts. Thus, the relative order of -s, --lts and --component-branch options does not matter. This commit also adds text to the standard output and log file that tells users: - which "suite" they have selected (default=next, -s or --lts) and what this implies; - which branch will be checked out for each component (i.e., after the overrides from all --component-branch options passed have been applied). It is nonsensical to provide both -s and --lts in the same invocation, but the last one wins.
This commit is contained in:
parent
28de5426f2
commit
c4c8f0a099
@ -17,6 +17,8 @@
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
CURRENT_LTS_BRANCH="release/2018.3"
|
||||
|
||||
script_blob_id='$Id$'
|
||||
# Slightly tricky substitution to avoid our regexp being wildly replaced with
|
||||
# the blob name (id) when the script is checked out:
|
||||
@ -27,7 +29,6 @@ VERSION="$(echo "$script_blob_id" | sed 's@\$Id: *\([0-9a-f]\+\) *@\1@')"
|
||||
VERSION="${VERSION%\$}"
|
||||
|
||||
PROGNAME=$(basename "$0")
|
||||
FGVERSION="release/$(git ls-remote --heads https://git.code.sf.net/p/flightgear/flightgear|grep '\/release\/'|cut -f4 -d'/'|sort -t . -k 1,1n -k2,2n -k3,3n|tail -1)"
|
||||
|
||||
#######################################################
|
||||
# THANKS TO
|
||||
@ -57,6 +58,14 @@ _elementIn(){
|
||||
return 1
|
||||
}
|
||||
|
||||
# Print $2, $3, ... using $1 as separator.
|
||||
# From <https://stackoverflow.com/questions/1527049/how-can-i-join-elements-of-an-array-in-bash>
|
||||
function _joinBy(){
|
||||
local d="$1"; shift
|
||||
echo -n "$1"; shift
|
||||
printf "%s" "${@/#/$d}"
|
||||
}
|
||||
|
||||
function _log(){
|
||||
echo "$@" >> "$LOGFILE"
|
||||
}
|
||||
@ -431,8 +440,7 @@ function _usage() {
|
||||
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 " ALL, $(_joinBy ', ' "${WHATTOBUILD_AVAIL[@]}")."
|
||||
echo
|
||||
echo "Available options:"
|
||||
echo " -h, --help show this help message and exit"
|
||||
@ -472,7 +480,14 @@ function _usage() {
|
||||
echo " useful if you want to update, rebuild, etc. TERRAGEAR without"
|
||||
echo " doing the same for SIMGEAR (e.g., if doing repeated TERRAGEAR"
|
||||
echo " builds and you know your SIMGEAR is already fine and up-to-date)."
|
||||
echo " -s compile only the last known stable versions"
|
||||
echo " --lts compile the latest Long Term Support release of FlightGear (and"
|
||||
echo " select “stable” versions for other components)"
|
||||
echo " -s compile the latest release of FlightGear (and select “stable”"
|
||||
echo " versions for other components)"
|
||||
echo " --component-branch=COMPONENT=BRANCH"
|
||||
echo " Override the default branch for COMPONENT. For the specified"
|
||||
echo " component, this overrides the effect of options -s and --lts."
|
||||
echo " This option may be given several times."
|
||||
echo " --compositor build FlightGear with compositor enabled"
|
||||
echo " --non-interactive"
|
||||
echo " don't ask any question; always assume the default answer in"
|
||||
@ -501,7 +516,7 @@ declare -a WHATTOBUILD_AVAIL=(
|
||||
)
|
||||
WHATTOBUILDALL=(SIMGEAR FGFS DATA)
|
||||
|
||||
STABLE=
|
||||
SELECTED_SUITE=next
|
||||
APT_GET_UPDATE="y"
|
||||
DOWNLOAD_PACKAGES="y"
|
||||
COMPILE="y"
|
||||
@ -586,6 +601,10 @@ REPO_SITE[TERRAGEAR]="SourceForge"
|
||||
REPO_ADDRESS[TERRAGEARGUI]="git.code.sf.net/p/flightgear/fgscenery/terrageargui"
|
||||
REPO_SITE[TERRAGEARGUI]="SourceForge"
|
||||
|
||||
# Allows one to choose the branch for each component instead of relying on the
|
||||
# defaults.
|
||||
declare -A COMPONENT_BRANCH_OVERRIDES
|
||||
|
||||
# getopt is from the util-linux package (in Debian). Contrary to bash's getopts
|
||||
# built-in function, it allows one to define long options.
|
||||
getopt=getopt
|
||||
@ -593,9 +612,9 @@ if [[ `uname` == 'OpenBSD' ]]; then
|
||||
getopt=gnugetopt
|
||||
fi
|
||||
TEMP=$($getopt -o '+shc:p:a:d:r:j:O:ib:' \
|
||||
--longoptions git-clone-default-proto:,git-clone-site-params:,help \
|
||||
--longoptions git-clone-default-proto:,git-clone-site-params:,help,lts \
|
||||
--longoptions package-manager:,sudo:,ignore-intercomponent-deps,compositor \
|
||||
--longoptions non-interactive,version \
|
||||
--longoptions component-branch:,non-interactive,version \
|
||||
-n "$PROGNAME" -- "$@")
|
||||
|
||||
case $? in
|
||||
@ -609,7 +628,34 @@ eval set -- "$TEMP"
|
||||
|
||||
while true; do
|
||||
case "$1" in
|
||||
-s) STABLE="STABLE"; shift ;;
|
||||
-s) SELECTED_SUITE=latest-release; shift ;;
|
||||
--lts) SELECTED_SUITE=latest-lts; shift ;;
|
||||
--component-branch)
|
||||
if [[ "$2" =~ ^([-_a-zA-Z0-9]+)=(.+)$ ]]; then
|
||||
verbatim_component="${BASH_REMATCH[1]}"
|
||||
component="${BASH_REMATCH[1]^^}" # convert the component to uppercase
|
||||
branch="${BASH_REMATCH[2]}"
|
||||
|
||||
if ! _elementIn "$component" "${WHATTOBUILD_AVAIL[@]}"; then
|
||||
echo "Invalid component passed to option --component-branch:" \
|
||||
"'$verbatim_component'. Allowed" >&2
|
||||
printf "components are:\n\n" >&2
|
||||
echo " $(_joinBy ', ' "${WHATTOBUILD_AVAIL[@]}")." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
COMPONENT_BRANCH_OVERRIDES["$component"]="$branch"
|
||||
unset -v verbatim_component component branch
|
||||
else
|
||||
echo "Invalid value passed to option --component-branch: '$2'." >&2
|
||||
echo "The correct syntax is" \
|
||||
"--component-branch COMPONENT=BRANCH" >&2
|
||||
echo "(or equivalently, --component-branch=COMPONENT=BRANCH)." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
shift 2
|
||||
;;
|
||||
-a) APT_GET_UPDATE="$2"; shift 2 ;;
|
||||
-c) COMPILE="$2"; shift 2 ;;
|
||||
-p) DOWNLOAD_PACKAGES="$2"; shift 2 ;;
|
||||
@ -659,7 +705,7 @@ while true; do
|
||||
echo "Invalid value passed to option --git-clone-site-params: '$2'." >&2
|
||||
echo "The correct syntax is" \
|
||||
"--git-clone-site-params SITE=PROTOCOL[:USERNAME]" >&2
|
||||
echo "(or --git-clone-site-params=SITE=PROTOCOL[:USERNAME])." >&2
|
||||
echo "(or equivalently, --git-clone-site-params=SITE=PROTOCOL[:USERNAME])." >&2
|
||||
exit 1
|
||||
fi
|
||||
shift 2
|
||||
@ -690,9 +736,68 @@ else
|
||||
WHATTOBUILD=( "$@" )
|
||||
fi
|
||||
|
||||
if [[ "$STABLE" != "STABLE" ]]; then
|
||||
FGVERSION="next"
|
||||
fi
|
||||
# Name of the branch to check out for each component, depending on whether any
|
||||
# of the options -s and --lts has been provided (for some projects which don't
|
||||
# use a VCS, we may abuse this variable and store something else than a branch
|
||||
# name).
|
||||
declare -A COMPONENT_BRANCH
|
||||
|
||||
case "$SELECTED_SUITE" in
|
||||
next)
|
||||
FG_BRANCH=next
|
||||
COMPONENT_BRANCH[OPENRTI]=master
|
||||
COMPONENT_BRANCH[OSG]=OpenSceneGraph-3.6
|
||||
COMPONENT_BRANCH[TERRAGEAR]=next
|
||||
SUITE_DESCRIPTION="\
|
||||
!! You have selected the 'next' suite, which contains the development version
|
||||
of FlightGear. The corresponding FlightGear code is very recent but may well
|
||||
be unstable. Other possibilities are '--lts' for the 'LTS' suite (Long Term
|
||||
Support) and '-s' for the latest release. '--lts' should provide the most
|
||||
stable setup. !!"
|
||||
;;
|
||||
latest-release)
|
||||
FG_BRANCH="release/$(git ls-remote --heads https://git.code.sf.net/p/flightgear/flightgear | grep '\/release\/' | cut -f4 -d'/' | sort -t . -k 1,1n -k2,2n -k3,3n | tail -1)"
|
||||
COMPONENT_BRANCH[OPENRTI]=release-0.7
|
||||
COMPONENT_BRANCH[OSG]=OpenSceneGraph-3.4
|
||||
COMPONENT_BRANCH[TERRAGEAR]=scenery/ws2.0
|
||||
SUITE_DESCRIPTION="\
|
||||
You have selected the latest release of FlightGear. This is supposedly less
|
||||
stable than '--lts' (Long Term Support) but more stable than the development
|
||||
version (which would be obtained with neither '-s' nor '--lts')."
|
||||
;;
|
||||
latest-lts)
|
||||
FG_BRANCH="$CURRENT_LTS_BRANCH"
|
||||
COMPONENT_BRANCH[OPENRTI]=release-0.7
|
||||
COMPONENT_BRANCH[OSG]=OpenSceneGraph-3.4
|
||||
COMPONENT_BRANCH[TERRAGEAR]=scenery/ws2.0
|
||||
SUITE_DESCRIPTION="\
|
||||
You have selected the LTS suite (Long Term Support). This is in principle the
|
||||
most stable setup. Other possibilities are '-s' for the latest release and
|
||||
nothing (neither '-s' nor '--lts' passed) for bleeding-edge development
|
||||
versions."
|
||||
;;
|
||||
*) _printLog "Unexpected value '$SELECTED_SUITE' for SELECTED_SUITE; " \
|
||||
"please report a bug."
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
COMPONENT_BRANCH[PLIB]=master
|
||||
COMPONENT_BRANCH[CMAKE]=release
|
||||
COMPONENT_BRANCH[SIMGEAR]="$FG_BRANCH"
|
||||
COMPONENT_BRANCH[FGFS]="$FG_BRANCH"
|
||||
COMPONENT_BRANCH[DATA]="$FG_BRANCH"
|
||||
COMPONENT_BRANCH[FGRUN]=next
|
||||
COMPONENT_BRANCH[FGO]=1.5.5
|
||||
COMPONENT_BRANCH[FGX]=master
|
||||
COMPONENT_BRANCH[OPENRADAR]=OpenRadar.zip
|
||||
COMPONENT_BRANCH[ATCPIE]=master
|
||||
COMPONENT_BRANCH[TERRAGEARGUI]=master
|
||||
COMPONENT_BRANCH[ZLIB]=master
|
||||
|
||||
for component in "${!COMPONENT_BRANCH_OVERRIDES[@]}"; do
|
||||
COMPONENT_BRANCH[$component]="${COMPONENT_BRANCH_OVERRIDES[$component]}"
|
||||
done
|
||||
|
||||
if [ "$OPENRTI" = "OPENRTI" ]; then
|
||||
SG_CMAKEARGS="$SG_CMAKEARGS -DENABLE_RTI=ON;"
|
||||
@ -755,13 +860,24 @@ _log "SG_CMAKEARGS=$SG_CMAKEARGS"
|
||||
_log "FG_CMAKEARGS=$FG_CMAKEARGS"
|
||||
_log "COMPOSITOR=$COMPOSITOR"
|
||||
_log "DIRECTORY=$CBD"
|
||||
_log
|
||||
|
||||
if [ "$STABLE" = "STABLE" ]; then
|
||||
_log "Stable build: yes"
|
||||
else
|
||||
_log "Stable build: no"
|
||||
fi
|
||||
_printLog "$SUITE_DESCRIPTION"
|
||||
_printLog
|
||||
_printLog "\
|
||||
Note that options '-s' and '--lts' apply in particular to the SIMGEAR, FGFS
|
||||
and DATA components, but other components may be affected as well. Use
|
||||
'--component-branch COMPONENT=BRANCH' (without the quotes) if you want to
|
||||
override the defaults (i.e., manually choose the branches for particular
|
||||
components)."
|
||||
_printLog
|
||||
_printLog "Branch used for each component:"
|
||||
_printLog
|
||||
for component in "${WHATTOBUILD_AVAIL[@]}"; do
|
||||
_printLog " COMPONENT_BRANCH[$component]=${COMPONENT_BRANCH[$component]}"
|
||||
done
|
||||
|
||||
_log
|
||||
_logSep
|
||||
|
||||
#######################################################
|
||||
@ -886,6 +1002,7 @@ if [[ "$DOWNLOAD_PACKAGES" = "y" ]]; then
|
||||
|
||||
_aptInstall "${PKG[@]}"
|
||||
else
|
||||
_printLog
|
||||
_printLog "Note: option -p of $PROGNAME set to 'n' (no), therefore no"
|
||||
_printLog " package will be installed via ${PKG_MGR}. Compilation of" \
|
||||
"some components"
|
||||
@ -940,7 +1057,7 @@ if _elementIn "CMAKE" "${WHATTOBUILD[@]}"; then
|
||||
mkdir -p "cmake"
|
||||
cd "$CBD"/cmake
|
||||
_gitDownload CMAKE
|
||||
_gitUpdate release
|
||||
_gitUpdate "${COMPONENT_BRANCH[CMAKE]}"
|
||||
|
||||
if [ "$RECONFIGURE" = "y" ]; then
|
||||
cd "$CBD"
|
||||
@ -975,7 +1092,7 @@ if _elementIn "ZLIB" "${WHATTOBUILD[@]}"; then
|
||||
mkdir -p "zlib"
|
||||
cd "$CBD"/zlib
|
||||
_gitDownload ZLIB
|
||||
_gitUpdate master
|
||||
_gitUpdate "${COMPONENT_BRANCH[ZLIB]}"
|
||||
|
||||
if [ "$RECONFIGURE" = "y" ]; then
|
||||
cd "$CBD"
|
||||
@ -1004,7 +1121,7 @@ if _elementIn "PLIB" "${WHATTOBUILD[@]}"; then
|
||||
mkdir -p "plib"
|
||||
cd "$CBD"/plib
|
||||
_gitDownload PLIB
|
||||
_gitUpdate master
|
||||
_gitUpdate "${COMPONENT_BRANCH[PLIB]}"
|
||||
|
||||
if [ "$RECONFIGURE" = "y" ]; then
|
||||
cd "$CBD"
|
||||
@ -1033,12 +1150,7 @@ if _elementIn "OPENRTI" "${WHATTOBUILD[@]}"; then
|
||||
mkdir -p "openrti"
|
||||
cd "$CBD"/openrti
|
||||
_gitDownload OPENRTI
|
||||
|
||||
if [ "$STABLE" = "STABLE" ]; then
|
||||
_gitUpdate release-0.7
|
||||
else
|
||||
_gitUpdate master
|
||||
fi
|
||||
_gitUpdate "${COMPONENT_BRANCH[OPENRTI]}"
|
||||
|
||||
if [ "$RECONFIGURE" = "y" ]; then
|
||||
cd "$CBD"
|
||||
@ -1067,7 +1179,7 @@ if _elementIn "OSG" "${WHATTOBUILD[@]}"; then
|
||||
mkdir -p "openscenegraph"
|
||||
cd "openscenegraph"
|
||||
_gitDownload OSG
|
||||
_gitUpdate OpenSceneGraph-3.4
|
||||
_gitUpdate "${COMPONENT_BRANCH[OSG]}"
|
||||
|
||||
if [ "$RECONFIGURE" = "y" ]; then
|
||||
cd "$CBD"
|
||||
@ -1109,7 +1221,7 @@ if _elementIn "SIMGEAR" "${WHATTOBUILD[@]}"; then
|
||||
mkdir -p "simgear"
|
||||
cd "$CBD"/simgear
|
||||
_gitDownload SIMGEAR
|
||||
_gitUpdate "$FGVERSION"
|
||||
_gitUpdate "${COMPONENT_BRANCH[SIMGEAR]}"
|
||||
|
||||
if [ "$RECONFIGURE" = "y" ]; then
|
||||
cd "$CBD"
|
||||
@ -1148,7 +1260,7 @@ if _elementIn "FGFS" "${WHATTOBUILD[@]}" || \
|
||||
_printLog "****************************************"
|
||||
|
||||
_gitDownload DATA
|
||||
_gitUpdate "$FGVERSION"
|
||||
_gitUpdate "${COMPONENT_BRANCH[DATA]}"
|
||||
fi
|
||||
|
||||
mkdir -p "$CBD"/flightgear
|
||||
@ -1160,7 +1272,7 @@ if _elementIn "FGFS" "${WHATTOBUILD[@]}" || \
|
||||
_printLog "****************************************"
|
||||
|
||||
_gitDownload FGFS
|
||||
_gitUpdate "$FGVERSION"
|
||||
_gitUpdate "${COMPONENT_BRANCH[FGFS]}"
|
||||
|
||||
if [ "$RECONFIGURE" = "y" ]; then
|
||||
cd "$CBD"
|
||||
@ -1274,7 +1386,7 @@ if _elementIn "FGRUN" "${WHATTOBUILD[@]}"; then
|
||||
mkdir -p "fgrun"
|
||||
cd "$CBD"/fgrun
|
||||
_gitDownload FGRUN
|
||||
_gitUpdate "$FGVERSION"
|
||||
_gitUpdate "${COMPONENT_BRANCH[FGRUN]}"
|
||||
|
||||
if [ "$RECONFIGURE" = "y" ]; then
|
||||
cd "$CBD"
|
||||
@ -1314,7 +1426,7 @@ if _elementIn "FGO" "${WHATTOBUILD[@]}"; then
|
||||
|
||||
if [ "$DOWNLOAD" = "y" ]; then
|
||||
rm -rf fgo*.tar.gz
|
||||
wget https://sites.google.com/site/erobosprojects/flightgear/add-ons/fgo/download/fgo-1.5.5.tar.gz -O fgo.tar.gz
|
||||
wget "https://sites.google.com/site/erobosprojects/flightgear/add-ons/fgo/download/fgo-${COMPONENT_BRANCH[FGO]}.tar.gz" -O fgo.tar.gz
|
||||
cd install
|
||||
tar -zxvf ../fgo.tar.gz
|
||||
cd ..
|
||||
@ -1345,7 +1457,7 @@ if _elementIn "FGX" "${WHATTOBUILD[@]}"; then
|
||||
mkdir -p "fgx"
|
||||
cd "$CBD"/fgx
|
||||
_gitDownload FGX
|
||||
_gitUpdate master
|
||||
_gitUpdate "${COMPONENT_BRANCH[FGX]}"
|
||||
|
||||
cd "$CBD"/fgx/src/
|
||||
#Patch in order to pre-setting paths
|
||||
@ -1400,7 +1512,7 @@ if _elementIn "ATCPIE" "${WHATTOBUILD[@]}"; then
|
||||
mkdir -p "$INSTALL_DIR_ATCPIE"
|
||||
cd "$INSTALL_DIR_ATCPIE"
|
||||
_gitDownload ATCPIE
|
||||
_gitUpdate master
|
||||
_gitUpdate "${COMPONENT_BRANCH[ATCPIE]}"
|
||||
|
||||
cd "$CBD"
|
||||
|
||||
@ -1424,7 +1536,7 @@ if _elementIn "OPENRADAR" "${WHATTOBUILD[@]}"; then
|
||||
_printLog "****************************************"
|
||||
|
||||
if [ "$DOWNLOAD" = "y" ]; then
|
||||
wget http://wagnerw.de/OpenRadar.zip -O OpenRadar.zip
|
||||
wget http://wagnerw.de/"${COMPONENT_BRANCH[OPENRADAR]}" -O OpenRadar.zip
|
||||
cd install
|
||||
unzip -o ../OpenRadar.zip
|
||||
cd ..
|
||||
@ -1453,14 +1565,7 @@ if _elementIn "TERRAGEAR" "${WHATTOBUILD[@]}"; then
|
||||
mkdir -p "terragear"
|
||||
cd "$CBD"/terragear
|
||||
_gitDownload TERRAGEAR
|
||||
|
||||
if [ "$STABLE" = "STABLE" ]; then
|
||||
branch='scenery/ws2.0'
|
||||
else
|
||||
branch='next'
|
||||
fi
|
||||
|
||||
_gitUpdate "$branch"
|
||||
_gitUpdate "${COMPONENT_BRANCH[TERRAGEAR]}"
|
||||
|
||||
if [ "$RECONFIGURE" = "y" ]; then
|
||||
cd "$CBD"
|
||||
@ -1516,8 +1621,7 @@ if _elementIn "TERRAGEARGUI" "${WHATTOBUILD[@]}"; then
|
||||
mkdir -p "terrageargui"
|
||||
cd "$CBD"/terrageargui
|
||||
_gitDownload TERRAGEARGUI
|
||||
_gitUpdate master
|
||||
|
||||
_gitUpdate "${COMPONENT_BRANCH[TERRAGEARGUI]}"
|
||||
|
||||
if [ "$RECONFIGURE" = "y" ]; then
|
||||
cd "$CBD"
|
||||
|
Loading…
Reference in New Issue
Block a user