| 
					
				 | 
			
			
				@@ -8,6 +8,8 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #include "cmGeneratorExpression.h" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #include "cmGeneratorTarget.h" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #include "cmGlobalGenerator.h" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#include "cmInstallGenerator.h" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#include "cmInstallTargetGenerator.h" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #include "cmLinkLineComputer.h" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #include "cmListFileCache.h" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #include "cmLocalGenerator.h" 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -30,6 +32,7 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #include <functional> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #include <limits> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #include <map> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#include <memory> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #include <set> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #include <string> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #include <unordered_map> 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -252,7 +255,7 @@ bool cmServerProtocol::DoActivate(const cmServerRequest& /*request*/, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 std::pair<int, int> cmServerProtocol1::ProtocolVersion() const 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  return std::make_pair(1, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  return std::make_pair(1, 2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 static void setErrorMessage(std::string* errorMessage, const std::string& text) 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -797,6 +800,34 @@ static Json::Value DumpTarget(cmGeneratorTarget* target, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   result[kFULL_NAME_KEY] = target->GetFullName(config); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  if (target->Target->GetHaveInstallRule()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    result[kHAS_INSTALL_RULE] = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    Json::Value installPaths = Json::arrayValue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    auto targetGenerators = target->Makefile->GetInstallGenerators(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    for (auto installGenerator : targetGenerators) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      auto installTargetGenerator = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        dynamic_cast<cmInstallTargetGenerator*>(installGenerator); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      if (installTargetGenerator != nullptr && 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          installTargetGenerator->GetTarget()->Target == target->Target) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        auto dest = installTargetGenerator->GetDestination(config); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        std::string installPath; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (!dest.empty() && cmSystemTools::FileIsFullPath(dest.c_str())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          installPath = dest; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          std::string installPrefix = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            target->Makefile->GetSafeDefinition("CMAKE_INSTALL_PREFIX"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          installPath = installPrefix + '/' + dest; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        installPaths.append(installPath); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    result[kINSTALL_PATHS] = installPaths; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   Json::Value crossRefs = Json::objectValue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   crossRefs[kBACKTRACE_KEY] = DumpBacktrace(target->Target->GetBacktrace()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -933,6 +964,7 @@ static Json::Value DumpProjectList(const cmake* cm, std::string const& config) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     // Project structure information: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     const cmMakefile* mf = lg->GetMakefile(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    pObj[kHAS_INSTALL_RULE] = mf->GetInstallGenerators().empty() == false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     pObj[kSOURCE_DIRECTORY_KEY] = mf->GetCurrentSourceDirectory(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     pObj[kBUILD_DIRECTORY_KEY] = mf->GetCurrentBinaryDirectory(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     pObj[kTARGETS_KEY] = DumpTargetsList(projectIt.second, config); 
			 |