From f6640b34185cf96701bae4010c8323d62430edff Mon Sep 17 00:00:00 2001 From: Dirk Zimoch Date: Wed, 22 Jul 2020 09:16:37 +0200 Subject: [PATCH] Generate version header for zip exports as well --- .VERSION | 3 +++ .gitattributes | 2 ++ GNUmakefile | 14 ++++++------- src/Makefile | 4 ++-- src/StreamVersion.c | 2 +- src/makeStreamVersion.pl | 45 +++++++++++++++++++++++++++++----------- 6 files changed, 47 insertions(+), 23 deletions(-) create mode 100644 .VERSION create mode 100644 .gitattributes diff --git a/.VERSION b/.VERSION new file mode 100644 index 0000000..9ca74d5 --- /dev/null +++ b/.VERSION @@ -0,0 +1,3 @@ +COMMIT: $Format:%H$ +REFS: $Format:%D$ +DATE: $Format:%ci$ diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..9986330 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +GNUmakefile export-ignore +.VERSION export-subst diff --git a/GNUmakefile b/GNUmakefile index 53a85bd..9ee1949 100644 --- a/GNUmakefile +++ b/GNUmakefile @@ -26,16 +26,14 @@ HEADERS += src/StreamBuffer.h HEADERS += src/StreamError.h HEADERS += src/StreamVersion.h -CPPFLAGS += -DSTREAM_INTERNAL +CPPFLAGS += -DSTREAM_INTERNAL -I$(COMMON_DIR) -# Update version string (contains __DATE__ and __TIME__) -# each time anything changed. -StreamVersion$(OBJ): StreamVersion.h $(filter-out StreamVersion$(OBJ) stream_exportAddress$(OBJ),$(LIBOBJS) $(LIBRARY_OBJS)) +# Update version string each time anything changes +StreamVersion$(OBJ) StreamVersion$(DEP): $(COMMON_DIR)/StreamVersion.h $(filter-out StreamVersion$(OBJ) stream_exportAddress$(OBJ),$(LIBOBJS) $(LIBRARY_OBJS)) -MAKE_FIRST=src/StreamVersion.h -src/StreamVersion.h: $(SOURCES) $(filter-out %StreamVersion.h, $(HEADERS)) - @echo Creating $@ from git tag - $(PERL) src/makeStreamVersion.pl > $@ +$(COMMON_DIR)/StreamVersion.h: $(filter-out StreamVersion.h,$(notdir $(SOURCES) $(HEADERS))) + @echo Creating $@ + $(PERL) ../src/makeStreamVersion.pl $@ StreamCore$(OBJ) StreamCore$(DEP): streamReferences streamReferences: diff --git a/src/Makefile b/src/Makefile index 7c9d24b..0ebefbb 100644 --- a/src/Makefile +++ b/src/Makefile @@ -90,8 +90,8 @@ CPPFLAGS += -DSTREAM_INTERNAL # Update version string whenever something changed. StreamVersion$(OBJ): $(COMMON_DIR)/StreamVersion.h $(filter-out StreamVersion$(OBJ),$(LIBOBJS) $(LIBRARY_OBJS)) ../CONFIG_STREAM $(COMMON_DIR)/StreamVersion.h: $(SRCS) $(filter-out StreamVersion.h, $(INC)) - @echo Creating $@ from git tag - $(PERL) ../makeStreamVersion.pl > $@ + @echo Creating $@ + $(PERL) ../makeStreamVersion.pl $@ # Add references to all registrars to main file to avoid # missing initialization. diff --git a/src/StreamVersion.c b/src/StreamVersion.c index 320519d..da0bf35 100644 --- a/src/StreamVersion.c +++ b/src/StreamVersion.c @@ -29,4 +29,4 @@ const char StreamVersion [] = "." STR(STREAM_MINOR) "." STR(STREAM_PATCHLEVEL) STREAM_DEV - " built " __DATE__ " " __TIME__; + " commit:" STREAM_COMMIT_HASH; diff --git a/src/makeStreamVersion.pl b/src/makeStreamVersion.pl index df7a595..2c1ae51 100644 --- a/src/makeStreamVersion.pl +++ b/src/makeStreamVersion.pl @@ -22,21 +22,38 @@ use strict; -my $dir = "O.Common"; -my $versionfile = "StreamVersion.h"; -my $version = `git describe --tags --dirty --match "[0-9]*"` - or die "Cannot run git.\n"; +my ( $major, $minor, $patch, $dev, $branch, $date, $hash ); -my ( $major, $minor, $patch, $dev ); +if (my $version = `git describe --tags --dirty --match "[0-9]*" 2>/dev/null`) { + if ($version =~ m/(\d+)\.(\d+)\.(\d+)?(.*)?/) { + $major = $1; $minor = $2; $patch = $3; $dev = $4; + } + if (`git log -1 --format="%H %ci"`=~ m/([[:xdigit:]]+) (.+)/) { + $hash = $1; $date = $2; + } +} +if (!$major) { + if (open(my $fh, '<', '../../.VERSION')) { + while (my $line = <$fh>) { + if ($line =~ m/COMMIT: *([[:xdigit:]]+)/) { + $hash = $1; + } + if ($line =~ m/REFS: *tag: *((\d+)\.(\d+)\.(\d+)?,)? *(.*)/) { + $major = $2; $minor = $3; $patch = $4; $branch = $5; + } + if ($line =~ m/DATE: *(.+)/) { + $date = $1; + } + } + } else { + print "neither git repo nor .VERSION file found\n"; + } +} -$version =~ m/(\d+)\.(\d+)\.(\d+)?(.*)?/ - or die "Unexpected git tag format $version\n"; - -$major = $1; $minor=$2; $patch=$3; $dev=$4; - -print << "EOF"; -/* Generated file $versionfile */ +open my $out, '>', @ARGV or die $!; +print $out <