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  a0717a6812ae7c599267d57f6ba37ee6937a715c (commit)
       via  8adf6ab5be58d130dc294a897b23f113dfc08220 (commit)
       via  7de868c4d7c8bfe35d201ed480328f3177a1325b (commit)
      from  d6b6e47b1df0f6e8d1201be99ce9f8e5b28c9a04 (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=a0717a6812ae7c599267d57f6ba37ee6937a715c
commit a0717a6812ae7c599267d57f6ba37ee6937a715c
Merge: d6b6e47 8adf6ab
Author:     Brad King <brad.k...@kitware.com>
AuthorDate: Thu Sep 24 10:17:16 2015 -0400
Commit:     CMake Topic Stage <kwro...@kitware.com>
CommitDate: Thu Sep 24 10:17:16 2015 -0400

    Merge topic 'genex-SHELL_PATH' into next
    
    8adf6ab5 Genex: Add a SHELL_PATH expression
    7de868c4 Tests: Simplify GeneratorExpression check implementation


https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=8adf6ab5be58d130dc294a897b23f113dfc08220
commit 8adf6ab5be58d130dc294a897b23f113dfc08220
Author:     Stefan Kislinskiy <s.kislins...@dkfz-heidelberg.de>
AuthorDate: Thu Sep 24 12:33:01 2015 +0200
Commit:     Brad King <brad.k...@kitware.com>
CommitDate: Thu Sep 24 09:50:23 2015 -0400

    Genex: Add a SHELL_PATH expression
    
    Some commands on Windows do not understand forward slash paths and
    require backslashes.  In order to help projects generate shell
    invocations of such commands, provide a generator expression to convert
    paths to the shell-preferred path format for the current generator.
    This will allow custom commands to generate paths the same way CMake
    does for compiler command invocations.

diff --git a/Help/manual/cmake-generator-expressions.7.rst 
b/Help/manual/cmake-generator-expressions.7.rst
index 189c3ef..13ee4bd 100644
--- a/Help/manual/cmake-generator-expressions.7.rst
+++ b/Help/manual/cmake-generator-expressions.7.rst
@@ -278,3 +278,7 @@ Available output expressions are:
   object of type ``OBJECT_LIBRARY``.  This expression may only be used in
   the sources of :command:`add_library` and :command:`add_executable`
   commands.
+``$<SHELL_PATH:...>``
+  Content of ``...`` converted to shell path style. For example, slashes are
+  converted to backslashes in Windows shells and drive letters are converted
+  to posix paths in MSYS shells. The ``...`` must be an absolute path.
diff --git a/Help/release/dev/genex-SHELL_PATH.rst 
b/Help/release/dev/genex-SHELL_PATH.rst
new file mode 100644
index 0000000..86af720
--- /dev/null
+++ b/Help/release/dev/genex-SHELL_PATH.rst
@@ -0,0 +1,6 @@
+genex-SHELL_PATH
+----------------
+
+* A new ``$<SHELL_PATH:...>``
+  :manual:`generator expression <cmake-generator-expressions(7)>`
+  has been added.
diff --git a/Source/cmGeneratorExpressionNode.cxx 
b/Source/cmGeneratorExpressionNode.cxx
index 31b6766..1c350ab 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,27 @@ 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 *content,
+                       cmGeneratorExpressionDAGChecker *) const
+  {
+    if (!cmSystemTools::FileIsFullPath(parameters.front()))
+      {
+      reportError(context, content->GetOriginalExpression(),
+                  "\"" + parameters.front() + "\" is not an absolute path.");
+      return std::string();
+      }
+    cmOutputConverter converter(context->Makefile->GetStateSnapshot());
+    return converter.ConvertDirectorySeparatorsForShell(parameters.front());
+  }
+} shellPathNode;
+
+//----------------------------------------------------------------------------
 const cmGeneratorExpressionNode*
 cmGeneratorExpressionNode::GetNode(const std::string &identifier)
 {
@@ -1846,6 +1868,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())
diff --git a/Source/cmOutputConverter.cxx b/Source/cmOutputConverter.cxx
index 7be5b3f..5acae2f 100644
--- a/Source/cmOutputConverter.cxx
+++ b/Source/cmOutputConverter.cxx
@@ -142,21 +142,7 @@ std::string cmOutputConverter::ConvertToOutputFormat(const 
std::string& source,
     }
   else if(output == SHELL || output == WATCOMQUOTE)
     {
-        // For the MSYS shell convert drive letters to posix paths, so
-    // that c:/some/path becomes /c/some/path.  This is needed to
-    // avoid problems with the shell path translation.
-    if(this->GetState()->UseMSYSShell() && !this->LinkScriptShell)
-      {
-      if(result.size() > 2 && result[1] == ':')
-        {
-        result[1] = result[0];
-        result[0] = '/';
-        }
-      }
-    if(this->GetState()->UseWindowsShell())
-      {
-      std::replace(result.begin(), result.end(), '/', '\\');
-      }
+    result = this->ConvertDirectorySeparatorsForShell(source);
     result = this->EscapeForShell(result, true, false, output == WATCOMQUOTE);
     }
   else if(output == RESPONSE)
