Print line number of cache parse errors (#11109)
Track the line number while parsing `CMakeCache.txt` files and include it in a parse failure error message.
This commit is contained in:
parent
249aac71d0
commit
77cd74a3ea
|
@ -64,12 +64,14 @@ bool cmCacheManager::LoadCache(const std::string& path,
|
|||
const char *realbuffer;
|
||||
std::string buffer;
|
||||
std::string entryKey;
|
||||
unsigned int lineno = 0;
|
||||
while(fin)
|
||||
{
|
||||
// Format is key:type=value
|
||||
std::string helpString;
|
||||
CacheEntry e;
|
||||
cmSystemTools::GetLineFromStream(fin, buffer);
|
||||
lineno++;
|
||||
realbuffer = buffer.c_str();
|
||||
while(*realbuffer != '0' &&
|
||||
(*realbuffer == ' ' ||
|
||||
|
@ -77,6 +79,7 @@ bool cmCacheManager::LoadCache(const std::string& path,
|
|||
*realbuffer == '\r' ||
|
||||
*realbuffer == '\n'))
|
||||
{
|
||||
if (*realbuffer == '\n') lineno++;
|
||||
realbuffer++;
|
||||
}
|
||||
// skip blank lines and comment lines
|
||||
|
@ -96,6 +99,7 @@ bool cmCacheManager::LoadCache(const std::string& path,
|
|||
helpString += &realbuffer[2];
|
||||
}
|
||||
cmSystemTools::GetLineFromStream(fin, buffer);
|
||||
lineno++;
|
||||
realbuffer = buffer.c_str();
|
||||
if(!fin)
|
||||
{
|
||||
|
@ -138,8 +142,10 @@ bool cmCacheManager::LoadCache(const std::string& path,
|
|||
}
|
||||
else
|
||||
{
|
||||
cmSystemTools::Error("Parse error in cache file ", cacheFile.c_str(),
|
||||
". Offending entry: ", realbuffer);
|
||||
std::ostringstream error;
|
||||
error << "Parse error in cache file " << cacheFile;
|
||||
error << " on line " << lineno << ". Offending entry: " << realbuffer;
|
||||
cmSystemTools::Error(error.str().c_str());
|
||||
}
|
||||
}
|
||||
this->CacheMajorVersion = 0;
|
||||
|
|
|
@ -33,6 +33,11 @@ run_cmake_command(build-bad-dir
|
|||
run_cmake_command(build-bad-generator
|
||||
${CMAKE_COMMAND} --build ${RunCMake_SOURCE_DIR}/cache-bad-generator)
|
||||
|
||||
run_cmake_command(cache-bad-entry
|
||||
${CMAKE_COMMAND} --build ${RunCMake_SOURCE_DIR}/cache-bad-entry/)
|
||||
run_cmake_command(cache-empty-entry
|
||||
${CMAKE_COMMAND} --build ${RunCMake_SOURCE_DIR}/cache-empty-entry/)
|
||||
|
||||
function(run_BuildDir)
|
||||
# Use a single build tree for a few tests without cleaning.
|
||||
set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/BuildDir-build)
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
1
|
|
@ -0,0 +1 @@
|
|||
^CMake Error: Parse error in cache file .*/Tests/RunCMake/CommandLine/cache-bad-entry/CMakeCache.txt on line 7. Offending entry: BAD ENTRY.*
|
|
@ -0,0 +1,10 @@
|
|||
# This is a comment
|
||||
|
||||
// That was an empty line. This isn't.
|
||||
EMPTY_LINE:BOOL=FALSE
|
||||
|
||||
// Uhoh! Here it comes
|
||||
BAD ENTRY
|
||||
|
||||
// This is fine
|
||||
GOOD_ENTRY:BOOL=TRUE
|
|
@ -0,0 +1 @@
|
|||
1
|
|
@ -0,0 +1 @@
|
|||
^CMake Error: Parse error in cache file .*/Tests/RunCMake/CommandLine/cache-empty-entry/CMakeCache.txt on line 5. Offending entry:.*
|
|
@ -0,0 +1,7 @@
|
|||
// This is valid
|
||||
VALID:BOOL=TRUE
|
||||
|
||||
// This isn't
|
||||
|
||||
// One final entry
|
||||
FINAL:BOOL=TRUE
|
Loading…
Reference in New Issue