76 lines
1.9 KiB
Bash
76 lines
1.9 KiB
Bash
#!/usr/bin/env sh
|
|
|
|
set -eu
|
|
|
|
SCRIPT_DIR="$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)"
|
|
UPSTREAM_DIR="$SCRIPT_DIR/upstream"
|
|
OUT_DIR="$SCRIPT_DIR/../../pb"
|
|
MODULE_IMPORT="git.maze.io/go/ham/protocol/meshtastic/pb"
|
|
|
|
if ! command -v protoc >/dev/null 2>&1; then
|
|
echo "error: protoc not found in PATH" >&2
|
|
exit 1
|
|
fi
|
|
|
|
GOBIN_DIR="$(go env GOPATH 2>/dev/null)/bin"
|
|
if [ -n "$GOBIN_DIR" ] && [ -d "$GOBIN_DIR" ]; then
|
|
PATH="$GOBIN_DIR:$PATH"
|
|
export PATH
|
|
fi
|
|
|
|
if ! command -v protoc-gen-go >/dev/null 2>&1; then
|
|
echo "error: protoc-gen-go not found in PATH" >&2
|
|
exit 1
|
|
fi
|
|
|
|
if [ ! -d "$UPSTREAM_DIR/meshtastic" ]; then
|
|
echo "error: upstream proto directory not found: $UPSTREAM_DIR/meshtastic" >&2
|
|
exit 1
|
|
fi
|
|
|
|
PROTO_FILES=$(find "$UPSTREAM_DIR" -type f -name '*.proto' | LC_ALL=C sort)
|
|
|
|
if [ -z "$PROTO_FILES" ]; then
|
|
echo "error: no proto files found in $UPSTREAM_DIR" >&2
|
|
exit 1
|
|
fi
|
|
|
|
M_OPTS=""
|
|
for file in $PROTO_FILES; do
|
|
rel="${file#$UPSTREAM_DIR/}"
|
|
M_OPTS="$M_OPTS --go_opt=M$rel=$MODULE_IMPORT"
|
|
done
|
|
|
|
rm -rf "$OUT_DIR"/*.pb.go
|
|
mkdir -p "$OUT_DIR"
|
|
|
|
# shellcheck disable=SC2086
|
|
protoc \
|
|
-I "$UPSTREAM_DIR" \
|
|
--go_out="$OUT_DIR" \
|
|
--go_opt=paths=source_relative \
|
|
$M_OPTS \
|
|
$(printf '%s ' $PROTO_FILES)
|
|
|
|
# Flatten meshtastic/ subdirectory into pb/ root
|
|
if [ -d "$OUT_DIR/meshtastic" ]; then
|
|
mv "$OUT_DIR/meshtastic"/*.pb.go "$OUT_DIR/"
|
|
rmdir "$OUT_DIR/meshtastic"
|
|
fi
|
|
|
|
# Fix package name from 'generated' to 'pb'
|
|
for pbfile in "$OUT_DIR"/*.pb.go; do
|
|
if [ -f "$pbfile" ]; then
|
|
sed -i.bak 's/^package generated$/package pb/' "$pbfile"
|
|
rm -f "$pbfile.bak"
|
|
fi
|
|
done
|
|
|
|
# Convert JSON tags from snake_case to camelCase
|
|
# This converts json:"field_name,omitempty" to json:"fieldName,omitempty"
|
|
for pbfile in "$OUT_DIR"/*.pb.go; do
|
|
if [ -f "$pbfile" ]; then
|
|
perl -i -pe 's/json:"([a-z0-9_]+)((?:,[^"]*)?)"/my ($f, $r) = ($1, $2); $f =~ s#_([a-z0-9])#uc($1)#ge; "json:\"$f$r\""/gex' "$pbfile"
|
|
fi
|
|
done
|