]> granicus.if.org Git - check/commitdiff
Add param @ONLY to CMake configure_file()
authorMikko Johannes Koivunalho <mikko.koivunalho@iki.fi>
Sun, 8 Sep 2019 09:54:31 +0000 (11:54 +0200)
committerMikko Johannes Koivunalho <mikko.koivunalho@iki.fi>
Sun, 8 Sep 2019 10:08:31 +0000 (12:08 +0200)
Restrict variable replacement to references of the form @VAR@.
This is useful for configuring scripts that also use ${VAR} syntax.
Adding @ONLY is precautionary action to prevent future bugs.

Attn. cmake/config.h.in contains ${VAR} in #cmakedefine clauses!

How to use CMake variable substitution.

Wrong:

    #if @HAVE_FORK@
        [..]
    #endif

Because this will result as:

    #if 1
        [..]
    #endif

Better:

    /* Imported CMake variables created during build. */
    #cmakedefine HAVE_FORK 1

    #ifdef HAVE_FORK
        [..]
    #endif

Because this will result as:

    /* Imported CMake variables created during build. */
    #define HAVE_FORK 1

    #ifdef HAVE_FORK
        [..]
    #endif

Or:

    /* Imported CMake variables created during build. */
    /* #undef HAVE_FORK */
    [..]

This is more readable. Now we know which decision actually
was taken.

If you need to pass the parameter to the definition,
it is just as easy:

    /* Imported CMake variables created during build. */
    #cmakedefine CORRECT_SIZE @CORRECT_SIZE@

    #if CORRECT_SIZE >= 20
        [..]
    #endif

Signed-off-by: Mikko Johannes Koivunalho <mikko.koivunalho@iki.fi>
CMakeLists.txt
src/CMakeLists.txt
tests/CMakeLists.txt

index 8b93c187296883ec7fa1c95dd9dc57599d4987cf..f4b958fa06101e495b4eb46ccc2987222e467a7c 100644 (file)
@@ -358,11 +358,12 @@ endif (HAVE_SUBUNIT)
 # Generate "config.h" from "cmake/config.h.in"
 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/cmake/config.h.in
   ${CMAKE_CURRENT_BINARY_DIR}/config.h)
+  # Param @ONLY not used on purpose!
 include_directories(BEFORE ${CMAKE_CURRENT_BINARY_DIR})
 add_definitions(-DHAVE_CONFIG_H)
 set(CONFIG_HEADER ${CMAKE_CURRENT_BINARY_DIR}/config.h)
 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/cmake/check_stdint.h.in
-  ${CMAKE_CURRENT_BINARY_DIR}/check_stdint.h)
+  ${CMAKE_CURRENT_BINARY_DIR}/check_stdint.h @ONLY)
 install(FILES ${CMAKE_CURRENT_BINARY_DIR}/check_stdint.h DESTINATION include)
 
 ###############################################################################
index 6a86811c3e3f173e03abdcebd194d1800520dce8..8b126671d69ee9f24b6524bcac09202e6953c67b 100644 (file)
@@ -43,7 +43,7 @@ set(HEADERS
   check_print.h
   check_str.h)
 
-configure_file(check.h.in check.h)
+configure_file(check.h.in check.h @ONLY)
 
 add_library(check STATIC ${SOURCES} ${HEADERS})
 target_link_libraries(check ${LIBM} ${LIBRT} ${SUBUNIT})
index 7ce83890a5c224f4c3094ac6ab5703fab07ea964..82e3b43948d3ff6c8997c6854d88e47830114a5a 100644 (file)
@@ -38,7 +38,7 @@ if(WIN32)
 endif(WIN32)
 
 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/test_vars.in
-  ${CMAKE_CURRENT_BINARY_DIR}/test_vars)
+  ${CMAKE_CURRENT_BINARY_DIR}/test_vars @ONLY)
 
 set(CHECK_CHECK_SOURCES
   check_check_exit.c