• Brad King's avatar
    Ninja: Fix inter-target order-only dependencies of custom commands · 1296a0ea
    Brad King authored
    Custom command dependencies are followed for each target's source files
    and add their transitive closure to the corresponding target.  This
    means that when a custom command in one target has a dependency on a
    custom command in another target, both will appear in the dependent
    target's sources.  For the Makefile, VS IDE, and Xcode generators this
    is not a problem because each target gets its own independent build
    system that is evaluated in target dependency order.  By the time the
    dependent target is built the custom command that belongs to one of its
    dependencies will already have been brought up to date.
    
    For the Ninja generator we need to generate a monolithic build system
    covering all targets so we can have only one copy of a custom command.
    This means that we need to reconcile the target-level ordering
    dependencies from its appearance in multiple targets to include only the
    least-dependent common set.  This is done by computing the set
    intersection of the dependencies of all the targets containing a custom
    command.  However, we previously included only the direct dependencies
    so any target-level dependency not directly added to all targets into
    which a custom command propagates was discarded.
    
    Fix this by computing the transitive closure of dependencies for each
    target and then intersecting those sets.  That will get the common set
    of dependencies.  Also add a test to cover a case in which the
    incorrectly dropped target ordering dependencies would fail.
    1296a0ea
Name
Last commit
Last update
Auxiliary Loading commit data...
Help Loading commit data...
Licenses Loading commit data...
Modules Loading commit data...
Packaging Loading commit data...
Source Loading commit data...
Templates Loading commit data...
Tests Loading commit data...
Utilities Loading commit data...
.clang-format Loading commit data...
.gitattributes Loading commit data...
.gitignore Loading commit data...
.hooks-config.bash Loading commit data...
CMakeCPack.cmake Loading commit data...
CMakeCPackOptions.cmake.in Loading commit data...
CMakeGraphVizOptions.cmake Loading commit data...
CMakeLists.txt Loading commit data...
CMakeLogo.gif Loading commit data...
CONTRIBUTING.rst Loading commit data...
CTestConfig.cmake Loading commit data...
CTestCustom.cmake.in Loading commit data...
CompileFlags.cmake Loading commit data...
Copyright.txt Loading commit data...
DartConfig.cmake Loading commit data...
README.rst Loading commit data...
bootstrap Loading commit data...
cmake_uninstall.cmake.in Loading commit data...
configure Loading commit data...
doxygen.config Loading commit data...