[Cmake-commits] CMake branch, master, updated. v3.11.0-rc3-203-g378a11c

Kitware Robot kwrobot at kitware.com
Mon Mar 12 13:45:05 EDT 2018


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, master has been updated
       via  378a11cdbad6732971e91d5999f5788e26e35438 (commit)
       via  746ebaf563baa76613d6629a8d53cdeffb6d8a85 (commit)
       via  fac050ec8d10f7ad8488ff214f8a556a307c46af (commit)
       via  725b0cab863aae5b78bc252f8174b8362954dcab (commit)
       via  588a1afe76ad0e5bed5d03403fa7b392cbbcd438 (commit)
       via  90086767ddad60205302ad88257d60d68fc7fd0a (commit)
       via  7fec336bf72684d5b2610e7d6d6041f40c61e833 (commit)
       via  2dc2a3eb15c331aa2b953d995d304a6befc0aca4 (commit)
       via  8401b6ac4ebe8bc383f288119af77ef09eb3d62b (commit)
      from  b340cacde869102b2b548b2e7ebc7341334f1d58 (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=378a11cdbad6732971e91d5999f5788e26e35438
commit 378a11cdbad6732971e91d5999f5788e26e35438
Merge: 746ebaf 7fec336
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Mon Mar 12 17:42:12 2018 +0000
Commit:     Kitware Robot <kwrobot at kitware.com>
CommitDate: Mon Mar 12 13:42:18 2018 -0400

    Merge topic 'genex-TARGET_EXISTS'
    
    7fec336bf7 genex: Add TARGET_EXISTS to check for target existence
    
    Acked-by: Kitware Robot <kwrobot at kitware.com>
    Merge-request: !1829


https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=746ebaf563baa76613d6629a8d53cdeffb6d8a85
commit 746ebaf563baa76613d6629a8d53cdeffb6d8a85
Merge: fac050e 9008676
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Mon Mar 12 17:41:11 2018 +0000
Commit:     Kitware Robot <kwrobot at kitware.com>
CommitDate: Mon Mar 12 13:41:28 2018 -0400

    Merge topic 'xml-raii'
    
    90086767dd cmGlobalVisualStudio10Generator: Use cmXMLWriter RAII helpers
    8401b6ac4e cmXMLWriter: Add RAII helpers to allow DOM-like syntax
    
    Acked-by: Kitware Robot <kwrobot at kitware.com>
    Merge-request: !1818


https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=fac050ec8d10f7ad8488ff214f8a556a307c46af
commit fac050ec8d10f7ad8488ff214f8a556a307c46af
Merge: 725b0ca 2dc2a3e
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Mon Mar 12 17:40:12 2018 +0000
Commit:     Kitware Robot <kwrobot at kitware.com>
CommitDate: Mon Mar 12 13:40:44 2018 -0400

    Merge topic 'update-dllplatform'
    
    2dc2a3eb15 Identify DLL platforms via CMAKE_IMPORT_LIBRARY_SUFFIX
    
    Acked-by: Kitware Robot <kwrobot at kitware.com>
    Merge-request: !1832

diff --cc Source/cmTarget.cxx
index 70387ae,0a85c6b..6137223
--- a/Source/cmTarget.cxx
+++ b/Source/cmTarget.cxx
@@@ -186,10 -186,18 +186,10 @@@ cmTarget::cmTarget(std::string const& n
    this->ImportedGloballyVisible = vis == VisibilityImportedGlobally;
    this->BuildInterfaceIncludesAppended = false;
  
 -  // only add dependency information for library targets
 -  if (this->TargetTypeValue >= cmStateEnums::STATIC_LIBRARY &&
 -      this->TargetTypeValue <= cmStateEnums::MODULE_LIBRARY) {
 -    this->RecordDependencies = true;
 -  } else {
 -    this->RecordDependencies = false;
 -  }
 -
    // Check whether this is a DLL platform.
    this->DLLPlatform =
-     (this->Makefile->IsOn("WIN32") || this->Makefile->IsOn("CYGWIN") ||
-      this->Makefile->IsOn("MINGW"));
+     strcmp(this->Makefile->GetSafeDefinition("CMAKE_IMPORT_LIBRARY_SUFFIX"),
+            "") != 0;
  
    // Check whether we are targeting an Android platform.
    this->IsAndroid =

https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=725b0cab863aae5b78bc252f8174b8362954dcab
commit 725b0cab863aae5b78bc252f8174b8362954dcab
Merge: b340cac 588a1af
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Mon Mar 12 17:39:35 2018 +0000
Commit:     Kitware Robot <kwrobot at kitware.com>
CommitDate: Mon Mar 12 13:39:45 2018 -0400

    Merge topic 'cmake-rc-version-decimal'
    
    588a1afe76 CMakeVersion.rc: Avoid leading zeros in integer version components
    
    Acked-by: Kitware Robot <kwrobot at kitware.com>
    Merge-request: !1835


https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=588a1afe76ad0e5bed5d03403fa7b392cbbcd438
commit 588a1afe76ad0e5bed5d03403fa7b392cbbcd438
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Fri Mar 9 10:50:25 2018 -0500
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Fri Mar 9 10:52:49 2018 -0500

    CMakeVersion.rc: Avoid leading zeros in integer version components
    
    The split in commit v3.11.0-rc1~232^2 (CMakeVersion RC file: Split patch
    into 2 components, 2017-12-01) can leave components "2018,0309", but the
    latter is an octal constant with digit "9" out of range.  Strip the
    leading zero to express the components as "2018,309" so the resource
    compiler treats them as decimal.

diff --git a/Source/CMakeVersionCompute.cmake b/Source/CMakeVersionCompute.cmake
index 79264ed..72a5800 100644
--- a/Source/CMakeVersionCompute.cmake
+++ b/Source/CMakeVersionCompute.cmake
@@ -32,7 +32,12 @@ endif()
 # components in the RC file are 16-bit integers so we may have to
 # split the patch component.
 if(CMake_VERSION_PATCH MATCHES "^([0-9]+)([0-9][0-9][0-9][0-9])$")
-  set(CMake_RCVERSION ${CMake_VERSION_MAJOR},${CMake_VERSION_MINOR},${CMAKE_MATCH_1},${CMAKE_MATCH_2})
+  set(CMake_RCVERSION_YEAR "${CMAKE_MATCH_1}")
+  set(CMake_RCVERSION_MONTH_DAY "${CMAKE_MATCH_2}")
+  string(REGEX REPLACE "^0+" "" CMake_RCVERSION_MONTH_DAY "${CMake_RCVERSION_MONTH_DAY}")
+  set(CMake_RCVERSION ${CMake_VERSION_MAJOR},${CMake_VERSION_MINOR},${CMake_RCVERSION_YEAR},${CMake_RCVERSION_MONTH_DAY})
+  unset(CMake_RCVERSION_MONTH_DAY)
+  unset(CMake_RCVERSION_YEAR)
 else()
   set(CMake_RCVERSION ${CMake_VERSION_MAJOR},${CMake_VERSION_MINOR},${CMake_VERSION_PATCH})
 endif()

https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=90086767ddad60205302ad88257d60d68fc7fd0a
commit 90086767ddad60205302ad88257d60d68fc7fd0a
Author:     Vitaly Stakhovsky <vvs31415 at gitlab.org>
AuthorDate: Tue Mar 6 19:13:56 2018 -0500
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Fri Mar 9 10:11:11 2018 -0500

    cmGlobalVisualStudio10Generator: Use cmXMLWriter RAII helpers
    
    This simplifies our XML generation code and avoids the need to disable
    clang-format.

diff --git a/Source/cmGlobalVisualStudio10Generator.cxx b/Source/cmGlobalVisualStudio10Generator.cxx
index 73a5dae..205e0d0 100644
--- a/Source/cmGlobalVisualStudio10Generator.cxx
+++ b/Source/cmGlobalVisualStudio10Generator.cxx
@@ -636,126 +636,89 @@ bool cmGlobalVisualStudio10Generator::FindVCTargetsPath(cmMakefile* mf)
     cmsys::ofstream fout(vcxprojAbs.c_str());
     cmXMLWriter xw(fout);
 
-    /* clang-format off */
-    xw.StartDocument();
-    xw.StartElement("Project");
-     xw.Attribute("DefaultTargets", "Build");
-     xw.Attribute("ToolsVersion", "4.0");
-     xw.Attribute("xmlns",
-                  "http://schemas.microsoft.com/developer/msbuild/2003");
-     if (this->IsNsightTegra()) {
-       xw.StartElement("PropertyGroup");
-        xw.Attribute("Label", "NsightTegraProject");
-        xw.StartElement("NsightTegraProjectRevisionNumber");
-         xw.Content("6");
-        xw.EndElement(); // NsightTegraProjectRevisionNumber
-       xw.EndElement(); // PropertyGroup
-     }
-     xw.StartElement("ItemGroup");
-      xw.Attribute("Label", "ProjectConfigurations");
-      xw.StartElement("ProjectConfiguration");
-       xw.Attribute("Include", "Debug|" + this->GetPlatformName());
-       xw.StartElement("Configuration");
-        xw.Content("Debug");
-       xw.EndElement(); // Configuration
-       xw.StartElement("Platform");
-        xw.Content(this->GetPlatformName());
-       xw.EndElement(); // Platform
-      xw.EndElement(); // ProjectConfiguration
-     xw.EndElement(); // ItemGroup
-    xw.StartElement("PropertyGroup");
-     xw.Attribute("Label", "Globals");
-     xw.StartElement("ProjectGuid");
-      xw.Content("{F3FC6D86-508D-3FB1-96D2-995F08B142EC}");
-     xw.EndElement(); // ProjectGuid
-     xw.StartElement("Keyword");
-      xw.Content("Win32Proj");
-     xw.EndElement(); // Keyword
-     xw.StartElement("Platform");
-      xw.Content(this->GetPlatformName());
-     xw.EndElement(); // Platform
-     if (this->GetSystemName() == "WindowsPhone") {
-       xw.StartElement("ApplicationType");
-        xw.Content("Windows Phone");
-       xw.EndElement(); // ApplicationType
-       xw.StartElement("ApplicationTypeRevision");
-        xw.Content(this->GetSystemVersion());
-       xw.EndElement(); // ApplicationTypeRevision
-     } else if (this->GetSystemName() == "WindowsStore") {
-       xw.StartElement("ApplicationType");
-        xw.Content("Windows Store");
-       xw.EndElement(); // ApplicationType
-       xw.StartElement("ApplicationTypeRevision");
-        xw.Content(this->GetSystemVersion());
-       xw.EndElement(); // ApplicationTypeRevision
-     }
-     if (!this->WindowsTargetPlatformVersion.empty()) {
-       xw.StartElement("WindowsTargetPlatformVersion");
-        xw.Content(this->WindowsTargetPlatformVersion);
-       xw.EndElement(); // WindowsTargetPlatformVersion
-     }
-     if (this->GetPlatformName() == "ARM64") {
-       xw.StartElement("WindowsSDKDesktopARM64Support");
-        xw.Content("true");
-       xw.EndElement(); // WindowsSDK64DesktopARMSupport
-     }
-     else if (this->GetPlatformName() == "ARM") {
-       xw.StartElement("WindowsSDKDesktopARMSupport");
-        xw.Content("true");
-       xw.EndElement(); // WindowsSDKDesktopARMSupport
-     }
-    xw.EndElement(); // PropertyGroup
-    xw.StartElement("Import");
-     xw.Attribute("Project",
-                  "$(VCTargetsPath)\\Microsoft.Cpp.Default.props");
-    xw.EndElement(); // Import
+    cmXMLDocument doc(xw);
+    cmXMLElement eprj(doc, "Project");
+    eprj.Attribute("DefaultTargets", "Build");
+    eprj.Attribute("ToolsVersion", "4.0");
+    eprj.Attribute("xmlns",
+                   "http://schemas.microsoft.com/developer/msbuild/2003");
+    if (this->IsNsightTegra()) {
+      cmXMLElement epg(eprj, "PropertyGroup");
+      epg.Attribute("Label", "NsightTegraProject");
+      cmXMLElement(epg, "NsightTegraProjectRevisionNumber").Content("6");
+    }
+    {
+      cmXMLElement eig(eprj, "ItemGroup");
+      eig.Attribute("Label", "ProjectConfigurations");
+      cmXMLElement epc(eig, "ProjectConfiguration");
+      epc.Attribute("Include", "Debug|" + this->GetPlatformName());
+      cmXMLElement(epc, "Configuration").Content("Debug");
+      cmXMLElement(epc, "Platform").Content(this->GetPlatformName());
+    }
+    {
+      cmXMLElement epg(eprj, "PropertyGroup");
+      epg.Attribute("Label", "Globals");
+      cmXMLElement(epg, "ProjectGuid")
+        .Content("{F3FC6D86-508D-3FB1-96D2-995F08B142EC}");
+      cmXMLElement(epg, "Keyword").Content("Win32Proj");
+      cmXMLElement(epg, "Platform").Content(this->GetPlatformName());
+      if (this->GetSystemName() == "WindowsPhone") {
+        cmXMLElement(epg, "ApplicationType").Content("Windows Phone");
+        cmXMLElement(epg, "ApplicationTypeRevision")
+          .Content(this->GetSystemVersion());
+      } else if (this->GetSystemName() == "WindowsStore") {
+        cmXMLElement(epg, "ApplicationType").Content("Windows Store");
+        cmXMLElement(epg, "ApplicationTypeRevision")
+          .Content(this->GetSystemVersion());
+      }
+      if (!this->WindowsTargetPlatformVersion.empty()) {
+        cmXMLElement(epg, "WindowsTargetPlatformVersion")
+          .Content(this->WindowsTargetPlatformVersion);
+      }
+      if (this->GetPlatformName() == "ARM64") {
+        cmXMLElement(epg, "WindowsSDKDesktopARM64Support").Content("true");
+      } else if (this->GetPlatformName() == "ARM") {
+        cmXMLElement(epg, "WindowsSDKDesktopARMSupport").Content("true");
+      }
+    }
+    cmXMLElement(eprj, "Import")
+      .Attribute("Project", "$(VCTargetsPath)\\Microsoft.Cpp.Default.props");
     if (!this->GeneratorToolsetHostArchitecture.empty()) {
-      xw.StartElement("PropertyGroup");
-       xw.StartElement("PreferredToolArchitecture");
-        xw.Content(this->GeneratorToolsetHostArchitecture);
-       xw.EndElement(); // PreferredToolArchitecture
-      xw.EndElement(); // PropertyGroup
+      cmXMLElement epg(eprj, "PropertyGroup");
+      cmXMLElement(epg, "PreferredToolArchitecture")
+        .Content(this->GeneratorToolsetHostArchitecture);
     }
-    xw.StartElement("PropertyGroup");
-     xw.Attribute("Label", "Configuration");
-     xw.StartElement("ConfigurationType");
+    {
+      cmXMLElement epg(eprj, "PropertyGroup");
+      epg.Attribute("Label", "Configuration");
+      {
+        cmXMLElement ect(epg, "ConfigurationType");
+        if (this->IsNsightTegra()) {
+          // Tegra-Android platform does not understand "Utility".
+          ect.Content("StaticLibrary");
+        } else {
+          ect.Content("Utility");
+        }
+      }
+      cmXMLElement(epg, "CharacterSet").Content("MultiByte");
       if (this->IsNsightTegra()) {
-        // Tegra-Android platform does not understand "Utility".
-        xw.Content("StaticLibrary");
+        cmXMLElement(epg, "NdkToolchainVersion")
+          .Content(this->GetPlatformToolsetString());
       } else {
-        xw.Content("Utility");
+        cmXMLElement(epg, "PlatformToolset")
+          .Content(this->GetPlatformToolsetString());
       }
-     xw.EndElement(); // ConfigurationType
-     xw.StartElement("CharacterSet");
-      xw.Content("MultiByte");
-     xw.EndElement(); // CharacterSet
-     if (this->IsNsightTegra()) {
-       xw.StartElement("NdkToolchainVersion");
-       xw.Content(this->GetPlatformToolsetString());
-       xw.EndElement(); // NdkToolchainVersion
-     } else {
-       xw.StartElement("PlatformToolset");
-       xw.Content(this->GetPlatformToolsetString());
-       xw.EndElement(); // PlatformToolset
-     }
-    xw.EndElement(); // PropertyGroup
-    xw.StartElement("Import");
-     xw.Attribute("Project", "$(VCTargetsPath)\\Microsoft.Cpp.props");
-    xw.EndElement(); // Import
-    xw.StartElement("ItemDefinitionGroup");
-     xw.StartElement("PostBuildEvent");
-      xw.StartElement("Command");
-       xw.Content("echo VCTargetsPath=$(VCTargetsPath)");
-      xw.EndElement(); // Command
-     xw.EndElement(); // PostBuildEvent
-    xw.EndElement(); // ItemDefinitionGroup
-    xw.StartElement("Import");
-     xw.Attribute("Project",
-                  "$(VCTargetsPath)\\Microsoft.Cpp.targets");
-    xw.EndElement(); // Import
-    xw.EndElement(); // Project
-    xw.EndDocument();
-    /* clang-format on */
+    }
+    cmXMLElement(eprj, "Import")
+      .Attribute("Project", "$(VCTargetsPath)\\Microsoft.Cpp.props");
+    {
+      cmXMLElement eidg(eprj, "ItemDefinitionGroup");
+      cmXMLElement epbe(eidg, "PostBuildEvent");
+      cmXMLElement(epbe, "Command")
+        .Content("echo VCTargetsPath=$(VCTargetsPath)");
+    }
+    cmXMLElement(eprj, "Import")
+      .Attribute("Project", "$(VCTargetsPath)\\Microsoft.Cpp.targets");
   }
 
   std::vector<std::string> cmd;
diff --git a/Source/cmXMLWriter.h b/Source/cmXMLWriter.h
index 4324873..80940ee 100644
--- a/Source/cmXMLWriter.h
+++ b/Source/cmXMLWriter.h
@@ -157,12 +157,12 @@ public:
   {
     xmlwr.StartElement(tag);
   }
-  cmXMLElement(cmXMLElement const& par, const char* tag)
+  cmXMLElement(cmXMLElement& par, const char* tag)
     : xmlwr(par.xmlwr)
   {
     xmlwr.StartElement(tag);
   }
-  cmXMLElement(cmXMLDocument const& doc, const char* tag)
+  cmXMLElement(cmXMLDocument& doc, const char* tag)
     : xmlwr(doc.xmlwr)
   {
     xmlwr.StartElement(tag);

https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=7fec336bf72684d5b2610e7d6d6041f40c61e833
commit 7fec336bf72684d5b2610e7d6d6041f40c61e833
Author:     Alex Turbov <i.zaufi at gmail.com>
AuthorDate: Wed Mar 7 12:01:28 2018 +0800
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Fri Mar 9 08:24:05 2018 -0500

    genex: Add TARGET_EXISTS to check for target existence
    
    Define `$<TARGET_EXISTS:a>` to `1` if `a` is an existed target name,
    else `0`.

diff --git a/Help/manual/cmake-generator-expressions.7.rst b/Help/manual/cmake-generator-expressions.7.rst
index 04cb1dc..d3514ab 100644
--- a/Help/manual/cmake-generator-expressions.7.rst
+++ b/Help/manual/cmake-generator-expressions.7.rst
@@ -59,6 +59,8 @@ Available logical expressions are:
   ``1`` if ``a`` is EQUAL ``b`` in a numeric comparison, else ``0``
 ``$<IN_LIST:a,b>``
   ``1`` if ``a`` is IN_LIST ``b``, else ``0``
+``$<TARGET_EXISTS:tgt>``
+  ``1`` if ``tgt`` is an existed target name, else ``0``.
 ``$<CONFIG:cfg>``
   ``1`` if config is ``cfg``, else ``0``. This is a case-insensitive comparison.
   The mapping in :prop_tgt:`MAP_IMPORTED_CONFIG_<CONFIG>` is also considered by
diff --git a/Help/release/dev/genex-TARGET_EXISTS.rst b/Help/release/dev/genex-TARGET_EXISTS.rst
new file mode 100644
index 0000000..f305522
--- /dev/null
+++ b/Help/release/dev/genex-TARGET_EXISTS.rst
@@ -0,0 +1,6 @@
+genex-TARGET_EXISTS
+-------------------
+
+* A new ``$<TARGET_EXISTS:...>``
+  :manual:`generator expression <cmake-generator-expressions(7)>`
+  has been added.
diff --git a/Source/cmGeneratorExpressionNode.cxx b/Source/cmGeneratorExpressionNode.cxx
index 0d22028..f444113 100644
--- a/Source/cmGeneratorExpressionNode.cxx
+++ b/Source/cmGeneratorExpressionNode.cxx
@@ -300,6 +300,37 @@ static const struct InListNode : public cmGeneratorExpressionNode
   }
 } inListNode;
 
