Hi TUsers and TDevelopers,
I’m having a really sneaky issue where I’m trying to use genreflex and g++ to compile some custom object for a PyRoot interface. This normally works really well but on a batch system something funny happens. After more than a few hours of hunting things down I found this issue at the bottom: genreflex isn’t using the PATH to locate gccxml. I would appreciate any insight, as I think, and would like to show below, that there is either a) a bug or b) something so non-intuitive to be effectively a bug. Thanks for all the consideration!
When I use my simplistic call in the local environemnt it works fine BUT(!!) its using some gccxml it got from AFS.
joshgc@smuhpc HToZGammaAnalysis> genreflex __ntupler.tmp.h -o __ntupler.tmp.cc -I $ROOTSYS/include --debug=5
--->> genreflex: INFO: invoking /afs/cern.ch/sw/lcg/external/gccxml/0.9.0_20100114/i686-slc5-gcc43-opt/bin/gccxml "__ntupler.tmp.h" -fxml=__ntupler_gccxmlout.xml "-I/cvmfs/atlas.cern.ch/repo/sw/software/i686-slc5-gcc43-opt/17.0.5/sw/lcg/app/releases/ROOT/5.28.00g/i686-slc5-gcc43-opt/root/include" -D__REFLEX__
--->> genreflex: INFO: Parsing file __ntupler.tmp.h with GCC_XML OK
--->> genreflex: INFO: Generating Reflex Dictionary
class MyStruct
joshgc@smuhpc HToZGammaAnalysis>
So the call to genreflex works, but it picked up some gccxml from /afs/ directory. This is bizarre because this isn’t the gccxml bash thinks I have. Furthermore I don’t even have an AFS directory in my PATH. Wow, genreflex is automagical!
joshgc@smuhpc HToZGammaAnalysis> which gccxml
/cvmfs/atlas.cern.ch/repo/sw/software/i686-slc5-gcc43-opt/17.0.5/LCGCMT/LCGCMT_60d/InstallArea/i686-slc5-gcc43-opt/bin/gccxml
joshgc@smuhpc HToZGammaAnalysis> echo $PATH | sed "s/:/\n/g" | grep afs
joshgc@smuhpc HToZGammaAnalysis>
Okay but the developers, exposed a --gccxmlpath option so lemme use that and force genreflex to use my local copy of gccxml. Nope that doesn’t work either!
[code]joshgc@smuhpc HToZGammaAnalysis> genreflex __ntupler.tmp.h -o __ntupler.tmp.cc -I $ROOTSYS/include --gccxmlpath="$(which gccxml|xargs dirname)" --debug=5
—>> genreflex: WARNING: Could not invoke /cvmfs/atlas.cern.ch/repo/sw/software/i686-slc5-gcc43-opt/17.0.5/LCGCMT/LCGCMT_60d/InstallArea/i686-slc5-gcc43-opt/bin/gccxml --print
—>> genreflex: WARNING: Could not determine compiler setting.
Could not determine GCCXML_FLAGS setting.
—>> genreflex: INFO: invoking /cvmfs/atlas.cern.ch/repo/sw/software/i686-slc5-gcc43-opt/17.0.5/LCGCMT/LCGCMT_60d/InstallArea/i686-slc5-gcc43-opt/bin/gccxml “__ntupler.tmp.h” -fxml=ntupler_gccxmlout.xml “-I/cvmfs/atlas.cern.ch/repo/sw/software/i686-slc5-gcc43-opt/17.0.5/sw/lcg/app/releases/ROOT/5.28.00g/i686-slc5-gcc43-opt/root/include” -D__REFLEX
Could not determine compiler setting.
Could not determine GCCXML_FLAGS setting.
—>> genreflex: INFO: Parsing file __ntupler.tmp.h with GCC_XML
—>> genreflex: ERROR: processing file with gccxml. genreflex command failed.
joshgc@smuhpc HToZGammaAnalysis>
[/code]
So forcing genreflex to use my local copy of gccxml doesn’t work. Okay surely then these gccxml’s are a different version? False again!
joshgc@smuhpc HToZGammaAnalysis> /afs/cern.ch/sw/lcg/external/gccxml/0.9.0_20100114/i686-slc5-gcc43-opt/bin/gccxml --version
GCC-XML version 0.9.0_20100114
joshgc@smuhpc HToZGammaAnalysis> gccxml --version
GCC-XML version 0.9.0_20100114
joshgc@smuhpc HToZGammaAnalysis>
Same version. In fact the only difference I can detect is that genreflex likes the afs copy more. If I force genreflex to use the afs copy with --gccxmlpath everything works. So…uhh…WHAT in the world is going on?
I’d be really interested to hear from the developers. Especially if they know if the version ID doesn’t include an SVN revision or something like that. How can I “diff” these two binaries if there version are identical? Thanks a ton!
Josh