mirror of
https://codeberg.org/libreboot/lbmk.git
synced 2026-07-20 15:03:44 +02:00
f1f5b91a85
if ./build command options fails, it just means that lbmk would next check whether ./buildpath mode list exists, which it never will because that would violate lbmk design. the generic "help" output is more than sufficient, and tells the user to check "list" anyway, so there's no point in saying it here. simplify this function. Signed-off-by: Leah Rowe <leah@libreboot.org>
146 lines
3.5 KiB
Bash
Executable File
146 lines
3.5 KiB
Bash
Executable File
#!/usr/bin/env sh
|
|
|
|
# generic script for calling other scripts in lbmk
|
|
#
|
|
# Copyright (C) 2014,2015,2020,2021,2023 Leah Rowe <info@minifree.org>
|
|
# Copyright (C) 2015 Patrick "P. J." McDermott <pj@pehjota.net>
|
|
# Copyright (C) 2015, 2016 Klemens Nanni <contact@autoboot.org>
|
|
# Copyright (C) 2022, Caleb La Grange <thonkpeasant@protonmail.com>
|
|
#
|
|
# This program is free software: you can redistribute it and/or modify
|
|
# it under the terms of the GNU General Public License as published by
|
|
# the Free Software Foundation, either version 3 of the License, or
|
|
# (at your option) any later version.
|
|
#
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
#
|
|
|
|
[ "x${DEBUG+set}" = 'xset' ] && set -v
|
|
set -u -e
|
|
|
|
. "include/err.sh"
|
|
. "include/export.sh"
|
|
|
|
read projectname < projectname
|
|
linkpath="${0}"
|
|
linkname="${linkpath##*/}"
|
|
buildpath="./script/${linkname}"
|
|
mode=""
|
|
option=""
|
|
|
|
main()
|
|
{
|
|
id -u 1>/dev/null 2>/dev/null || \
|
|
fail "cannot ascertain user id"
|
|
|
|
initialise_command $@
|
|
shift 2
|
|
|
|
./checkgit || fail "Please read: https://libreboot.org/docs/build/"
|
|
./checkversion || fail "Cannot check ${projectname} version"
|
|
|
|
execute_command $@
|
|
lbmk_exit 0
|
|
}
|
|
|
|
initialise_command()
|
|
{
|
|
[ "${linkname}" = "lbmk" ] && fail "Don't run this script directly."
|
|
[ $# -lt 1 ] && fail "Too few arguments. Try: ${0} help"
|
|
|
|
mode="${1}"
|
|
[ "${mode}" != "dependencies" ] || \
|
|
install_packages $@ || fail "Can't install dependencies"
|
|
[ "$(id -u)" != "0" ] || \
|
|
fail "running this command as root is not permitted"
|
|
|
|
[ "${mode}" = "help" ] && usage ${0} && lbmk_exit 0
|
|
[ "${mode}" = "list" ] && ./build command options "${buildpath}" && \
|
|
lbmk_exit 0
|
|
[ $# -lt 2 ] && usage ${0} && lbmk_exit 1
|
|
|
|
option="${2}"
|
|
}
|
|
|
|
install_packages()
|
|
{
|
|
if [ $# -lt 2 ]; then
|
|
printf "You must specify a distro, namely:\n" 1>&2
|
|
printf "Look at files under config/dependencies/\n" \
|
|
1>&2
|
|
printf "Example: ./build dependencies debian\n" 1>&2
|
|
fail "target not specified"
|
|
fi
|
|
|
|
[ -f "config/dependencies/${2}" ] || fail "Unsupported target"
|
|
|
|
aur_notice=""
|
|
. "config/dependencies/${2}"
|
|
|
|
${pkg_add} ${pkglist} || \
|
|
fail "install_packages: Error installing dependencies"
|
|
[ "${aur_notice}" = "" ] || \
|
|
printf "You must install AUR packages: %s\n" "${aur_notice}" 1>&2
|
|
|
|
lbmk_exit 0
|
|
}
|
|
|
|
execute_command()
|
|
{
|
|
if [ "${option}" = "list" ]; then
|
|
./build command options "${buildpath}/${mode}"
|
|
lbmk_exit 0
|
|
elif [ ! -f "${buildpath}/${mode}/${option}" ]; then
|
|
fail "Invalid command. Run: ${linkpath} help"
|
|
else
|
|
"${buildpath}/${mode}/${option}" $@ || fail "lbmk error"
|
|
fi
|
|
}
|
|
|
|
usage()
|
|
{
|
|
progname=${0}
|
|
cat <<- EOF
|
|
USAGE: ${progname} <MODE> <OPTION>
|
|
|
|
possible values for 'mode':
|
|
$(./build command options "${buildpath}")
|
|
|
|
For each of the above modes, you may also do:
|
|
${progname} <MODE> list
|
|
|
|
Example: ./build grub list, which would yield:
|
|
$(./build grub list)
|
|
|
|
Refer to ${projectname} documentation for more info.
|
|
EOF
|
|
}
|
|
|
|
lbmk_exit()
|
|
{
|
|
tmp_cleanup || err "could not remove tmpdir on lbmk exit: ${tmpdir}"
|
|
exit $1
|
|
}
|
|
|
|
fail()
|
|
{
|
|
tmp_cleanup || printf "WARNING: could not remove tmpdir: %s\n" \
|
|
"${tmpdir}" 1>&2
|
|
err "${1}"
|
|
}
|
|
|
|
tmp_cleanup()
|
|
{
|
|
if [ "${tmpdir_was_set}" = "n" ]; then
|
|
rm -Rf "${tmpdir}" || return 1
|
|
fi
|
|
}
|
|
|
|
main $@
|