+static const struct TargetExistsNode : public cmGeneratorExpressionNode
+{
+  TargetExistsNode() {}
+
+  int NumExpectedParameters() const override { return 1; }
+
+  std::string Evaluate(
+    const std::vector<std::string>& parameters,
+    cmGeneratorExpressionContext* context,
+    const GeneratorExpressionContent* content,
+    cmGeneratorExpressionDAGChecker* /*dagChecker*/) const override
+  {
+    if (parameters.size() != 1) {
+      reportError(context, content->GetOriginalExpression(),
+                  "$<TARGET_EXISTS:...> expression requires one parameter");
+      return std::string();
+    }
+
+    std::string targetName = parameters.front();
+    if (targetName.empty() ||
+        !cmGeneratorExpression::IsValidTargetName(targetName)) {
+      reportError(context, content->GetOriginalExpression(),
+                  "$<TARGET_EXISTS:tgt> expression requires a non-empty "
+                  "valid target name.");
+      return std::string();
+    }
+
+    return context->LG->GetMakefile()->FindTargetToUse(targetName) ? "1" : "0";
+  }
+} targetExistsNode;
+
 static const struct LowerCaseNode : public cmGeneratorExpressionNode
 {
   LowerCaseNode() {}
@@ -1865,6 +1896,7 @@ const cmGeneratorExpressionNode* cmGeneratorExpressionNode::GetNode(
     nodeMap["TARGET_NAME"] = &targetNameNode;
     nodeMap["TARGET_OBJECTS"] = &targetObjectsNode;
     nodeMap["TARGET_POLICY"] = &targetPolicyNode;
+    nodeMap["TARGET_EXISTS"] = &targetExistsNode;
     nodeMap["BUILD_INTERFACE"] = &buildInterfaceNode;
     nodeMap["INSTALL_INTERFACE"] = &installInterfaceNode;
     nodeMap["INSTALL_PREFIX"] = &installPrefixNode;
diff --git a/Tests/RunCMake/GeneratorExpression/RunCMakeTest.cmake b/Tests/RunCMake/GeneratorExpression/RunCMakeTest.cmake
index 2486259..f9a5cae 100644
--- a/Tests/RunCMake/GeneratorExpression/RunCMakeTest.cmake
+++ b/Tests/RunCMake/GeneratorExpression/RunCMakeTest.cmake
@@ -34,6 +34,10 @@ run_cmake(OUTPUT_NAME-recursion)
 run_cmake(TARGET_PROPERTY-LOCATION)
 run_cmake(TARGET_PROPERTY-SOURCES)
 run_cmake(LINK_ONLY-not-linking)
+run_cmake(TARGET_EXISTS-no-arg)
+run_cmake(TARGET_EXISTS-empty-arg)
+run_cmake(TARGET_EXISTS)
+run_cmake(TARGET_EXISTS-not-a-target)
 
 run_cmake(ImportedTarget-TARGET_BUNDLE_DIR)
 run_cmake(ImportedTarget-TARGET_BUNDLE_CONTENT_DIR)
diff --git a/Tests/RunCMake/GeneratorExpression/TARGET_EXISTS-check.cmake b/Tests/RunCMake/GeneratorExpression/TARGET_EXISTS-check.cmake
new file mode 100644
index 0000000..c4c3a51
--- /dev/null
+++ b/Tests/RunCMake/GeneratorExpression/TARGET_EXISTS-check.cmake
@@ -0,0 +1,6 @@
+file(READ "${RunCMake_TEST_BINARY_DIR}/TARGET_EXISTS-generated.txt" content)
+
+set(expected "1")
+if(NOT content STREQUAL expected)
+  set(RunCMake_TEST_FAILED "actual content:\n [[${content}]]\nbut expected:\n [[${expected}]]")
+endif()
diff --git a/Tests/RunCMake/GeneratorExpression/TARGET_EXISTS-empty-arg-result.txt b/Tests/RunCMake/GeneratorExpression/TARGET_EXISTS-empty-arg-result.txt
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/Tests/RunCMake/GeneratorExpression/TARGET_EXISTS-empty-arg-result.txt
@@ -0,0 +1 @@
+1
diff --git a/Tests/RunCMake/GeneratorExpression/TARGET_EXISTS-empty-arg-stderr.txt b/Tests/RunCMake/GeneratorExpression/TARGET_EXISTS-empty-arg-stderr.txt
new file mode 100644
index 0000000..1df6e28
--- /dev/null
+++ b/Tests/RunCMake/GeneratorExpression/TARGET_EXISTS-empty-arg-stderr.txt
@@ -0,0 +1,8 @@
+CMake Error at TARGET_EXISTS-empty-arg.cmake:2 \(file\):
+  Error evaluating generator expression:
+
+    \$<TARGET_EXISTS:>
+
+  \$<TARGET_EXISTS:tgt> expression requires a non-empty valid target name.
+Call Stack \(most recent call first\):
+  CMakeLists.txt:[0-9]+ \(include\)
diff --git a/Tests/RunCMake/GeneratorExpression/TARGET_EXISTS-empty-arg.cmake b/Tests/RunCMake/GeneratorExpression/TARGET_EXISTS-empty-arg.cmake
new file mode 100644
index 0000000..e387abc
--- /dev/null
+++ b/Tests/RunCMake/GeneratorExpression/TARGET_EXISTS-empty-arg.cmake
@@ -0,0 +1,2 @@
+cmake_policy(SET CMP0070 NEW)
+file(GENERATE OUTPUT TARGET_EXISTS-generated.txt CONTENT "$<TARGET_EXISTS:${empty}>")
diff --git a/Tests/RunCMake/GeneratorExpression/TARGET_EXISTS-no-arg-result.txt b/Tests/RunCMake/GeneratorExpression/TARGET_EXISTS-no-arg-result.txt
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/Tests/RunCMake/GeneratorExpression/TARGET_EXISTS-no-arg-result.txt
@@ -0,0 +1 @@
+1
diff --git a/Tests/RunCMake/GeneratorExpression/TARGET_EXISTS-no-arg-stderr.txt b/Tests/RunCMake/GeneratorExpression/TARGET_EXISTS-no-arg-stderr.txt
new file mode 100644
index 0000000..69e6130
--- /dev/null
+++ b/Tests/RunCMake/GeneratorExpression/TARGET_EXISTS-no-arg-stderr.txt
@@ -0,0 +1,8 @@
+CMake Error at TARGET_EXISTS-no-arg.cmake:2 \(file\):
+  Error evaluating generator expression:
+
+    \$<TARGET_EXISTS>
+
+  \$<TARGET_EXISTS> expression requires exactly one parameter.
+Call Stack \(most recent call first\):
+  CMakeLists.txt:[0-9]+ \(include\)
diff --git a/Tests/RunCMake/GeneratorExpression/TARGET_EXISTS-no-arg.cmake b/Tests/RunCMake/GeneratorExpression/TARGET_EXISTS-no-arg.cmake
new file mode 100644
index 0000000..0a5ce32
--- /dev/null
+++ b/Tests/RunCMake/GeneratorExpression/TARGET_EXISTS-no-arg.cmake
@@ -0,0 +1,2 @@
+cmake_policy(SET CMP0070 NEW)
+file(GENERATE OUTPUT TARGET_EXISTS-generated.txt CONTENT "$<TARGET_EXISTS>")
diff --git a/Tests/RunCMake/GeneratorExpression/TARGET_EXISTS-not-a-target-check.cmake b/Tests/RunCMake/GeneratorExpression/TARGET_EXISTS-not-a-target-check.cmake
new file mode 100644
index 0000000..35ba267
--- /dev/null
+++ b/Tests/RunCMake/GeneratorExpression/TARGET_EXISTS-not-a-target-check.cmake
@@ -0,0 +1,6 @@
+file(READ "${RunCMake_TEST_BINARY_DIR}/TARGET_EXISTS-not-a-target-generated.txt" content)
+
+set(expected "0")
+if(NOT content STREQUAL expected)
+  set(RunCMake_TEST_FAILED "actual content:\n [[${content}]]\nbut expected:\n [[${expected}]]")
+endif()
diff --git a/Tests/RunCMake/GeneratorExpression/TARGET_EXISTS-not-a-target.cmake b/Tests/RunCMake/GeneratorExpression/TARGET_EXISTS-not-a-target.cmake
new file mode 100644
index 0000000..d8a8d3e
--- /dev/null
+++ b/Tests/RunCMake/GeneratorExpression/TARGET_EXISTS-not-a-target.cmake
@@ -0,0 +1,2 @@
+cmake_policy(SET CMP0070 NEW)
+file(GENERATE OUTPUT TARGET_EXISTS-not-a-target-generated.txt CONTENT "$<TARGET_EXISTS:just-random-string>")
diff --git a/Tests/RunCMake/GeneratorExpression/TARGET_EXISTS.cmake b/Tests/RunCMake/GeneratorExpression/TARGET_EXISTS.cmake
new file mode 100644
index 0000000..9a83b34
--- /dev/null
+++ b/Tests/RunCMake/GeneratorExpression/TARGET_EXISTS.cmake
@@ -0,0 +1,3 @@
+cmake_policy(SET CMP0070 NEW)
+add_custom_target(foo)
+file(GENERATE OUTPUT TARGET_EXISTS-generated.txt CONTENT "$<TARGET_EXISTS:foo>")

https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=2dc2a3eb15c331aa2b953d995d304a6befc0aca4
commit 2dc2a3eb15c331aa2b953d995d304a6befc0aca4
Author:     Stephan Szabo <stephan.szabo at sony.com>
AuthorDate: Thu Mar 8 10:26:56 2018 -0800
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Fri Mar 9 08:09:21 2018 -0500

    Identify DLL platforms via CMAKE_IMPORT_LIBRARY_SUFFIX
    
    Use `CMAKE_IMPORT_LIBRARY_SUFFIX` to identify platforms that have DLL
    import libraries rather than memorizing a list of platform names.
    
    Fixes: #16801

diff --git a/Source/cmGeneratorTarget.cxx b/Source/cmGeneratorTarget.cxx
index 8cdba93..b9e2978 100644
--- a/Source/cmGeneratorTarget.cxx
+++ b/Source/cmGeneratorTarget.cxx
@@ -132,8 +132,8 @@ cmGeneratorTarget::cmGeneratorTarget(cmTarget* t, cmLocalGenerator* lg)
                                      this->SourceEntries, true);
 
   this->DLLPlatform =
-    (this->Makefile->IsOn("WIN32") || this->Makefile->IsOn("CYGWIN") ||
-     this->Makefile->IsOn("MINGW"));
+    strcmp(this->Makefile->GetSafeDefinition("CMAKE_IMPORT_LIBRARY_SUFFIX"),
+           "") != 0;
 
   this->PolicyMap = t->PolicyMap;
 }
