From 5331369832b1ff3a9690d829e51ad1236d8413d4 Mon Sep 17 00:00:00 2001
From: Stefan Kislinskiy <s.kislinskiy@dkfz-heidelberg.de>
Date: Thu, 17 Sep 2015 14:52:22 +0200
Subject: [PATCH] Genex: Add SHELL_PATH.
To: cmake-developers@cmake.org

---
 Source/cmGeneratorExpressionNode.cxx | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/Source/cmGeneratorExpressionNode.cxx b/Source/cmGeneratorExpressionNode.cxx
index 31b6766..936e707 100644
--- a/Source/cmGeneratorExpressionNode.cxx
+++ b/Source/cmGeneratorExpressionNode.cxx
@@ -13,6 +13,7 @@
 #include "cmGeneratorExpressionNode.h"
 #include "cmGlobalGenerator.h"
 #include "cmAlgorithms.h"
+#include "cmOutputConverter.h"
 
 //----------------------------------------------------------------------------
 std::string cmGeneratorExpressionNode::EvaluateDependentExpression(
@@ -1792,6 +1793,22 @@ static const
 TargetFilesystemArtifactNodeGroup<ArtifactPdbTag> targetPdbNodeGroup;
 
 //----------------------------------------------------------------------------
+static const struct ShellPathNode : public cmGeneratorExpressionNode
+{
+  ShellPathNode() {}
+
+  std::string Evaluate(const std::vector<std::string> &parameters,
+                       cmGeneratorExpressionContext *context,
+                       const GeneratorExpressionContent *,
+                       cmGeneratorExpressionDAGChecker *) const
+  {
+    cmOutputConverter converter(context->Makefile->GetStateSnapshot());
+    return converter.ConvertToOutputFormat(parameters.front(),
+                                           cmOutputConverter::SHELL);
+  }
+} shellPathNode;
+
+//----------------------------------------------------------------------------
 const cmGeneratorExpressionNode*
 cmGeneratorExpressionNode::GetNode(const std::string &identifier)
 {
@@ -1846,6 +1863,7 @@ cmGeneratorExpressionNode::GetNode(const std::string &identifier)
     nodeMap["JOIN"] = &joinNode;
     nodeMap["LINK_ONLY"] = &linkOnlyNode;
     nodeMap["COMPILE_LANGUAGE"] = &languageNode;
+    nodeMap["SHELL_PATH"] = &shellPathNode;
     }
   NodeMap::const_iterator i = nodeMap.find(identifier);
   if (i == nodeMap.end())
-- 
2.1.4

