Files
lbmk/lbmk
T
Leah Rowe cc1642096e Use SPDX license headers on all scripts
This results in much cleaner copyright and license declarations.
SPDX headers are legally recognised and make auditing easier.

Also, remove descriptions of each script, from each script.
Libreboot documentation at docs/maintain/ describes them.

Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-09-25 02:19:48 +01:00

132 lines
3.0 KiB
Bash
Executable File

#!/usr/bin/env sh
# SPDX-License-Identifier: GPL-3.0-or-later
# SPDX-FileCopyrightText: 2014,2015,2020,2021,2023 Leah Rowe <info@minifree.org>
# SPDX-FileCopyrightText: 2015 Patrick "P. J." McDermott <pj@pehjota.net>
# SPDX-FileCopyrightText: 2015, 2016 Klemens Nanni <contact@autoboot.org>
# SPDX-FileCopyrightText: 2022, Caleb La Grange <thonkpeasant@protonmail.com>
[ "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 "install_packages: 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}" || \
fail "execute_command: cannot list command options"
lbmk_exit 0
fi
[ -f "${buildpath}/${mode}/${option}" ] || \
fail "Invalid command. Run: ${linkpath} help"
"${buildpath}/${mode}/${option}" $@ || \
fail "execute_command: ${buildpath}/${mode}/${option} ${@}"
}
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 "lbmk_exit: could not remove tmpdir upon exit $1: ${tmpdir}"
exit $1
}
fail()
{
tmp_cleanup || printf "fail(): WARNING: cannot remove tmpdir: %s\n" \
"${tmpdir}" 1>&2
err "${1}"
}
tmp_cleanup()
{
if [ "${tmpdir_was_set}" = "n" ]; then
rm -Rf "${tmpdir}" || return 1
fi
}
main $@