Skip to content

Dictionary Fixes (2017.04.04.)

This is to fix ATLINFR-1644.

It turns out that the way dictionaries were generated so far was not friendly towards CI builds. The build didn't recognise correctly when a CINT or Reflex dictionary would need to be re-generated. For CINT dictionaries the issue was much less prevalent, as classes needing such dictionaries usually don't have a complicated dependency tree. But the issue was present there as well.

The problem was that the build only looked for updates in the header files directly declared in the CMake configuration. Header files included through the declared headers were ignored by the build system. So if a header file changed in a CI build, the dictionary for the class of that header would likely not be re-generated.

The lucky thing is that add_custom_command actually supports what we need out of the box with its IMPLICIT_DEPENDS argument. The bad news is that this only works with the GNU Makefile generator at the moment. This implementation doesn't declare these dependencies correctly for a Ninja based build. Which currently makes it the only roadblock to using Ninja in the CI system.

While doing this, I added a test project to the repository (Projects/TestExternals). Which I used to test this development, as it allowed for a much quicker development cycle than to have to build one of the regular projects of the repository. For those interested, I tested the new code using akraszna/CMakeDictionaryTests.

Also reinserted the -DALLOW_TOOLHANDLE_NONCONSTNESS compiler flag for the AthenaExternals project. As it does seem easiest to just keep it in this repository for now.

Merge request reports