diff options
author | Brad King <brad.king@kitware.com> | 2009-03-23 18:48:09 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2009-03-23 18:48:09 (GMT) |
commit | 4085454658d9af9c2cfb58b67ff2434692887a30 (patch) | |
tree | d164217623a7d33569a807d9123565262e077f3a /Tests/Preprocess | |
parent | 10a91d8467d10fcf9cf9eaa2a05e9ea6fcc87614 (diff) | |
download | CMake-4085454658d9af9c2cfb58b67ff2434692887a30.zip CMake-4085454658d9af9c2cfb58b67ff2434692887a30.tar.gz CMake-4085454658d9af9c2cfb58b67ff2434692887a30.tar.bz2 |
ENH: Support preprocessor def values in VS6
The add_definitions() command and COMPILE_DEFINITIONS dir/tgt/src
properties support preprocessor definitions with values. Previously
values were not supported in the VS6 generator even though the native
tool supports them. It is only values with spaces that VS6 does not
support. This enables support and instead complains only for values
with spaces. See issue #8779.
Diffstat (limited to 'Tests/Preprocess')
-rw-r--r-- | Tests/Preprocess/CMakeLists.txt | 63 | ||||
-rw-r--r-- | Tests/Preprocess/preprocess.c | 2 | ||||
-rw-r--r-- | Tests/Preprocess/preprocess.cxx | 2 |
3 files changed, 34 insertions, 33 deletions
diff --git a/Tests/Preprocess/CMakeLists.txt b/Tests/Preprocess/CMakeLists.txt index fa9a109..bb33907 100644 --- a/Tests/Preprocess/CMakeLists.txt +++ b/Tests/Preprocess/CMakeLists.txt @@ -65,14 +65,20 @@ if(NOT BORLAND AND NOT PP_VS70) set(SEMICOLON "\;") endif(NOT BORLAND AND NOT PP_VS70) -if(NOT PP_BORLAND AND NOT PP_WATCOM) - # Borland, WMake: multiple spaces - # The make tool seems to remove extra whitespace from inside - # quoted strings when passing to the compiler. It does not have - # trouble passing to other tools, and the compiler may be directly - # invoked from the command line. - set(STRING_EXTRA "${STRING_EXTRA} ") -endif(NOT PP_BORLAND AND NOT PP_WATCOM) +if(NOT PP_VS6) + # VS 6 IDE: spaces + # The project parser unconditionally separates arguments at spaces. + set(STRING_EXTRA "${STRING_EXTRA} ") + + if(NOT PP_BORLAND AND NOT PP_WATCOM) + # Borland, WMake: multiple spaces + # The make tool seems to remove extra whitespace from inside + # quoted strings when passing to the compiler. It does not have + # trouble passing to other tools, and the compiler may be directly + # invoked from the command line. + set(STRING_EXTRA "${STRING_EXTRA} ") + endif(NOT PP_BORLAND AND NOT PP_WATCOM) +endif(NOT PP_VS6) if(NOT PP_VS) # VS: , @@ -152,7 +158,7 @@ endif(PP_NMAKE OR PP_UMAKE) # support it and it is not an operator it is not worthwhile. # Compose the final test string. -set(STRING_VALUE "hello `~!@$*)(_+-=}{][:'.?/ ${STRING_EXTRA}world") +set(STRING_VALUE "hello`~!@$*)(_+-=}{][:'.?/${STRING_EXTRA}world") #----------------------------------------------------------------------------- # Function-style macro command-line support: @@ -194,11 +200,7 @@ endif(PP_VS6) add_definitions(-DOLD_DEF -DOLD_EXPR=2) # Make sure old-style definitions are converted to directory property. -if(PREPROCESS_VS6) - set(OLD_DEFS_EXPECTED "OLD_DEF") -else(PREPROCESS_VS6) - set(OLD_DEFS_EXPECTED "OLD_DEF;OLD_EXPR=2") -endif(PREPROCESS_VS6) +set(OLD_DEFS_EXPECTED "OLD_DEF;OLD_EXPR=2") get_property(OLD_DEFS DIRECTORY PROPERTY COMPILE_DEFINITIONS) if(NOT "${OLD_DEFS}" STREQUAL "${OLD_DEFS_EXPECTED}") message(SEND_ERROR "add_definitions not converted to directory property!") @@ -225,23 +227,26 @@ foreach(c "" "_DEBUG" "_RELEASE") ) endforeach(c) -# Add definitions with values. VS6 does not support this. +# Add definitions with values. if(NOT PREPROCESS_VS6) - set_property( - TARGET Preprocess - APPEND PROPERTY COMPILE_DEFINITIONS - "TARGET_STRING=\"${STRING_VALUE}${SEMICOLON}\"" - "TARGET_EXPR=${EXPR}" - "TARGET_PATH=\"${TARGET_PATH}\"" - ) - set_property( - SOURCE preprocess.c preprocess${VS6}.cxx - APPEND PROPERTY COMPILE_DEFINITIONS - "FILE_STRING=\"${STRING_VALUE}${SEMICOLON}\"" - "FILE_EXPR=${EXPR}" - "FILE_PATH=\"${FILE_PATH}\"" - ) + # The path might have spaces, which VS6 does not support. + set(DEF_TARGET_PATH "TARGET_PATH=\"${TARGET_PATH}\"") + set(DEF_FILE_PATH "FILE_PATH=\"${FILE_PATH}\"") endif(NOT PREPROCESS_VS6) +set_property( + TARGET Preprocess + APPEND PROPERTY COMPILE_DEFINITIONS + "TARGET_STRING=\"${STRING_VALUE}${SEMICOLON}\"" + "TARGET_EXPR=${EXPR}" + ${DEF_TARGET_PATH} + ) +set_property( + SOURCE preprocess.c preprocess${VS6}.cxx + APPEND PROPERTY COMPILE_DEFINITIONS + "FILE_STRING=\"${STRING_VALUE}${SEMICOLON}\"" + "FILE_EXPR=${EXPR}" + ${DEF_FILE_PATH} + ) # Helper target for running test manually in build tree. add_custom_target(drive COMMAND Preprocess) diff --git a/Tests/Preprocess/preprocess.c b/Tests/Preprocess/preprocess.c index 5dd9003..16209ac 100644 --- a/Tests/Preprocess/preprocess.c +++ b/Tests/Preprocess/preprocess.c @@ -9,7 +9,6 @@ int check_defines_C(void) { int result = 1; -#ifndef PREPROCESS_VS6 if(strcmp(FILE_STRING, STRING_VALUE) != 0) { fprintf(stderr, @@ -38,7 +37,6 @@ int check_defines_C(void) result = 0; } } -#endif #ifdef NDEBUG # ifdef FILE_DEF_DEBUG { diff --git a/Tests/Preprocess/preprocess.cxx b/Tests/Preprocess/preprocess.cxx index 628521f..27b6ac8 100644 --- a/Tests/Preprocess/preprocess.cxx +++ b/Tests/Preprocess/preprocess.cxx @@ -11,7 +11,6 @@ extern "C" int check_defines_C(void); int check_defines_CXX() { int result = 1; -#ifndef PREPROCESS_VS6 if(strcmp(FILE_STRING, STRING_VALUE) != 0) { fprintf(stderr, @@ -40,7 +39,6 @@ int check_defines_CXX() result = 0; } } -#endif #ifdef NDEBUG # ifdef FILE_DEF_DEBUG { |