From 7f22d5bdc6b0ecaa03f2b345d209dc6254c6cd92 Mon Sep 17 00:00:00 2001 From: Dirk Zimoch Date: Tue, 5 May 2020 14:59:23 +0200 Subject: [PATCH] generate version file from git tag --- .gitignore | 1 + GNUmakefile | 23 +++++++++++------- src/Makefile | 14 +++++++++-- src/Makefile.Host | 7 ------ src/Makefile.Vx | 22 +++++++++++++++++- src/StreamVersion.c | 3 ++- src/devStream.h | 6 ++--- src/makeStreamVersion.pl | 50 ++++++++++++++++++++++++++++++++++++++++ 8 files changed, 104 insertions(+), 22 deletions(-) create mode 100644 src/makeStreamVersion.pl diff --git a/.gitignore b/.gitignore index 263ad4d..7f2ad27 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,4 @@ dbd include *.pdf *.*log +StreamVersion.h diff --git a/GNUmakefile b/GNUmakefile index 9d07327..53a85bd 100644 --- a/GNUmakefile +++ b/GNUmakefile @@ -19,18 +19,25 @@ SOURCES += $(FORMATS:%=src/%Converter.cc) SOURCES += $(BUSSES:%=src/%Interface.cc) SOURCES += $(STREAM_SRCS:%=src/%) -HEADERS += devStream.h -HEADERS += StreamFormat.h -HEADERS += StreamFormatConverter.h -HEADERS += StreamBuffer.h -HEADERS += StreamError.h +HEADERS += src/devStream.h +HEADERS += src/StreamFormat.h +HEADERS += src/StreamFormatConverter.h +HEADERS += src/StreamBuffer.h +HEADERS += src/StreamError.h +HEADERS += src/StreamVersion.h -StreamCore.o StreamCore.d: streamReferences +CPPFLAGS += -DSTREAM_INTERNAL # Update version string (contains __DATE__ and __TIME__) -# each time anything changes. -StreamVersion.o: $(filter-out StreamVersion.o stream_exportAddress.o,$(LIBOBJS)) +# each time anything changed. +StreamVersion$(OBJ): 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 > $@ + +StreamCore$(OBJ) StreamCore$(DEP): streamReferences streamReferences: $(PERL) ../src/makeref.pl Interface $(BUSSES) > $@ $(PERL) ../src/makeref.pl Converter $(FORMATS) >> $@ diff --git a/src/Makefile b/src/Makefile index 755b45f..7c9d24b 100644 --- a/src/Makefile +++ b/src/Makefile @@ -74,14 +74,24 @@ endif LIB_LIBS += $(EPICS_BASE_IOC_LIBS) INC += devStream.h +INC += StreamFormat.h +INC += StreamFormatConverter.h +INC += StreamBuffer.h +INC += StreamError.h +INC += StreamVersion.h # switch off annoying rset warnings in 3.16+ CPPFLAGS += -DUSE_TYPED_RSET +CPPFLAGS += -DSTREAM_INTERNAL + -include $(TOP)/configure/RULES -# Update version string whenever something changes -StreamVersion$(OBJ): $(filter-out StreamVersion.o,$(LIBOBJS)$(LIBRARY_OBJS)) +# 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 > $@ # Add references to all registrars to main file to avoid # missing initialization. diff --git a/src/Makefile.Host b/src/Makefile.Host index a84eda6..4931af8 100644 --- a/src/Makefile.Host +++ b/src/Makefile.Host @@ -29,11 +29,4 @@ endif include $(TOP)/config/CONFIG_APP include ../CONFIG_STREAM -DBDNAME = stream.dbd -INC += devStream.h - include $(EPICS_BASE)/config/RULES.Host - -# create stream.dbd from all RECORDTYPES -stream.dbd: ../CONFIG_STREAM - $(PERL) ../makedbd.pl -3.13 $(RECORDTYPES) > $@ diff --git a/src/Makefile.Vx b/src/Makefile.Vx index 008c514..08b0440 100644 --- a/src/Makefile.Vx +++ b/src/Makefile.Vx @@ -42,17 +42,37 @@ SRCS.c += $(filter %.c,$(STREAM_SRCS:%=%../%)) LIBOBJS = $(patsubst ../%,%.o,$(basename $(SRCS.cc) $(SRCS.c))) +DBDNAME = stream.dbd + +INC += devStream.h +INC += StreamFormat.h +INC += StreamFormatConverter.h +INC += StreamBuffer.h +INC += StreamError.h +INC += StreamVersion.h + include $(EPICS_BASE)/config/RULES.Vx include ../../config/RULES.munch DEPENDS: depends -include DEPENDS +CPPFLAGS += -DSTREAM_INTERNAL + # Update version string whenever something changes -StreamVersion.o: ../*.c ../*.h ../*.cc ../CONFIG_STREAM $(LIBNAME): StreamVersion.o +StreamVersion.o: StreamVersion.h $(filter-out StreamVersion.o,$(LIBOBJS)) ../CONFIG_STREAM +StreamVersion.h: $(SRCS.cc) $(SRCS.c) $(add-prefix ../,$(filter-out StreamVersion.h, $(INC))) + @echo Creating $@ from git tag + $(PERL) ../makeStreamVersion.pl > $@ + StreamCore.o: streamReferences streamReferences: touch $@ + +# create stream.dbd from all RECORDTYPES +stream.dbd: ../CONFIG_STREAM + $(PERL) ../makedbd.pl -3.13 $(RECORDTYPES) > $@ + diff --git a/src/StreamVersion.c b/src/StreamVersion.c index cd144d6..320519d 100644 --- a/src/StreamVersion.c +++ b/src/StreamVersion.c @@ -20,7 +20,7 @@ * along with StreamDevice. If not, see https://www.gnu.org/licenses/. *************************************************************************/ -#include "devStream.h" +#include "StreamVersion.h" #define STR2(x) #x #define STR(x) STR2(x) @@ -28,4 +28,5 @@ const char StreamVersion [] = "StreamDevice " STR(STREAM_MAJOR) "." STR(STREAM_MINOR) "." STR(STREAM_PATCHLEVEL) + STREAM_DEV " built " __DATE__ " " __TIME__; diff --git a/src/devStream.h b/src/devStream.h index b33d9af..1a90c18 100644 --- a/src/devStream.h +++ b/src/devStream.h @@ -28,9 +28,9 @@ #include #include -#define STREAM_MAJOR 2 -#define STREAM_MINOR 8 -#define STREAM_PATCHLEVEL 12 +#ifndef STREAM_INTERNAL +#include "StreamVersion.h" +#endif #ifndef OK #define OK 0 diff --git a/src/makeStreamVersion.pl b/src/makeStreamVersion.pl new file mode 100644 index 0000000..771a00e --- /dev/null +++ b/src/makeStreamVersion.pl @@ -0,0 +1,50 @@ +########################################################################## +# This is a helper script for StreamDevice. +# It generates a version file from git tags. +# +# (C) 2020 Dirk Zimoch (dirk.zimoch@psi.ch) +# +# This file is part of StreamDevice. +# +# StreamDevice is free software: You can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# StreamDevice is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with StreamDevice. If not, see https://www.gnu.org/licenses/. +#########################################################################/ + +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 ); + +$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 */ + +#ifndef StreamVersion_h +#define StreamVersion_h + +#define STREAM_MAJOR $major +#define STREAM_MINOR $minor +#define STREAM_PATCHLEVEL $patch +#define STREAM_DEV "$dev" + +#endif /* StreamVersion_h */ +EOF