Genreflex looking for gccxml

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

Hi Everyone,

Let me shamelessly repost myself and ask a simpler question. Who maintains genreflex? This is probably an easy question to handle offline with a developer :smiley:

Thanks!

Josh

Search for “reflex” in: http://root.cern.ch/drupal/content/do-we-need-yet-another-custom-c-interpreter
See also: http://root.cern.ch/drupal/content/reflex

Hi,

I don’t understand the issue. What are you trying to solve?

The gccxml binary to use can be (and usually is) hardwired at the build time of ROOT; by request of the experiments this has higher priority than anything in $PATH.

–gccxmlpath should work, though.

Cheers, Axel.