@@ -167,6 +153,29 @@ std::string cmOutputConverter::ConvertToOutputFormat(const 
std::string& source,
 }
 
 //----------------------------------------------------------------------------
+std::string cmOutputConverter::ConvertDirectorySeparatorsForShell(
+                                              const std::string& source) const
+{
+  std::string result = source;
+  // For the MSYS shell convert drive letters to posix paths, so
+  // that c:/some/path becomes /c/some/path.  This is needed to
+  // avoid problems with the shell path translation.
+  if(this->GetState()->UseMSYSShell() && !this->LinkScriptShell)
+    {
+    if(result.size() > 2 && result[1] == ':')
+      {
+      result[1] = result[0];
+      result[0] = '/';
+      }
+    }
+  if(this->GetState()->UseWindowsShell())
+    {
+    std::replace(result.begin(), result.end(), '/', '\\');
+    }
+  return result;
+}
+
+//----------------------------------------------------------------------------
 std::string cmOutputConverter::Convert(RelativeRoot remote,
                                       const std::string& local,
                                       OutputFormat output,
diff --git a/Source/cmOutputConverter.h b/Source/cmOutputConverter.h
index ed7739e..852df5d 100644
--- a/Source/cmOutputConverter.h
+++ b/Source/cmOutputConverter.h
@@ -45,6 +45,8 @@ public:
   std::string Convert(RelativeRoot remote, const std::string& local,
                       OutputFormat output = UNCHANGED,
                       bool optional = false) const;
+  std::string ConvertDirectorySeparatorsForShell(
+                                             const std::string& source) const;
 
   /**
     * Get path for the specified relative root.
diff --git a/Tests/GeneratorExpression/CMakeLists.txt 
b/Tests/GeneratorExpression/CMakeLists.txt
index 758165c..79571f3 100644
--- a/Tests/GeneratorExpression/CMakeLists.txt
+++ b/Tests/GeneratorExpression/CMakeLists.txt
@@ -66,7 +66,7 @@ add_custom_target(check-part1 ALL
     -Dtest_colons_4=$<1:C:\\CMake>
     -Dtest_colons_5=$<1:C:/CMake>
     -P ${CMAKE_CURRENT_SOURCE_DIR}/check-part1.cmake
-  COMMAND ${CMAKE_COMMAND} -E echo "check done (part 1 of 3)"
+  COMMAND ${CMAKE_COMMAND} -E echo "check done (part 1 of 4)"
   VERBATIM
   )
 
@@ -137,7 +137,7 @@ add_custom_target(check-part2 ALL
     -Dtest_arbitrary_content_comma_9=$<1:a,,b,,>
     -Dtest_arbitrary_content_comma_10=$<1:,,a,,b,,>
     -P ${CMAKE_CURRENT_SOURCE_DIR}/check-part2.cmake
-  COMMAND ${CMAKE_COMMAND} -E echo "check done (part 2 of 3)"
+  COMMAND ${CMAKE_COMMAND} -E echo "check done (part 2 of 4)"
   VERBATIM
 )
 
@@ -221,7 +221,27 @@ add_custom_target(check-part3 ALL
     -Dequal22=$<EQUAL:10,-012>
     -Dequal23=$<EQUAL:-10,-012>
     -P ${CMAKE_CURRENT_SOURCE_DIR}/check-part3.cmake
-  COMMAND ${CMAKE_COMMAND} -E echo "check done (part 3 of 3)"
+  COMMAND ${CMAKE_COMMAND} -E echo "check done (part 3 of 4)"
+  VERBATIM
+  )
+
+if(WIN32)
+  set(test_shell_path c:/shell/path)
+else()
+  set(test_shell_path /shell/path)
+endif()
+set(path_prefix BYPASS_FURTHER_CONVERSION)
+
+add_custom_target(check-part4 ALL
+  COMMAND ${CMAKE_COMMAND}
+    # Prefix path to bypass its further conversion when being processed by
+    # CMake as command-line argument
+    -Dtest_shell_path=${path_prefix}$<SHELL_PATH:${test_shell_path}>
+    -Dpath_prefix=${path_prefix}
+    -DWIN32=${WIN32}
+    -DMSYS=${MSYS}
+    -P ${CMAKE_CURRENT_SOURCE_DIR}/check-part4.cmake
+  COMMAND ${CMAKE_COMMAND} -E echo "check done (part 4 of 4)"
   VERBATIM
   )
 
diff --git a/Tests/GeneratorExpression/check-part4.cmake 
b/Tests/GeneratorExpression/check-part4.cmake
new file mode 100644
index 0000000..8a5e71a
--- /dev/null
+++ b/Tests/GeneratorExpression/check-part4.cmake
@@ -0,0 +1,11 @@
+include(${CMAKE_CURRENT_LIST_DIR}/check-common.cmake)
+
+string(REPLACE ${path_prefix} "" test_shell_path ${test_shell_path})
+
+if(MSYS)
+  check(test_shell_path [[/c/shell/path]])
+elseif(WIN32)
+  check(test_shell_path [[c:\shell\path]])
+else()
+  check(test_shell_path [[/shell/path]])
+endif()
diff --git a/Tests/RunCMake/GeneratorExpression/BadSHELL_PATH-result.txt 
b/Tests/RunCMake/GeneratorExpression/BadSHELL_PATH-result.txt
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/Tests/RunCMake/GeneratorExpression/BadSHELL_PATH-result.txt
@@ -0,0 +1 @@
+1
diff --git a/Tests/RunCMake/GeneratorExpression/BadSHELL_PATH-stderr.txt 
b/Tests/RunCMake/GeneratorExpression/BadSHELL_PATH-stderr.txt
new file mode 100644
index 0000000..8d3c4cc
--- /dev/null
+++ b/Tests/RunCMake/GeneratorExpression/BadSHELL_PATH-stderr.txt
@@ -0,0 +1,17 @@
+CMake Error at BadSHELL_PATH.cmake:[0-9]+ \(add_custom_target\):
+  Error evaluating generator expression:
+
+    \$<SHELL_PATH:>
+
+  "" is not an absolute path.
+Call Stack \(most recent call first\):
+  CMakeLists.txt:3 \(include\)
++
+CMake Error at BadSHELL_PATH.cmake:[0-9]+ \(add_custom_target\):
+  Error evaluating generator expression:
+
+    \$<SHELL_PATH:Relative/Path>
+
+  "Relative/Path" is not an absolute path.
+Call Stack \(most recent call first\):
+  CMakeLists.txt:3 \(include\)
diff --git a/Tests/RunCMake/GeneratorExpression/BadSHELL_PATH.cmake 
b/Tests/RunCMake/GeneratorExpression/BadSHELL_PATH.cmake
new file mode 100644
index 0000000..5eff7bc
--- /dev/null
+++ b/Tests/RunCMake/GeneratorExpression/BadSHELL_PATH.cmake
@@ -0,0 +1,4 @@
+add_custom_target(check ALL COMMAND check
+  $<SHELL_PATH:>
+  $<SHELL_PATH:Relative/Path>
+  VERBATIM)
diff --git a/Tests/RunCMake/GeneratorExpression/RunCMakeTest.cmake 
b/Tests/RunCMake/GeneratorExpression/RunCMakeTest.cmake
index 0679024..45175d8 100644
--- a/Tests/RunCMake/GeneratorExpression/RunCMakeTest.cmake
+++ b/Tests/RunCMake/GeneratorExpression/RunCMakeTest.cmake
@@ -10,6 +10,7 @@ run_cmake(BadTargetName)
 run_cmake(BadTargetTypeInterface)
 run_cmake(BadTargetTypeObject)
 run_cmake(BadInstallPrefix)
+run_cmake(BadSHELL_PATH)
 run_cmake(CMP0044-WARN)
 run_cmake(NonValidTarget-C_COMPILER_ID)
 run_cmake(NonValidTarget-CXX_COMPILER_ID)

https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=7de868c4d7c8bfe35d201ed480328f3177a1325b
commit 7de868c4d7c8bfe35d201ed480328f3177a1325b
Author:     Brad King <brad.k...@kitware.com>
AuthorDate: Wed Sep 23 09:07:20 2015 -0400
Commit:     Brad King <brad.k...@kitware.com>
CommitDate: Wed Sep 23 09:09:25 2015 -0400

    Tests: Simplify GeneratorExpression check implementation
    
    Use a function instead of a macro so we do not need an extra layer of
    backslashes.  Use a bracket argument to avoid another layer of extra
    backslashes.

diff --git a/Tests/GeneratorExpression/check-common.cmake 
b/Tests/GeneratorExpression/check-common.cmake
index 8ffebd7..faf5d4f 100644
--- a/Tests/GeneratorExpression/check-common.cmake
+++ b/Tests/GeneratorExpression/check-common.cmake
@@ -1,5 +1,5 @@
-macro(check var val)
+function(check var val)
   if(NOT "${${var}}" STREQUAL "${val}")
     message(SEND_ERROR "${var} is \"${${var}}\", not \"${val}\"")
   endif()
-endmacro()
+endfunction()
diff --git a/Tests/GeneratorExpression/check-part1.cmake 
b/Tests/GeneratorExpression/check-part1.cmake
index 3207582..60b193f 100644
--- a/Tests/GeneratorExpression/check-part1.cmake
+++ b/Tests/GeneratorExpression/check-part1.cmake
@@ -55,5 +55,5 @@ check(test_semicolon ";")
 check(test_colons_1 ":")
 check(test_colons_2 "::")
 check(test_colons_3 "Qt5::Core")
-check(test_colons_4 "C:\\\\CMake")
+check(test_colons_4 [[C:\CMake]])
 check(test_colons_5 "C:/CMake")

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

Summary of changes:
 Help/manual/cmake-generator-expressions.7.rst      |    4 ++
 Help/release/dev/genex-SHELL_PATH.rst              |    6 +++
 Source/cmGeneratorExpressionNode.cxx               |   23 ++++++++++++
 Source/cmOutputConverter.cxx                       |   39 ++++++++++++--------
 Source/cmOutputConverter.h                         |    2 +
 Tests/GeneratorExpression/CMakeLists.txt           |   26 +++++++++++--
 Tests/GeneratorExpression/check-common.cmake       |    4 +-
 Tests/GeneratorExpression/check-part1.cmake        |    2 +-
 Tests/GeneratorExpression/check-part4.cmake        |   11 ++++++
 .../BadSHELL_PATH-result.txt}                      |    0
 .../GeneratorExpression/BadSHELL_PATH-stderr.txt   |   17 +++++++++
 .../{BadTargetName.cmake => BadSHELL_PATH.cmake}   |    3 +-
 .../GeneratorExpression/RunCMakeTest.cmake         |    1 +
 13 files changed, 116 insertions(+), 22 deletions(-)
 create mode 100644 Help/release/dev/genex-SHELL_PATH.rst
 create mode 100644 Tests/GeneratorExpression/check-part4.cmake
 copy Tests/RunCMake/{CMP0004/CMP0004-NEW-result.txt => 
GeneratorExpression/BadSHELL_PATH-result.txt} (100%)
 create mode 100644 Tests/RunCMake/GeneratorExpression/BadSHELL_PATH-stderr.txt
 copy Tests/RunCMake/GeneratorExpression/{BadTargetName.cmake => 
BadSHELL_PATH.cmake} (53%)


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

Reply via email to