testsAndMisc-archive/python_pkg/articles/Makefile

62 lines
2.3 KiB
Makefile
Raw Permalink Normal View History

CC ?= cc
CFLAGS ?= -O2 -Wall -Wextra -pedantic
LDFLAGS ?=
.ONESHELL:
all: server_c
server_c: server_c.c
$(CC) $(CFLAGS) -o $@ $< $(LDFLAGS)
format:
@command -v clang-format >/dev/null 2>&1 || { echo "clang-format not found"; exit 1; }
@echo "Running clang-format (ColumnLimit=100)..."
@clang-format -i -style=file server_c.c
format-check:
@command -v clang-format >/dev/null 2>&1 || { echo "clang-format not found"; exit 1; }
@echo "Checking formatting with clang-format..."
@# Use clang-format dry-run so this works without git and doesn't depend on commit state
@if clang-format --dry-run -Werror -style=file server_c.c >/dev/null 2>&1; then \
echo "Format check passed"; \
else \
echo "Formatting changes needed (run 'make format')"; \
exit 1; \
fi
# fail if any function exceeds 20 non-empty lines between '{' and matching '}'
funcsize-check:
@echo "Checking function sizes (<= 20 lines)..."
@command -v clang-tidy >/dev/null 2>&1 || { echo "clang-tidy not found"; exit 1; }
@clang-tidy \
-checks=readability-function-size \
-warnings-as-errors=readability-function-size \
-config='{ "CheckOptions": [ { "key": "readability-function-size.LineThreshold", "value": "20" } ] }' \
server_c.c -- -std=gnu11 $(CFLAGS) $(LDFLAGS)
lint:
@echo "Running clang-tidy..."
@clang-tidy \
-checks=clang-analyzer-*,clang-diagnostic-*,readability-function-size,-clang-analyzer-security.insecureAPI.DeprecatedOrUnsafeBufferHandling \
-config='{ "CheckOptions": [ { "key": "readability-function-size.LineThreshold", "value": "20" } ] }' \
server_c.c -- -std=gnu11 $(CFLAGS) $(LDFLAGS) || true
@echo "Running cppcheck..."
@cppcheck --enable=all --inconclusive --std=c11 --language=c --quiet --inline-suppr --check-level=exhaustive --suppress=missingIncludeSystem server_c.c || true
@echo "Checking line length (<= 100 chars) in server_c.c..."
@awk 'length($$0)>100{print "server_c.c:" NR ": line too long (" length($$0) " > 100)"; err=1} END{if(err){print "Line length check FAILED"; exit 1} else {print "Line length check passed"}}' server_c.c
build: minify
minify:
npx -y html-minifier-terser \
--collapse-whitespace --remove-comments --remove-attribute-quotes \
--remove-redundant-attributes --minify-css true --minify-js true \
-o index.min.html index.html
npx -y terser sw.js -o sw.min.js -c -m
clean:
rm -f server_c
.PHONY: all clean