kit

kit
git clone https://git.ryansepassi.com/git/kit.git
Log | Files | Refs | README

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