[CMake] Re: REGEX for CONFIGURE_FILE

Brandon J. Van Every bvanevery at gmail.com
Thu Jun 8 05:36:16 EDT 2006


Brandon J. Van Every wrote:
>   I tried various permutations of -P -DMYVAR:STRING=myfilename.scm and 
> it doesn't work.  So I suppose I'll be copying to some local files and 
> using -E copy_if_different as a final step.

Lacking arguments, I also had to pass variables via a file and then 
INCLUDE it.  My final solution uses 3 files: CMakeLists.txt, 
scm_vars.cmake.in, and scm_regex.cmake.


CMakeLists.txt:
---------------

MACRO(GEN_CSC_SCM)
   CONFIGURE_FILE(${Chicken_SOURCE_DIR}/csc_vars.cmake.in 
${CMAKE_CURRENT_BINARY_DIR}/csc_vars.cmake)
   ADD_CUSTOM_COMMAND(
     OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/csc.scm
     MAIN_DEPENDENCY ${Chicken_SOURCE_DIR}/csc.scm.in
     DEPENDS
       ${CMAKE_CURRENT_BINARY_DIR}/csc_vars.cmake
       ${Chicken_SOURCE_DIR}/csc_regex.cmake
     COMMAND ${CMAKE_COMMAND} -P ${Chicken_SOURCE_DIR}/csc_regex.cmake
   )
ENDMACRO(GEN_CSC_SCM)


csc_vars.cmake.in:
------------------

SET(Chicken_SOURCE_DIR ${Chicken_SOURCE_DIR})
SET(CMAKE_CURRENT_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR})
# SET whatever specific vars are needed


csc_regex.cmake:
----------------

INCLUDE(${CMAKE_SOURCE_DIR}/csc_vars.cmake)

# Now we have some of the usual variables we're expecting to have.

MESSAGE(STATUS "Regexing ${Chicken_SOURCE_DIR}/csc.scm.in to 
${CMAKE_CURRENT_BINARY_DIR}/csc.scm")
FILE(READ ${Chicken_SOURCE_DIR}/csc.scm.in input)
# Do the regex here
FILE(WRITE ${CMAKE_CURRENT_BINARY_DIR}/csc.scm "${input}")



> It would be a lot cleaner if CONFIGURE_FILE was capable of more 
> intelligence.  Doing regex replacements is an exceedingly common 
> operation when porting from a ./configure script.  I think potential 
> converts will be a lot happier if they can keep their sed equivalents 
> inside CMakeLists.txt.
>
>
> Cheers,
> Brandon Van Every
>
>





More information about the CMake mailing list