diff options
author | Brad King <brad.king@kitware.com> | 2008-01-18 01:34:10 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2008-01-18 01:34:10 (GMT) |
commit | 9d57dbd098d91123eeec76eef502dcb5c4ba5c89 (patch) | |
tree | eff2ac71f8f3b09a2dc7ff2a39970b7397446121 | |
parent | 8d1d5500c8cb7ebabce73777c79c33074e679ab5 (diff) | |
download | CMake-9d57dbd098d91123eeec76eef502dcb5c4ba5c89.zip CMake-9d57dbd098d91123eeec76eef502dcb5c4ba5c89.tar.gz CMake-9d57dbd098d91123eeec76eef502dcb5c4ba5c89.tar.bz2 |
ENH: Make per-configuration COMPILE_DEFINITIONS_<CONFIG> directory property initialized from parent.
-rw-r--r-- | Source/cmMakefile.cxx | 31 | ||||
-rw-r--r-- | Tests/Complex/CMakeLists.txt | 4 | ||||
-rw-r--r-- | Tests/Complex/Executable/complex.cxx | 6 | ||||
-rw-r--r-- | Tests/ComplexOneConfig/CMakeLists.txt | 4 | ||||
-rw-r--r-- | Tests/ComplexOneConfig/Executable/complex.cxx | 6 | ||||
-rw-r--r-- | Tests/ComplexRelativePaths/CMakeLists.txt | 4 | ||||
-rw-r--r-- | Tests/ComplexRelativePaths/Executable/complex.cxx | 6 |
7 files changed, 55 insertions, 6 deletions
diff --git a/Source/cmMakefile.cxx b/Source/cmMakefile.cxx index 62872d0..5d2464f 100644 --- a/Source/cmMakefile.cxx +++ b/Source/cmMakefile.cxx @@ -1134,9 +1134,30 @@ void cmMakefile::InitializeFromParent() // define flags this->DefineFlags = parent->DefineFlags; - // compile definitions property + // compile definitions property and per-config versions + { this->SetProperty("COMPILE_DEFINITIONS", parent->GetProperty("COMPILE_DEFINITIONS")); + std::vector<std::string> configs; + if(const char* configTypes = + this->GetDefinition("CMAKE_CONFIGURATION_TYPES")) + { + cmSystemTools::ExpandListArgument(configTypes, configs); + } + else if(const char* buildType = + this->GetDefinition("CMAKE_BUILD_TYPE")) + { + configs.push_back(buildType); + } + for(std::vector<std::string>::const_iterator ci = configs.begin(); + ci != configs.end(); ++ci) + { + std::string defPropName = "COMPILE_DEFINITIONS_"; + defPropName += cmSystemTools::UpperCase(*ci); + this->SetProperty(defPropName.c_str(), + parent->GetProperty(defPropName.c_str())); + } + } // link libraries this->LinkLibraries = parent->LinkLibraries; @@ -3046,7 +3067,9 @@ void cmMakefile::DefineProperties(cmake *cm) "language syntax may require escapes to specify some values). " "This property may be set on a per-configuration basis using the name " "COMPILE_DEFINITIONS_<CONFIG> where <CONFIG> is an upper-case name " - "(ex. \"COMPILE_DEFINITIONS_DEBUG\").\n" + "(ex. \"COMPILE_DEFINITIONS_DEBUG\"). " + "This property will be initialized in each directory by its value " + "in the directory's parent.\n" "CMake will automatically drop some definitions that " "are not supported by the native build tool. " "The VS6 IDE does not support definitions with values " @@ -3063,7 +3086,9 @@ void cmMakefile::DefineProperties(cmake *cm) cm->DefineProperty ("COMPILE_DEFINITIONS_<CONFIG>", cmProperty::DIRECTORY, "Per-configuration preprocessor definitions in a directory.", - "This is the configuration-specific version of COMPILE_DEFINITIONS."); + "This is the configuration-specific version of COMPILE_DEFINITIONS. " + "This property will be initialized in each directory by its value " + "in the directory's parent.\n"); cm->DefineProperty ("EXCLUDE_FROM_ALL", cmProperty::DIRECTORY, diff --git a/Tests/Complex/CMakeLists.txt b/Tests/Complex/CMakeLists.txt index d273ac8..5c67094 100644 --- a/Tests/Complex/CMakeLists.txt +++ b/Tests/Complex/CMakeLists.txt @@ -81,6 +81,10 @@ ENDIF(CMAKE_SYSTEM MATCHES "OSF1-V.*") ADD_DEFINITIONS(-DCMAKE_IS_FUN) ADD_DEFINITIONS(-DCMAKE_IS_REALLY_FUN) +SET_PROPERTY(DIRECTORY + PROPERTY COMPILE_DEFINITIONS_RELEASE + CMAKE_IS_FUN_IN_RELEASE_MODE + ) SET(TEST_SEP "a b c") SEPARATE_ARGUMENTS(TEST_SEP) diff --git a/Tests/Complex/Executable/complex.cxx b/Tests/Complex/Executable/complex.cxx index 8eaa661..bf07a37 100644 --- a/Tests/Complex/Executable/complex.cxx +++ b/Tests/Complex/Executable/complex.cxx @@ -61,7 +61,11 @@ void cmPassed(const char* Message, const char* m2="") #endif #ifndef CMAKE_IS_REALLY_FUN -This is a problem. Looks like ADD_DEFINITIONS and REMOVE_DEFINITIONS does not work +# error This is a problem. Looks like ADD_DEFINITIONS and REMOVE_DEFINITIONS does not work +#endif + +#if defined(NDEBUG) && !defined(CMAKE_IS_FUN_IN_RELEASE_MODE) +# error Per-configuration directory-level definition not inherited. #endif #ifdef COMPLEX_TEST_CMAKELIB diff --git a/Tests/ComplexOneConfig/CMakeLists.txt b/Tests/ComplexOneConfig/CMakeLists.txt index d273ac8..5c67094 100644 --- a/Tests/ComplexOneConfig/CMakeLists.txt +++ b/Tests/ComplexOneConfig/CMakeLists.txt @@ -81,6 +81,10 @@ ENDIF(CMAKE_SYSTEM MATCHES "OSF1-V.*") ADD_DEFINITIONS(-DCMAKE_IS_FUN) ADD_DEFINITIONS(-DCMAKE_IS_REALLY_FUN) +SET_PROPERTY(DIRECTORY + PROPERTY COMPILE_DEFINITIONS_RELEASE + CMAKE_IS_FUN_IN_RELEASE_MODE + ) SET(TEST_SEP "a b c") SEPARATE_ARGUMENTS(TEST_SEP) diff --git a/Tests/ComplexOneConfig/Executable/complex.cxx b/Tests/ComplexOneConfig/Executable/complex.cxx index 8eaa661..bf07a37 100644 --- a/Tests/ComplexOneConfig/Executable/complex.cxx +++ b/Tests/ComplexOneConfig/Executable/complex.cxx @@ -61,7 +61,11 @@ void cmPassed(const char* Message, const char* m2="") #endif #ifndef CMAKE_IS_REALLY_FUN -This is a problem. Looks like ADD_DEFINITIONS and REMOVE_DEFINITIONS does not work +# error This is a problem. Looks like ADD_DEFINITIONS and REMOVE_DEFINITIONS does not work +#endif + +#if defined(NDEBUG) && !defined(CMAKE_IS_FUN_IN_RELEASE_MODE) +# error Per-configuration directory-level definition not inherited. #endif #ifdef COMPLEX_TEST_CMAKELIB diff --git a/Tests/ComplexRelativePaths/CMakeLists.txt b/Tests/ComplexRelativePaths/CMakeLists.txt index d273ac8..5c67094 100644 --- a/Tests/ComplexRelativePaths/CMakeLists.txt +++ b/Tests/ComplexRelativePaths/CMakeLists.txt @@ -81,6 +81,10 @@ ENDIF(CMAKE_SYSTEM MATCHES "OSF1-V.*") ADD_DEFINITIONS(-DCMAKE_IS_FUN) ADD_DEFINITIONS(-DCMAKE_IS_REALLY_FUN) +SET_PROPERTY(DIRECTORY + PROPERTY COMPILE_DEFINITIONS_RELEASE + CMAKE_IS_FUN_IN_RELEASE_MODE + ) SET(TEST_SEP "a b c") SEPARATE_ARGUMENTS(TEST_SEP) diff --git a/Tests/ComplexRelativePaths/Executable/complex.cxx b/Tests/ComplexRelativePaths/Executable/complex.cxx index 8eaa661..bf07a37 100644 --- a/Tests/ComplexRelativePaths/Executable/complex.cxx +++ b/Tests/ComplexRelativePaths/Executable/complex.cxx @@ -61,7 +61,11 @@ void cmPassed(const char* Message, const char* m2="") #endif #ifndef CMAKE_IS_REALLY_FUN -This is a problem. Looks like ADD_DEFINITIONS and REMOVE_DEFINITIONS does not work +# error This is a problem. Looks like ADD_DEFINITIONS and REMOVE_DEFINITIONS does not work +#endif + +#if defined(NDEBUG) && !defined(CMAKE_IS_FUN_IN_RELEASE_MODE) +# error Per-configuration directory-level definition not inherited. #endif #ifdef COMPLEX_TEST_CMAKELIB |