summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Source/cmMakefile.cxx31
-rw-r--r--Tests/Complex/CMakeLists.txt4
-rw-r--r--Tests/Complex/Executable/complex.cxx6
-rw-r--r--Tests/ComplexOneConfig/CMakeLists.txt4
-rw-r--r--Tests/ComplexOneConfig/Executable/complex.cxx6
-rw-r--r--Tests/ComplexRelativePaths/CMakeLists.txt4
-rw-r--r--Tests/ComplexRelativePaths/Executable/complex.cxx6
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