diff options
Diffstat (limited to 'resources/scripts')
-rwxr-xr-x | resources/scripts/download/coreboot | 119 |
1 files changed, 75 insertions, 44 deletions
diff --git a/resources/scripts/download/coreboot b/resources/scripts/download/coreboot index f1998958..b5825892 100755 --- a/resources/scripts/download/coreboot +++ b/resources/scripts/download/coreboot @@ -2,7 +2,8 @@ # helper script: download coreboot # -# Copyright (C) 2014, 2015, 2016, 2020, 2021 Leah Rowe <info@minifree.org> +# Copyright (C) 2014,2015,2016,2020,2021,2023 Leah Rowe +# <info@minifree.org> # Copyright (C) 2022 Alper Nebi Yasak <alpernebiyasak@gmail.com> # Copyright (C) 2022 Ferass El Hafidi <vitali64pmemail@protonmail.com> # @@ -20,6 +21,8 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. # +# TODO: purge this entire file. it's terrible. re-write it more cleanly. + [ "x${DEBUG+set}" = 'xset' ] && set -v set -u -e @@ -34,21 +37,12 @@ usage() { progname="./download coreboot" printf "Usage:\n" - printf "\t%s\t\t\t# %s\n" \ - "${progname}" \ - "Download coreboot for all the boards" - printf "\t%s [board [board] ...] # %s\n" \ - "${progname}" \ - "Download coreboot for the given boards" - printf "\t%s --list-boards\t# %s\n" \ - "${progname}" \ - "Prints this help" - printf "\t%s --help\t\t# %s\n" \ - "${progname}" \ - "List supported boards" - printf "\t%s --help\t\t# %s\n" \ - "${progname}" \ - "Prints this help" + printf "\t%s\t\t\t# Clone coreboot for all boards\n" "${progname}" + printf "\t%s [board [board] ...] # Clone coreboot for given boards\n" \ + ${progname} + printf "\t%s --list-boards\t# Prints this help\n" ${progname} + printf "\t%s --help\t\t# List supported boards\n" ${progname} + printf "\t%s --help\t\t# Prints this help\n" ${progname} } # In this script, set -u is used to check for undefined variables, and @@ -74,26 +68,35 @@ downloadfor() { cbrevision="undefined" # The loop will always exit, but this while loop is crafted - # such that a tree referencing a tree that references another tree is possible - # (and so on) + # such that a tree referencing a tree that references another + # tree is possible (and so on and so forth) + while true; do cbrevision="undefined" cbtree="undefined" if [ ! -f "resources/coreboot/${board}/board.cfg" ]; then - printf "ERROR: download/coreboot: board.cfg does not exist for '%s'\n" "${board}" + printf "ERROR: download/coreboot: board.cfg does not" + printf " exist for '%s'\n" ${board} return 1 fi if [ -f "resources/coreboot/${board}/seen" ]; then - printf "ERROR: download/coreboot: logical loop; '%s' board.cfg refers to another tree, which ultimately refers back to '%s'.\n" "${board}" "${board}" + printf "ERROR: download/coreboot: logical loop:" + printf " '%s' board.cfg refers to another tree," \ + ${board} + printf " which ultimately refers back to '%s'." \ + ${board} return 1 fi # This is to override $cbrevision and $cbtree - . "resources/coreboot/${board}/board.cfg" || touch ../build_error + . "resources/coreboot/${board}/board.cfg" \ + || touch ../build_error + if [ -f build_error ]; then - printf "ERROR: download/coreboot: problem sourcing %s/board.cfg\n" "${board}" + printf "ERROR: download/coreboot:" + printf " problem sourcing %s/board.cfg\n" "${board}" return 1 fi touch "resources/coreboot/${board}/seen" @@ -102,12 +105,16 @@ downloadfor() { board="${cbtree}" else if [ "${cbtree}" = "undefined" ]; then - printf "ERROR: download/coreboot: tree name undefined for '%s\n'" "${board}" + printf "ERROR: download/coreboot:" + printf " tree name undefined for '%s\n'" \ + ${board} return 1 fi if [ "${cbrevision}" = "undefined" ]; then - printf "ERROR: download/coreboot: commit ID undefined for '%s'\n" "${board}" + printf "ERROR: download/coreboot:" + printf " commit ID undefined for '%s'\n" \ + ${board} return 1 fi break @@ -117,7 +124,8 @@ downloadfor() { rm -f resources/coreboot/*/seen if [ -d "coreboot/${cbtree}" ]; then - printf "REMARK: download/coreboot: directory for '%s' already exists. Skipping setup.\n" "${cbtree}" + printf "REMARK: download/coreboot %s: exists. Skipping.\n" \ + ${cbtree} if [ "${cbtree}" != "${1}" ]; then printf "(for board: '${1}')\n" fi @@ -128,7 +136,8 @@ downloadfor() { mkdir "coreboot/" fi if [ ! -d coreboot ]; then - printf "ERROR: download/coreboot: directory not created. Check file system permissions\n" + printf "ERROR: download/coreboot: directory not created." + printf " Check file system permissions\n" return 1 fi @@ -140,42 +149,56 @@ downloadfor() { if [ ! -d coreboot ]; then printf "Download coreboot from upstream:\n" - git clone https://review.coreboot.org/coreboot || rm -Rf coreboot + git clone https://review.coreboot.org/coreboot \ + || rm -Rf coreboot if [ ! -d coreboot ]; then - printf "WARNING: Upstream failed. Trying backup github repository:\n" - git clone https://github.com/coreboot/coreboot.git || rm -Rf coreboot + printf "WARNING: Upstream failed. Trying backup:\n" + git clone https://github.com/coreboot/coreboot.git \ + || rm -Rf coreboot fi if [ ! -d coreboot ]; then - printf "ERROR: download/coreboot: Problem with git-clone. Network issue?\n" - cd ../; return 1 + printf "ERROR: download/coreboot:" + printf " Problem with git-clone. Network issue?\n" + cd ../ + return 1 fi else ( cd coreboot/; git pull || touch ../build_error ) if [ -f ../build_error ]; then - printf "ERROR: download/coreboot: Problem with git-pull. Network issue?\n" - cd ../; return 1 + printf "ERROR: download/coreboot:" + printf " Problem with git-pull. Network issue?\n" + cd ../ + return 1 fi fi cp -R coreboot "${cbtree}" || touch ../build_error if [ -d ../build_error ]; then - printf "ERROR: download/coreboot: Unable to copy directory. Check file system permissions or free space.\n" + printf "ERROR: download/coreboot: Unable to copy directory." + printf " Check file system permissions or free space.\n" rm -Rf "${cbtree}/" - cd ../; return 1 + cd ../ + return 1 fi cd ${cbtree}/ git reset --hard ${cbrevision} || touch ../../build_error if [ -f ../../build_error ]; then - printf "ERROR: download/coreboot: Unable to reset to commit ID/tag '%s' for board '%s' on tree '%s'\n" "${cbrevision}" "${1}" "${cbtree}" - cd ../../; return 1 + printf "ERROR: download/coreboot: Unable to reset to commit" + printf " ID/tag '%s' for board '%s' on tree '%s'\n" \ + ${cbrevision} ${1} ${cbtree} + cd ../../ + return 1 fi git submodule update --init --checkout || touch ../../build_error if [ -f ../../build_error ]; then - printf "ERROR: download/coreboot: Unable to update submodules for tree '%s'\n" "${cbtree}" - cd ../../; return 1 + printf "ERROR: download/coreboot:" + printf " Unable to update submodules for tree '%s'\n" \ + ${cbtree} + cd ../../ + return 1 fi for patch in ../../resources/coreboot/${cbtree}/patches/*.patch; do @@ -185,9 +208,12 @@ downloadfor() { git am "${patch}" || touch ../../build_error if [ -f ../../build_error ]; then - printf "ERROR: download/coreboot: Unable to apply patch '%s' for board '%s' on tree '%s'" "${patch}" "${1}" "${cbtree}" + printf "ERROR: download/coreboot: Unable to apply" + printf " patch '%s' for board '%s' on tree '%s'" \ + ${patch} ${1} ${cbtree} git am --abort - cd ../../; return 1 + cd ../../ + return 1 fi done @@ -197,7 +223,8 @@ downloadfor() { # extra.sh on a per-board basis # In fact, extra.sh can be used for anything you want. if [ -f "../../resources/coreboot/${board}/extra.sh" ]; then - "../../resources/coreboot/${board}/extra.sh" || touch ../../build_error + "../../resources/coreboot/${board}/extra.sh" \ + || touch ../../build_error if [ -f ../../build_error ]; then cd ../../; return 1 fi @@ -214,7 +241,9 @@ if [ $# -gt 0 ]; then for board in "${@}"; do rm -f resources/coreboot/*/seen downloadfor "${board}" - if [ -f build_error ]; then break; fi + if [ -f build_error ]; then + break + fi done else for board in resources/coreboot/*; do @@ -223,7 +252,9 @@ else continue fi downloadfor "${board##*/}" - if [ -f build_error ]; then break; fi + if [ -f build_error ]; then + break + fi done fi |