Hi,
I’m working on porting the belle 2 reconstruction software basf2 to ROOT6. So far, all problems have been due to issues in basf2’s build system, with the exception of the (trivial) rootcint -> rootcling renaming. Congratulations!
Now I’m running into an issue that is probably trivial to solve for someone in the know: during startup of the software I get a message as
$ basf2
In file included from input_line_41:19:
./include/framework/datastore/RelationsObject.h:14:10: fatal error: 'framework/datastore/DataStore.h' file not found
#include <framework/datastore/DataStore.h>
^
basf2: /home/schlueter/src/root.git/core/meta/src/TCling.cxx:1148: virtual void TCling::RegisterModule(const char*, const char**, const char**, const char**, const char*, void (*)()): Assertion `cling::Interpreter::kSuccess == compRes && "Payload code of a dictionary could not be parsed correctly."' failed.
Aborted (core dumped)
$
I can fix this error, by changing the respective include path to
(this is where the file resides relative to my $PWD) but then I get the same error again at the next include statement. I.e. (note that it found the header it complained about before)
$ basf2
In file included from input_line_41:19:
In file included from ./include/framework/datastore/RelationsObject.h:14:
./include/framework/datastore/DataStore.h:14:10: fatal error: 'framework/datastore/RelationEntry.h' file not found
#include <framework/datastore/RelationEntry.h>
^
basf2: /home/schlueter/src/root.git/core/meta/src/TCling.cxx:1148: virtual void TCling::RegisterModule(const char*, const char**, const char**, const char**, const char*, void (*)()): Assertion `cling::Interpreter::kSuccess == compRes && "Payload code of a dictionary could not be parsed correctly."' failed.
Aborted (core dumped)
$
Note that the original error message itself is issued inside a file that sits inside “include/”, so there is some kind of inconsistency going on her. I understand that only
is supposed to first look in the directory containing the including file, but FAICT in this case this is some magic inside cling itself that is leading to this place, and the include path should be set correctly because otherwise the initial file should not have been found. The behavior appears to have changed WRT cint.
Hints?
ps backtrace looks like this when the assertion is hit, so it’s trying to initializae an automatically generated dictionary:
#0 TCling::RegisterModule (this=0x6c2190,
modulename=0x7ffff74a89d8 "framework_datastore_include_Dict",
headers=0x7ffff7780f80 <(anonymous namespace)::TriggerDictionaryInitialization_framework_datastore_include_Dict_Impl()::headers>,
allHeaders=<optimized out>, includePaths=<optimized out>,
payloadCode=0x7ffff74a8b00 <_ZL12kBitsPerByte> "\b",
triggerFunc=0x7ffff746fc98 <(anonymous namespace)::TriggerDictionaryInitialization_framework_datastore_include_Dict_Impl()>)
at /home/schlueter/src/root.git/core/meta/src/TCling.cxx:1148
#1 0x00007ffff5f6b46b in TROOT::RegisterModule (
modulename=0x7ffff74a89d8 "framework_datastore_include_Dict",
headers=0x7ffff7780f80 <(anonymous namespace)::TriggerDictionaryInitialization_framework_datastore_include_Dict_Impl()::headers>,
allHeaders=0x7ffff7780fc0 <(anonymous namespace)::TriggerDictionaryInitialization_framework_datastore_include_Dict_Impl()::allHeaders>,
includePaths=0x7ffff77815a0 <(anonymous namespace)::TriggerDictionaryInitialization_framework_datastore_include_Dict_Impl()::includePaths>,
payloadCode=0x7ffff74a8b30 "\n#ifndef G__VECTOR_HAS_CLASS_ITERATOR\n #define G__VECTOR_HAS_CLASS_ITERATOR\n#endif\n#ifndef HAS_CALLGRIND\n #define HAS_CALLGRIND\n#endif\n#ifndef HAS_PGSQL\n #define HAS_PGSQL\n#endif\n#ifndef RaveDllExp"...,
triggerFunc=0x7ffff746fc98 <(anonymous namespace)::TriggerDictionaryInitialization_framework_datastore_include_Dict_Impl()>)
at /home/schlueter/src/root.git/core/base/src/TROOT.cxx:2126
#2 0x00007ffff746fcdc in (anonymous namespace)::TriggerDictionaryInitialization_framework_datastore_include_Dict_Impl ()
at build/Linux_x86_64/debug/framework_datastore_include_Dict.cc:649
#3 0x00007ffff746fcf7 in (anonymous namespace)::DictInit::DictInit (
this=0x7ffff7786ce8 <_ZN12_GLOBAL__N_1L26__TheDictionaryInitializerE>)
at build/Linux_x86_64/debug/framework_datastore_include_Dict.cc:655
#4 0x00007ffff746fd93 in __static_initialization_and_destruction_0 (
__initialize_p=1, __priority=65535)
at build/Linux_x86_64/debug/framework_datastore_include_Dict.cc:657
#5 0x00007ffff746fda8 in _GLOBAL__sub_I_framework_datastore_include_Dict.cc(void) () at build/Linux_x86_64/debug/framework_datastore_include_Dict.cc:661
#6 0x00007ffff7de9316 in call_init (l=<optimized out>, argc=1,
argv=0x7fffffffd5a8, env=0x7fffffffd5b8) at dl-init.c:85
#7 0x00007ffff7de93ef in call_init (env=<optimized out>,
argv=<optimized out>, argc=<optimized out>, l=<optimized out>)
at dl-init.c:52
#8 _dl_init (main_map=0x7ffff7ffe2e8, argc=1, argv=0x7fffffffd5a8,
env=0x7fffffffd5b8) at dl-init.c:134
#9 0x00007ffff7ddb6fa in _dl_start_user () from /lib64/ld-linux-x86-64.so.2
#10 0x0000000000000001 in ?? ()
#11 0x00007fffffffd961 in ?? ()
#12 0x0000000000000000 in ?? ()
Digging a bit further, I find that in the generated dictionary, register_module is called with this as includePaths parameter:
static const char* includePaths[] = {
"/home/schlueter/src/belle2/externals/development/include",
"/home/schlueter/src/belle2/tools/virtualenv/include/python2.7",
"/home/schlueter/src/belle2/externals/development/include/CLHEP",
"/home/schlueter/src/belle2/externals/development/include/Geant4",
"/home/schlueter/src/belle2/externals/development/include/pgsql",
"/home/schlueter/src/root.git/include",
"/home/schlueter/src/belle2/externals/development/include/vgm",
"/home/schlueter/src/belle2/externals/development/include/HepMC",
"/home/schlueter/src/belle2/externals/development/include/pythia",
"/home/schlueter/src/belle2/externals/development/include/Photos",
"/home/schlueter/src/belle2/externals/development/include/Tauola",
"/home/schlueter/src/belle2/externals/development/include/evtgen",
"/home/schlueter/src/belle2/externals/development/include/FLC",
"/home/schlueter/src/belle2/externals/development/include/Eigen",
"/usr/include/libxml2",
"/home/schlueter/src/root.git/include",
"/home/schlueter/src/basf2_clean/",
0
};
The last entry should probably read “/home/schlueter/src/basf2_clean/include”./ If I make this change manually, the startup sequence completes. I’ll test execution tomorrow