download_and_compile.sh: add support for optional package alternatives

- Rename _package_alternative_inner() to _find_package_alternative() and
  modify it to make it more useful when called from other functions. If
  a package is found that matches one of the alternatives, its name is
  printed on stdout, otherwise nothing is printed (empty output).

- Adapt _package_alternative() accordingly and rename it
  to _mandatory_pkg_alternative().

- New function _optional_pkg_alternative() based on
  _find_package_alternative(). Contrary to _mandatory_pkg_alternative(),
  if no match is found in _optional_pkg_alternative(), a message is
  printed to stdout but the script doesn't abort.
This commit is contained in:
Florent Rougon 2017-10-02 09:27:56 +02:00
parent 018f0907c2
commit dd510b0286

View File

@ -161,31 +161,70 @@ function _make(){
fi fi
} }
# Find an available, non-virtual package matching one of the given regexps. # Add an available, non-virtual package matching one of the given regexps.
# #
# Each positional parameter is interpreted as a POSIX extended regular # Each positional parameter is interpreted as a POSIX extended regular
# expression. These parameters are examined from left to right, and the first # expression. These parameters are examined from left to right, and the first
# available matching package is added to the global PKG variable. If no match # available matching package is added to the global PKG variable. If no match
# is found, the script aborts. # is found, the script aborts.
function _package_alternative(){ function _mandatory_pkg_alternative(){
local pkg
if [[ $# -lt 1 ]]; then if [[ $# -lt 1 ]]; then
echo "Empty package alternative: this is a bug in the script, aborting." echo "Empty package alternative: this is a bug in the script, aborting."
exit 1 exit 1
fi fi
echo "Considering a package alternative:" "$@" echo "Considering a package alternative:" "$@"
_package_alternative_inner "$@" pkg=$(_find_package_alternative "$@")
if [[ -n "$pkg" ]]; then
echo "Package alternative matched for $pkg"
PKG="$PKG $pkg"
else
echo "No match found for the package alternative, aborting."
exit 1
fi
return 0
} }
# This function requires the 'dctrl-tools' package # If available, add a non-virtual package matching one of the given regexps.
function _package_alternative_inner(){ #
# Returning 0 or 1 on success to indicate whether a match was found could be
# done, but must would need to be specifically handled at the calling site,
# since the script is run under 'set -e' regime.
function _optional_pkg_alternative(){
local pkg local pkg
if [[ $# -lt 1 ]]; then if [[ $# -lt 1 ]]; then
echo "No match found for the package alternative, aborting." echo "Empty optional package alternative: this is a bug in the script," \
"aborting."
exit 1 exit 1
fi fi
echo "Considering an optional package alternative:" "$@"
pkg=$(_find_package_alternative "$@")
if [[ -n "$pkg" ]]; then
echo "Optional package alternative matched for $pkg"
PKG="$PKG $pkg"
else
echo "No match found for the optional package alternative, continuing" \
"anyway."
fi
return 0
}
# This function requires the 'dctrl-tools' package
function _find_package_alternative(){
local pkg
if [[ $# -lt 1 ]]; then
return 0 # Nothing could be found
fi
# This finds non-virtual packages only (on purpose) # This finds non-virtual packages only (on purpose)
pkg="$(apt-cache dumpavail | \ pkg="$(apt-cache dumpavail | \
grep-dctrl -e -sPackage -FPackage \ grep-dctrl -e -sPackage -FPackage \
@ -193,13 +232,12 @@ function _package_alternative_inner(){
sed -ne '1s/^Package:[[:space:]]*//gp')" sed -ne '1s/^Package:[[:space:]]*//gp')"
if [[ -n "$pkg" ]]; then if [[ -n "$pkg" ]]; then
echo "Package alternative matched for $pkg" echo "$pkg"
PKG="$PKG $pkg"
return 0 return 0
else else
# Try with the next regexp # Try with the next regexp
shift shift
_package_alternative_inner "$@" _find_package_alternative "$@"
fi fi
} }
@ -288,11 +326,11 @@ PKG="$PKG libcgal-dev libgdal-dev libtiff5-dev"
PKG="$PKG libqt4-dev" PKG="$PKG libqt4-dev"
# SG/FG # SG/FG
PKG="$PKG zlib1g-dev freeglut3-dev libboost-dev" PKG="$PKG zlib1g-dev freeglut3-dev libboost-dev"
_package_alternative libopenscenegraph-3.4-dev libopenscenegraph-dev \ _mandatory_pkg_alternative libopenscenegraph-3.4-dev libopenscenegraph-dev \
'libopenscenegraph-[0-9]+\.[0-9]+-dev' 'libopenscenegraph-[0-9]+\.[0-9]+-dev'
# FG # FG
PKG="$PKG libopenal-dev libudev-dev qt5-default qtdeclarative5-dev libdbus-1-dev libplib-dev" PKG="$PKG libopenal-dev libudev-dev qt5-default qtdeclarative5-dev libdbus-1-dev libplib-dev"
_package_alternative libpng-dev libpng12-dev libpng16-dev _mandatory_pkg_alternative libpng-dev libpng12-dev libpng16-dev
# FGPanel # FGPanel
PKG="$PKG fluid libbz2-dev libfltk1.3-dev libxi-dev libxmu-dev" PKG="$PKG fluid libbz2-dev libfltk1.3-dev libxi-dev libxmu-dev"
# FGAdmin # FGAdmin