[Cmake-commits] CMake branch, next, updated. v2.8.10.2-2623-g29ed9dd

Brad King brad.king at kitware.com
Mon Mar 25 10:50:51 EDT 2013


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "CMake".

The branch, next has been updated
       via  29ed9dde11d43d789951e3ce1d1ae3060126c1b2 (commit)
       via  1703b00c7fc34f473e84f4ba29bdc73476637005 (commit)
       via  a6286e92c9be9f5b8ad8fb25b3c6e15c0ec17fa0 (commit)
      from  c64455a125651cab4110393850cd6dfaa4184cac (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=29ed9dde11d43d789951e3ce1d1ae3060126c1b2
commit 29ed9dde11d43d789951e3ce1d1ae3060126c1b2
Merge: c64455a 1703b00
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Mon Mar 25 10:50:44 2013 -0400
Commit:     CMake Topic Stage <kwrobot at kitware.com>
CommitDate: Mon Mar 25 10:50:44 2013 -0400

    Merge topic 'fix-COMPILE_DEFINITIONS-config' into next
    
    1703b00 Test evaluation of per-config COMPILE_DEFINITIONS (#14037)
    a6286e9 Fix the evaluation of per-config COMPILE_DEFINITIONS (#14037)


http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=1703b00c7fc34f473e84f4ba29bdc73476637005
commit 1703b00c7fc34f473e84f4ba29bdc73476637005
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Mon Mar 25 09:43:22 2013 -0400
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Mon Mar 25 10:49:42 2013 -0400

    Test evaluation of per-config COMPILE_DEFINITIONS (#14037)
    
    Teach the CompileDefinitions test to cover evaluation of config-specific
    generator expressions.

diff --git a/Tests/CompileDefinitions/CMakeLists.txt b/Tests/CompileDefinitions/CMakeLists.txt
index e7d91bf..d3e9a3e 100644
--- a/Tests/CompileDefinitions/CMakeLists.txt
+++ b/Tests/CompileDefinitions/CMakeLists.txt
@@ -7,10 +7,19 @@ if ("${CMAKE_GENERATOR}" STREQUAL "Visual Studio 6")
     add_definitions(-DNO_SPACES_IN_DEFINE_VALUES)
 endif()
 
+# Use compile flags to tell executables which config is built
+# without depending on the compile definitions functionality.
+foreach(c DEBUG RELEASE RELWITHDEBINFO MINSIZEREL)
+  set(CMAKE_C_FLAGS_${c} "${CMAKE_C_FLAGS_${c}} -DTEST_CONFIG_${c}")
+  set(CMAKE_CXX_FLAGS_${c} "${CMAKE_CXX_FLAGS_${c}} -DTEST_CONFIG_${c}")
+endforeach()
+
+set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS
+  "BUILD_CONFIG_NAME=\"$<CONFIGURATION>\""
+  )
+
 add_subdirectory(add_definitions_command)
 add_subdirectory(target_prop)
 add_subdirectory(add_definitions_command_with_target_prop)
 
-file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/dummyexecutable.cpp" "int main(int, char **) { return 0; }\n")
-
-add_executable(CompileDefinitions "${CMAKE_CURRENT_BINARY_DIR}/dummyexecutable.cpp")
+add_executable(CompileDefinitions runtest.c)
diff --git a/Tests/CompileDefinitions/add_definitions_command/CMakeLists.txt b/Tests/CompileDefinitions/add_definitions_command/CMakeLists.txt
index a6372af..d3886a1 100644
--- a/Tests/CompileDefinitions/add_definitions_command/CMakeLists.txt
+++ b/Tests/CompileDefinitions/add_definitions_command/CMakeLists.txt
@@ -3,5 +3,6 @@ project(add_definitions_command)
 
 add_definitions(-DCMAKE_IS_FUN -DCMAKE_IS=Fun -DCMAKE_IS_="Fun" -DCMAKE_IS_REALLY="Very Fun")
 add_definitions(-DCMAKE_IS_="Fun" -DCMAKE_IS_REALLY="Very Fun" -DCMAKE_IS_FUN -DCMAKE_IS=Fun)
+add_definitions(-DBUILD_IS_DEBUG=$<CONFIG:Debug> -DBUILD_IS_NOT_DEBUG=$<NOT:$<CONFIG:Debug>>)
 
 add_executable(add_definitions_command_executable ../compiletest.cpp)
diff --git a/Tests/CompileDefinitions/add_definitions_command_with_target_prop/CMakeLists.txt b/Tests/CompileDefinitions/add_definitions_command_with_target_prop/CMakeLists.txt
index e415390..5587f7f 100644
--- a/Tests/CompileDefinitions/add_definitions_command_with_target_prop/CMakeLists.txt
+++ b/Tests/CompileDefinitions/add_definitions_command_with_target_prop/CMakeLists.txt
@@ -12,3 +12,6 @@ set_property(TARGET add_definitions_command_with_target_prop_executable APPEND P
 add_definitions(-DCMAKE_IS_FUN)
 
 set_property(TARGET add_definitions_command_with_target_prop_executable APPEND PROPERTY COMPILE_DEFINITIONS CMAKE_IS=Fun CMAKE_IS_="Fun")
+
+add_definitions(-DBUILD_IS_DEBUG=$<CONFIG:Debug>)
+set_property(TARGET add_definitions_command_with_target_prop_executable APPEND PROPERTY COMPILE_DEFINITIONS BUILD_IS_NOT_DEBUG=$<NOT:$<CONFIG:Debug>>)
diff --git a/Tests/CompileDefinitions/compiletest.cpp b/Tests/CompileDefinitions/compiletest.cpp
index f18e59e..14b8eab 100644
--- a/Tests/CompileDefinitions/compiletest.cpp
+++ b/Tests/CompileDefinitions/compiletest.cpp
@@ -45,6 +45,30 @@ enum {
 // TEST_GENERATOR_EXPRESSIONS
 #endif
 
+#ifndef BUILD_IS_DEBUG
+# error "BUILD_IS_DEBUG not defined!"
+#endif
+#ifndef BUILD_IS_NOT_DEBUG
+# error "BUILD_IS_NOT_DEBUG not defined!"
+#endif
+
+// Check per-config definitions.
+#ifdef TEST_CONFIG_DEBUG
+# if !BUILD_IS_DEBUG
+#  error "BUILD_IS_DEBUG false with TEST_CONFIG_DEBUG!"
+# endif
+# if BUILD_IS_NOT_DEBUG
+#  error "BUILD_IS_NOT_DEBUG true with TEST_CONFIG_DEBUG!"
+# endif
+#else
+# if BUILD_IS_DEBUG
+#  error "BUILD_IS_DEBUG true without TEST_CONFIG_DEBUG!"
+# endif
+# if !BUILD_IS_NOT_DEBUG
+#  error "BUILD_IS_NOT_DEBUG false without TEST_CONFIG_DEBUG!"
+# endif
+#endif
+
 int main(int argc, char **argv)
 {
   return 0;
diff --git a/Tests/CompileDefinitions/runtest.c b/Tests/CompileDefinitions/runtest.c
new file mode 100644
index 0000000..02d2cad
--- /dev/null
+++ b/Tests/CompileDefinitions/runtest.c
@@ -0,0 +1,47 @@
+#include <string.h>
+#include <stdio.h>
+#include <ctype.h>
+
+#ifndef BUILD_CONFIG_NAME
+# error "BUILD_CONFIG_NAME not defined!"
+#endif
+
+int main()
+{
+  char build_config_name[] = BUILD_CONFIG_NAME;
+  char* c;
+  for(c = build_config_name; *c; ++c)
+    {
+    *c = (char)tolower((int)*c);
+    }
+  fprintf(stderr, "build_config_name=\"%s\"\n", build_config_name);
+#ifdef TEST_CONFIG_DEBUG
+  if(strcmp(build_config_name, "debug") != 0)
+    {
+    fprintf(stderr, "build_config_name is not \"debug\"\n");
+    return 1;
+    }
+#endif
+#ifdef TEST_CONFIG_RELEASE
+  if(strcmp(build_config_name, "release") != 0)
+    {
+    fprintf(stderr, "build_config_name is not \"release\"\n");
+    return 1;
+    }
+#endif
+#ifdef TEST_CONFIG_MINSIZEREL
+  if(strcmp(build_config_name, "minsizerel") != 0)
+    {
+    fprintf(stderr, "build_config_name is not \"minsizerel\"\n");
+    return 1;
+    }
+#endif
+#ifdef TEST_CONFIG_RELWITHDEBINFO
+  if(strcmp(build_config_name, "relwithdebinfo") != 0)
+    {
+    fprintf(stderr, "build_config_name is not \"relwithdebinfo\"\n");
+    return 1;
+    }
+#endif
+  return 0;
+}
diff --git a/Tests/CompileDefinitions/target_prop/CMakeLists.txt b/Tests/CompileDefinitions/target_prop/CMakeLists.txt
index abdf257..1ef2d6d 100644
--- a/Tests/CompileDefinitions/target_prop/CMakeLists.txt
+++ b/Tests/CompileDefinitions/target_prop/CMakeLists.txt
@@ -14,3 +14,8 @@ set_property(TARGET target_prop_executable APPEND PROPERTY COMPILE_DEFINITIONS
     "$<0:GE_NOT_DEFINED>"
     "$<1:ARGUMENT;LIST>"
 )
+
+set_property(TARGET target_prop_executable APPEND PROPERTY COMPILE_DEFINITIONS
+  BUILD_IS_DEBUG=$<CONFIG:Debug>
+  BUILD_IS_NOT_DEBUG=$<NOT:$<CONFIG:Debug>>
+  )

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=a6286e92c9be9f5b8ad8fb25b3c6e15c0ec17fa0
commit a6286e92c9be9f5b8ad8fb25b3c6e15c0ec17fa0
Author:     Stephen Kelly <steveire at gmail.com>
AuthorDate: Sun Mar 24 21:18:39 2013 +0100
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Mon Mar 25 10:49:22 2013 -0400

    Fix the evaluation of per-config COMPILE_DEFINITIONS (#14037)
    
    The API for retrieving per-config COMPILE_DEFINITIONS has long
    existed because of the COMPILE_DEFINITIONS_<CONFIG> style
    properties. Ensure that the provided configuration being generated
    is also used to evaluate the generator expressions
    in cmTarget::GetCompileDefinitions.
    
    Both the generic COMPILE_DEFINITIONS and the config-specific
    variant need to be evaluated with the requested configuration. This
    has the side-effect that the COMPILE_DEFINITIONS does not need to
    be additionally evaluated with no configuration, so the callers can
    be cleaned up a bit too.

diff --git a/Source/cmExtraCodeBlocksGenerator.cxx b/Source/cmExtraCodeBlocksGenerator.cxx
index 6d5d5b5..f6f4cef 100644
--- a/Source/cmExtraCodeBlocksGenerator.cxx
+++ b/Source/cmExtraCodeBlocksGenerator.cxx
@@ -621,7 +621,7 @@ void cmExtraCodeBlocksGenerator::AppendTarget(cmGeneratedFileStream& fout,
                                   ->GetGeneratorTarget(target);
 
     // the compilerdefines for this target
-    std::string cdefs = target->GetCompileDefinitions();
+    std::string cdefs = target->GetCompileDefinitions(buildType);
 
     if(!cdefs.empty())
       {
@@ -640,10 +640,8 @@ void cmExtraCodeBlocksGenerator::AppendTarget(cmGeneratedFileStream& fout,
     std::set<std::string> uniqIncludeDirs;
 
     std::vector<std::string> includes;
-    const char *config = target->GetMakefile()
-                               ->GetDefinition("CMAKE_BUILD_TYPE");
     target->GetMakefile()->GetLocalGenerator()->
-      GetIncludeDirectories(includes, gtgt, "C", config);
+      GetIncludeDirectories(includes, gtgt, "C", buildType);
     for(std::vector<std::string>::const_iterator dirIt=includes.begin();
         dirIt != includes.end();
         ++dirIt)
diff --git a/Source/cmExtraSublimeTextGenerator.cxx b/Source/cmExtraSublimeTextGenerator.cxx
index 5431401..e4802d5 100644
--- a/Source/cmExtraSublimeTextGenerator.cxx
+++ b/Source/cmExtraSublimeTextGenerator.cxx
@@ -488,12 +488,11 @@ ComputeDefines(cmSourceFile *source, cmLocalGenerator* lg, cmTarget *target,
     }
 
   // Add preprocessor definitions for this target and configuration.
-  lg->AppendDefines(defines, target->GetCompileDefinitions());
+  lg->AppendDefines(defines, target->GetCompileDefinitions(config));
   lg->AppendDefines(defines, source->GetProperty("COMPILE_DEFINITIONS"));
   {
   std::string defPropName = "COMPILE_DEFINITIONS_";
   defPropName += cmSystemTools::UpperCase(config);
-  lg->AppendDefines(defines, target->GetCompileDefinitions(config));
   lg->AppendDefines(defines, source->GetProperty(defPropName.c_str()));
   }
 
diff --git a/Source/cmGlobalXCodeGenerator.cxx b/Source/cmGlobalXCodeGenerator.cxx
index 2222a0e..ceac564 100644
--- a/Source/cmGlobalXCodeGenerator.cxx
+++ b/Source/cmGlobalXCodeGenerator.cxx
@@ -1709,12 +1709,8 @@ void cmGlobalXCodeGenerator::CreateBuildSettings(cmTarget& target,
     this->AppendDefines(ppDefs, exportMacro);
     }
   cmGeneratorTarget *gtgt = this->GetGeneratorTarget(&target);
-  this->AppendDefines(ppDefs, target.GetCompileDefinitions().c_str());
-  if(configName)
-    {
-    this->AppendDefines(ppDefs,
-                        target.GetCompileDefinitions(configName).c_str());
-    }
+  this->AppendDefines(ppDefs,
+                      target.GetCompileDefinitions(configName).c_str());
   buildSettings->AddAttribute
     ("GCC_PREPROCESSOR_DEFINITIONS", ppDefs.CreateList());
 
diff --git a/Source/cmLocalUnixMakefileGenerator3.cxx b/Source/cmLocalUnixMakefileGenerator3.cxx
index f6ab0d0..0f680f6 100644
--- a/Source/cmLocalUnixMakefileGenerator3.cxx
+++ b/Source/cmLocalUnixMakefileGenerator3.cxx
@@ -1962,7 +1962,6 @@ void cmLocalUnixMakefileGenerator3
 
   // Build a list of preprocessor definitions for the target.
   std::set<std::string> defines;
-  this->AppendDefines(defines, target.GetCompileDefinitions());
   this->AppendDefines(defines, target.GetCompileDefinitions(
                                             this->ConfigurationName.c_str()));
   if(!defines.empty())
diff --git a/Source/cmLocalVisualStudio6Generator.cxx b/Source/cmLocalVisualStudio6Generator.cxx
index c35288c..dc94476 100644
--- a/Source/cmLocalVisualStudio6Generator.cxx
+++ b/Source/cmLocalVisualStudio6Generator.cxx
@@ -1702,7 +1702,7 @@ void cmLocalVisualStudio6Generator
 
     this->AppendDefines(
       definesSet,
-      target.GetCompileDefinitions());
+      target.GetCompileDefinitions(0));
     this->AppendDefines(
       debugDefinesSet,
       target.GetCompileDefinitions("DEBUG"));
diff --git a/Source/cmLocalVisualStudio7Generator.cxx b/Source/cmLocalVisualStudio7Generator.cxx
index dfe8280..7d0bc67 100644
--- a/Source/cmLocalVisualStudio7Generator.cxx
+++ b/Source/cmLocalVisualStudio7Generator.cxx
@@ -745,7 +745,6 @@ void cmLocalVisualStudio7Generator::WriteConfiguration(std::ostream& fout,
   targetOptions.ParseFinish();
   cmGeneratorTarget* gt =
     this->GlobalGenerator->GetGeneratorTarget(&target);
-  targetOptions.AddDefines(target.GetCompileDefinitions().c_str());
   targetOptions.AddDefines(target.GetCompileDefinitions(configName).c_str());
   targetOptions.SetVerboseMakefile(
     this->Makefile->IsOn("CMAKE_VERBOSE_MAKEFILE"));
diff --git a/Source/cmMakefileTargetGenerator.cxx b/Source/cmMakefileTargetGenerator.cxx
index d9aa7fe..71926f3 100644
--- a/Source/cmMakefileTargetGenerator.cxx
+++ b/Source/cmMakefileTargetGenerator.cxx
@@ -303,9 +303,6 @@ std::string cmMakefileTargetGenerator::GetDefines(const std::string &l)
 
     // Add preprocessor definitions for this target and configuration.
     this->LocalGenerator->AppendDefines
-      (defines, this->Target->GetCompileDefinitions());
-
-    this->LocalGenerator->AppendDefines
       (defines, this->Target->GetCompileDefinitions(
                             this->LocalGenerator->ConfigurationName.c_str()));
 
diff --git a/Source/cmNinjaTargetGenerator.cxx b/Source/cmNinjaTargetGenerator.cxx
index 80a1a9b..3fb823c 100644
--- a/Source/cmNinjaTargetGenerator.cxx
+++ b/Source/cmNinjaTargetGenerator.cxx
@@ -228,7 +228,7 @@ ComputeDefines(cmSourceFile *source, const std::string& language)
   // Add preprocessor definitions for this target and configuration.
   this->LocalGenerator->AppendDefines
     (defines,
-     this->Target->GetCompileDefinitions());
+     this->Target->GetCompileDefinitions(this->GetConfigName()));
   this->LocalGenerator->AppendDefines
     (defines,
      source->GetProperty("COMPILE_DEFINITIONS"));
@@ -237,9 +237,6 @@ ComputeDefines(cmSourceFile *source, const std::string& language)
   defPropName += cmSystemTools::UpperCase(this->GetConfigName());
   this->LocalGenerator->AppendDefines
     (defines,
-     this->Target->GetCompileDefinitions(this->GetConfigName()));
-  this->LocalGenerator->AppendDefines
-    (defines,
      source->GetProperty(defPropName.c_str()));
   }
 
diff --git a/Source/cmQtAutomoc.cxx b/Source/cmQtAutomoc.cxx
index 5730c8c..c7060b0 100644
--- a/Source/cmQtAutomoc.cxx
+++ b/Source/cmQtAutomoc.cxx
@@ -250,7 +250,7 @@ void cmQtAutomoc::SetupAutomocTarget(cmTarget* target)
   std::string _moc_compile_defs;
   if (tmp)
     {
-    _moc_compile_defs = target->GetCompileDefinitions();
+    _moc_compile_defs = target->GetCompileDefinitions(0);
     }
   tmp = makefile->GetProperty("COMPILE_DEFINITIONS");
   if (tmp)
diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx
index 56eb4ad..732ebb2 100644
--- a/Source/cmTarget.cxx
+++ b/Source/cmTarget.cxx
@@ -2942,29 +2942,33 @@ std::vector<std::string> cmTarget::GetIncludeDirectories(const char *config)
 //----------------------------------------------------------------------------
 std::string cmTarget::GetCompileDefinitions(const char *config)
 {
-  std::string defPropName = "COMPILE_DEFINITIONS";
+  const char *configProp = 0;
   if (config)
     {
-    defPropName += "_" + cmSystemTools::UpperCase(config);
+    std::string configPropName;
+    configPropName = "COMPILE_DEFINITIONS_" + cmSystemTools::UpperCase(config);
+    configProp = this->GetProperty(configPropName.c_str());
     }
 
-  const char *prop = this->GetProperty(defPropName.c_str());
+  const char *noconfigProp = this->GetProperty("COMPILE_DEFINITIONS");
   cmListFileBacktrace lfbt;
   cmGeneratorExpressionDAGChecker dagChecker(lfbt,
                                             this->GetName(),
-                                            defPropName, 0, 0);
+                                            "COMPILE_DEFINITIONS", 0, 0);
 
-  std::string result;
-  if (prop)
+  std::string defsString = (noconfigProp ? noconfigProp : "");
+  if (configProp && noconfigProp)
     {
-    cmGeneratorExpression ge(lfbt);
-
-    result = ge.Parse(prop)->Evaluate(this->Makefile,
-                                  config,
-                                  false,
-                                  this,
-                                  &dagChecker);
+    defsString += ";";
     }
+  defsString += (configProp ? configProp : "");
+
+  cmGeneratorExpression ge(lfbt);
+  std::string result = ge.Parse(defsString.c_str())->Evaluate(this->Makefile,
+                                config,
+                                false,
+                                this,
+                                &dagChecker);
 
   std::vector<std::string> libs;
   this->GetDirectLinkLibraries(config, libs, this);
diff --git a/Source/cmTarget.h b/Source/cmTarget.h
index 0e6dd42..e25133e 100644
--- a/Source/cmTarget.h
+++ b/Source/cmTarget.h
@@ -430,7 +430,7 @@ public:
       If no macro should be defined null is returned.  */
   const char* GetExportMacro();
 
-  std::string GetCompileDefinitions(const char *config = 0);
+  std::string GetCompileDefinitions(const char *config);
 
   // Compute the set of languages compiled by the target.  This is
   // computed every time it is called because the languages can change
diff --git a/Source/cmVisualStudio10TargetGenerator.cxx b/Source/cmVisualStudio10TargetGenerator.cxx
index f4984c7..1cb9f23 100644
--- a/Source/cmVisualStudio10TargetGenerator.cxx
+++ b/Source/cmVisualStudio10TargetGenerator.cxx
@@ -1220,8 +1220,6 @@ bool cmVisualStudio10TargetGenerator::ComputeClOptions(
   clOptions.AddFlag("PrecompiledHeader", "NotUsing");
   clOptions.Parse(flags.c_str());
   clOptions.Parse(defineFlags.c_str());
-  clOptions.AddDefines(
-                     this->Target->GetCompileDefinitions().c_str());
   clOptions.AddDefines(this->Target->GetCompileDefinitions(
                                                 configName.c_str()).c_str());
   clOptions.SetVerboseMakefile(

-----------------------------------------------------------------------

Summary of changes:
 Source/cmExtraCodeBlocksGenerator.cxx              |    6 +--
 Source/cmExtraSublimeTextGenerator.cxx             |    3 +-
 Source/cmGlobalXCodeGenerator.cxx                  |    8 +---
 Source/cmLocalUnixMakefileGenerator3.cxx           |    1 -
 Source/cmLocalVisualStudio6Generator.cxx           |    2 +-
 Source/cmLocalVisualStudio7Generator.cxx           |    1 -
 Source/cmMakefileTargetGenerator.cxx               |    3 -
 Source/cmNinjaTargetGenerator.cxx                  |    5 +--
 Source/cmQtAutomoc.cxx                             |    2 +-
 Source/cmTarget.cxx                                |   30 +++++++-----
 Source/cmTarget.h                                  |    2 +-
 Source/cmVisualStudio10TargetGenerator.cxx         |    2 -
 Tests/CompileDefinitions/CMakeLists.txt            |   15 +++++-
 .../add_definitions_command/CMakeLists.txt         |    1 +
 .../CMakeLists.txt                                 |    3 +
 Tests/CompileDefinitions/compiletest.cpp           |   24 ++++++++++
 Tests/CompileDefinitions/runtest.c                 |   47 ++++++++++++++++++++
 .../CompileDefinitions/target_prop/CMakeLists.txt  |    5 ++
 18 files changed, 118 insertions(+), 42 deletions(-)
 create mode 100644 Tests/CompileDefinitions/runtest.c


hooks/post-receive
-- 
CMake


More information about the Cmake-commits mailing list