[CMake] how to do this: svn info?

Totte Karlsson totte at dunescientific.com
Thu Jun 28 19:56:12 EDT 2012


Hi,

I'm trying to get some svn information into a build of a C library.

The cmake currently looks like this (gathered from various posts)

INCLUDE(FindSubversion)
IF(SUBVERSION_FOUND)
     Subversion_WC_INFO(${PROJECT_SOURCE_DIR} rr)
     Subversion_WC_LOG(${PROJECT_SOURCE_DIR} rr)

     SET(infoFile rr_svn_info)

     FILE(WRITE ${infoFile}.txt
"#ifndef ${infoFile}H
#define ${infoFile}H
const int SVN_VERSION =  ${rr_WC_REVISION};\n
const char* SVN_LAST_COMMIT_AUTHOR =\"${rr_WC_LAST_CHANGED_AUTHOR}\";\n
const char* SVN_LASTLOG =\"    ${rr_LAST_CHANGED_LOG}\";\n
#endif"
     )

     EXECUTE_PROCESS(COMMAND ${CMAKE_COMMAND} -E copy_if_different 
${infoFile}.txt ${infoFile}.h)
ENDIF(SUBVERSION_FOUND)


Currently I have two problems:
When generating the header, the svn_lastlog expands to something like

const char* SVN_LASTLOG =" 
------------------------------------------------------------------------
r505 | tottek | 2012-06-28 14:11:49 -0700 (Thu, 28 Jun 2012) | 20 lines

New release
..... etc..

The above will not compile, because a string spanning multiple lines in C must 
have a continuation character at the end of each line, e.g.

const char* SVN_LASTLOG ="\ 
------------------------------------------------------------------------\
r505 | tottek | 2012-06-28 14:11:49 -0700 (Thu, 28 Jun 2012) | 20 lines\
.... etc...

How would one solve that in CMake?

The second problem is the execute process command
     EXECUTE_PROCESS(COMMAND ${CMAKE_COMMAND} -E copy_if_different 
${infoFile}.txt ${infoFile}.h)

which do create the txt file, but fails to copy it to the .h file. Just getting 
an error saying
Error copying file (if different) from "the txt file" to "the h file"

Any tips?

-totte

-- 
.........................
Totte Karlsson, Ph.D.
Dune Scientific, LLC
425-296 1980 (office)
425-780 9648 (cell)
www.dunescientific.com
.........................




More information about the CMake mailing list