MantisBT - CMake
View Issue Details
0016098CMakeCMakepublic2016-05-10 10:412016-06-10 14:31
tibur 
Kitware Robot 
normalminoralways
closedmoved 
Linux / Windows
CMake 3.5.2 
 
0016098: CMake fails to read its own cache after writing a variable with a carriage return.
I let cmake read a version number from a file, and then store a variable made from this version number string.

{{{
cmake_minimum_required(VERSION 2.8.9)

file(READ "version.txt" API_VERSION)
string(REPLACE "." ";" API_VERSION_LIST ${API_VERSION})
list(GET API_VERSION_LIST 0 API_VERSION_MAJOR)
list(GET API_VERSION_LIST 1 API_VERSION_MINOR)
list(GET API_VERSION_LIST 2 API_VERSION_PATCH)

#string(STRIP ${API_VERSION_PATCH} API_VERSION_PATCH)

set(TEST "${API_VERSION_PATCH}_TEST" CACHE STRING "Offending entry")
}}}

If the version.txt file contains a newline at the end, then the corresponding variable is broken within cmake cache. CMake then complains:

CMake Error: Parse error in cache file [...]/cmake_bug/build/CMakeCache.txt. Offending entry: _TEST

If we look at CMakeCache.txt we can see the following lines:

TEST:STRING=4
_TEST
Get both files.
Use cmake first to create the build directory, then a second time on that build folder.
No tags attached.
txt version.txt (6) 2016-05-10 10:41
https://public.kitware.com/Bug/file/5687/version.txt
txt CMakeLists.txt (398) 2016-05-10 10:41
https://public.kitware.com/Bug/file/5688/CMakeLists.txt
Issue History
2016-05-10 10:41tiburNew Issue
2016-05-10 10:41tiburFile Added: version.txt
2016-05-10 10:41tiburFile Added: CMakeLists.txt
2016-05-10 13:55Brad KingNote Added: 0041044
2016-06-10 14:29Kitware RobotNote Added: 0043001
2016-06-10 14:29Kitware RobotStatusnew => resolved
2016-06-10 14:29Kitware RobotResolutionopen => moved
2016-06-10 14:29Kitware RobotAssigned To => Kitware Robot
2016-06-10 14:31Kitware RobotStatusresolved => closed

Notes
(0041044)
Brad King   
2016-05-10 13:55   
Here is an even simpler example CMakeLists.txt:

 cmake_minimum_required(VERSION 3.5)
 project(Issue16098 NONE)
 set(TEST "a\nb" CACHE STRING "Offending entry")

The cache format was never designed to encode newlines. One approach may be to truncate values at newlines when writing the cache and issue a warning.
(0043001)
Kitware Robot   
2016-06-10 14:29   
Resolving issue as `moved`.

This issue tracker is no longer used. Further discussion of this issue may take place in the current CMake Issues page linked in the banner at the top of this page.