|  | @@ -2077,6 +2077,7 @@ static std::string cmSystemToolsCMakeCursesCommand;
 | 
	
		
			
				|  |  |  static std::string cmSystemToolsCMakeGUICommand;
 | 
	
		
			
				|  |  |  static std::string cmSystemToolsCMClDepsCommand;
 | 
	
		
			
				|  |  |  static std::string cmSystemToolsCMakeRoot;
 | 
	
		
			
				|  |  | +static std::string cmSystemToolsHTMLDoc;
 | 
	
		
			
				|  |  |  void cmSystemTools::FindCMakeResources(const char* argv0)
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  |    std::string exe_dir;
 | 
	
	
		
			
				|  | @@ -2166,18 +2167,23 @@ void cmSystemTools::FindCMakeResources(const char* argv0)
 | 
	
		
			
				|  |  |    // Install tree has
 | 
	
		
			
				|  |  |    // - "<prefix><CMAKE_BIN_DIR>/cmake"
 | 
	
		
			
				|  |  |    // - "<prefix><CMAKE_DATA_DIR>"
 | 
	
		
			
				|  |  | -  if (cmHasSuffix(exe_dir, CMAKE_BIN_DIR)) {
 | 
	
		
			
				|  |  | +  // - "<prefix><CMAKE_DOC_DIR>"
 | 
	
		
			
				|  |  | +  if (cmHasLiteralSuffix(exe_dir, CMAKE_BIN_DIR)) {
 | 
	
		
			
				|  |  |      std::string const prefix =
 | 
	
		
			
				|  |  | -      exe_dir.substr(0, exe_dir.size() - strlen(CMAKE_BIN_DIR));
 | 
	
		
			
				|  |  | -    cmSystemToolsCMakeRoot = prefix + CMAKE_DATA_DIR;
 | 
	
		
			
				|  |  | +      exe_dir.substr(0, exe_dir.size() - cmStrLen(CMAKE_BIN_DIR));
 | 
	
		
			
				|  |  | +    cmSystemToolsCMakeRoot = cmStrCat(prefix, CMAKE_DATA_DIR);
 | 
	
		
			
				|  |  | +    if (cmSystemTools::FileExists(
 | 
	
		
			
				|  |  | +          cmStrCat(prefix, CMAKE_DOC_DIR "/html/index.html"))) {
 | 
	
		
			
				|  |  | +      cmSystemToolsHTMLDoc = cmStrCat(prefix, CMAKE_DOC_DIR "/html");
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |    if (cmSystemToolsCMakeRoot.empty() ||
 | 
	
		
			
				|  |  |        !cmSystemTools::FileExists(
 | 
	
		
			
				|  |  | -        (cmSystemToolsCMakeRoot + "/Modules/CMake.cmake"))) {
 | 
	
		
			
				|  |  | +        cmStrCat(cmSystemToolsCMakeRoot, "/Modules/CMake.cmake"))) {
 | 
	
		
			
				|  |  |      // Build tree has "<build>/bin[/<config>]/cmake" and
 | 
	
		
			
				|  |  |      // "<build>/CMakeFiles/CMakeSourceDir.txt".
 | 
	
		
			
				|  |  |      std::string dir = cmSystemTools::GetFilenamePath(exe_dir);
 | 
	
		
			
				|  |  | -    std::string src_dir_txt = dir + "/CMakeFiles/CMakeSourceDir.txt";
 | 
	
		
			
				|  |  | +    std::string src_dir_txt = cmStrCat(dir, "/CMakeFiles/CMakeSourceDir.txt");
 | 
	
		
			
				|  |  |      cmsys::ifstream fin(src_dir_txt.c_str());
 | 
	
		
			
				|  |  |      std::string src_dir;
 | 
	
		
			
				|  |  |      if (fin && cmSystemTools::GetLineFromStream(fin, src_dir) &&
 | 
	
	
		
			
				|  | @@ -2185,13 +2191,18 @@ void cmSystemTools::FindCMakeResources(const char* argv0)
 | 
	
		
			
				|  |  |        cmSystemToolsCMakeRoot = src_dir;
 | 
	
		
			
				|  |  |      } else {
 | 
	
		
			
				|  |  |        dir = cmSystemTools::GetFilenamePath(dir);
 | 
	
		
			
				|  |  | -      src_dir_txt = dir + "/CMakeFiles/CMakeSourceDir.txt";
 | 
	
		
			
				|  |  | +      src_dir_txt = cmStrCat(dir, "/CMakeFiles/CMakeSourceDir.txt");
 | 
	
		
			
				|  |  |        cmsys::ifstream fin2(src_dir_txt.c_str());
 | 
	
		
			
				|  |  |        if (fin2 && cmSystemTools::GetLineFromStream(fin2, src_dir) &&
 | 
	
		
			
				|  |  |            cmSystemTools::FileIsDirectory(src_dir)) {
 | 
	
		
			
				|  |  |          cmSystemToolsCMakeRoot = src_dir;
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  | +    if (!cmSystemToolsCMakeRoot.empty() && cmSystemToolsHTMLDoc.empty() &&
 | 
	
		
			
				|  |  | +        cmSystemTools::FileExists(
 | 
	
		
			
				|  |  | +          cmStrCat(dir, "/Utilities/Sphinx/html/index.html"))) {
 | 
	
		
			
				|  |  | +      cmSystemToolsHTMLDoc = cmStrCat(dir, "/Utilities/Sphinx/html");
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  #else
 | 
	
		
			
				|  |  |    // Bootstrap build knows its source.
 | 
	
	
		
			
				|  | @@ -2234,6 +2245,11 @@ std::string const& cmSystemTools::GetCMakeRoot()
 | 
	
		
			
				|  |  |    return cmSystemToolsCMakeRoot;
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +std::string const& cmSystemTools::GetHTMLDoc()
 | 
	
		
			
				|  |  | +{
 | 
	
		
			
				|  |  | +  return cmSystemToolsHTMLDoc;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  std::string cmSystemTools::GetCurrentWorkingDirectory()
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  |    return cmSystemTools::CollapseFullPath(
 |