From 21c13c0886e814980d7663bb88b0d8fc905adb93 Mon Sep 17 00:00:00 2001 From: Florent Rougon Date: Mon, 29 Jun 2020 14:23:18 +0200 Subject: [PATCH] download_and_compile.sh: add option --cleanup This option recursively deletes build and install directories, but preserves FGData if present (FGData is in /install/flightgear/fgdata, hence the need to take special care of it). There is currently no way to trigger this cleanup routine whithout pretending to act on at least one component, since "no components specified" implies "SIMGEAR FGFS DATA". That said, using -pn -dn -rn -cn with one of the components you already have should be close enough to "only do the cleanup". --- download_and_compile.sh | 54 ++++++++++++++++++++++++++++++++++++++--- 1 file changed, 50 insertions(+), 4 deletions(-) diff --git a/download_and_compile.sh b/download_and_compile.sh index ea53c64..b4225b5 100755 --- a/download_and_compile.sh +++ b/download_and_compile.sh @@ -193,6 +193,43 @@ function _yes_no_quit_prompt(){ return $res } +# Recursively delete build and install directories, but preserve FGData if +# present. +function _cleanup(){ + if [[ -z "$CBD" || -z "$INSTALL_DIR" || -z "$INSTALL_DIR_FGFS" ]]; then + _printLog "${PROGNAME}:" '_cleanup() called while $CBD or $INSTALL_DIR or' + _printLog '$INSTALL_DIR_FGFS is empty.' + _printLog "\$CBD='$CBD'" + _printLog "\$INSTALL_DIR='$INSTALL_DIR'" + _printLog "\$INSTALL_DIR_FGFS='$INSTALL_DIR_FGFS'" + _printLog 'This is unexpected; please report.' + exit 1 + fi + + local fgdata_backup="$CBD/fgdata.tmp.download_and_compile-cleanup" + local -i fgdata_moved=0 + + _printLog "Deleting build directories ($CBD/build)..." + rm -rf "$CBD/build" + + if [[ -d "$INSTALL_DIR_FGFS/fgdata" ]]; then + _printLog "Moving FGData to $fgdata_backup..." + mv "$INSTALL_DIR_FGFS/fgdata" "$fgdata_backup" + fgdata_moved=1 + fi + + _printLog "Deleting install directories ($INSTALL_DIR)..." + rm -rf "$INSTALL_DIR" + + if [[ $fgdata_moved -eq 1 ]]; then + mkdir -p "$INSTALL_DIR_FGFS" + _printLog "Moving FGData back to $INSTALL_DIR_FGFS/fgdata..." + mv "$fgdata_backup" "$INSTALL_DIR_FGFS/fgdata" + fi + + _printLog +} + function _aptUpdate(){ local cmd=() @@ -530,6 +567,9 @@ function _usage() { echo " -p y|n y=install packages using PACKAGE_MANAGER, 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 the Internet (Git, svn, etc.), n=don't default=y" + echo " --cleanup Remove all build and installation directories. Try this if a" + echo ' compilation fails and the "base directory" was not "fresh" when' + echo " you started ${PROGNAME}." echo " --git-clone-default-proto=PROTO default=https" echo " default protocol to use for 'git clone' (https, git or ssh)" echo " --git-clone-site-params=SITE=PROTOCOL[:USERNAME]" @@ -599,6 +639,7 @@ declare -a WHATTOBUILD_AVAIL=( WHATTOBUILDALL=(SIMGEAR FGFS DATA) SELECTED_SUITE=next +CLEANUP="n" APT_GET_UPDATE="y" DOWNLOAD_PACKAGES="y" COMPILE="y" @@ -694,9 +735,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,lts \ + --longoptions cleanup,git-clone-default-proto:,git-clone-site-params:,lts \ --longoptions package-manager:,sudo:,ignore-intercomponent-deps,compositor \ - --longoptions component-branch:,non-interactive,version \ + --longoptions component-branch:,non-interactive,help,version \ -n "$PROGNAME" -- "$@") case $? in @@ -742,6 +783,7 @@ while true; do -c) COMPILE="$2"; shift 2 ;; -p) DOWNLOAD_PACKAGES="$2"; shift 2 ;; -d) DOWNLOAD="$2"; shift 2 ;; + --cleanup) CLEANUP="y"; shift ;; --git-clone-default-proto) proto="${2,,}" # convert to lowercase @@ -1085,7 +1127,9 @@ fi ####################################################### SUB_INSTALL_DIR=install +FGFS_INSTALL_DIR=flightgear INSTALL_DIR="$CBD/$SUB_INSTALL_DIR" +INSTALL_DIR_FGFS="$INSTALL_DIR/$FGFS_INSTALL_DIR" cd "$CBD" mkdir -p build install @@ -1115,6 +1159,10 @@ fi _printLog +if [[ "$CLEANUP" = "y" ]]; then + _cleanup +fi + ####################################################### # cmake ####################################################### @@ -1318,8 +1366,6 @@ fi ####################################################### # FGFS ####################################################### -FGFS_INSTALL_DIR=flightgear -INSTALL_DIR_FGFS="$INSTALL_DIR/$FGFS_INSTALL_DIR" cd "$CBD" if _elementIn "FGFS" "${WHATTOBUILD[@]}" || \ _elementIn "DATA" "${WHATTOBUILD[@]}"; then