blob: fbdbf14d5c9ce5173e9be02af18be22ae744cd5f [file] [log] [blame] [edit]
#!/usr/bin/env bash
###############################################################################
# BRLTTY - A background process providing access to the console screen (when in
# text mode) for a blind person using a refreshable braille display.
#
# Copyright (C) 1995-2023 by The BRLTTY Developers.
#
# BRLTTY comes with ABSOLUTELY NO WARRANTY.
#
# This is free software, placed under the terms of the
# GNU Lesser General Public License, as published by the Free Software
# Foundation; either version 2.1 of the License, or (at your option) any
# later version. Please see the file LICENSE-LGPL for details.
#
# Web Page: http://brltty.app/
#
# This software is maintained by Dave Mielke <dave@mielke.cc>.
###############################################################################
. "$(dirname "${0}")/../brltty-prologue.sh"
processExtraProgramParameters() {
requiredPackageNames=( "${@}" )
}
addProgramOption i flag installNeededPackages "install the needed packages"
addProgramOption l flag listNeededPackages "list the needed packages"
optionalProgramParameters
parseProgramArguments "${@}"
set -e
. "${programDirectory}/packages.sh"
[ "${#requiredPackageNames[@]}" -gt 0 ] || {
loadRequiredPackageNames() {
local file="${programDirectory}/${programName}.d/${platformName}"
[ -e "${file}" ] || semanticError "platform package list not found: ${file}"
[ -f "${file}" ] || semanticError "not a file: ${file}"
[ -r "${file}" ] || semanticError "platform package list not readable: ${file}"
local name
while read name
do
[ -n "${name}" ] || continue
[ "${name:0:1}" = "#" ] && continue
requiredPackageNames[${#requiredPackageNames[*]}]="${name}"
done < <(cat "${file}")
[ "${#requiredPackageNames[@]}" -gt 0 ] || semanticError "empty package list"
}
case "${packageManager}"
in
apk)
platformName="alpine"
;;
apt)
if [ "$(uname -s)" = "GNU" ]
then
platformName="hurd"
else
platformName="debian"
fi
;;
brew)
platformName="darwin"
;;
dnf)
platformName="fedora"
;;
pacman)
platformName="arch"
;;
pkg)
platformName="freebsd"
;;
pkg_info)
platformName="openbsd"
;;
xbps)
platformName="void"
;;
zypper)
platformName="opensuse"
;;
*) semanticError "unknown host platform: ${packageManager}";;
esac
logNote "platform name: ${platformName}"
loadRequiredPackageNames
}
listRequiredPackages() {
local name
for name in "${requiredPackageNames[@]}"
do
echo "${name}"
done
}
neededPackages=(
$(
diff <(listInstalledPackages | normalizePackageList) \
<(listRequiredPackages | normalizePackageList) |
sed -n -e '
/^--- /b
/^+++ /b
s/^+/> /
s/^> //p
'
)
)
if [ "${#neededPackages[@]}" -gt 0 ]
then
logMessage task "packages needed: ${#neededPackages[@]}"
"${listNeededPackages}" && {
for package in "${neededPackages[@]}"
do
echo "${package}"
done
}
"${installNeededPackages}" && {
installPackages "${neededPackages[@]}"
}
else
logMessage task "no needed packages"
fi
exit 0