[Cmake-commits] CMake branch, next, updated. v3.7.0-1406-g841e092

Brad King brad.king at kitware.com
Tue Nov 29 09:33:36 EST 2016


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  841e09299d5dbd91e2915117cbffabe80b29bcb1 (commit)
       via  e390991846825799e619e072a28f1da58b7c89ba (commit)
      from  8b4edc40e64ee1b32d4ebed18dd799ee63a6f785 (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=841e09299d5dbd91e2915117cbffabe80b29bcb1
commit 841e09299d5dbd91e2915117cbffabe80b29bcb1
Merge: 8b4edc4 e390991
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Tue Nov 29 09:33:35 2016 -0500
Commit:     CMake Topic Stage <kwrobot at kitware.com>
CommitDate: Tue Nov 29 09:33:35 2016 -0500

    Merge topic 'msbuild-customization' into next
    
    e3909918 VS: Add option to customize vcxproj user props file


https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=e390991846825799e619e072a28f1da58b7c89ba
commit e390991846825799e619e072a28f1da58b7c89ba
Author:     Michael Stürmer <michael.stuermer at schaeffler.com>
AuthorDate: Mon Nov 21 16:05:17 2016 +0100
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Tue Nov 29 09:31:30 2016 -0500

    VS: Add option to customize vcxproj user props file
    
    Add a `VS_USER_PROPS_CXX` target property to set the user props file of
    the generated `.vcxproj` file to be something other than the default
    `$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props`.

diff --git a/Help/manual/cmake-properties.7.rst b/Help/manual/cmake-properties.7.rst
index 82d5588..76df602 100644
--- a/Help/manual/cmake-properties.7.rst
+++ b/Help/manual/cmake-properties.7.rst
@@ -284,6 +284,7 @@ Properties on Targets
    /prop_tgt/VS_SCC_PROJECTNAME
    /prop_tgt/VS_SCC_PROVIDER
    /prop_tgt/VS_SDK_REFERENCES
+   /prop_tgt/VS_USER_PROPS_CXX
    /prop_tgt/VS_WINDOWS_TARGET_PLATFORM_MIN_VERSION
    /prop_tgt/VS_WINRT_COMPONENT
    /prop_tgt/VS_WINRT_EXTENSIONS
diff --git a/Help/prop_tgt/VS_USER_PROPS_CXX.rst b/Help/prop_tgt/VS_USER_PROPS_CXX.rst
new file mode 100644
index 0000000..083ce03
--- /dev/null
+++ b/Help/prop_tgt/VS_USER_PROPS_CXX.rst
@@ -0,0 +1,12 @@
+VS_USER_PROPS_CXX
+-----------------
+
+Sets the user props file to be included in the visual studio
+C++ project file. The standard path is
+``$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props``, which is
+in most cases the same as
+``%LOCALAPPDATA%\\Microsoft\\MSBuild\\v4.0\\Microsoft.Cpp.Win32.user.props``
+or ``%LOCALAPPDATA%\\Microsoft\\MSBuild\\v4.0\\Microsoft.Cpp.x64.user.props``.
+
+The ``*.user.props`` files can be used for Visual Studio wide
+configuration which is independent from cmake.
diff --git a/Help/release/dev/vs-custom-msbuild-props.rst b/Help/release/dev/vs-custom-msbuild-props.rst
new file mode 100644
index 0000000..15a5b0a
--- /dev/null
+++ b/Help/release/dev/vs-custom-msbuild-props.rst
@@ -0,0 +1,9 @@
+vs-custom-msbuild-props
+-----------------------
+
+* The :ref:`Visual Studio Generators` for VS 2010 and above can
+  now be fine tuned using custom msbuild .props files.
+  :prop_tgt:`VS_USER_PROPS_CXX` can be
+  used to change the default path of the user .props file from
+  ``$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props`` to
+  an arbitrary filename.
diff --git a/Source/cmVisualStudio10TargetGenerator.cxx b/Source/cmVisualStudio10TargetGenerator.cxx
index 4dabd51..5b99007 100644
--- a/Source/cmVisualStudio10TargetGenerator.cxx
+++ b/Source/cmVisualStudio10TargetGenerator.cxx
@@ -139,7 +139,11 @@ void cmVisualStudio10TargetGenerator::WriteString(const char* line,
   (*this->BuildFileStream) << line;
 }
 
-#define VS10_USER_PROPS "$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props"
+#define VS10_CXX_DEFAULT_PROPS "$(VCTargetsPath)\\Microsoft.Cpp.Default.props"
+#define VS10_CXX_PROPS "$(VCTargetsPath)\\Microsoft.Cpp.props"
+#define VS10_CXX_USER_PROPS                                                   \
+  "$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props"
+#define VS10_CXX_TARGETS "$(VCTargetsPath)\\Microsoft.Cpp.targets"
 
 void cmVisualStudio10TargetGenerator::Generate()
 {
@@ -345,12 +349,9 @@ void cmVisualStudio10TargetGenerator::Generate()
   }
 
   this->WriteString("</PropertyGroup>\n", 1);
-  this->WriteString("<Import Project="
-                    "\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\n",
-                    1);
+  this->WriteString("<Import Project=\"" VS10_CXX_DEFAULT_PROPS "\" />\n", 1);
   this->WriteProjectConfigurationValues();
-  this->WriteString(
-    "<Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\n", 1);
+  this->WriteString("<Import Project=\"" VS10_CXX_PROPS "\" />\n", 1);
   this->WriteString("<ImportGroup Label=\"ExtensionSettings\">\n", 1);
   if (this->GlobalGenerator->IsMasmEnabled()) {
     this->WriteString("<Import Project=\"$(VCTargetsPath)\\"
@@ -359,10 +360,19 @@ void cmVisualStudio10TargetGenerator::Generate()
   }
   this->WriteString("</ImportGroup>\n", 1);
   this->WriteString("<ImportGroup Label=\"PropertySheets\">\n", 1);
-  this->WriteString("<Import Project=\"" VS10_USER_PROPS "\""
-                    " Condition=\"exists('" VS10_USER_PROPS "')\""
-                    " Label=\"LocalAppDataPlatform\" />\n",
-                    2);
+  {
+    std::string props = VS10_CXX_USER_PROPS;
+    if (const char* p =
+          this->GeneratorTarget->GetProperty("VS_USER_PROPS_CXX")) {
+      props = p;
+      this->ConvertToWindowsSlash(props);
+    }
+    this->WriteString("", 2);
+    (*this->BuildFileStream)
+      << "<Import Project=\"" << cmVS10EscapeXML(props) << "\""
+      << " Condition=\"exists('" << cmVS10EscapeXML(props) << "')\""
+      << " Label=\"LocalAppDataPlatform\" />\n";
+  }
   this->WritePlatformExtensions();
   this->WriteString("</ImportGroup>\n", 1);
   this->WriteString("<PropertyGroup Label=\"UserMacros\" />\n", 1);
@@ -377,10 +387,8 @@ void cmVisualStudio10TargetGenerator::Generate()
   this->WriteWinRTReferences();
   this->WriteProjectReferences();
   this->WriteSDKReferences();
-  this->WriteString(
-    "<Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\""
-    " />\n",
-    1);
+  this->WriteString("<Import Project=\"" VS10_CXX_TARGETS "\" />\n", 1);
+
   this->WriteTargetSpecificReferences();
   this->WriteString("<ImportGroup Label=\"ExtensionTargets\">\n", 1);
   this->WriteTargetsFileReferences();
diff --git a/Tests/RunCMake/VS10Project/RunCMakeTest.cmake b/Tests/RunCMake/VS10Project/RunCMakeTest.cmake
index 22d8164..d913af7 100644
--- a/Tests/RunCMake/VS10Project/RunCMakeTest.cmake
+++ b/Tests/RunCMake/VS10Project/RunCMakeTest.cmake
@@ -1,3 +1,4 @@
 include(RunCMake)
 run_cmake(VsConfigurationType)
 run_cmake(VsTargetsFileReferences)
+run_cmake(VsCustomProps)
diff --git a/Tests/RunCMake/VS10Project/VsCustomProps-check.cmake b/Tests/RunCMake/VS10Project/VsCustomProps-check.cmake
new file mode 100644
index 0000000..22a3df0
--- /dev/null
+++ b/Tests/RunCMake/VS10Project/VsCustomProps-check.cmake
@@ -0,0 +1,25 @@
+set(vcProjectFile "${RunCMake_TEST_BINARY_DIR}/foo.vcxproj")
+if(NOT EXISTS "${vcProjectFile}")
+  set(RunCMake_TEST_FAILED "Project file ${vcProjectFile} does not exist.")
+  return()
+endif()
+
+set(importFound FALSE)
+
+set(props_file "${RunCMake_SOURCE_DIR}/my.props")
+file(TO_NATIVE_PATH "${props_file}" check_file)
+file(STRINGS "${vcProjectFile}" lines)
+foreach(line IN LISTS lines)
+  if(line MATCHES "^ *<Import Project=\"([^\"]+)\".*Label=\"([^\"]+)\".*$")
+    if("${CMAKE_MATCH_1}" STREQUAL "${check_file}" AND
+       "${CMAKE_MATCH_2}" STREQUAL "LocalAppDataPlatform")
+        message(STATUS "foo.vcxproj is importing ${check_file}")
+        set(importFound TRUE)
+    endif()
+  endif()
+endforeach()
+
+if(NOT importFound)
+  set(RunCMake_TEST_FAILED "Import of custom .props file not found.")
+  return()
+endif()
diff --git a/Tests/RunCMake/VS10Project/VsCustomProps.cmake b/Tests/RunCMake/VS10Project/VsCustomProps.cmake
new file mode 100644
index 0000000..af52a3e
--- /dev/null
+++ b/Tests/RunCMake/VS10Project/VsCustomProps.cmake
@@ -0,0 +1,7 @@
+enable_language(CXX)
+add_library(foo foo.cpp)
+
+set(props_file "${CMAKE_CURRENT_SOURCE_DIR}/my.props")
+
+set_target_properties(foo PROPERTIES
+    VS_USER_PROPS_CXX "${props_file}")
diff --git a/Tests/RunCMake/VS10Project/my.props b/Tests/RunCMake/VS10Project/my.props
new file mode 100644
index 0000000..7c98cde
--- /dev/null
+++ b/Tests/RunCMake/VS10Project/my.props
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+	<PropertyGroup>
+	</PropertyGroup>
+</Project>

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

Summary of changes:
 Help/manual/cmake-properties.7.rst                 |    1 +
 Help/prop_tgt/VS_USER_PROPS_CXX.rst                |   12 +++++++
 Help/release/dev/vs-custom-msbuild-props.rst       |    9 +++++
 Source/cmVisualStudio10TargetGenerator.cxx         |   36 ++++++++++++--------
 Tests/RunCMake/VS10Project/RunCMakeTest.cmake      |    1 +
 .../RunCMake/VS10Project/VsCustomProps-check.cmake |   25 ++++++++++++++
 Tests/RunCMake/VS10Project/VsCustomProps.cmake     |    7 ++++
 Tests/RunCMake/VS10Project/my.props                |    5 +++
 8 files changed, 82 insertions(+), 14 deletions(-)
 create mode 100644 Help/prop_tgt/VS_USER_PROPS_CXX.rst
 create mode 100644 Help/release/dev/vs-custom-msbuild-props.rst
 create mode 100644 Tests/RunCMake/VS10Project/VsCustomProps-check.cmake
 create mode 100644 Tests/RunCMake/VS10Project/VsCustomProps.cmake
 create mode 100644 Tests/RunCMake/VS10Project/my.props


hooks/post-receive
-- 
CMake


More information about the Cmake-commits mailing list