lib.sh 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. # SPDX-License-Identifier: GPL-3.0-only
  2. # Copyright (c) 2022 Caleb La Grange <thonkpeasant@protonmail.com>
  3. # Copyright (c) 2022 Ferass El Hafidi <vitali64pmemail@protonmail.com>
  4. # Copyright (c) 2020-2025 Leah Rowe <leah@libreboot.org>
  5. # Copyright (c) 2025 Alper Nebi Yasak <alpernebiyasak@gmail.com>
  6. cbfstool="elf/coreboot/default/cbfstool"
  7. rmodtool="elf/coreboot/default/rmodtool"
  8. remkdir()
  9. {
  10. x_ rm -Rf "$@"
  11. x_ mkdir -p "$@"
  12. }
  13. mkrom_tarball()
  14. {
  15. update_xbmkver "$1"
  16. mktarball "$1" "${1%/*}/${relname}_${1##*/}.tar.xz"
  17. x_ rm -Rf "$1"
  18. }
  19. update_xbmkver()
  20. {
  21. printf "%s\n" "$version" > "$1/.version" || err "$1 !version"; :
  22. printf "%s\n" "$versiondate" > "$1/.versiondate" || err "$1 !vdate"; :
  23. }
  24. mktarball()
  25. {
  26. printf "Creating tar archive '%s' from directory '%s'\n" "$2" "$1"
  27. [ "${2%/*}" = "$2" ] || x_ mkdir -p "${2%/*}"
  28. x_ tar -c "$1" | xz -T$XBMK_THREADS -9e > "$2" || err "mktarball2, $1"
  29. }
  30. e()
  31. {
  32. es_t="e" && [ $# -gt 1 ] && es_t="$2"
  33. es2="already exists"
  34. estr="[ -$es_t \"\$1\" ] || return 1"
  35. [ $# -gt 2 ] && estr="[ -$es_t \"\$1\" ] && return 1" && es2="missing"
  36. eval "$estr"
  37. printf "%s %s\n" "$1" "$es2" 1>&2
  38. }
  39. setvars()
  40. {
  41. _setvars=""
  42. if [ $# -lt 2 ]; then
  43. printf "err \"setvars: too few args\\n\""
  44. return 0
  45. fi
  46. val="$1"
  47. shift 1
  48. while [ $# -gt 0 ]; do
  49. printf "%s=\"%s\"\n" "$1" "$val"
  50. shift 1
  51. done
  52. }
  53. setcfg()
  54. {
  55. [ $# -gt 1 ] && printf "e \"%s\" f missing && return %s;\n" "$1" "$2"
  56. [ $# -gt 1 ] || \
  57. printf "e \"%s\" f not && err \"Missing config\";\n" "$1"
  58. printf ". \"%s\" || err \"Could not read config\";\n" "$1"
  59. }
  60. chkvars()
  61. {
  62. while [ $# -gt 0 ]; do
  63. eval "[ -n \"\${$1+x}\" ] || err \"$1 unset\""
  64. eval "[ -n \"\$$1\" ] || err \"$1 unset\"; shift 1; :"
  65. done; :
  66. }
  67. # return 0 if project is single-tree, otherwise 1
  68. # e.g. coreboot is multi-tree, so 1
  69. singletree()
  70. {
  71. ( fx_ "eval exit 1 && err" find "config/$1/"*/ -type f \
  72. -name "target.cfg" ) || return 1; :
  73. }
  74. findpath()
  75. {
  76. [ $# -gt 0 ] || err "findpath: No arguments provided"
  77. while [ $# -gt 0 ]; do
  78. found="`readlink -f "$1" 2>/dev/null`" || return 1; :
  79. [ -n "$found" ] || found="`realpath "$1" 2>/dev/null`" || \
  80. return 1; :
  81. printf "%s\n" "$found"
  82. shift 1
  83. done
  84. }
  85. fx_()
  86. {
  87. fd="`mktemp`" && x_ rm -f "$fd" && x_ touch "$fd"
  88. xx="$1" && shift 1
  89. "$@" 2>/dev/null | sort 1>"$fd" 2>/dev/null || err "FATAL: !sort fx_"
  90. dx_ "$xx" "$fd" || break
  91. x_ rm -f "$fd"
  92. }
  93. dx_()
  94. {
  95. [ ! -f "$2" ] || while read -r fx; do
  96. $1 "$fx" || return 1; :
  97. done < "$2" || err "dx_ $*: cannot read '$2'"; :
  98. }
  99. x_()
  100. {
  101. [ $# -lt 1 ] || [ -n "$1" ] || err "Empty first arg: x_ $(echo "$@")"
  102. [ $# -lt 1 ] || "$@" || err "Unhandled error for: $(echo "$@")"; :
  103. }
  104. err()
  105. {
  106. [ $# -lt 1 ] || printf "ERROR %s: %s\n" "$0" "$1" 1>&2 || :
  107. exit 1
  108. }