diff options
Diffstat (limited to 'include/lib.sh')
-rwxr-xr-x | include/lib.sh | 180 |
1 files changed, 68 insertions, 112 deletions
diff --git a/include/lib.sh b/include/lib.sh index c2ad87ed..e6a998d2 100755 --- a/include/lib.sh +++ b/include/lib.sh @@ -7,92 +7,96 @@ export LC_COLLATE=C export LC_ALL=C _ua="Mozilla/5.0 (Windows NT 10.0; rv:91.0) Gecko/20100101 Firefox/91.0" +kbnotice="Insert a .gkb file from config/data/grub/keymap/ as keymap.gkb \ +if you want a custom keymap in GRUB; use cbfstool from elf/cbfstool." -tmpdir_was_set="y" -cbdir="src/coreboot/default" +cbelfdir="elf/.coreboot_nopayload_DO_NOT_FLASH" ifdtool="elf/ifdtool/default/ifdtool" cbfstool="elf/cbfstool/default/cbfstool" tmpgit="$PWD/tmp/gitclone" grubdata="config/data/grub" err="err_" -badcmd() -{ - errmsg="Bad command" - [ $# -gt 0 ] && errmsg="Bad command ($1)" - - dstr="See $projectname build system docs: ${projectsite}docs/maintain/" - [ -d "docs" ] && dstr="$dstr (local docs available via docs/)" - $err "$errmsg. $dstr" -} err_() { - printf "ERROR %s: %s\n" "$0" "$1" 1>&2 - exit 1 + printf "ERROR %s: %s\n" "$0" "$1" 1>&2; exit 1 } setvars() { - _setvars="" - [ $# -lt 2 ] && $err "setvars: too few arguments" - val="$1" && shift 1 - for var in $@; do + _setvars="" && [ $# -lt 2 ] && $err "setvars: too few arguments" + val="$1" && shift 1 && for var in $@; do _setvars="$var=\"$val\"; $_setvars" - done - printf "%s\n" "${_setvars% }" + done; printf "%s\n" "${_setvars% }" +} +chkvars() +{ + for var in $@; do + eval "[ -n "\${$var+x}" ] || \$err \"$var unset\"" + eval "[ -n "\$$var" ] || \$err \"$var unset\"" + done; return 0 } -eval "$(setvars "" xbmk_release tmpdir _nogit version board boarddir relname \ - versiondate threads projectname projectsite aur_notice cfgsdir datadir)" +eval `setvars "" _nogit board xbmk_parent versiondate projectsite projectname \ + aur_notice cfgsdir datadir version relname` -read -r projectname < projectname || : -read -r projectsite < projectsite || : +for fv in projectname projectsite version versiondate; do + eval "[ ! -f "$fv" ] || read -r $fv < \"$fv\" || :" +done; chkvars projectname projectsite -install_packages() +setcfg() { - [ $# -lt 2 ] && badcmd "fewer than two arguments" - [ -f "config/dependencies/$2" ] || badcmd "unsupported target" + [ $# -gt 1 ] && printf "e \"%s\" f missing && return %s;\n" "$1" "$2" + [ $# -gt 1 ] || \ + printf "e \"%s\" f not && %s \"Missing config\";\n" "$1" "$err" + printf ". \"%s\" || %s \"Could not read config\";\n" "$1" "$err" +} - . "config/dependencies/$2" || $err "! . config/dependencies/$2" +e() +{ + es_t="e" && [ $# -gt 1 ] && es_t="$2" + es2="already exists" + estr="[ -$es_t \"\$1\" ] || return 1" + [ $# -gt 2 ] && estr="[ -$es_t \"\$1\" ] && return 1" && es2="missing" + + eval "$estr" + printf "%s %s\n" "$1" "$es2" 1>&2 +} + +install_packages() +{ + [ $# -lt 2 ] && $err "fewer than two arguments" + eval `setcfg "config/dependencies/$2"` $pkg_add $pkglist || $err "Cannot install packages" [ -n "$aur_notice" ] && \ printf "You need AUR packages: %s\n" "$aur_notice" 1>&2; return 0 } -[ $# -gt 0 ] && [ "$1" = "dependencies" ] && install_packages $@ && return 0 +[ $# -gt 0 ] && [ "$1" = "dependencies" ] && install_packages $@ && exit 0 id -u 1>/dev/null 2>/dev/null || $err "suid check failed (id -u)" [ "$(id -u)" != "0" ] || $err "this command as root is not permitted" -[ -z "${TMPDIR+x}" ] && tmpdir_was_set="n" -if [ "$tmpdir_was_set" = "y" ]; then - [ "${TMPDIR%_*}" = "/tmp/xbmk" ] || tmpdir_was_set="n" -fi -if [ "$tmpdir_was_set" = "n" ]; then - [ -f "lock" ] && \ - $err "$PWD/lock exists. If a build isn't going, delete and re-run." +[ -z "${TMPDIR+x}" ] || [ "${TMPDIR%_*}" = "/tmp/xbmk" ] || unset TMPDIR +[ -n "${TMPDIR+x}" ] && export TMPDIR="$TMPDIR" + +if [ -z "${TMPDIR+x}" ]; then + [ -f "lock" ] && $err "$PWD/lock exists. Is a build running?" export TMPDIR="/tmp" - tmpdir="$(mktemp -d -t xbmk_XXXXXXXX)" - export TMPDIR="$tmpdir" + export TMPDIR="$(mktemp -d -t xbmk_XXXXXXXX)" touch lock || $err "cannot create 'lock' file" -else - export TMPDIR="$TMPDIR" - tmpdir="$TMPDIR" + xbmk_parent="y" fi # if "y": a coreboot target won't be built if target.cfg says release="n" # (this is used to exclude certain build targets from releases) -[ -z "${XBMK_RELEASE+x}" ] && xbmk_release="n" -[ -z "$xbmk_release" ] && xbmk_release="$XBMK_RELEASE" -[ "$xbmk_release" = "n" ] || [ "$xbmk_release" = "y" ] || xbmk_release="n" -export XBMK_RELEASE="$xbmk_release" +[ -z "${XBMK_RELEASE+x}" ] && export XBMK_RELEASE="n" +[ "$XBMK_RELEASE" = "y" ] || export XBMK_RELEASE="n" -[ -z "${XBMK_THREADS+x}" ] || threads="$XBMK_THREADS" -[ -z "$threads" ] && threads=1 -expr "X$threads" : "X-\{0,1\}[0123456789][0123456789]*$" \ - 1>/dev/null 2>/dev/null || threads=1 # user specified a non-integer -export XBMK_THREADS="$threads" +[ -z "${XBMK_THREADS+x}" ] && export XBMK_THREADS=1 +expr "X$XBMK_THREADS" : "X-\{0,1\}[0123456789][0123456789]*$" \ + 1>/dev/null 2>/dev/null || export XBMK_THREADS=1 # user gave a non-integer x_() { [ $# -lt 1 ] || $@ || $err "Unhandled non-zero exit: $@"; return 0 @@ -100,62 +104,28 @@ x_() { [ -e ".git" ] || [ -f "version" ] || printf "unknown\n" > version || \ $err "Cannot generate unknown version file" -[ -e ".git" ] || [ -f "versiondate" ] || printf "1716415872\n" > versiondate || \ - $err "Cannot generate unknown versiondate file" +[ -e ".git" ] || [ -f "versiondate" ] || printf "1716415872\n" > versiondate \ + || $err "Cannot generate unknown versiondate file" -[ ! -f version ] || read -r version < version || : version_="$version" [ ! -e ".git" ] || version="$(git describe --tags HEAD 2>&1)" || \ version="git-$(git rev-parse HEAD 2>&1)" || version="$version_" -[ ! -f versiondate ] || read -r versiondate < versiondate || : versiondate_="$versiondate" [ ! -e ".git" ] || versiondate="$(git show --no-patch --no-notes \ --pretty='%ct' HEAD)" || versiondate="$versiondate_" for p in projectname version versiondate projectsite; do - eval "[ -n \"\$$p\" ] || $err \"$p unset\"" + chkvars "$p" eval "x_ printf \"%s\\n\" \"\$$p\" > $p" done relname="$projectname-$version" export LOCALVERSION="-$projectname-${version%%-*}" -items() -{ - rval=1 - e "$1" d not && return 1 - for x in "$1/"*; do - # -e used because this is for files *or* directories - [ -e "$x" ] || continue - printf "%s\n" "${x##*/}" 2>/dev/null - rval=0 - done - return $rval -} - -scan_config() -{ - awkstr=" /\{.*$1.*}{/ {flag=1;next} /\}/{flag=0} flag { print }" - confdir="$2" - revfile="$(mktemp -t sources.XXXXXXXXXX)" - cat "$confdir/"* > "$revfile" || $err "$confdir: can't cat files" - while read -r line ; do - set $line 1>/dev/null 2>/dev/null || : - if [ "${1%:}" = "depend" ]; then - depend="$depend $2" - else - eval "${1%:}=\"$2\"" - fi - done << EOF - $(eval "awk '$awkstr' \"$revfile\"") -EOF - rm -f "$revfile" || $err "scan_config: Cannot remove tmpfile" -} - check_defconfig() { [ -d "$1" ] || $err "Target '$1' not defined." for x in "$1"/config/*; do [ -f "$x" ] && printf "%s\n" "$x" && return 1 - done + done; return 0 } remkdir() @@ -164,12 +134,6 @@ remkdir() mkdir -p "$1" || $err "remkdir: !mkdir -p \"$1\"" } -git_err() -{ - printf "You need to set git name/email, like so:\n%s\n\n" "$1" 1>&2 - $err "Git name/email not configured" -} - mkrom_tarball() { printf "%s\n" "$version" > "$1/version" || $err "$1 !version" @@ -185,8 +149,7 @@ mktarball() [ "${2%/*}" = "$2" ] || \ mkdir -p "${2%/*}" || $err "mk, !mkdir -p \"${2%/*}\"" printf "\nCreating archive: %s\n\n" "$2" - tar -c "$1" | xz -T$threads -9e > "$2" || \ - $err "mktarball 2, $1" + tar -c "$1" | xz -T$XBMK_THREADS -9e > "$2" || $err "mktarball 2, $1" mksha512sum "$2" "${2##*/}.sha512" } @@ -194,8 +157,7 @@ mksha512sum() { ( [ "${1%/*}" != "$1" ] && x_ cd "${1%/*}" - sha512sum ./"${1##*/}" >> "$2" || \ - $err "!sha512sum \"$1\" > \"$2\"" + sha512sum ./"${1##*/}" >> "$2" || $err "!sha512sum \"$1\" > \"$2\"" ) || $err "failed to create tarball checksum" } @@ -208,26 +170,13 @@ rmgit() ) || $err "Cannot remove .git/.gitmodules in $1" } -e() -{ - es_t="e" - [ $# -gt 1 ] && es_t="$2" - es2="already exists" - estr="[ -$es_t \"\$1\" ] || return 1" - [ $# -gt 2 ] && estr="[ -$es_t \"\$1\" ] && return 1" && es2="missing" - - eval "$estr" - printf "%s %s\n" "$1" "$es2" 1>&2 -} - # return 0 if project is single-tree, otherwise 1 # e.g. coreboot is multi-tree, so 1 singletree() { for targetfile in "config/${1}/"*/target.cfg; do - [ -e "$targetfile" ] || continue - [ -f "$targetfile" ] && return 1 - done + [ -e "$targetfile" ] && [ -f "$targetfile" ] && return 1 + done; return 0 } download() @@ -252,3 +201,10 @@ vendor_checksum() printf "Bad checksum for file: %s\n" "$2" 1>&2 rm -f "$2" || : } + +cbfs() +{ + ccmd="add-payload" && [ $# -gt 3 ] && ccmd="add" + lzma="-c lzma" && [ $# -gt 3 ] && lzma="-t raw" + x_ "$cbfstool" "$1" $ccmd -f "$2" -n "$3" $lzma +} |