build: prevent unnecessary recompilation from version header updates
This commit is contained in:
parent
d0444f9431
commit
ad4df3a580
1 changed files with 31 additions and 19 deletions
50
Makefile
50
Makefile
|
|
@ -16,7 +16,7 @@ endif
|
|||
NAME = ft_ping
|
||||
TEST_BIN = ft_ping.test
|
||||
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")
|
||||
|
||||
.DEFAULT_GOAL := all
|
||||
|
|
@ -40,25 +40,37 @@ DEPS = $(OBJS:.o=.d)
|
|||
|
||||
VERSION_HEADER = includes/version_gen.h
|
||||
|
||||
$(VERSION_HEADER): Makefile
|
||||
@echo "/* Auto-generated - DO NOT EDIT */" > $@
|
||||
@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"
|
||||
$(VERSION_HEADER): FORCE
|
||||
@$(MAKE) --no-print-directory update-version-header
|
||||
|
||||
.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
|
||||
all: $(LIBICMP_DEP) $(VERSION_HEADER) $(NAME)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue