diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx index c785192ba..ca34aea80 100644 --- a/Source/cmTarget.cxx +++ b/Source/cmTarget.cxx @@ -418,11 +418,10 @@ void cmTarget::SetMakefile(cmMakefile* mf) //---------------------------------------------------------------------------- void cmTarget::AddUtility(const std::string& u, cmMakefile *makefile) { - this->Utilities.insert(u); - if(makefile) - { + if(this->Utilities.insert(u).second && makefile) + { makefile->GetBacktrace(UtilityBacktraces[u]); - } + } } //---------------------------------------------------------------------------- diff --git a/Tests/RunCMake/CMP0046/CMP0046-Duplicate-result.txt b/Tests/RunCMake/CMP0046/CMP0046-Duplicate-result.txt new file mode 100644 index 000000000..573541ac9 --- /dev/null +++ b/Tests/RunCMake/CMP0046/CMP0046-Duplicate-result.txt @@ -0,0 +1 @@ +0 diff --git a/Tests/RunCMake/CMP0046/CMP0046-Duplicate-stderr.txt b/Tests/RunCMake/CMP0046/CMP0046-Duplicate-stderr.txt new file mode 100644 index 000000000..fb31d6d6e --- /dev/null +++ b/Tests/RunCMake/CMP0046/CMP0046-Duplicate-stderr.txt @@ -0,0 +1,10 @@ +CMake Warning \(dev\) at CMP0046-Duplicate.cmake:5 \(add_dependencies\): + Policy CMP0046 is not set: Error on non-existent dependency in + add_dependencies. Run "cmake --help-policy CMP0046" for policy details. + Use the cmake_policy command to set the policy and suppress this warning. + + The dependency target "ctgt_no_exist" of target "dummy" does not exist. +Call Stack \(most recent call first\): + CMP0046-Duplicate.cmake:8 \(add_dep\) + CMakeLists.txt:3 \(include\) +This warning is for project developers. Use -Wno-dev to suppress it. diff --git a/Tests/RunCMake/CMP0046/CMP0046-Duplicate.cmake b/Tests/RunCMake/CMP0046/CMP0046-Duplicate.cmake new file mode 100644 index 000000000..26e640b9d --- /dev/null +++ b/Tests/RunCMake/CMP0046/CMP0046-Duplicate.cmake @@ -0,0 +1,9 @@ + +add_library(dummy empty.cpp) + +macro(add_dep) + add_dependencies(dummy ctgt_no_exist) +endmacro() + +add_dep() +add_dep() diff --git a/Tests/RunCMake/CMP0046/RunCMakeTest.cmake b/Tests/RunCMake/CMP0046/RunCMakeTest.cmake index 5131e5b23..0a39c7659 100644 --- a/Tests/RunCMake/CMP0046/RunCMakeTest.cmake +++ b/Tests/RunCMake/CMP0046/RunCMakeTest.cmake @@ -6,3 +6,4 @@ run_cmake(CMP0046-WARN-missing-dependency) run_cmake(CMP0046-OLD-existing-dependency) run_cmake(CMP0046-NEW-existing-dependency) +run_cmake(CMP0046-Duplicate) diff --git a/Tests/RunCMake/CMP0046/empty.cpp b/Tests/RunCMake/CMP0046/empty.cpp new file mode 100644 index 000000000..bfbbddeb9 --- /dev/null +++ b/Tests/RunCMake/CMP0046/empty.cpp @@ -0,0 +1,7 @@ +#ifdef _WIN32 +__declspec(dllexport) +#endif +int empty() +{ + return 0; +}