Gaudi v9 does not use CMT v1r10p20011126 by default - one must modify the
GaudiPolicy requirements file to get setup properly.
2 problems needed to be fixed:
set_append CMTCONFIG for Win32 as was done for GlastPolicy v4
Need to set CMTBIN - this env variable is now necessary in the cmt_makeshlib.bat
file - before the VisualC directory was hardwired - it is not any longer.
The "core" Gaudi now requires another external package AIDA 1.0 for histograms. NOTE: had to move the header files into another AIDA folder so that the format is: AIDA/1.0/AIDA where this directory contains all AIDA include files.
Also upgrade CLHEP
1.7.0.0
Note that the tar.gz file as obtained from the CLHEP site was modified to
include a directory called 1.7.0.0.
The import command is:
cvs import -m "message" <packageName> <vendor> <tag>
where <vendor> is Gaudi
tag was initially set to Gaudi-v9
A separate branch was set for each new package - named Gaudi-v9-patches.
Modified the Gaudi requirements files to use our package_headers pattern. Adjusted some of the versions pointed to - such as CLHEP and to use our EXTLIB.
NOTE: Could not tag GaudiKernel Gaudi-v9 - this created a conflict since our earlier version of GaudiKernel was tagged "v9". By creating a new tag called Gaudi-v9, upon checking out GaudiSys v7 - which uses GaudiKernel v9, the wrong (new) version of GaudiKernel was retrieved from the repository. So..in this instance, the tag is called Gaudi-vNine
Additional notes for Linux setup:
Modify GaudiPolicy requirements file so that CMTBIN is set to "Linux" on Linux platforms. This allows cmt.exe to be found.
cmt broadcast 'gmake CC='/usr/local/bin/gcc-3.0.2' CXX='/usr/local/bin/g++-3.0.2''
Does not modify the version of the compiler used. Rather one must modify
the GaudiPolicy requirements file.
GCC Tricks
I was wondering how to check the object files to see what version of
gcc was actually used in the build..So I did a search on www.google.com and
found the following page:
http://gcc.gnu.org/ml/gcc-help/2000-06/msg00016.html
It seems for recent versions of gcc we can do:
strings - objFileName | grep GCC
HTL
Obtained the new sources for HTL 1.3.1.2 from the HTL
website Anaphe.
Hoping that by compiling from scratch using the appropriate gcc compiler will
allow us to compile and run Gaudi with gcc 2.95.2 and gcc 3.0.2.
To get HTL to compile:
Need to setup the environment:
setenv OS Linux
setenv PLATF Linux
cd into the HTL directory and do:
setenv LHCXXTOP $PWD
setenv LHCXX_REL_DIR $PWD
To setup the makefiles to use a non-default version of gcc:
enter the etc directory and modify the Linux.mk file:
CC = /usr/local/bin/gcc-2.95.2 -v
CXX = /usr/local/bin/g++-2.95.2 -v
# use ASIS installed egcs 1.1.2
ifdef USE_CODEWIZARD
C++ = codewizard
else
ifdef USE_INSURE
C++ = insure
else
C++ = /usr/local/bin/g++-2.95.2 -v
endif
endif
C++ = /usr/local/bin/g++-2.95.2 -v
The -v denotes verbose.
First, realize that we only need the transient libraries.
And to compile, one must specify the version.
gmake transient "HTL_VERSION=1.3.1.1"
This creates the shareable libraries. To create the archive libraries do:
gmake transient "ARCHIVE_MODE=1" "HTL_VERSION=1.3.1.1"
To copy the header files to a central location:
gmake headerinstall "HTL_VERSION=1.3.1.1"
but note - I had to create the destination directory first:
specific/Linux/HTL/1.3.1.1/include/HTL
Now with HTL 1.3.1.1 available - attempted to compile Gaudi v9 with gcc
3.0.2. Resulting in errors:
Gaudi-3.02/GaudiKernel/v11r0p1/GaudiKernel/PropertyMgr.h:72: explicit
specialization in non-namespace scope `class PropertyMgr'
This was fixed by modifying PropertyMgr.h:
#else
#if defined (__GNUC__) && ( ( __GNUC__ == 2 && __GNUC_MINOR__ >= 95 ) || (__G
NUC__ == 3) ) // HMK add for gcc 3.02
#define TEMPLATESPECIAL // template<>
#else
#define TEMPLATESPECIAL template<>
#endif
However other errors remain:
Gaudi-3.02/GaudiKernel/v11r0p1/GaudiKernel/MsgStream.h:146: no
matching function for call to `std::ostrstream::flags(long int&)'
afs/.slac.stanford.edu/package/gcc/i386_linux2/gcc-3.0.2/lib/gcc-lib/i686-pc-li
nux-gnu/3.0.2/include/g++/bits/ios_base.h:311: candidates
are: std::_Ios_Fmtflags std::ios_base::flags() const
/afs/.slac.stanford.edu/package/gcc/i386_linux2/gcc-3.0.2/lib/gcc-lib/i686-pc-li
nux-gnu/3.0.2/include/g++/bits/ios_base.h:315:
std::_Ios_Fmtflags std::ios_base::flags(std::_Ios_Fmtflags)
Attempted to fix by modifying Kernel.h - which had a similar define
instruction depending upon compiler version.
Sent a message to the Gaudi developer mailing list - hoping to receive a response.