Skip to content
  • Brad King's avatar
    ExternalData: Tolerate files duplicated across multiple targets · f9973166
    Brad King authored
    
    
    If multiple ExternalData_Target_Add calls generate the same output file
    then we need to avoid calling add_custom_command multiple times with
    that output.  This was already done within a single target by setting a
    variable in the local function scope.  This will not be visible in other
    calls though so we need to use a directory property instead to prevent
    adding a custom command multiple times for one output in a directory.
    
    Normally it is not safe to have multiple custom commands that produce
    the same output file across multiple independent targets, but since we
    use atomic replacement of outputs the resulting races should not be a
    problem.  For the convenience of projects, tolerate this instead of
    diagnosing it.  In particular, we previously allowed up to two copies
    of the custom command in one directory because CMake has a fallback
    from MAIN_DEPENDENCY to an `<output>.rule` file.
    
    While at it, add a note to the documentation that typically only one
    external data target should be needed for a project.
    
    Reported-by: default avatarDavid Manthey <david.manthey@kitware.com>
    f9973166