88 lines
1.7 KiB
Bash
Executable File
88 lines
1.7 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
#set -x
|
|
#set -e
|
|
|
|
DIR="$(dirname "$(realpath "$0")")"
|
|
|
|
fw_version="$(cat "$DIR/src/config.def.h" | grep "^#define FW_VERSION" | awk '{print $3}')"
|
|
header="$DIR/src/static.h"
|
|
source="$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 "$DIR"/../../tools/minify.js)"
|
|
"$bin" --type "$ext"
|
|
}
|
|
|
|
# .h header
|
|
cat <<EOF >> "$header"
|
|
/**
|
|
* This file is autogenerated with make_static.sh script
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <stdlib.h>
|
|
|
|
namespace homekit::files {
|
|
|
|
typedef struct {
|
|
size_t size;
|
|
const uint8_t* content;
|
|
} StaticFile;
|
|
|
|
EOF
|
|
|
|
cat <<EOF >> "$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 "$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/^/ /'
|
|
|
|
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"
|