[Cmake-commits] CMake branch, next, updated. v3.1.0-rc2-599-g90848be

Brad King brad.king at kitware.com
Fri Nov 14 09:13:51 EST 2014


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  90848be9b04ddc898fc88d7c41bf16d49b57a1e5 (commit)
       via  b20a32ac7349d38b215ef065773968c63c813f70 (commit)
      from  ef81b2c85442d16d9e5505448d600593071e21c1 (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 -----------------------------------------------------------------
http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=90848be9b04ddc898fc88d7c41bf16d49b57a1e5
commit 90848be9b04ddc898fc88d7c41bf16d49b57a1e5
Merge: ef81b2c b20a32a
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Fri Nov 14 09:13:50 2014 -0500
Commit:     CMake Topic Stage <kwrobot at kitware.com>
CommitDate: Fri Nov 14 09:13:50 2014 -0500

    Merge topic 'vs-check-phone-store-tools' into next
    
    b20a32ac VS: Improve error messages when compiler is not detected (#15228)


http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=b20a32ac7349d38b215ef065773968c63c813f70
commit b20a32ac7349d38b215ef065773968c63c813f70
Author:     Gilles Khouzam <gillesk at microsoft.com>
AuthorDate: Thu Nov 13 11:47:01 2014 -0800
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Fri Nov 14 09:13:27 2014 -0500

    VS: Improve error messages when compiler is not detected (#15228)
    
    CMake requires both the Desktop SDK and the correct platform SDK
    (Windows Phone or Windows Store) to be installed when targeting the
    Windows mobile platforms.  Verify that the right platform components are
    installed and give a more detailed error message when something is
    wrong.

diff --git a/Source/cmGlobalVisualStudio10Generator.cxx b/Source/cmGlobalVisualStudio10Generator.cxx
index d70d2af..499ac56 100644
--- a/Source/cmGlobalVisualStudio10Generator.cxx
+++ b/Source/cmGlobalVisualStudio10Generator.cxx
@@ -262,6 +262,24 @@ bool cmGlobalVisualStudio10Generator::InitializeWindowsStore(cmMakefile* mf)
 }
 
 //----------------------------------------------------------------------------
+bool
+cmGlobalVisualStudio10Generator::SelectWindowsPhoneToolset(
+  std::string& toolset) const
+{
+  toolset = "";
+  return false;
+}
+
+//----------------------------------------------------------------------------
+bool
+cmGlobalVisualStudio10Generator::SelectWindowsStoreToolset(
+  std::string& toolset) const
+{
+  toolset = "";
+  return false;
+}
+
+//----------------------------------------------------------------------------
 std::string cmGlobalVisualStudio10Generator::SelectWindowsCEToolset() const
 {
   if (this->SystemVersion == "8.0")
diff --git a/Source/cmGlobalVisualStudio10Generator.h b/Source/cmGlobalVisualStudio10Generator.h
index 3af7b51..9ed3c2d 100644
--- a/Source/cmGlobalVisualStudio10Generator.h
+++ b/Source/cmGlobalVisualStudio10Generator.h
@@ -118,9 +118,10 @@ protected:
   virtual bool InitializeWindowsCE(cmMakefile* mf);
   virtual bool InitializeWindowsPhone(cmMakefile* mf);
   virtual bool InitializeWindowsStore(cmMakefile* mf);
+
   virtual std::string SelectWindowsCEToolset() const;
-  virtual std::string SelectWindowsPhoneToolset() const { return ""; }
-  virtual std::string SelectWindowsStoreToolset() const { return ""; }
+  virtual bool SelectWindowsPhoneToolset(std::string& toolset) const;
+  virtual bool SelectWindowsStoreToolset(std::string& toolset) const;
 
   virtual const char* GetIDEVersion() { return "10.0"; }
 
diff --git a/Source/cmGlobalVisualStudio11Generator.cxx b/Source/cmGlobalVisualStudio11Generator.cxx
index 39bbdc0..2b69222 100644
--- a/Source/cmGlobalVisualStudio11Generator.cxx
+++ b/Source/cmGlobalVisualStudio11Generator.cxx
@@ -131,12 +131,20 @@ cmGlobalVisualStudio11Generator::MatchesGeneratorName(
 //----------------------------------------------------------------------------
 bool cmGlobalVisualStudio11Generator::InitializeWindowsPhone(cmMakefile* mf)
 {
-  this->DefaultPlatformToolset = this->SelectWindowsPhoneToolset();
-  if(this->DefaultPlatformToolset.empty())
+  if(!this->SelectWindowsPhoneToolset(this->DefaultPlatformToolset))
     {
     cmOStringStream e;
-    e << this->GetName() << " supports Windows Phone '8.0', but not '"
-      << this->SystemVersion << "'.  Check CMAKE_SYSTEM_VERSION.";
+    if(this->DefaultPlatformToolset.empty())
+      {
+      e << this->GetName() << " supports Windows Phone '8.0', but not '"
+        << this->SystemVersion << "'.  Check CMAKE_SYSTEM_VERSION.";
+      }
+    else
+      {
+      e << "A Windows Phone component with CMake requires both the Windows "
+        << "Desktop SDK as well as the Windows Phone '" << this->SystemVersion
+        << "' SDK. Please make sure that you have both installed";
+      }
     mf->IssueMessage(cmake::FATAL_ERROR, e.str());
     return false;
     }
@@ -146,12 +154,20 @@ bool cmGlobalVisualStudio11Generator::InitializeWindowsPhone(cmMakefile* mf)
 //----------------------------------------------------------------------------
 bool cmGlobalVisualStudio11Generator::InitializeWindowsStore(cmMakefile* mf)
 {
-  this->DefaultPlatformToolset = this->SelectWindowsStoreToolset();
-  if(this->DefaultPlatformToolset.empty())
+  if(!this->SelectWindowsStoreToolset(this->DefaultPlatformToolset))
     {
     cmOStringStream e;
-    e << this->GetName() << " supports Windows Store '8.0', but not '"
-      << this->SystemVersion << "'.  Check CMAKE_SYSTEM_VERSION.";
+    if(this->DefaultPlatformToolset.empty())
+      {
+      e << this->GetName() << " supports Windows Store '8.0', but not '"
+        << this->SystemVersion << "'.  Check CMAKE_SYSTEM_VERSION.";
+      }
+    else
+      {
+      e << "A Windows Store component with CMake requires both the Windows "
+        << "Desktop SDK as well as the Windows Store '" << this->SystemVersion
+        << "' SDK. Please make sure that you have both installed";
+      }
     mf->IssueMessage(cmake::FATAL_ERROR, e.str());
     return false;
     }
@@ -159,23 +175,47 @@ bool cmGlobalVisualStudio11Generator::InitializeWindowsStore(cmMakefile* mf)
 }
 
 //----------------------------------------------------------------------------
-std::string cmGlobalVisualStudio11Generator::SelectWindowsPhoneToolset() const
+bool
+cmGlobalVisualStudio11Generator::SelectWindowsPhoneToolset(
+  std::string& toolset) const
 {
   if(this->SystemVersion == "8.0")
     {
-    return "v110_wp80";
+    if (this->IsWindowsPhoneToolsetInstalled() &&
+        this->IsWindowsDesktopToolsetInstalled())
+      {
+      toolset = "v110_wp80";
+      return true;
+      }
+    else
+      {
+      return false;
+      }
     }
-  return this->cmGlobalVisualStudio10Generator::SelectWindowsPhoneToolset();
+  return
+    this->cmGlobalVisualStudio10Generator::SelectWindowsPhoneToolset(toolset);
 }
 
 //----------------------------------------------------------------------------
-std::string cmGlobalVisualStudio11Generator::SelectWindowsStoreToolset() const
+bool
+cmGlobalVisualStudio11Generator::SelectWindowsStoreToolset(
+  std::string& toolset) const
 {
   if(this->SystemVersion == "8.0")
     {
-    return "v110";
+    if(this->IsWindowsStoreToolsetInstalled() &&
+       this->IsWindowsDesktopToolsetInstalled())
+      {
+      toolset = "v110";
+      return true;
+      }
+    else
+      {
+      return false;
+      }
     }
-  return this->cmGlobalVisualStudio10Generator::SelectWindowsStoreToolset();
+  return
+    this->cmGlobalVisualStudio10Generator::SelectWindowsStoreToolset(toolset);
 }
 
 //----------------------------------------------------------------------------
@@ -256,3 +296,54 @@ cmGlobalVisualStudio11Generator::NeedsDeploy(cmTarget::TargetType type) const
     }
   return cmGlobalVisualStudio10Generator::NeedsDeploy(type);
 }
+
+//----------------------------------------------------------------------------
+bool
+cmGlobalVisualStudio11Generator::IsWindowsDesktopToolsetInstalled() const
+{
+  const char desktop80Key[] =
+    "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\"
+    "VisualStudio\\11.0\\VC\\Libraries\\Extended";
+  const char VS2012DesktopExpressKey[] =
+    "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\"
+    "WDExpress\\11.0;InstallDir";
+
+  std::vector<std::string> subkeys;
+  std::string path;
+  return cmSystemTools::ReadRegistryValue(VS2012DesktopExpressKey,
+                                          path,
+                                          cmSystemTools::KeyWOW64_32) ||
+         cmSystemTools::GetRegistrySubKeys(desktop80Key,
+                                           subkeys,
+                                           cmSystemTools::KeyWOW64_32);
+}
+
+//----------------------------------------------------------------------------
+bool
+cmGlobalVisualStudio11Generator::IsWindowsPhoneToolsetInstalled() const
+{
+  const char wp80Key[] =
+    "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\"
+    "Microsoft SDKs\\WindowsPhone\\v8.0\\"
+    "Install Path;Install Path";
+
+  std::string path;
+  cmSystemTools::ReadRegistryValue(wp80Key,
+                                   path,
+                                   cmSystemTools::KeyWOW64_32);
+  return !path.empty();
+}
+
+//----------------------------------------------------------------------------
+bool
+cmGlobalVisualStudio11Generator::IsWindowsStoreToolsetInstalled() const
+{
+  const char win80Key[] =
+    "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\"
+    "VisualStudio\\11.0\\VC\\Libraries\\Core\\Arm";
+
+  std::vector<std::string> subkeys;
+  return cmSystemTools::GetRegistrySubKeys(win80Key,
+                                           subkeys,
+                                           cmSystemTools::KeyWOW64_32);
+}
diff --git a/Source/cmGlobalVisualStudio11Generator.h b/Source/cmGlobalVisualStudio11Generator.h
index bbd935c..c79dc97 100644
--- a/Source/cmGlobalVisualStudio11Generator.h
+++ b/Source/cmGlobalVisualStudio11Generator.h
@@ -36,8 +36,15 @@ public:
 protected:
   virtual bool InitializeWindowsPhone(cmMakefile* mf);
   virtual bool InitializeWindowsStore(cmMakefile* mf);
-  virtual std::string SelectWindowsPhoneToolset() const;
-  virtual std::string SelectWindowsStoreToolset() const;
+  virtual bool SelectWindowsPhoneToolset(std::string& toolset) const;
+  virtual bool SelectWindowsStoreToolset(std::string& toolset) const;
+
+  // These aren't virtual because we need to check if the selected version
+  // of the toolset is installed
+  bool IsWindowsDesktopToolsetInstalled() const;
+  bool IsWindowsPhoneToolsetInstalled() const;
+  bool IsWindowsStoreToolsetInstalled() const;
+
   virtual const char* GetIDEVersion() { return "11.0"; }
   bool UseFolderProperty();
   static std::set<std::string> GetInstalledWindowsCESDKs();
diff --git a/Source/cmGlobalVisualStudio12Generator.cxx b/Source/cmGlobalVisualStudio12Generator.cxx
index 29ecfe0..047f2ad 100644
--- a/Source/cmGlobalVisualStudio12Generator.cxx
+++ b/Source/cmGlobalVisualStudio12Generator.cxx
@@ -111,12 +111,20 @@ cmGlobalVisualStudio12Generator::MatchesGeneratorName(
 //----------------------------------------------------------------------------
 bool cmGlobalVisualStudio12Generator::InitializeWindowsPhone(cmMakefile* mf)
 {
-  this->DefaultPlatformToolset = this->SelectWindowsPhoneToolset();
-  if(this->DefaultPlatformToolset.empty())
+  if(!this->SelectWindowsPhoneToolset(this->DefaultPlatformToolset))
     {
     cmOStringStream e;
-    e << this->GetName() << " supports Windows Phone '8.0' and '8.1', "
-      "but not '" << this->SystemVersion << "'.  Check CMAKE_SYSTEM_VERSION.";
+    if(this->DefaultPlatformToolset.empty())
+      {
+      e << this->GetName() << " supports Windows Phone '8.0' and '8.1', but "
+        "not '" << this->SystemVersion << "'.  Check CMAKE_SYSTEM_VERSION.";
+      }
+    else
+      {
+      e << "A Windows Phone component with CMake requires both the Windows "
+        << "Desktop SDK as well as the Windows Phone '" << this->SystemVersion
+        << "' SDK. Please make sure that you have both installed";
+      }
     mf->IssueMessage(cmake::FATAL_ERROR, e.str());
     return false;
     }
@@ -126,12 +134,20 @@ bool cmGlobalVisualStudio12Generator::InitializeWindowsPhone(cmMakefile* mf)
 //----------------------------------------------------------------------------
 bool cmGlobalVisualStudio12Generator::InitializeWindowsStore(cmMakefile* mf)
 {
-  this->DefaultPlatformToolset = this->SelectWindowsStoreToolset();
-  if(this->DefaultPlatformToolset.empty())
+  if(!this->SelectWindowsStoreToolset(this->DefaultPlatformToolset))
     {
     cmOStringStream e;
-    e << this->GetName() << " supports Windows Store '8.0' and '8.1', "
-      "but not '" << this->SystemVersion << "'.  Check CMAKE_SYSTEM_VERSION.";
+    if(this->DefaultPlatformToolset.empty())
+      {
+      e << this->GetName() << " supports Windows Store '8.0' and '8.1', but "
+        "not '" << this->SystemVersion << "'.  Check CMAKE_SYSTEM_VERSION.";
+      }
+    else
+      {
+      e << "A Windows Store component with CMake requires both the Windows "
+        << "Desktop SDK as well as the Windows Store '" << this->SystemVersion
+        << "' SDK. Please make sure that you have both installed";
+      }
     mf->IssueMessage(cmake::FATAL_ERROR, e.str());
     return false;
     }
@@ -139,23 +155,47 @@ bool cmGlobalVisualStudio12Generator::InitializeWindowsStore(cmMakefile* mf)
 }
 
 //----------------------------------------------------------------------------
-std::string cmGlobalVisualStudio12Generator::SelectWindowsPhoneToolset() const
+bool
+cmGlobalVisualStudio12Generator::SelectWindowsPhoneToolset(
+  std::string& toolset) const
 {
   if(this->SystemVersion == "8.1")
     {
-    return "v120_wp81";
+    if (this->IsWindowsPhoneToolsetInstalled() &&
+        this->IsWindowsDesktopToolsetInstalled())
+      {
+      toolset = "v120_wp81";
+      return true;
+      }
+    else
+      {
+      return false;
+      }
     }
-  return this->cmGlobalVisualStudio11Generator::SelectWindowsPhoneToolset();
+  return
+    this->cmGlobalVisualStudio11Generator::SelectWindowsPhoneToolset(toolset);
 }
 
 //----------------------------------------------------------------------------
-std::string cmGlobalVisualStudio12Generator::SelectWindowsStoreToolset() const
+bool
+cmGlobalVisualStudio12Generator::SelectWindowsStoreToolset(
+  std::string& toolset) const
 {
   if(this->SystemVersion == "8.1")
     {
-    return "v120";
+    if(this->IsWindowsStoreToolsetInstalled() &&
+       this->IsWindowsDesktopToolsetInstalled())
+      {
+      toolset = "v120";
+      return true;
+      }
+    else
+      {
+      return false;
+      }
     }
-  return this->cmGlobalVisualStudio11Generator::SelectWindowsStoreToolset();
+  return
+    this->cmGlobalVisualStudio11Generator::SelectWindowsStoreToolset(toolset);
 }
 
 //----------------------------------------------------------------------------
@@ -180,3 +220,46 @@ cmLocalGenerator *cmGlobalVisualStudio12Generator::CreateLocalGenerator()
   lg->SetGlobalGenerator(this);
   return lg;
 }
+
+//----------------------------------------------------------------------------
+bool
+cmGlobalVisualStudio12Generator::IsWindowsDesktopToolsetInstalled() const
+{
+  const char desktop81Key[] =
+    "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\"
+    "VisualStudio\\12.0\\VC\\LibraryDesktop";
+
+  std::vector<std::string> subkeys;
+  return cmSystemTools::GetRegistrySubKeys(desktop81Key,
+                                           subkeys,
+                                           cmSystemTools::KeyWOW64_32);
+}
+
+//----------------------------------------------------------------------------
+bool
+cmGlobalVisualStudio12Generator::IsWindowsPhoneToolsetInstalled() const
+{
+  const char wp81Key[] =
+    "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\"
+    "Microsoft SDKs\\WindowsPhone\\v8.1\\Install Path;Install Path";
+
+  std::string path;
+  cmSystemTools::ReadRegistryValue(wp81Key,
+                                   path,
+                                   cmSystemTools::KeyWOW64_32);
+  return !path.empty();
+}
+
+//----------------------------------------------------------------------------
+bool
+cmGlobalVisualStudio12Generator::IsWindowsStoreToolsetInstalled() const
+{
+  const char win81Key[] =
+    "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\"
+    "VisualStudio\\12.0\\VC\\Libraries\\Core\\Arm";
+
+  std::vector<std::string> subkeys;
+  return cmSystemTools::GetRegistrySubKeys(win81Key,
+                                           subkeys,
+                                           cmSystemTools::KeyWOW64_32);
+}
diff --git a/Source/cmGlobalVisualStudio12Generator.h b/Source/cmGlobalVisualStudio12Generator.h
index ec85f10..a81516f 100644
--- a/Source/cmGlobalVisualStudio12Generator.h
+++ b/Source/cmGlobalVisualStudio12Generator.h
@@ -41,8 +41,14 @@ public:
 protected:
   virtual bool InitializeWindowsPhone(cmMakefile* mf);
   virtual bool InitializeWindowsStore(cmMakefile* mf);
-  virtual std::string SelectWindowsPhoneToolset() const;
-  virtual std::string SelectWindowsStoreToolset() const;
+  virtual bool SelectWindowsPhoneToolset(std::string& toolset) const;
+  virtual bool SelectWindowsStoreToolset(std::string& toolset) const;
+
+  // These aren't virtual because we need to check if the selected version
+  // of the toolset is installed
+  bool IsWindowsDesktopToolsetInstalled() const;
+  bool IsWindowsPhoneToolsetInstalled() const;
+  bool IsWindowsStoreToolsetInstalled() const;
   virtual const char* GetIDEVersion() { return "12.0"; }
 private:
   class Factory;

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

Summary of changes:


hooks/post-receive
-- 
CMake


More information about the Cmake-commits mailing list