Commit 9916067
committed
[CMake] Make dictionary module dependencies independent of config order
For each entry in DEPENDENCIES, ROOT_GENERATE_DICTIONARY passes rootcling
a `-m <dep>.pcm` flag and a dependency on the dependency's module file, so
that the prebuilt module is loaded instead of being built implicitly. This
was wired up by inspecting the target graph while the macro runs
(`if(NOT TARGET G__${dep})` / `get_target_property(... ROOT_PCM_FILENAME)`),
which only works if <dep> is configured before the dictionaries using it.
That breaks for core/multiproc: libMultiProc depends on Net (via TSocket),
but it lives under core/, configured long before net/. So when G__MultiProc
is generated, G__Net does not exist yet, the dependency is silently dropped,
and rootcling can build Net implicitly, failing with "Building module 'Net'
implicitly ... 'G__MultiProc.cxx' depends on 'Net'". The same shape affects
every dictionary depending on a module configured later (Tree -> Net, ...).
Decide this at generation time instead, when all targets exist: guard the
flag and the module-file dependency with $<TARGET_EXISTS:G__<dep>>. They are
emitted whenever <dep> provides a dictionary and expand to nothing otherwise
(e.g. a plain library such as TBB::tbb), regardless of configuration order.
Closes #21673.
🤖 Problem identified by AI, then the human guided the AI to write the
solution that the human wanted to apply.1 parent b56c913 commit 9916067
1 file changed
Lines changed: 7 additions & 12 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
623 | 623 | | |
624 | 624 | | |
625 | 625 | | |
626 | | - | |
627 | | - | |
628 | | - | |
629 | | - | |
630 | | - | |
| 626 | + | |
| 627 | + | |
| 628 | + | |
| 629 | + | |
| 630 | + | |
631 | 631 | | |
632 | 632 | | |
633 | 633 | | |
634 | | - | |
635 | | - | |
636 | | - | |
637 | | - | |
638 | | - | |
639 | | - | |
| 634 | + | |
640 | 635 | | |
641 | | - | |
| 636 | + | |
642 | 637 | | |
643 | 638 | | |
644 | 639 | | |
| |||
0 commit comments