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  7385263f00a745033714a5072147e0c26743b6f6 (commit)
       via  d8bc26a065f1999698c9b499ca793f9adf740a9d (commit)
       via  dc0ddb9e34f885d32f0fa3bb25072ec77e4a79bb (commit)
       via  28f98ceef1770fe252c0c3c1e59aca773cc64009 (commit)
       via  28db2268e8e36521626071a39596b9aaa87defbb (commit)
       via  506504d44049b91fe51539a1b7a29cdc65234b7f (commit)
      from  b03eb971c6e5a282c975cc84531fba7caee43f67 (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 -----------------------------------------------------------------
https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=7385263f00a745033714a5072147e0c26743b6f6
commit 7385263f00a745033714a5072147e0c26743b6f6
Merge: b03eb97 d8bc26a
Author:     Gregor Jasny <gja...@googlemail.com>
AuthorDate: Sun Jan 3 16:36:14 2016 -0500
Commit:     CMake Topic Stage <kwro...@kitware.com>
CommitDate: Sun Jan 3 16:36:14 2016 -0500

    Merge topic 'xcode-global-attribute-variant' into next
    
    d8bc26a0 Xcode: Parse variant and genex for CMAKE_XCODE_ATTRIBUTE (#14947)
    dc0ddb9e Xcode: Store configuration name along with XcodeObject (#14947)
    28f98cee Xcode: Make CMAKE_XCODE_ATTRIBUTE calculation last step (#14947)
    28db2268 Xcode: Factor out XCODE_ATTRIBUTE_ variant filter (#14947)
    506504d4 CMake Nightly Date Stamp


https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=d8bc26a065f1999698c9b499ca793f9adf740a9d
commit d8bc26a065f1999698c9b499ca793f9adf740a9d
Author:     Gregor Jasny <gja...@googlemail.com>
AuthorDate: Sun Jan 3 11:55:50 2016 +0100
Commit:     Gregor Jasny <gja...@googlemail.com>
CommitDate: Sun Jan 3 22:31:12 2016 +0100

    Xcode: Parse variant and genex for CMAKE_XCODE_ATTRIBUTE (#14947)

diff --git a/Help/variable/CMAKE_XCODE_ATTRIBUTE_an-attribute.rst 
b/Help/variable/CMAKE_XCODE_ATTRIBUTE_an-attribute.rst
index 122b9f6..be683d6 100644
--- a/Help/variable/CMAKE_XCODE_ATTRIBUTE_an-attribute.rst
+++ b/Help/variable/CMAKE_XCODE_ATTRIBUTE_an-attribute.rst
@@ -8,3 +8,9 @@ in the generated Xcode project.  Ignored on other generators.
 
 See the :prop_tgt:`XCODE_ATTRIBUTE_<an-attribute>` target property
 to set attributes on a specific target.
+
+Contents of ``CMAKE_XCODE_ATTRIBUTE_<an-attribute>`` may use
+"generator expressions" with the syntax ``$<...>``.  See the
+:manual:`cmake-generator-expressions(7)` manual for available
+expressions.  See the :manual:`cmake-buildsystem(7)` manual
+for more on defining buildsystem properties.
diff --git a/Source/cmGlobalXCodeGenerator.cxx 
b/Source/cmGlobalXCodeGenerator.cxx
index 3ac1137..fa9af12 100644
--- a/Source/cmGlobalXCodeGenerator.cxx
+++ b/Source/cmGlobalXCodeGenerator.cxx
@@ -710,6 +710,15 @@ cmXCodeObject* cmGlobalXCodeGenerator
 }
 
 //----------------------------------------------------------------------------
+cmXCodeObject* cmGlobalXCodeGenerator
+::CreateFlatClone(cmXCodeObject* orig)
+{
+  cmXCodeObject* obj = this->CreateObject(orig->GetType());
+  obj->CopyAttributes(orig);
+  return obj;
+}
+
+//----------------------------------------------------------------------------
 std::string
 GetGroupMapKeyFromPath(cmGeneratorTarget* target, const std::string& fullpath)
 {
@@ -3531,25 +3540,33 @@ bool cmGlobalXCodeGenerator
   symroot += "/build";
   buildSettings->AddAttribute("SYMROOT", this->CreateString(symroot.c_str()));
 
-  // Put this last so it can override existing settings
-  // Convert "CMAKE_XCODE_ATTRIBUTE_*" variables directly.
-  {
-    std::vector<std::string> vars = this->CurrentMakefile->GetDefinitions();
-    for(std::vector<std::string>::const_iterator i = vars.begin();
-        i != vars.end(); ++i)
+  for(Configs::iterator i = configs.begin(); i != configs.end(); ++i)
     {
-      if(i->find("CMAKE_XCODE_ATTRIBUTE_") == 0)
+    cmXCodeObject* buildSettingsForCfg = this->CreateFlatClone(buildSettings);
+
+    // Put this last so it can override existing settings
+    // Convert "CMAKE_XCODE_ATTRIBUTE_*" variables directly.
+    std::vector<std::string> vars = this->CurrentMakefile->GetDefinitions();
+    for(std::vector<std::string>::const_iterator d = vars.begin();
+        d != vars.end(); ++d)
       {
-        buildSettings->AddAttribute(i->substr(22).c_str(),
-          this->CreateString(
-            this->CurrentMakefile->GetDefinition(i->c_str())));
+      if(d->find("CMAKE_XCODE_ATTRIBUTE_") == 0)
+        {
+        std::string attribute = d->substr(22);
+        this->FilterConfigurationAttribute(i->first, attribute);
+        if(!attribute.empty())
+          {
+          cmGeneratorExpression ge;
+          std::string processed =
+            ge.Parse(this->CurrentMakefile->GetDefinition(*d))
+              ->Evaluate(this->CurrentLocalGenerator, i->first);
+          buildSettingsForCfg->AddAttribute(attribute,
+            this->CreateString(processed));
+          }
+        }
       }
-    }
-  }
-
-  for(Configs::iterator i = configs.begin(); i != configs.end(); ++i)
-    {
-    i->second->AddAttribute("buildSettings", buildSettings);
+    // store per-config buildSettings into configuration object
+    i->second->AddAttribute("buildSettings", buildSettingsForCfg);
     }
 
   this->RootObject->AddAttribute("buildConfigurationList",
diff --git a/Source/cmGlobalXCodeGenerator.h b/Source/cmGlobalXCodeGenerator.h
index 4801064..9659822 100644
--- a/Source/cmGlobalXCodeGenerator.h
+++ b/Source/cmGlobalXCodeGenerator.h
@@ -131,6 +131,7 @@ private:
   cmXCodeObject* CreateObject(cmXCodeObject::Type type);
   cmXCodeObject* CreateString(const std::string& s);
   cmXCodeObject* CreateObjectReference(cmXCodeObject*);
+  cmXCodeObject* CreateFlatClone(cmXCodeObject*);
   cmXCodeObject* CreateXCodeTarget(cmGeneratorTarget *gtgt,
                                    cmXCodeObject* buildPhases);
   void ForceLinkerLanguages();
diff --git a/Tests/RunCMake/XcodeProject/XcodeAttributeGenex-check.cmake 
b/Tests/RunCMake/XcodeProject/XcodeAttributeGenex-check.cmake
index 637df0f..8a39506 100644
--- a/Tests/RunCMake/XcodeProject/XcodeAttributeGenex-check.cmake
+++ b/Tests/RunCMake/XcodeProject/XcodeAttributeGenex-check.cmake
@@ -1,3 +1,5 @@
+# per target attribute with genex
+
 set(expect "TEST_HOST = 
\"[^;\"]*Tests/RunCMake/XcodeProject/XcodeAttributeGenex-build/[^;\"/]*/some\"")
 file(STRINGS 
${RunCMake_TEST_BINARY_DIR}/XcodeAttributeGenex.xcodeproj/project.pbxproj actual
      REGEX "TEST_HOST = .*;" LIMIT_COUNT 1)
@@ -5,3 +7,49 @@ if(NOT "${actual}" MATCHES "${expect}")
   message(SEND_ERROR "The actual project contains the line:\n ${actual}\n"
     "which does not match expected regex:\n ${expect}\n")
 endif()
+
+# per target attribute with variant
+
+file(STRINGS 
${RunCMake_TEST_BINARY_DIR}/XcodeAttributeGenex.xcodeproj/project.pbxproj actual
+     REGEX "CONFIG_SPECIFIC = .*;")
+list(REMOVE_DUPLICATES actual)
+
+set(expect "CONFIG_SPECIFIC = general")
+if(NOT "${actual}" MATCHES "${expect}")
+  message(SEND_ERROR "The actual project contains the line:\n ${actual}\n"
+    "which does not match expected regex:\n ${expect}\n")
+endif()
+
+set(expect "CONFIG_SPECIFIC = release")
+if(NOT "${actual}" MATCHES "${expect}")
+  message(SEND_ERROR "The actual project contains the line:\n ${actual}\n"
+    "which does not match expected regex:\n ${expect}\n")
+endif()
+
+# global attribute with genex
+
+set(expect "ANOTHER_GLOBAL = 
\"[^;\"]*Tests/RunCMake/XcodeProject/XcodeAttributeGenex-build/[^;\"/]*/another\"")
+file(STRINGS 
${RunCMake_TEST_BINARY_DIR}/XcodeAttributeGenex.xcodeproj/project.pbxproj actual
+     REGEX "ANOTHER_GLOBAL = .*;" LIMIT_COUNT 1)
+if(NOT "${actual}" MATCHES "${expect}")
+  message(SEND_ERROR "The actual project contains the line:\n ${actual}\n"
+    "which does not match expected regex:\n ${expect}\n")
+endif()
+
+# global attribute with variant
+
+file(STRINGS 
${RunCMake_TEST_BINARY_DIR}/XcodeAttributeGenex.xcodeproj/project.pbxproj actual
+     REGEX "ANOTHER_CONFIG = .*;" LIMIT_COUNT 4)
+list(REMOVE_DUPLICATES actual)
+
+set(expect "ANOTHER_CONFIG = general")
+if(NOT "${actual}" MATCHES "${expect}")
+  message(SEND_ERROR "The actual project contains the line:\n ${actual}\n"
+    "which does not match expected regex:\n ${expect}\n")
+endif()
+
+set(expect "ANOTHER_CONFIG = debug")
+if(NOT "${actual}" MATCHES "${expect}")
+  message(SEND_ERROR "The actual project contains the line:\n ${actual}\n"
+    "which does not match expected regex:\n ${expect}\n")
+endif()
diff --git a/Tests/RunCMake/XcodeProject/XcodeAttributeGenex.cmake 
b/Tests/RunCMake/XcodeProject/XcodeAttributeGenex.cmake
index 760b882..d8cb3bd 100644
--- a/Tests/RunCMake/XcodeProject/XcodeAttributeGenex.cmake
+++ b/Tests/RunCMake/XcodeProject/XcodeAttributeGenex.cmake
@@ -1,4 +1,16 @@
 enable_language(C)
 add_executable(some main.c)
 add_executable(another main.c)
-set_property(TARGET another PROPERTY XCODE_ATTRIBUTE_TEST_HOST 
"$<TARGET_FILE:some>")
+set_target_properties(another PROPERTIES
+  # per target attribute with genex
+  XCODE_ATTRIBUTE_TEST_HOST "$<TARGET_FILE:some>"
+  # per target attribute with variant
+  XCODE_ATTRIBUTE_CONFIG_SPECIFIC[variant=Release] "release"
+  XCODE_ATTRIBUTE_CONFIG_SPECIFIC "general")
+
+# global attribute with genex
+set(CMAKE_XCODE_ATTRIBUTE_ANOTHER_GLOBAL "$<TARGET_FILE:another>")
+
+# global attribute with variant
+set(CMAKE_XCODE_ATTRIBUTE_ANOTHER_CONFIG "general")
+set(CMAKE_XCODE_ATTRIBUTE_ANOTHER_CONFIG[variant=Debug] "debug")

https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=dc0ddb9e34f885d32f0fa3bb25072ec77e4a79bb
commit dc0ddb9e34f885d32f0fa3bb25072ec77e4a79bb
Author:     Gregor Jasny <gja...@googlemail.com>
AuthorDate: Sun Jan 3 11:58:52 2016 +0100
Commit:     Gregor Jasny <gja...@googlemail.com>
CommitDate: Sun Jan 3 18:31:33 2016 +0100

    Xcode: Store configuration name along with XcodeObject (#14947)

diff --git a/Source/cmGlobalXCodeGenerator.cxx 
b/Source/cmGlobalXCodeGenerator.cxx
index 6f192cb..3ac1137 100644
--- a/Source/cmGlobalXCodeGenerator.cxx
+++ b/Source/cmGlobalXCodeGenerator.cxx
@@ -3440,18 +3440,19 @@ bool cmGlobalXCodeGenerator
     this->CreateObject(cmXCodeObject::XCConfigurationList);
   cmXCodeObject* buildConfigurations =
     this->CreateObject(cmXCodeObject::OBJECT_LIST);
-  std::vector<cmXCodeObject*> configs;
+  typedef std::vector<std::pair<std::string, cmXCodeObject*> > Configs;
+  Configs configs;
   const char *defaultConfigName = "Debug";
   if(this->XcodeVersion == 15)
     {
     cmXCodeObject* configDebug =
       this->CreateObject(cmXCodeObject::XCBuildConfiguration);
     configDebug->AddAttribute("name", this->CreateString("Debug"));
-    configs.push_back(configDebug);
+    configs.push_back(std::make_pair("Debug", configDebug));
     cmXCodeObject* configRelease =
       this->CreateObject(cmXCodeObject::XCBuildConfiguration);
     configRelease->AddAttribute("name", this->CreateString("Release"));
-    configs.push_back(configRelease);
+    configs.push_back(std::make_pair("Release", configRelease));
     }
   else
     {
@@ -3465,13 +3466,12 @@ bool cmGlobalXCodeGenerator
       cmXCodeObject* config =
         this->CreateObject(cmXCodeObject::XCBuildConfiguration);
       config->AddAttribute("name", this->CreateString(name));
-      configs.push_back(config);
+      configs.push_back(std::make_pair(name, config));
       }
     }
-  for(std::vector<cmXCodeObject*>::iterator c = configs.begin();
-      c != configs.end(); ++c)
+  for(Configs::iterator c = configs.begin(); c != configs.end(); ++c)
     {
-    buildConfigurations->AddObject(*c);
+    buildConfigurations->AddObject(c->second);
     }
   configlist->AddAttribute("buildConfigurations", buildConfigurations);
 
@@ -3547,10 +3547,9 @@ bool cmGlobalXCodeGenerator
     }
   }
 
-  for( std::vector<cmXCodeObject*>::iterator i = configs.begin();
-       i != configs.end(); ++i)
+  for(Configs::iterator i = configs.begin(); i != configs.end(); ++i)
     {
-    (*i)->AddAttribute("buildSettings", buildSettings);
+    i->second->AddAttribute("buildSettings", buildSettings);
     }
 
   this->RootObject->AddAttribute("buildConfigurationList",

https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=28f98ceef1770fe252c0c3c1e59aca773cc64009
commit 28f98ceef1770fe252c0c3c1e59aca773cc64009
Author:     Gregor Jasny <gja...@googlemail.com>
AuthorDate: Sun Jan 3 11:53:38 2016 +0100
Commit:     Gregor Jasny <gja...@googlemail.com>
CommitDate: Sun Jan 3 12:06:56 2016 +0100

    Xcode: Make CMAKE_XCODE_ATTRIBUTE calculation last step (#14947)

diff --git a/Source/cmGlobalXCodeGenerator.cxx 
b/Source/cmGlobalXCodeGenerator.cxx
index c9d2742..6f192cb 100644
--- a/Source/cmGlobalXCodeGenerator.cxx
+++ b/Source/cmGlobalXCodeGenerator.cxx
@@ -3527,6 +3527,10 @@ bool cmGlobalXCodeGenerator
       this->CreateString(this->GeneratorToolset.c_str()));
     }
 
+  std::string symroot = root->GetCurrentBinaryDirectory();
+  symroot += "/build";
+  buildSettings->AddAttribute("SYMROOT", this->CreateString(symroot.c_str()));
+
   // Put this last so it can override existing settings
   // Convert "CMAKE_XCODE_ATTRIBUTE_*" variables directly.
   {
@@ -3543,10 +3547,6 @@ bool cmGlobalXCodeGenerator
     }
   }
 
-  std::string symroot = root->GetCurrentBinaryDirectory();
-  symroot += "/build";
-  buildSettings->AddAttribute("SYMROOT", this->CreateString(symroot.c_str()));
-
   for( std::vector<cmXCodeObject*>::iterator i = configs.begin();
        i != configs.end(); ++i)
     {

https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=28db2268e8e36521626071a39596b9aaa87defbb
commit 28db2268e8e36521626071a39596b9aaa87defbb
Author:     Gregor Jasny <gja...@googlemail.com>
AuthorDate: Sat Jan 2 17:57:06 2016 +0100
Commit:     Gregor Jasny <gja...@googlemail.com>
CommitDate: Sun Jan 3 11:46:27 2016 +0100

    Xcode: Factor out XCODE_ATTRIBUTE_ variant filter (#14947)
    
    Move the variant=<config> filter out to a helper function
    so that it can be re-used later for CMAKE_XCODE_ATTRIBUTE_*.

diff --git a/Source/cmGlobalXCodeGenerator.cxx 
b/Source/cmGlobalXCodeGenerator.cxx
index 475efa8..c9d2742 100644
--- a/Source/cmGlobalXCodeGenerator.cxx
+++ b/Source/cmGlobalXCodeGenerator.cxx
@@ -1656,6 +1656,46 @@ std::string 
cmGlobalXCodeGenerator::ExtractFlagRegex(const char* exp,
   return retFlag;
 }
 
+ //----------------------------------------------------------------------------
+// This function strips off Xcode attributes that do not target the current
+// configuration
+void
+cmGlobalXCodeGenerator
+::FilterConfigurationAttribute(std::string const& configName,
+                               std::string& attribute)
+{
+  // Handle [variant=<config>] condition explicitly here.
+  std::string::size_type beginVariant = attribute.find("[variant=");
+  if (beginVariant == std::string::npos)
+    {
+    // There is no variant in this attribute.
+    return;
+    }
+
+  std::string::size_type endVariant = attribute.find("]", beginVariant+9);
+  if (endVariant == std::string::npos)
+    {
+    // There is no terminating bracket.
+    return;
+    }
+
+  // Compare the variant to the configuration.
+  std::string variant =
+    attribute.substr(beginVariant+9, endVariant-beginVariant-9);
+  if (variant == configName)
+    {
+    // The variant matches the configuration so use this
+    // attribute but drop the [variant=<config>] condition.
+    attribute.erase(beginVariant, endVariant-beginVariant+1);
+    }
+  else
+    {
+    // The variant does not match the configuration so
+    // do not use this attribute.
+    attribute.clear();
+    }
+}
+
 //----------------------------------------------------------------------------
 void
 cmGlobalXCodeGenerator::AddCommandsToBuildPhase(cmXCodeObject* buildphase,
@@ -2498,33 +2538,7 @@ void 
cmGlobalXCodeGenerator::CreateBuildSettings(cmGeneratorTarget* gtgt,
     if(i->find("XCODE_ATTRIBUTE_") == 0)
       {
       std::string attribute = i->substr(16);
-      // Handle [variant=<config>] condition explicitly here.
-      std::string::size_type beginVariant =
-        attribute.find("[variant=");
-      if (beginVariant != std::string::npos)
-        {
-        std::string::size_type endVariant =
-          attribute.find("]", beginVariant+9);
-        if (endVariant != std::string::npos)
-          {
-          // Compare the variant to the configuration.
-          std::string variant =
-            attribute.substr(beginVariant+9, endVariant-beginVariant-9);
-          if (variant == configName)
-            {
-            // The variant matches the configuration so use this
-            // attribute but drop the [variant=<config>] condition.
-            attribute.erase(beginVariant, endVariant-beginVariant+1);
-            }
-          else
-            {
-            // The variant does not match the configuration so
-            // do not use this attribute.
-            attribute.clear();
-            }
-          }
-        }
-
+      this->FilterConfigurationAttribute(configName, attribute);
       if (!attribute.empty())
         {
         cmGeneratorExpression ge;
diff --git a/Source/cmGlobalXCodeGenerator.h b/Source/cmGlobalXCodeGenerator.h
index c8a39df..4801064 100644
--- a/Source/cmGlobalXCodeGenerator.h
+++ b/Source/cmGlobalXCodeGenerator.h
@@ -153,6 +153,8 @@ private:
   std::string ExtractFlag(const char* flag, std::string& flags);
   std::string ExtractFlagRegex(const char* exp, int matchIndex,
                                std::string& flags);
+  void FilterConfigurationAttribute(std::string const& configName,
+                                    std::string& attribute);
   void SortXCodeObjects();
   // delete all objects in the this->XCodeObjects vector.
   void ClearXCodeObjects();

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

Summary of changes:
 .../CMAKE_XCODE_ATTRIBUTE_an-attribute.rst         |    6 +
 Source/CMakeVersion.cmake                          |    2 +-
 Source/cmGlobalXCodeGenerator.cxx                  |  136 ++++++++++++--------
 Source/cmGlobalXCodeGenerator.h                    |    3 +
 .../XcodeProject/XcodeAttributeGenex-check.cmake   |   48 +++++++
 .../XcodeProject/XcodeAttributeGenex.cmake         |   14 +-
 6 files changed, 154 insertions(+), 55 deletions(-)


hooks/post-receive
-- 
CMake
_______________________________________________
Cmake-commits mailing list
Cmake-commits@cmake.org
http://public.kitware.com/mailman/listinfo/cmake-commits

Reply via email to