diff --git a/Source/cmInstallCommand.cxx b/Source/cmInstallCommand.cxx
index 008a5e0..b5291a1 100644
--- a/Source/cmInstallCommand.cxx
+++ b/Source/cmInstallCommand.cxx
@@ -5,6 +5,7 @@
 #include "cmsys/Glob.hxx"
 #include <sstream>
 #include <stddef.h>
+#include <string.h>
 #include <utility>
 
 #include "cmAlgorithms.h"
@@ -334,8 +335,8 @@ bool cmInstallCommand::HandleTargetsMode(std::vector<std::string> const& args)
 
   // Check whether this is a DLL platform.
   bool dll_platform =
-    (this->Makefile->IsOn("WIN32") || this->Makefile->IsOn("CYGWIN") ||
-     this->Makefile->IsOn("MINGW"));
+    strcmp(this->Makefile->GetSafeDefinition("CMAKE_IMPORT_LIBRARY_SUFFIX"),
+           "") != 0;
 
   for (std::string const& tgt : targetList.GetVector()) {
 
diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx
index bb21022..0a85c6b 100644
--- a/Source/cmTarget.cxx
+++ b/Source/cmTarget.cxx
@@ -196,8 +196,8 @@ cmTarget::cmTarget(std::string const& name, cmStateEnums::TargetType type,
 
   // Check whether this is a DLL platform.
   this->DLLPlatform =
-    (this->Makefile->IsOn("WIN32") || this->Makefile->IsOn("CYGWIN") ||
-     this->Makefile->IsOn("MINGW"));
+    strcmp(this->Makefile->GetSafeDefinition("CMAKE_IMPORT_LIBRARY_SUFFIX"),
+           "") != 0;
 
   // Check whether we are targeting an Android platform.
   this->IsAndroid =

https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=8401b6ac4ebe8bc383f288119af77ef09eb3d62b
commit 8401b6ac4ebe8bc383f288119af77ef09eb3d62b
Author:     Vitaly Stakhovsky <vvs31415 at gitlab.org>
AuthorDate: Sun Mar 4 15:03:57 2018 -0500
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Fri Mar 9 07:28:49 2018 -0500

    cmXMLWriter: Add RAII helpers to allow DOM-like syntax
    
    Use RAII for cmXMLWriter::StartElement/EndElement to make nesting
    automatic.

diff --git a/Source/cmXMLWriter.h b/Source/cmXMLWriter.h
index 7bae21e..4324873 100644
--- a/Source/cmXMLWriter.h
+++ b/Source/cmXMLWriter.h
@@ -133,4 +133,56 @@ private:
   bool IsContent;
 };
 
+class cmXMLElement; // IWYU pragma: keep
+
+class cmXMLDocument
+{
+public:
+  cmXMLDocument(cmXMLWriter& xml)
+    : xmlwr(xml)
+  {
+    xmlwr.StartDocument();
+  }
+  ~cmXMLDocument() { xmlwr.EndDocument(); }
+private:
+  friend class cmXMLElement;
+  cmXMLWriter& xmlwr;
+};
+
+class cmXMLElement
+{
+public:
+  cmXMLElement(cmXMLWriter& xml, const char* tag)
+    : xmlwr(xml)
+  {
+    xmlwr.StartElement(tag);
+  }
+  cmXMLElement(cmXMLElement const& par, const char* tag)
+    : xmlwr(par.xmlwr)
+  {
+    xmlwr.StartElement(tag);
+  }
+  cmXMLElement(cmXMLDocument const& doc, const char* tag)
+    : xmlwr(doc.xmlwr)
+  {
+    xmlwr.StartElement(tag);
+  }
+  ~cmXMLElement() { xmlwr.EndElement(); }
+
+  template <typename T>
+  cmXMLElement& Attribute(const char* name, T const& value)
+  {
+    xmlwr.Attribute(name, value);
+    return *this;
+  }
+  template <typename T>
+  void Content(T const& content)
+  {
+    xmlwr.Content(content);
+  }
+
+private:
+  cmXMLWriter& xmlwr;
+};
+
 #endif

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

Summary of changes:
 Help/manual/cmake-generator-expressions.7.rst      |    2 +
 Help/release/dev/genex-TARGET_EXISTS.rst           |    6 +
 Source/CMakeVersionCompute.cmake                   |    7 +-
 Source/cmGeneratorExpressionNode.cxx               |   32 ++++
 Source/cmGeneratorTarget.cxx                       |    4 +-
 Source/cmGlobalVisualStudio10Generator.cxx         |  193 ++++++++------------
 Source/cmInstallCommand.cxx                        |    5 +-
 Source/cmTarget.cxx                                |    4 +-
 Source/cmXMLWriter.h                               |   52 ++++++
 .../GeneratorExpression/RunCMakeTest.cmake         |    4 +
 .../GeneratorExpression/TARGET_EXISTS-check.cmake  |    6 +
 .../TARGET_EXISTS-empty-arg-result.txt}            |    0
 .../TARGET_EXISTS-empty-arg-stderr.txt             |    8 +
 .../TARGET_EXISTS-empty-arg.cmake                  |    2 +
 .../TARGET_EXISTS-no-arg-result.txt}               |    0
 .../TARGET_EXISTS-no-arg-stderr.txt                |    8 +
 .../GeneratorExpression/TARGET_EXISTS-no-arg.cmake |    2 +
 .../TARGET_EXISTS-not-a-target-check.cmake         |    6 +
 .../TARGET_EXISTS-not-a-target.cmake               |    2 +
 .../GeneratorExpression/TARGET_EXISTS.cmake        |    3 +
 20 files changed, 224 insertions(+), 122 deletions(-)
 create mode 100644 Help/release/dev/genex-TARGET_EXISTS.rst
 create mode 100644 Tests/RunCMake/GeneratorExpression/TARGET_EXISTS-check.cmake
 copy Tests/RunCMake/{Android/BadSYSROOT-result.txt => GeneratorExpression/TARGET_EXISTS-empty-arg-result.txt} (100%)
 create mode 100644 Tests/RunCMake/GeneratorExpression/TARGET_EXISTS-empty-arg-stderr.txt
 create mode 100644 Tests/RunCMake/GeneratorExpression/TARGET_EXISTS-empty-arg.cmake
 copy Tests/RunCMake/{Android/BadSYSROOT-result.txt => GeneratorExpression/TARGET_EXISTS-no-arg-result.txt} (100%)
 create mode 100644 Tests/RunCMake/GeneratorExpression/TARGET_EXISTS-no-arg-stderr.txt
 create mode 100644 Tests/RunCMake/GeneratorExpression/TARGET_EXISTS-no-arg.cmake
 create mode 100644 Tests/RunCMake/GeneratorExpression/TARGET_EXISTS-not-a-target-check.cmake
 create mode 100644 Tests/RunCMake/GeneratorExpression/TARGET_EXISTS-not-a-target.cmake
 create mode 100644 Tests/RunCMake/GeneratorExpression/TARGET_EXISTS.cmake


hooks/post-receive
-- 
CMake


More information about the Cmake-commits mailing list