CLI: Suppress the unused warning if the key value pair is cached.
It is common to specify a CMAKE_TOOLCHAIN_FILE and get a warning for using it despite it not being used. The WarnUnusedCliUnused test relies on the warning being emitted each time cmake is run on an existing build. That behavior is changed by this patch to warn only on the first invokation of CMake, and not on subsequent invokations (because the variable is in the cache with the same value). For that test, a clean target is added which clears the cache and cause the warning to be emitted each time. As the Ninja generator does not support the feature needed to test this, it is not tested with that generator.
This commit is contained in:
parent
590a41ba0e
commit
273ecab96d
|
@ -750,6 +750,10 @@ void cmCacheManager::AddCacheEntry(const char* key,
|
||||||
}
|
}
|
||||||
e.SetProperty("HELPSTRING", helpString? helpString :
|
e.SetProperty("HELPSTRING", helpString? helpString :
|
||||||
"(This variable does not exist and should not be used)");
|
"(This variable does not exist and should not be used)");
|
||||||
|
if (this->Cache[key].Value == e.Value)
|
||||||
|
{
|
||||||
|
this->CMakeInstance->UnwatchUnusedCli(key);
|
||||||
|
}
|
||||||
this->Cache[key] = e;
|
this->Cache[key] = e;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -383,13 +383,24 @@ bool cmake::SetCacheArgs(const std::vector<std::string>& args)
|
||||||
cmCacheManager::CacheEntryType type = cmCacheManager::UNINITIALIZED;
|
cmCacheManager::CacheEntryType type = cmCacheManager::UNINITIALIZED;
|
||||||
if(cmCacheManager::ParseEntry(entry.c_str(), var, value, type))
|
if(cmCacheManager::ParseEntry(entry.c_str(), var, value, type))
|
||||||
{
|
{
|
||||||
|
// The value is transformed if it is a filepath for example, so
|
||||||
|
// we can't compare whether the value is already in the cache until
|
||||||
|
// after we call AddCacheEntry.
|
||||||
|
const char *cachedValue =
|
||||||
|
this->CacheManager->GetCacheValue(var.c_str());
|
||||||
|
|
||||||
this->CacheManager->AddCacheEntry(var.c_str(), value.c_str(),
|
this->CacheManager->AddCacheEntry(var.c_str(), value.c_str(),
|
||||||
"No help, variable specified on the command line.", type);
|
"No help, variable specified on the command line.", type);
|
||||||
if(this->WarnUnusedCli)
|
if(this->WarnUnusedCli)
|
||||||
{
|
{
|
||||||
|
if (!cachedValue
|
||||||
|
|| strcmp(this->CacheManager->GetCacheValue(var.c_str()),
|
||||||
|
cachedValue) != 0)
|
||||||
|
{
|
||||||
this->WatchUnusedCli(var.c_str());
|
this->WatchUnusedCli(var.c_str());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
std::cerr << "Parse error in command line argument: " << arg << "\n"
|
std::cerr << "Parse error in command line argument: " << arg << "\n"
|
||||||
|
|
|
@ -1618,17 +1618,23 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
|
||||||
FAIL_REGULAR_EXPRESSION "CMake Warning .*VariableUnusedViaUnset.CMakeLists.txt:5 \\(set\\):")
|
FAIL_REGULAR_EXPRESSION "CMake Warning .*VariableUnusedViaUnset.CMakeLists.txt:5 \\(set\\):")
|
||||||
list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/WarnUnusedUnusedViaUnset")
|
list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/WarnUnusedUnusedViaUnset")
|
||||||
|
|
||||||
|
if("${CMAKE_TEST_GENERATOR}" MATCHES "Makefile")
|
||||||
|
# Ninja does not support ADDITIONAL_MAKE_CLEAN_FILES and therefore fails
|
||||||
|
# this test. (See #13371)
|
||||||
|
# Apparently Visual Studio does not support it either. As the MakeClean
|
||||||
|
# test above is only run with the Makefiles generator, only run this
|
||||||
|
# test with the Makefiles generator also.
|
||||||
add_test(WarnUnusedCliUnused ${CMAKE_CTEST_COMMAND}
|
add_test(WarnUnusedCliUnused ${CMAKE_CTEST_COMMAND}
|
||||||
--build-and-test
|
--build-and-test
|
||||||
"${CMake_SOURCE_DIR}/Tests/VariableUsage"
|
"${CMake_SOURCE_DIR}/Tests/WarnUnusedCliUnused"
|
||||||
"${CMake_BINARY_DIR}/Tests/WarnUnusedCliUnused"
|
"${CMake_BINARY_DIR}/Tests/WarnUnusedCliUnused"
|
||||||
${build_generator_args}
|
${build_generator_args}
|
||||||
--build-noclean
|
|
||||||
--build-project WarnUnusedCliUnused
|
--build-project WarnUnusedCliUnused
|
||||||
--build-options "-DUNUSED_CLI_VARIABLE=Unused")
|
--build-options "-DUNUSED_CLI_VARIABLE=Unused")
|
||||||
set_tests_properties(WarnUnusedCliUnused PROPERTIES
|
set_tests_properties(WarnUnusedCliUnused PROPERTIES
|
||||||
PASS_REGULAR_EXPRESSION "CMake Warning:.*Manually-specified variables were not used by the project:.* UNUSED_CLI_VARIABLE")
|
PASS_REGULAR_EXPRESSION "CMake Warning:.*Manually-specified variables were not used by the project:.* UNUSED_CLI_VARIABLE")
|
||||||
list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/WarnUnusedCliUnused")
|
list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/WarnUnusedCliUnused")
|
||||||
|
endif()
|
||||||
|
|
||||||
add_test(WarnUnusedCliUsed ${CMAKE_CTEST_COMMAND}
|
add_test(WarnUnusedCliUsed ${CMAKE_CTEST_COMMAND}
|
||||||
--build-and-test
|
--build-and-test
|
||||||
|
|
|
@ -0,0 +1,9 @@
|
||||||
|
cmake_minimum_required(VERSION 2.8)
|
||||||
|
|
||||||
|
project(WarnUnusedCliUnused)
|
||||||
|
|
||||||
|
set_directory_properties(PROPERTIES
|
||||||
|
ADDITIONAL_MAKE_CLEAN_FILES "${CMAKE_BINARY_DIR}/CMakeCache.txt"
|
||||||
|
)
|
||||||
|
|
||||||
|
add_library(dummy empty.cpp)
|
|
@ -0,0 +1,7 @@
|
||||||
|
#ifdef _WIN32
|
||||||
|
__declspec(dllexport)
|
||||||
|
#endif
|
||||||
|
int empty(void)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
Loading…
Reference in New Issue