diff options
-rw-r--r-- | include/git.sh | 4 | ||||
-rw-r--r-- | include/lib.sh | 23 | ||||
-rw-r--r-- | include/rom.sh | 8 | ||||
-rw-r--r-- | include/vendor.sh | 63 | ||||
-rwxr-xr-x | mk | 61 |
5 files changed, 56 insertions, 103 deletions
diff --git a/include/git.sh b/include/git.sh index 30f9729a..42b04010 100644 --- a/include/git.sh +++ b/include/git.sh @@ -34,8 +34,8 @@ fetch_project() clone_project for x in config/git/*; do - [ -d "$x" ] && nuke "${x##*/}" "src/${x##*/}" 2>/dev/null - done; return 0 + [ -d "$x" ] && nuke "${x##*/}" "src/${x##*/}" 2>/dev/null; : + done; : } clone_project() diff --git a/include/lib.sh b/include/lib.sh index ac0003f0..cb8e0303 100644 --- a/include/lib.sh +++ b/include/lib.sh @@ -50,7 +50,7 @@ chkvars() } eval "`setvars "" _nogit board reinstall versiondate aur_notice configdir \ - datadir version relname xbmk_parent`" + datadir version relname`" for fv in version versiondate; do eval "[ ! -f \".$fv\" ] || read -r $fv < \".$fv\" || :" @@ -128,19 +128,21 @@ if [ -z "${TMPDIR+x}" ]; then export TMPDIR="/tmp" export TMPDIR="$(mktemp -d -t xbmk_XXXXXXXX)" touch lock || $err "cannot create 'lock' file" - rm -Rf "$XBMK_CACHE/xbmkpath" "$XBMK_CACHE/gnupath" || \ - $err "cannot remove xbmkpath" - mkdir -p "$XBMK_CACHE/gnupath" "$XBMK_CACHE/xbmkpath" || \ - $err "cannot create gnupath" - export PATH="$XBMK_CACHE/xbmkpath:$XBMK_CACHE/gnupath:$PATH" || \ - $err "Can't create gnupath/xbmkpath" + x_ rm -Rf "$XBMK_CACHE/xbmkpath" "$XBMK_CACHE/gnupath" + x_ mkdir -p "$XBMK_CACHE/gnupath" "$XBMK_CACHE/xbmkpath" + export PATH="$XBMK_CACHE/xbmkpath:$XBMK_CACHE/gnupath:$PATH" ( # set up python v3.x in PATH, in case it's not set up correctly. # see code above that detected the correct python3 command. cd "$XBMK_CACHE/xbmkpath" || $err "can't cd $XBMK_CACHE/xbmkpath" x_ ln -s "`command -v "$python"`" python ) || $err "Can't set up python symlink in $XBMK_CACHE/xbmkpath" - xbmk_parent="y" + + xbmk_rval=0 + ./mk "$@" || xbmk_rval=1 + rm -Rf "$TMPDIR" || xbmk_rval=1 + rm -f lock || xbmk_rval=1 + exit $xbmk_rval fi # if "y": a coreboot target won't be built if target.cfg says release="n" @@ -165,7 +167,7 @@ versiondate_="$versiondate" --pretty='%ct' HEAD)" || versiondate="$versiondate_" for p in version versiondate; do chkvars "$p" - eval "x_ printf \"%s\\n\" \"\$$p\" > .$p" + eval "printf \"%s\\n\" \"\$$p\" > .$p || $err \"can't save $p\"" done relname="$projectname-$version" export LOCALVERSION="-$projectname-${version%%-*}" @@ -236,8 +238,7 @@ download() dl_fail="n" # 1 url, 2 url backup, 3 destination, 4 checksum vendor_checksum "$4" "$cached" 2>/dev/null && dl_fail="y" [ "$dl_fail" = "n" ] && e "$3" f && return 0 - mkdir -p "${3%/*}" "$XBMK_CACHE/file" || \ - $err "!mkdir '$3' '$XBMK_CACHE/file'" + x_ mkdir -p "${3%/*}" "$XBMK_CACHE/file" for url in "$1" "$2"; do [ "$dl_fail" = "n" ] && break [ -z "$url" ] && continue diff --git a/include/rom.sh b/include/rom.sh index f2609bba..7e2271f1 100644 --- a/include/rom.sh +++ b/include/rom.sh @@ -63,13 +63,12 @@ mkpayload_grub() eval "`setvars "" grub_modules grub_install_modules`" $dry eval "`setcfg "$grubdata/module/$tree"`" $dry x_ rm -f "$srcdir/grub.elf"; $dry \ - "$srcdir/grub-mkstandalone" --grub-mkimage="$srcdir/grub-mkimage" \ + x_ "$srcdir/grub-mkstandalone" --grub-mkimage="$srcdir/grub-mkimage" \ -O i386-coreboot -o "$srcdir/grub.elf" -d "${srcdir}/grub-core/" \ --fonts= --themes= --locales= --modules="$grub_modules" \ --install-modules="$grub_install_modules" \ "/boot/grub/grub_default.cfg=${srcdir}/.config" \ - "/boot/grub/grub.cfg=$grubdata/memdisk.cfg" || \ - $err "$tree: cannot build grub.elf"; : + "/boot/grub/grub.cfg=$grubdata/memdisk.cfg"; : } mkvendorfiles() @@ -285,6 +284,5 @@ mkcoreboottar() [ "$XBMK_RELEASE" = "y" ] || return 0 [ "$release" != "n" ] || return 0 $dry mkrom_tarball "bin/$target" - $dry ./mk inject "bin/${relname}_${target}.tar.xz" nuke || \ - $err "Can't nuke vendorfiles in 'bin/${relname}_$target.tar.xz'"; : + $dry x_ ./mk inject "bin/${relname}_${target}.tar.xz" nuke; : } diff --git a/include/vendor.sh b/include/vendor.sh index d98bde7e..ceea429a 100644 --- a/include/vendor.sh +++ b/include/vendor.sh @@ -124,8 +124,7 @@ fetch() rm -Rf "${_dl}_extracted" || $err "!rm ${_ul}_extracted. $dontflash" e "$_dest" f && return 0 - mkdir -p "${_dest%/*}" || \ - $err "mkdirs: !mkdir -p ${_dest%/*} - $dontflash" + x_ mkdir -p "${_dest%/*}" remkdir "$appdir" extract_archive "$_dl" "$appdir" "$dl_type" || \ [ "$dl_type" = "e6400vga" ] || \ @@ -165,8 +164,7 @@ extract_intel_me_bruteforce() e "$_metmp" f && return 0 [ -z "$sdir" ] && sdir="$(mktemp -d)" - mkdir -p "$sdir" || \ - $err "extract_intel_me: !mkdir -p \"$sdir\" - $dontflash" + x_ mkdir -p "$sdir" set +u +e ( @@ -192,7 +190,7 @@ extract_intel_me_bruteforce() cdir="$1"; [ "${cdir#/a}" != "$cdir" ] && cdir="${cdir#/}" cd "$cdir" || : done - ) + ) || : rm -Rf "$sdir" || $err "extract_intel_me: !rm -Rf $sdir - $dontflash" } @@ -200,11 +198,10 @@ apply_me11_deguard_mod() { ( x_ cd src/deguard/ - ./finalimage.py --delta "data/delta/$ME11delta" \ + x_ ./finalimage.py --delta "data/delta/$ME11delta" \ --version "$ME11version" \ --pch "$ME11pch" --sku "$ME11sku" --fake-fpfs data/fpfs/zero \ - --input "$_metmp" --output "$_me" || \ - $err "Error running deguard for $_me - $dontflash" + --input "$_metmp" --output "$_me" ) || $err "Error running deguard for $_me - $dontflash" } @@ -230,8 +227,7 @@ decat_fspfd() _fspdir="$2" _fspsplit="$cbdir/3rdparty/fsp/Tools/SplitFspBin.py" - $python "$_fspsplit" split -f "$_fspfd" -o "$_fspdir" -n "Fsp.fd" || \ - $err "decat_fspfd '$1' '$2': Can't de-concatenate; $dontflash"; : + x_ $python "$_fspsplit" split -f "$_fspfd" -o "$_fspdir" -n "Fsp.fd" } extract_kbc1126ec() @@ -273,8 +269,7 @@ extract_e6400vga() $err "extract_e6400vga: can't extract bios.bin - $dontflash" "$e6400_unpack" bios.bin || printf "TODO: fix dell extract util\n" ) || $err "can't extract e6400 vga rom - $dontflosh" - cp "$appdir/$E6400_VGA_romname" "$_dest" || \ - $err "extract_e6400vga $board: can't cp $_dest - $dontflash"; : + x_ cp "$appdir/$E6400_VGA_romname" "$_dest" } extract_sch5545ec() @@ -287,8 +282,7 @@ extract_sch5545ec() _sch5545ec_fw="$_sch5545ec_fw/0 Raw section/body.bin" # <-- this! "$uefiextract" "$_bios" || $err "sch5545 !extract - $dontflash" - cp "$_sch5545ec_fw" "$_dest" || \ - $err "$_dest: !sch5545 copy - $dontflash"; : + x_ cp "$_sch5545ec_fw" "$_dest" } # Lenovo ThunderBolt firmware updates: @@ -303,14 +297,11 @@ extract_tbfw() while read -r f; do [ -f "$f" ] || continue [ -L "$f" ] && continue - cp "$f" "tmp/tb.bin" || \ - $err "extract_tbfw $_dest: Can't copy TBT.bin - $dontflash" + x_ cp "$f" "tmp/tb.bin" break done < "tmp/tb.txt" - dd if=/dev/null of=tmp/tb.bin bs=1 seek=$TBFW_size || \ - $err "extract_tbfw $_dest: Can't pad TBT.bin - $dontflash" - cp "tmp/tb.bin" "$_dest" || \ - $err "extract_tbfw $_dest: copy error - $dontflash "; : + x_ dd if=/dev/null of=tmp/tb.bin bs=1 seek=$TBFW_size + x_ cp "tmp/tb.bin" "$_dest" } extract_fspm() @@ -326,8 +317,7 @@ extract_fsps() # this copies the fsp s/m; re-base is handled by ./mk inject copy_fsp() { - cp "$appdir/Fsp_$1.fd" "$_dest" || \ - $err "copy_fsp: Can't copy $1 to $_dest - $dontflash"; : + x_ cp "$appdir/Fsp_$1.fd" "$_dest" } fail_inject() @@ -337,7 +327,7 @@ fail_inject() printf "\n\n%s\n\n" "$dontflash" 1>&2 printf "WARNING: File '%s' was NOT modified.\n\n" "$archive" 1>&2 printf "Please MAKE SURE vendor files are inserted before flashing\n\n" - fail "$1" + err_ "$1" } vendor_inject() @@ -374,7 +364,9 @@ vendor_inject() readcfg && need_files="y" if [ "$need_files" = "y" ] || [ -n "$new_mac" ]; then - [ "$nukemode" = "nuke" ] || x_ ./mk download "$board" + if [ "$nukemode" != "nuke" ] && [ "$need_files" = "y" ]; then + x_ ./mk download "$board" + fi patch_release_roms fi [ "$need_files" != "y" ] && printf \ @@ -470,6 +462,7 @@ patch_release_roms() x_ tar -xf "$archive" -C "${tmpromdir%"/bin/$board"}" for _hashes in $hashfiles; do + [ "$need_files" = "y" ] || break e "$tmpromdir/$_hashes" f && has_hashes="y" && \ hashfile="$_hashes" && break; : done @@ -493,17 +486,18 @@ patch_release_roms() "$vguide" > "$tmpromdir/README.md" || : else printf "Skipping vendorfiles on '%s'\n" "$archive" 1>&2 + need_files="n" fi ( + [ "$need_files" = "y" ] || exit 0 cd "$tmpromdir" || $err "patch '$archive': can't cd $tmpromdir" # NOTE: For compatibility with older rom releases, defer to sha1 if [ "$has_hashes" = "y" ] && [ "$nukemode" != "nuke" ]; then sha512sum --status -c "$hashfile" || \ sha1sum --status -c "$hashfile" || \ $err "'$archive' -> Can't verify vendor hashes. $dontflash" - rm -f "$hashfile" || \ - $err "$archive: Can't rm hashfile. $dontflash" + x_ rm -f "$hashfile" fi ) || $err "'$archive' -> Can't verify vendor hashes. $dontflash" @@ -513,8 +507,7 @@ patch_release_roms() [ "$xchanged" = "y" ] || rm -Rf "$tmpromdel" || : [ "$xchanged" = "y" ] || return 0 ( - cd "${tmpromdir%"/bin/$board"}" || \ - $err "Can't cd '${tmpromdir%"/bin/$board"}'; $dontflash" + x_ cd "${tmpromdir%"/bin/$board"}" mkrom_tarball "bin/$board" ) || $err "Cannot re-generate '$archive' - $dontflash" @@ -538,7 +531,7 @@ process_release_rom() _xromnew="${_xrom%/*}/${_xromname#"$vfix"}" stat -c '%s' "$_xrom" > "tmp/rom.size" || \ - $err "$_xrom: Can't get rom size. $dontflash" + $err "$_xrom: Can't resize '$_xrom' (out: tmp/rom.size)" read -r xromsize < "tmp/rom.size" || \ $err "$_xrom: Can't read rom size. $dontflash" @@ -551,8 +544,7 @@ process_release_rom() [ $xromsize -lt 524288 ] && \ $err "$_xrom size too small; likely not a rom. $dontflash" - dd if="$_xrom" of="$_xromnew" bs=$xromsize count=1 || \ - $err "$_xrom: Can't resize. $dontflash" + x_ dd if="$_xrom" of="$_xromnew" bs=$xromsize count=1 rm -f "$_xrom" || $err "Can't rm $_xrom - $dontflash" _xrom="$_xromnew" @@ -567,7 +559,7 @@ process_release_rom() # Rename the file, prefixing a warning saying not to flash cat "$_xrom" tmp/zero.1b > "${_xrom%/*}/$vfix${_xrom##*/}" || \ $err "'$archive' -> can't pad/rename '$_xrom'. $dontflash" - rm -f "$_xrom" || $err "'$archive' -> can't rm '$_xrom'. $dontflash" + x_ rm -f "$_xrom" } patch_rom() @@ -634,13 +626,8 @@ inject() $err "failed: inject '$_t' '$_dest' on '$rom'" [ "$nukemode" != "nuke" ] || "$ifdtool" $ifdprefix --nuke $_t \ "$rom" -O "$rom" || $err "$rom: !nuke IFD/$_t" - xchanged="y" - return 0 elif [ "$nukemode" = "nuke" ]; then - "$cbfstool" "$rom" remove -n "$cbfsname" || \ - $err "inject $rom: can't remove $cbfsname" - xchanged="y" - return 0 + x_ "$cbfstool" "$rom" remove -n "$cbfsname" elif [ "$_t" = "stage" ]; then # the only stage we handle is refcode x_ mkdir -p tmp x_ rm -f "tmp/refcode" @@ -17,7 +17,6 @@ fi . "include/mrc.sh" eval "`setvars "" vdir src_dirname srcdir mode xp ser`" -err="fail" main() { @@ -31,18 +30,12 @@ main() case "$1" in version) printf "%s\nWebsite: %s\n" "$relname" "$projectsite" ;; - release) + release|download|inject) + cmd="vendor_$1" && [ "$1" = "release" ] && cmd="mkrelease" shift 1 - mkrelease "$@" ;; - inject) - shift 1 - vendor_inject "$@" ;; - download) - shift 1 - vendor_download "$@" ;; - -*) - rval=1 ;; - *) $err "bad command" + $cmd "$@" ;; + -*) rval=1 ;; + *) $err "bad command" ;; esac set -u -e # some commands disable them. turn them on! return $rval @@ -119,23 +112,7 @@ build_release() rm -Rf "$srcdir" || $err "!rm -Rf $srcdir" } -fail() -{ - tmp_cleanup || printf "WARNING: can't rm tmpfiles: %s\n" "$TMPDIR" 1>&2 - err_ "${1}" -} - -tmp_cleanup() -{ - [ "$xbmk_parent" = "y" ] || return 0 - [ "$TMPDIR" = "/tmp" ] || rm -Rf "$TMPDIR" || return 1 - rm -f lock || return 1 -} - -if main "$@"; then - tmp_cleanup || err_ "can't rm TMPDIR upon non-zero exit: $TMPDIR" - exit 0 -fi +main "$@" && exit 0 # what follows was formerly script/trees, whose main() is now trees() @@ -151,10 +128,6 @@ trees() { flags="f:b:m:u:c:x:s:l:n:d:" - [ $# -lt 1 ] && $err "No argument provided" - [ "${1%-*}" = "$1" ] && $err \ - "First argument must be a flag ($flags)" - while getopts $flags option; do [ -n "$_f" ] && $err "only one flag is permitted" _f="$1" @@ -311,14 +284,13 @@ build_dependencies() bd_t="${bd##*/}" [ -z "$bd_p" ] && $dry $err "$project/$tree: !bd '$bd'" [ "${bd##*/}" = "$bd" ] && bd_t="" - [ -z "$bd_p" ] || $dry ./mk -b $bd_p $bd_t \ - || $err "!mk $project/$tree $bd_p/$bd_t"; : + [ -z "$bd_p" ] || $dry x_ ./mk -b $bd_p $bd_t; : done; : } check_project_hashes() { - mkdir -p "$XBMK_CACHE/hash" || $err "!mkdir '$XBMK_CACHE/hash'" + x_ mkdir -p "$XBMK_CACHE/hash" old_pjhash="" [ ! -f "$XBMK_CACHE/hash/$project$tree" ] || \ read -r old_pjhash < "$XBMK_CACHE/hash/$project$tree" @@ -337,7 +309,7 @@ check_project_hashes() $err "!sort project tmp/list" while read -r rmchk; do - [ ! -f "$rmchk" ] || sha512sum "$rmchk" | awk \ + [ ! -f "$rmchk" ] || x_ sha512sum "$rmchk" | awk \ '{print $1}' >> "$TMPDIR/project.hash" || $err "!h $rmchk" done < "$TMPDIR/project.list" @@ -369,8 +341,7 @@ check_cross_compiler() xfix="${_xarch%-*}" && [ "$xfix" = "x86_64" ] && xfix="x64" # match gnat-X to gcc - check_gnu_path gcc gnat || check_gnu_path gnat gcc || \ - $err "Cannot match host GCC/GNAT versions" + check_gnu_path gcc gnat || x_ check_gnu_path gnat gcc # sometimes buildgcc fails for like no reason. try twice. make -C "$cbdir" crossgcc-$xfix $xgccargs || \ @@ -476,7 +447,7 @@ run_make_command() $dry check_autoconf "$srcdir" $dry check_makefile "$srcdir" || return 1 - $dry make -C "$srcdir" $mode -j$XBMK_THREADS $makeargs || $err "!$mode" + $dry x_ make -C "$srcdir" $mode -j$XBMK_THREADS $makeargs mkhelp "$mkhelper" [ "$mode" != "clean" ] || \ @@ -486,10 +457,8 @@ run_make_command() check_cmake() { [ -z "$cmakedir" ] || $dry check_makefile "$1" || cmake -B "$1" \ - "$1/$cmakedir" || $dry check_makefile "$1" || $err \ - "$1: !cmk $cmakedir" - [ -z "$cmakedir" ] || $dry check_makefile "$1" || \ - $err "check_cmake $1: can't generate Makefile"; : + "$1/$cmakedir" || $dry x_ check_makefile "$1" + [ -z "$cmakedir" ] || $dry x_ check_makefile "$1"; : } check_autoconf() @@ -510,7 +479,7 @@ check_makefile() mkhelp() { - [ -z "$1" ] || [ -n "$mode" ] || "$1" || $err "mkhelp: !$1"; : + [ -z "$1" ] || [ -n "$mode" ] || eval "$1" || $err "mkhelp: !$1"; : } copy_elf() @@ -525,5 +494,3 @@ if trees "$@"; then . "$mkhelpercfg" $cmd fi - -tmp_cleanup || err_ "can't rm TMPDIR upon non-zero exit: $TMPDIR" |