|  | @@ -177,18 +177,32 @@ void cmSystemTools::ReplaceString(std::string& source,
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  #ifdef _WIN32
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +// Get the data of key value.
 | 
	
		
			
				|  |  | +// Example : 
 | 
	
		
			
				|  |  | +//      HKEY_LOCAL_MACHINE\SOFTWARE\Python\PythonCore\2.1\InstallPath
 | 
	
		
			
				|  |  | +//      =>  will return the data of the "default" value of the key
 | 
	
		
			
				|  |  | +//      HKEY_LOCAL_MACHINE\SOFTWARE\Scriptics\Tcl\8.4:Root
 | 
	
		
			
				|  |  | +//      =>  will return the data of the "Root" value of the key
 | 
	
		
			
				|  |  |  bool ReadAValue(std::string &res, const char *key)
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  |    // find the primary key
 | 
	
		
			
				|  |  |    std::string primary = key;
 | 
	
		
			
				|  |  | -  std::string second = key;
 | 
	
		
			
				|  |  | +  std::string second;
 | 
	
		
			
				|  |  | +  std::string valuename;
 | 
	
		
			
				|  |  | + 
 | 
	
		
			
				|  |  |    size_t start = primary.find("\\");
 | 
	
		
			
				|  |  |    if (start == std::string::npos)
 | 
	
		
			
				|  |  |      {
 | 
	
		
			
				|  |  |      return false;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  | -  primary = primary.substr(0,start);
 | 
	
		
			
				|  |  | -  second = second.substr(++start);
 | 
	
		
			
				|  |  | +  size_t valuenamepos = primary.find("§");
 | 
	
		
			
				|  |  | +  if (valuenamepos != std::string::npos)
 | 
	
		
			
				|  |  | +    {
 | 
	
		
			
				|  |  | +    valuename = primary.substr(valuenamepos+1);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +  second = primary.substr(start+1, valuenamepos-start-1);
 | 
	
		
			
				|  |  | +  primary = primary.substr(0, start);
 | 
	
		
			
				|  |  |    
 | 
	
		
			
				|  |  |    HKEY primaryKey;
 | 
	
		
			
				|  |  |    if (primary == "HKEY_CURRENT_USER")
 | 
	
	
		
			
				|  | @@ -222,13 +236,13 @@ bool ReadAValue(std::string &res, const char *key)
 | 
	
		
			
				|  |  |      {
 | 
	
		
			
				|  |  |      DWORD dwType, dwSize;
 | 
	
		
			
				|  |  |      dwSize = 1023;
 | 
	
		
			
				|  |  | -    char val[1024];
 | 
	
		
			
				|  |  | -    if(RegQueryValueEx(hKey, NULL, NULL, &dwType, 
 | 
	
		
			
				|  |  | -                       (BYTE *)val, &dwSize) == ERROR_SUCCESS)
 | 
	
		
			
				|  |  | +    char data[1024];
 | 
	
		
			
				|  |  | +    if(RegQueryValueEx(hKey, (LPTSTR)valuename.c_str(), NULL, &dwType, 
 | 
	
		
			
				|  |  | +                       (BYTE *)data, &dwSize) == ERROR_SUCCESS)
 | 
	
		
			
				|  |  |        {
 | 
	
		
			
				|  |  |        if (dwType == REG_SZ)
 | 
	
		
			
				|  |  |          {
 | 
	
		
			
				|  |  | -        res = val;
 | 
	
		
			
				|  |  | +        res = data;
 | 
	
		
			
				|  |  |          return true;
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |        }
 | 
	
	
		
			
				|  | @@ -242,7 +256,7 @@ bool ReadAValue(std::string &res, const char *key)
 | 
	
		
			
				|  |  |  void cmSystemTools::ExpandRegistryValues(std::string& source)
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  |  #if _WIN32  
 | 
	
		
			
				|  |  | -  cmRegularExpression regEntry("\\[(HKEY[A-Za-z_0-9\\.\\\\]*)\\]");
 | 
	
		
			
				|  |  | +  cmRegularExpression regEntry("\\[(HKEY[A-Za-z_ §0-9\\.\\\\]*)\\]");
 | 
	
		
			
				|  |  |    
 | 
	
		
			
				|  |  |    // check for black line or comment
 | 
	
		
			
				|  |  |    while (regEntry.find(source))
 | 
	
	
		
			
				|  | @@ -687,7 +701,7 @@ bool cmSystemTools::RunCommand(const char* command,
 | 
	
		
			
				|  |  |    fgets(buffer, BUFFER_SIZE, cpipe);
 | 
	
		
			
				|  |  |    while(!feof(cpipe))
 | 
	
		
			
				|  |  |      {
 | 
	
		
			
				|  |  | -    std::cout << buffer << std::flush;
 | 
	
		
			
				|  |  | +    std::cout << buffer;
 | 
	
		
			
				|  |  |      output += buffer;
 | 
	
		
			
				|  |  |      fgets(buffer, BUFFER_SIZE, cpipe);
 | 
	
		
			
				|  |  |      }
 | 
	
	
		
			
				|  | @@ -779,23 +793,23 @@ std::string cmSystemTools::FindLibrary(const char* name,
 | 
	
		
			
				|  |  |      tryPath = *p;
 | 
	
		
			
				|  |  |      tryPath += "/lib";
 | 
	
		
			
				|  |  |      tryPath += name;
 | 
	
		
			
				|  |  | -    tryPath += ".so";
 | 
	
		
			
				|  |  | +    tryPath + ".so";
 | 
	
		
			
				|  |  |      if(cmSystemTools::FileExists(tryPath.c_str()))
 | 
	
		
			
				|  |  |        {
 | 
	
		
			
				|  |  |        return cmSystemTools::CollapseFullPath(tryPath.c_str());
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  |      tryPath = *p;
 | 
	
		
			
				|  |  | -    tryPath += "/lib";
 | 
	
		
			
				|  |  | +    tryPath = "/lib";
 | 
	
		
			
				|  |  |      tryPath += name;
 | 
	
		
			
				|  |  | -    tryPath += ".a";
 | 
	
		
			
				|  |  | +    tryPath + ".a";
 | 
	
		
			
				|  |  |      if(cmSystemTools::FileExists(tryPath.c_str()))
 | 
	
		
			
				|  |  |        {
 | 
	
		
			
				|  |  |        return cmSystemTools::CollapseFullPath(tryPath.c_str());
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  |      tryPath = *p;
 | 
	
		
			
				|  |  | -    tryPath += "/lib";
 | 
	
		
			
				|  |  | +    tryPath = "/lib";
 | 
	
		
			
				|  |  |      tryPath += name;
 | 
	
		
			
				|  |  | -    tryPath += ".sl";
 | 
	
		
			
				|  |  | +    tryPath + ".sl";
 | 
	
		
			
				|  |  |      if(cmSystemTools::FileExists(tryPath.c_str()))
 | 
	
		
			
				|  |  |        {
 | 
	
		
			
				|  |  |        return cmSystemTools::CollapseFullPath(tryPath.c_str());
 | 
	
	
		
			
				|  | @@ -886,6 +900,7 @@ void cmSystemTools::SplitProgramPath(const char* in_name,
 | 
	
		
			
				|  |  |   */
 | 
	
		
			
				|  |  |  std::string cmSystemTools::CollapseFullPath(const char* in_name)
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  | +  std::cerr << "CollapseFullPath " << in_name << "\n";
 | 
	
		
			
				|  |  |    std::string dir, file;
 | 
	
		
			
				|  |  |    cmSystemTools::SplitProgramPath(in_name, dir, file);
 | 
	
		
			
				|  |  |    // Ultra-hack warning:
 |