build: prevent unnecessary recompilation from version header updates

This commit is contained in:
lohhiiccc 2026-03-01 16:35:52 +01:00
parent d0444f9431
commit ad4df3a580

View file

@ -16,7 +16,7 @@ endif
NAME = ft_ping NAME = ft_ping
TEST_BIN = ft_ping.test TEST_BIN = ft_ping.test
VERSION := 0.0.1 VERSION := 0.0.1
BUILD_DATE := $(shell date -u '+%Y-%m-%d %H:%M:%S UTC') BUILD_DATE := $(shell git log -1 --format=%cd --date=format:'%Y-%m-%d %H:%M:%S' 2>/dev/null || date -u '+%Y-%m-%d %H:%M:%S')
GIT_COMMIT := $(shell git rev-parse --short HEAD 2>/dev/null || echo "nogit") GIT_COMMIT := $(shell git rev-parse --short HEAD 2>/dev/null || echo "nogit")
.DEFAULT_GOAL := all .DEFAULT_GOAL := all
@ -40,25 +40,37 @@ DEPS = $(OBJS:.o=.d)
VERSION_HEADER = includes/version_gen.h VERSION_HEADER = includes/version_gen.h
$(VERSION_HEADER): Makefile $(VERSION_HEADER): FORCE
@echo "/* Auto-generated - DO NOT EDIT */" > $@ @$(MAKE) --no-print-directory update-version-header
@echo "#ifndef PING_VERSION_GEN_H" >> $@
@echo "#define PING_VERSION_GEN_H" >> $@
@echo "#define PING_VERSION \"$(VERSION)\"" >> $@
@echo "#define PING_BUILD_DATE \"$(BUILD_DATE)\"" >> $@
@echo "#define PING_GIT_COMMIT \"$(GIT_COMMIT)\"" >> $@
@echo "" >> $@
@echo "typedef struct s_prog_name" >> $@
@echo "{" >> $@
@echo " char *alloc;" >> $@
@echo " const char *name;" >> $@
@echo "} t_prog_name;" >> $@
@echo "" >> $@
@echo "extern t_prog_name g_prog_name;" >> $@
@echo "" >> $@
@echo "#endif" >> $@
@echo "[OK] Version header generated"
.PHONY: update-version-header
update-version-header:
@NEW_HEADER=$$(mktemp); \
echo "/* Auto-generated - DO NOT EDIT */" > $$NEW_HEADER; \
echo "#ifndef PING_VERSION_GEN_H" >> $$NEW_HEADER; \
echo "#define PING_VERSION_GEN_H" >> $$NEW_HEADER; \
echo "#define PING_VERSION \"$(VERSION)\"" >> $$NEW_HEADER; \
echo "#define PING_BUILD_DATE \"$(BUILD_DATE)\"" >> $$NEW_HEADER; \
echo "#define PING_GIT_COMMIT \"$(GIT_COMMIT)\"" >> $$NEW_HEADER; \
echo "" >> $$NEW_HEADER; \
echo "typedef struct s_prog_name" >> $$NEW_HEADER; \
echo "{" >> $$NEW_HEADER; \
echo " char *alloc;" >> $$NEW_HEADER; \
echo " const char *name;" >> $$NEW_HEADER; \
echo "} t_prog_name;" >> $$NEW_HEADER; \
echo "" >> $$NEW_HEADER; \
echo "extern t_prog_name g_prog_name;" >> $$NEW_HEADER; \
echo "" >> $$NEW_HEADER; \
echo "#endif" >> $$NEW_HEADER; \
if [ ! -f $(VERSION_HEADER) ] || ! cmp -s $$NEW_HEADER $(VERSION_HEADER); then \
mv $$NEW_HEADER $(VERSION_HEADER); \
echo "[OK] Version header generated"; \
else \
rm -f $$NEW_HEADER; \
fi
FORCE:
.PHONY: FORCE
.PHONY: all .PHONY: all
all: $(LIBICMP_DEP) $(VERSION_HEADER) $(NAME) all: $(LIBICMP_DEP) $(VERSION_HEADER) $(NAME)