Description
When running CRAB & CI cmsRun
jobs, one sees:
e.g. https://gitlab.cern.ch/raggleto/UHH2-integration/-/jobs/3003439
Error in cling::AutoloadingVisitor::InsertIntoAutoloadingState:
Missing FileEntry for UHH2/core/include/Electron.h
requested to autoload type source_candidate
Error in cling::AutoloadingVisitor::InsertIntoAutoloadingState:
Missing FileEntry for UHH2/core/include/Jet.h
requested to autoload type Jet
...
cmsRun finishes fine, and makes a ntuple. However (a) these messages shouldn't be there, (b) it makes subsequent looping over ntuples impossible in e.g. a standalone ROOT macro (which I need for CI plot making). More specifically, one sees as well as the above, these messages as well:
e.g. https://gitlab.cern.ch/raggleto/UHH2-integration/-/jobs/3003449
UHH2core_xr dictionary payload:46:10: fatal error: 'UHH2/core/include/Particle.h' file not found
#include "UHH2/core/include/Particle.h"
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
This does stop standalone ROOT analysis of collections (e.g. trying to use jet.pt()
).
I think what happens is that ROOT6 needs the class header files, which are not included because they are in a dir names include
and not interface
: only the latter gets picked up by CRAB (for CI jobs, I use the same dirs as for CRAB jobs).
One might also need to set ROOT_INCLUDE_PATH
?
Potentially helpful: ClarkMcGrew/edep-sim#2
ROOT6 dictionaries are apparently generated with absolute paths to header files hard coded. There's some new autoloading mechanism which wants these headers. If the build source area goes away, these become dangling references.
One solution is to tell rootcling to inline the header file contents which this PR does by passing the option -inlineInputHeader through the cmake macro that runs rootcling.
Another solution is maybe to use -noIncludePaths. I guess this is good that it makes the dictionaries smaller but at the cost that one has to install the header files and set ROOT_INCLUDE_PATH
Note that in Makefile.common
we use rootcint
and not rootcling
...I have v.little idea of what ROOT is even trying to do here, or how rootcint
or rootcling
fit in...some trial and error required