#!/bin/bash #set -x #set -e COMMON_DIR="$(cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd)" PROJECT_DIR="$(pwd)" fw_version="$(cat "$PROJECT_DIR/src/config.def.h" | grep "^#define FW_VERSION" | awk '{print $3}')" header="$PROJECT_DIR/src/static.h" source="$PROJECT_DIR/src/static.cpp" [ -f "$header" ] && rm "$header" [ -f "$source" ] && rm "$source" is_minifyable() { local ext="$1" [ "$ext" = "html" ] || [ "$ext" = "css" ] || [ "$ext" = "js" ] } minify() { local ext="$1" local bin="$(realpath "$COMMON_DIR"/../../tools/minify.js)" "$bin" --type "$ext" } # .h header cat <> "$header" /** * This file is autogenerated with make_static.sh script */ #pragma once #include namespace homekit::files { typedef struct { size_t size; const uint8_t* content; } StaticFile; EOF cat <> "$source" /** * This file is autogenerated with make_static.sh script */ #include "static.h" namespace homekit::files { EOF # loop over files for ext in html js css ico; do for f in "$COMMON_DIR"/static/*.$ext; do filename="$(basename "$f")" echo "processing ${filename}..." filename="${filename/./_}" # write .h echo "extern const StaticFile $filename;" >> "$header" # write .c { echo "static const uint8_t ${filename}_content[] PROGMEM = {" cat "$f" | ( [ "$ext" = "html" ] && sed "s/{version}/$fw_version/" || cat ) | ( is_minifyable "$ext" && minify "$ext" || cat ) | gzip | xxd -ps -c 16 | sed 's/.\{2\}/0x&, /g' | sed 's/^/ /' | sed 's/[ \t]*$//' echo "};" echo "const StaticFile $filename PROGMEM = {(sizeof(${filename}_content)/sizeof(${filename}_content[0])), ${filename}_content};" echo "" } >> "$source" done done # end of homekit::files ( echo ""; echo "}" ) >> "$header" echo "}" >> "$source"