docs/gnulinux/encrypted_debian: don't tell the user to choose their own LV name
[libreboot.git] / build
1 #!/bin/sh
2
3 #  generic build script, for building components (all of them)
4 #
5 #       Copyright (C) 2014, 2015 Leah Rowe <info@minifree.org>
6 #       Copyright (C) 2015 Patrick "P. J." McDermott <pj@pehjota.net>
7 #       Copyright (C) 2015, 2016 Klemens Nanni <contact@autoboot.org>
8 #
9 #    This program is free software: you can redistribute it and/or modify
10 #    it under the terms of the GNU General Public License as published by
11 #    the Free Software Foundation, either version 3 of the License, or
12 #    (at your option) any later version.
13 #
14 #    This program is distributed in the hope that it will be useful,
15 #    but WITHOUT ANY WARRANTY; without even the implied warranty of
16 #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17 #    GNU General Public License for more details.
18 #
19 #    You should have received a copy of the GNU General Public License
20 #    along with this program.  If not, see <http://www.gnu.org/licenses/>.
21 #
22
23 [ "x${DEBUG+set}" = 'xset' ] && set -v
24 set -u -e
25
26 build=./resources/scripts/helpers/build
27
28 listmodes() {
29         for mode in "${build}"/*; do
30                 printf '%s\n' "${mode##*/}"
31         done
32 }
33
34 # Takes exactly one mode as parameter
35 listoptions() {
36         for option in "${build}"/"${1}"/*; do
37                 printf '%s\n' "${option##*/}"
38         done
39 }
40
41 help() {
42         cat <<- EOF
43         USAGE:  ./build <MODE> <OPTION>
44
45         possible values for 'mode':
46         $(listmodes)
47
48         Example:        ./build module all
49         Example:        ./build module flashrom [static]
50         Example:        ./build roms withgrub
51         Example:        ./build clean all
52
53         Refer to the libreboot documentation for more information.
54         EOF
55 }
56
57 die() {
58         printf 'Error: %s\n' "${@}" 1>&2
59         exit 1
60 }
61
62 if [ $# -lt 1 ]; then
63         die "Wrong number of arguments specified. See './build help'."
64 fi
65
66 mode="${1}"
67
68 [ "${mode}" = help ] && help && exit 0
69
70 if [ $# -gt 1 ]; then
71
72     option="${2}"
73     shift 2
74
75     case "${option}" in
76         list)
77                 printf "Available options for mode '%s':\n\n" "${mode}"
78                 listoptions "${mode}"
79                 ;;  
80         all)
81                 for option in $(listoptions "${mode}"); do
82                         "${build}"/"${mode}"/"${option}" $@
83                 done
84                 ;;
85         *)
86                 if [ -d "${build}"/"${mode}"/ ]; then
87                         if [ -f "${build}"/"${mode}"/"${option}" ]; then
88                                 "${build}"/"${mode}"/"${option}" $@
89                         else
90                     help
91                                 die "Invalid option for '${mode}'. See './build ${mode} list'."
92                         fi
93                 else
94                 help
95                         die "Invalid mode '${mode}'. See './build help'."
96                 fi
97     esac
98 else
99     help
100     exit 0
101 fi