gen_release_config.sh (1553B)
1 #!/bin/sh 2 # Generate the driver-only compiled update-channel configuration. The output is 3 # a C header included after driver.h, so it may declare KitReleaseKey values. 4 5 set -eu 6 7 [ "$#" -ge 2 ] || { 8 printf 'usage: gen_release_config.sh OUT INDEX_URL [PUBKEY ...]\n' >&2 9 exit 2 10 } 11 12 out=$1 13 index_url=$2 14 shift 2 15 tmp="$out.$$.tmp" 16 17 escape_line() { 18 LC_ALL=C awk '{ 19 gsub(/\\/, "\\\\") 20 gsub(/\"/, "\\\"") 21 printf " \"%s\\n\"\n", $0 22 }' 23 } 24 25 escape_one_line() { 26 printf '%s\n' "$1" | LC_ALL=C awk '{ 27 gsub(/\\/, "\\\\") 28 gsub(/\"/, "\\\"") 29 printf "\"%s\"", $0 30 }' 31 } 32 33 mkdir -p "$(dirname "$out")" 34 { 35 printf '#ifndef KIT_GENERATED_RELEASE_CONFIG_H\n' 36 printf '#define KIT_GENERATED_RELEASE_CONFIG_H\n\n' 37 printf 'static const char kit_generated_update_index_url[] = ' 38 escape_one_line "$index_url" 39 printf ';\n\n' 40 printf '#define KIT_GENERATED_RELEASE_KEY_COUNT %su\n' "$#" 41 if [ "$#" -gt 0 ]; then 42 printf 'static const KitReleaseKey kit_generated_release_keys[] = {\n' 43 n=0 44 for key in "$@"; do 45 n=$((n + 1)) 46 [ -f "$key" ] || { 47 printf 'release public key is not a file: %s\n' "$key" >&2 48 exit 1 49 } 50 printf ' {"embedded release key %s",\n' "$n" 51 escape_line < "$key" 52 printf ' },\n' 53 done 54 printf '};\n' 55 fi 56 printf '\n#endif\n' 57 } > "$tmp" 58 59 if [ -f "$out" ] && cmp -s "$tmp" "$out"; then 60 rm -f "$tmp" 61 else 62 mv "$tmp" "$out" 63 fi