diff --git a/GNUmakefile b/GNUmakefile index 5683fe5..8539857 100644 --- a/GNUmakefile +++ b/GNUmakefile @@ -40,7 +40,6 @@ UHUB_PREFIX ?= c:/uhub/ CFLAGS += -mno-cygwin LDFLAGS += -mno-cygwin BIN_EXT ?= .exe -GIT_REVISION ?= NO else DESTDIR ?= / UHUB_CONF_DIR ?= $(DESTDIR)/etc/uhub @@ -51,7 +50,7 @@ BIN_EXT ?= endif ifeq ($(SILENT),YES) - MSG_CC=@echo " CC:" $(notdir $^) && + MSG_CC=@echo " CC:" $(notdir $<) && MSG_LD=@echo " LD:" $(notdir $@) && MSG_AR=@echo " AR:" $(notdir $@) && else @@ -71,10 +70,8 @@ endif ifeq ($(RELEASE),YES) CFLAGS += -O3 -DNDEBUG -GIT_REVISION ?= NO else CFLAGS += -ggdb -DDEBUG -GIT_REVISION ?= YES endif ifeq ($(STACK_PROTECT),YES) @@ -119,9 +116,9 @@ CFLAGS += -DSSL_SUPPORT LDLIBS += -lssl endif -ifeq ($(GIT_REVISION),YES) -CFLAGS += -DGIT_REVISION=\"$(shell git show --abbrev-commit | head -n 1 | cut -f 2 -d " ")\" -endif +GIT_VERSION=$(shell git describe --tags 2>/dev/null || echo "") +GIT_REVISION=$(shell git show --abbrev-commit 2>/dev/null | head -n 1 | cut -f 2 -d " " || echo "") +OLD_REVISION=$(shell grep GIT_REVISION revision.h 2>/dev/null | cut -f 3 -d " " | tr -d "\"") # Sources libuhub_SOURCES := \ @@ -197,8 +194,10 @@ adcrush_BINARY=adcrush$(BIN_EXT) admin_BINARY=uhub-admin$(BIN_EXT) autotest_BINARY=autotest/test$(BIN_EXT) -%.o: %.c - $(MSG_CC) $(CC) -c $(CFLAGS) -o $@ $^ +.PHONY: revision.h.tmp + +%.o: %.c version.h revision.h + $(MSG_CC) $(CC) -c $(CFLAGS) -o $@ $< all: $(uhub_BINARY) @@ -214,6 +213,17 @@ $(uhub_BINARY): $(uhub_OBJECTS) $(libuhub_OBJECTS) $(libadc_common_OBJECTS) autotest.c: $(autotest_SOURCES) $(shell exotic --standalone $(autotest_SOURCES) > $@) +revision.h.tmp: + @rm -f $@ + @echo "/* AUTOGENERATED FILE - DO NOT EDIT */" > $@ + @if [ -n '$(GIT_VERSION)' ]; then echo \#define GIT_VERSION \"$(GIT_VERSION)\" >> $@; fi + @if [ -n '$(GIT_REVISION)' ]; then echo \#define GIT_REVISION \"$(GIT_REVISION)\" >> $@; fi + +version.h: revision.h + +revision.h: revision.h.tmp + @if [ '$(GIT_REVISION)' != '$(OLD_REVISION)' ]; then cat $@.tmp > $@; fi + $(autotest_OBJECTS): autotest.c $(MSG_CC) $(CC) -c $(CFLAGS) -Isrc -o $@ $< diff --git a/version.h b/version.h index 6f30333..3c627cb 100644 --- a/version.h +++ b/version.h @@ -1,3 +1,5 @@ +#include "revision.h" + #ifndef PRODUCT #define PRODUCT "uHub" #endif