Skip to content
Snippets Groups Projects
Commit dada9972 authored by Stephen A. Wood's avatar Stephen A. Wood Committed by Stephen Wood
Browse files

Implement version numbering for hcana.

  We'll start with version 0.90.0 and increment the second number up to 99.
  Goal is to declare a verison 1.0.0 sometime over the summer.

  To change the version, edit both SConscript.py and Makefile.
parent 7e790fc0
No related branches found
No related tags found
No related merge requests found
......@@ -16,6 +16,7 @@ haDict.h
haDict.C
hcana
src/HallC_LinkDef.h
src/hc_compiledata.h
# scons stuff
config.log
......
......@@ -7,9 +7,16 @@
# List only the implementation files (*.cxx). For every implementation file
# there must be a corresponding header file (*.h).
SOVERSION := 0.90
PATCH := 0
VERSION := $(SOVERSION).$(PATCH)
EXTVERS :=
VERCODE := $(shell echo $(subst ., ,$(SOVERSION)) $(PATCH) | \
awk '{ print $$1*65536 + $$2*256 + $$3 }')
USEWILDCARD = 1
ifdef USEWILDCARD
SRC = $(wildcard src/*.cxx)
SRC = $(sort $(wildcard src/*.cxx))
else
SRC = src/THcInterface.cxx src/THcParmList.cxx src/THcAnalyzer.cxx \
src/THcHallCSpectrometer.cxx \
......@@ -183,9 +190,31 @@ HDR = $(SRC:.cxx=.h)
DEP = $(SRC:.cxx=.d) src/main.d
OBJS = $(OBJ) $(USERDICT).o
HDR_COMPILEDATA = $(ANALYZER)/src/ha_compiledata.h
HCHDR_COMPILEDATA = src/hc_compiledata.h
all: $(USERLIB) hcana
src/hc_compiledata.h: Makefile
@echo "#ifndef HCANA_COMPILEDATA_H" > $@
@echo "#define HCANA_COMPILEDATA_H" >> $@
@echo "" >> $@
@echo "#define HC_INCLUDEPATH \"$(shell pwd)/src\"" >> $@
@echo "#define HC_VERSION \"$(VERSION)$(EXTVERS)\"" >> $@
@echo "#define HC_DATE \"$(shell date '+%b %d %Y')\"" >> $@
# @echo "#define HC_DATETIME \"$(shell date '+%a %b %d %H:%M:%S %Z %Y')\"" >> $@
@echo "#define HC_DATETIME \"$(shell date '+%a %b %d %Y')\"" >> $@
@echo "#define HC_PLATFORM \"$(shell uname -s)-$(shell uname -r)-$(shell uname -m)\"" >> $@
@echo "#define HC_BUILDNODE \"$(shell uname -n)\"" >> $@
@echo "#define HC_BUILDDIR \"$(shell pwd)\"" >> $@
@echo "#define HC_BUILDUSER \"$(shell whoami)\"" >> $@
@echo "#define HC_GITVERS \"$(shell git rev-parse HEAD 2>/dev/null | cut -c1-7)\"" >> $@
@echo "#define HC_CXXVERS \"$(shell $(CXX) --version 2>/dev/null | head -1)\"" >> $@
@echo "#define HC_ROOTVERS \"$(shell root-config --version)\"" >> $@
@echo "#define HCANA_VERSION_CODE $(VERCODE)" >> $@
@echo "#define HCANA_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))" >> $@
@echo "" >> $@
@echo "#endif" >> $@
LIBDIR:=$(ANALYZER)
LIBHALLA := $(LIBDIR)/libHallA.so
LIBDC := $(LIBDIR)/libdc.so
......@@ -199,21 +228,25 @@ else
EVIOLIB := -levio
endif
src/THcInterface.d: $(HDR_COMPILEDATA)
src/THcInterface.d: $(HDR_COMPILEDATA) $(HCHDR_COMPILEDATA)
hcana: src/main.o $(LIBDC) $(LIBHALLA) $(USERLIB)
$(LD) $(LDFLAGS) $< -lHallC $(HALLALIBS) $(EVIOLIB) -L. $(CCDBLIBS) \
$(GLIBS) -o $@
$(USERLIB): $(HDR) $(OBJS)
$(USERLIB).$(VERSION): $(HDR) $(OBJS)
$(LD) $(LDFLAGS) $(SOFLAGS) -o $@ $(OBJS)
@echo "$@ done"
$(USERLIB): $(USERLIB).$(VERSION)
rm -f $@
ln -s $(notdir $<) $@
$(HDR_COMPILEDATA) $(LIBHALLA) $(LIBDC): $(ANALYZER)/Makefile
@echo "Building Podd"
@cd $(ANALYZER) ; export PODD_EXTRA_DEFINES=-DHALLC_MODS ; make
$(USERDICT).cxx: $(RCHDR) $(HDR) $(LINKDEF)
$(USERDICT).C: $(RCHDR) $(HDR) $(LINKDEF)
@echo "Generating dictionary $(USERDICT)..."
$(ROOTBIN)/rootcint -f $@ -c $(INCLUDES) $(CCDBFLAGS) $^
......@@ -228,7 +261,7 @@ install: all
cp -p $(USERLIB) $(HOME)/cue/SRC/ana
clean:
rm -f src/*.o *~ $(USERLIB) $(USERDICT).*
rm -f src/*.o *~ $(USERLIB) $(USERLIB).$(VERSION) $(USERDICT).*
realclean: clean
rm -f *.d NormAnaDict.* THaDecDict.* THaScallDict.* bin/hcana
......
......@@ -3,6 +3,10 @@
import os
import re
import sys
import subprocess
import platform
import time
import SCons.Util
Import ('pbaseenv')
......@@ -36,6 +40,66 @@ pbaseenv.RootCint(roothcdict,hcheaders)
pbaseenv.Clean(roothcdict,re.sub(r'\.C\Z','_rdict.pcm',roothcdict))
pbaseenv.SharedObject(target = roothcobj, source = roothcdict)
####### write src/ha_compiledata.h header file ######
if sys.version_info >= (2, 7):
try:
cmd = "git rev-parse HEAD 2>/dev/null"
gitrev = subprocess.check_output(cmd, shell=True).rstrip()
except:
gitrev = ''
try:
cmd = pbaseenv.subst('$CXX') + " --version 2>/dev/null | head -1"
cxxver = subprocess.check_output(cmd, shell=True).rstrip()
except:
cxxver = ''
# subprocess gives us byte string literals in Python 3, but we'd like
# Unicode strings
if sys.version_info >= (3, 0):
gitrev = gitrev.decode()
cxxver = cxxver.decode()
else:
FNULL = open(os.devnull, 'w')
try:
gitrev = subprocess.Popen(['git', 'rev-parse', 'HEAD', '2>dev/null'],\
stdout=subprocess.PIPE, stderr=FNULL).communicate()[0].rstrip()
except:
gitrev =''
try:
outp = subprocess.Popen([pbaseenv.subst('$CXX'), '--version'],\
stdout=subprocess.PIPE, stderr=FNULL).communicate()[0]
lines = outp.splitlines()
cxxver = lines[0]
except:
cxxver = ''
compiledata = 'src/hc_compiledata.h'
f=open(compiledata,'w')
f.write('#ifndef HCANA_COMPILEDATA_H\n')
f.write('#define HCANA_COMPILEDATA_H\n')
f.write('\n')
f.write('#define HC_INCLUDEPATH "%s"\n' % (pbaseenv.subst('$HC_SRC')))
f.write('#define HC_VERSION "%s"\n' % pbaseenv.subst('$HC_VERSION'))
f.write('#define HC_DATE "%s"\n' % time.strftime("%b %d %Y"))
f.write('#define HC_DATETIME "%s"\n' % time.strftime("%a %b %d %Y"))
#f.write('#define HC_DATETIME "%s"\n' % time.strftime("%a %b %d %H:%M:%S %Z %Y"))
f.write('#define HC_PLATFORM "%s"\n' % platform.platform())
f.write('#define HC_BUILDNODE "%s"\n' % platform.node())
f.write('#define HC_BUILDDIR "%s"\n' % os.getcwd())
try:
builduser = pbaseenv['ENV']['LOGNAME']
except:
builduser = ''
f.write('#define HC_BUILDUSER "%s"\n' % builduser)
f.write('#define HC_GITVERS "%s"\n' % gitrev[:7])
f.write('#define HC_CXXVERS "%s"\n' % cxxver)
f.write('#define HC_ROOTVERS "%s"\n' % pbaseenv.subst('$ROOTVERS'))
f.write('#define HCANA_VERSION_CODE %s\n' % pbaseenv.subst('$VERCODE'))
f.write('#define HCANA_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))\n')
f.write('\n')
f.write('#endif\n')
f.close()
####### Start of main SConscript ###########
print ('LIBS = %s\n' % pbaseenv.subst('$LIBS'))
......
......@@ -25,13 +25,13 @@ baseenv.Append(HA_DIR= baseenv.subst('$HC_DIR')+'/podd')
baseenv.Append(MAIN_DIR= baseenv.subst('$HEAD_DIR'))
baseenv.Append(HA_SRC= baseenv.subst('$HA_DIR')+'/src')
baseenv.Append(HA_DC= baseenv.subst('$HA_DIR')+'/hana_decode')
baseenv.Append(MAJORVERSION = '1')
baseenv.Append(MINORVERSION = '6')
baseenv.Append(MAJORVERSION = '0')
baseenv.Append(MINORVERSION = '90')
baseenv.Append(PATCH = '0')
baseenv.Append(SOVERSION = baseenv.subst('$MAJORVERSION')+'.'+baseenv.subst('$MINORVERSION'))
baseenv.Append(VERSION = baseenv.subst('$SOVERSION')+'.'+baseenv.subst('$PATCH'))
baseenv.Append(EXTVERS = '')
baseenv.Append(HA_VERSION = baseenv.subst('$VERSION')+baseenv.subst('$EXTVERS'))
baseenv.Append(HC_VERSION = baseenv.subst('$VERSION')+baseenv.subst('$EXTVERS'))
print ("Hall C Main Directory = %s" % baseenv.subst('$HC_DIR'))
print ("Hall C Source Directory = %s" % baseenv.subst('$HC_SRC'))
print ("Hall A Main Directory = %s" % baseenv.subst('$HA_DIR'))
......
......@@ -15,6 +15,8 @@ for the Hall C style parameter database.
#include "THcDetectorMap.h"
#include "THcGlobals.h"
#include "ha_compiledata.h"
#include "hc_compiledata.h"
#include <sstream>
#include "TTree.h"
......@@ -90,7 +92,7 @@ void THcInterface::PrintLogo( Bool_t lite )
mille = iyear;
char* root_date = Form("%s %d %4d",months[imonth-1],iday,mille);
const char* halla_version = HA_VERSION;
// const char* halla_version = HA_VERSION;
// const char* halla_date = Form("%d %s %4d",24,months[2-1],2003);
#if ROOT_VERSION_CODE >= ROOT_VERSION(5,18,0)
......@@ -101,9 +103,9 @@ void THcInterface::PrintLogo( Bool_t lite )
Printf(" * W E L C O M E to the *");
Printf(" * H A L L C ++ A N A L Y Z E R *");
Printf(" * *");
Printf(" * Based on *");
Printf(" * PODD Release %10s %18s *",halla_version,__DATE__);
Printf(" * Based on ROOT %8s %20s *",root_version,root_date);
Printf(" * hcana release %10s %18s *",HC_VERSION,HC_DATE);
Printf(" * PODD release %10s %18s *",HA_VERSION,HA_DATE);
Printf(" * ROOT %8s %18s *",root_version,root_date);
Printf(" * *");
Printf(" * For information visit *");
Printf(" * http://hallcweb.jlab.org/hcana/docs/ *");
......@@ -122,6 +124,24 @@ void THcInterface::PrintLogo( Bool_t lite )
}
//_____________________________________________________________________________
const char* THcInterface::GetVersionString()
{
// Get software version string (printed by analyzer -v)
static TString version_string;
if( version_string.IsNull() ) {
ostringstream ostr;
ostr << "hcana " << HC_VERSION << " ";
if( strlen(HC_GITVERS) > 0 )
ostr << "git @" << HC_GITVERS << " ";
ostr << THaInterface::GetVersionString();
version_string = ostr.str().c_str();
}
return version_string.Data();
}
//_____________________________________________________________________________
ClassImp(THcInterface)
......@@ -24,6 +24,7 @@ public:
#else
virtual void PrintLogo(Bool_t lite = kFALSE);
#endif
static const char* GetVersionString();
protected:
......
......@@ -26,7 +26,7 @@ int main(int argc, char **argv)
}
if( print_version ) {
cout << "hcana using " << THcInterface::GetVersionString() << endl;
cout << THcInterface::GetVersionString() << endl;
return 0;
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment