diff --git a/Makefile b/Makefile index 1d31322..152dcf2 100644 --- a/Makefile +++ b/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)