CMake/Tests/Module/ExternalData
Brad King f9973166e8 ExternalData: Tolerate files duplicated across multiple targets
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: David Manthey <david.manthey@kitware.com>
2016-09-07 15:17:33 -04:00
..
Alt
Data2
Data3
Data4
Data5
DataNoSymlinks
DirRecurse
Directory
MD5
SHA1
SHA224
SHA256
CMakeLists.txt
Data Space.dat.md5
Data.dat.md5
Data1Check.cmake
Data2.dat.md5
Data2b.dat.md5
DataAlgoMapA.dat.md5
DataAlgoMapB.dat.sha1
DataScript.dat.md5
MetaA.dat.md5
MetaB.dat.md5
MetaC.dat.md5
MetaTop.dat.md5
MyScript1.cmake
PairedA.dat.md5
PairedB.dat.md5
SeriesA.dat.md5
SeriesA1.dat.md5
SeriesA2.dat.md5
SeriesA3.dat.md5
SeriesAn1.dat.md5
SeriesAn2.dat.md5
SeriesAn3.dat.md5
SeriesB.dat.md5
SeriesB_1.dat.md5
SeriesB_2.dat.md5
SeriesB_3.dat.md5
SeriesBn_1.dat.md5
SeriesBn_2.dat.md5
SeriesBn_3.dat.md5
SeriesC.1.dat.md5
SeriesC.2.dat.md5
SeriesC.3.dat.md5
SeriesC.dat.md5
SeriesCn.1.dat.md5
SeriesCn.2.dat.md5
SeriesCn.3.dat.md5
SeriesD-1.dat.md5
SeriesD-2.dat.md5
SeriesD-3.dat.md5
SeriesD.dat.md5
SeriesDn-1.dat.md5
SeriesDn-2.dat.md5
SeriesDn-3.dat.md5
SeriesMixed.1.dat.md5
SeriesMixed.2.dat.sha1
SeriesMixed.3.dat.sha224
SeriesMixed.4.dat.sha256