|  | @@ -43,18 +43,51 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
	
		
			
				|  |  |  // cmSourceFilesRemoveCommand
 | 
	
		
			
				|  |  |  bool cmSourceFilesRemoveCommand::InitialPass(std::vector<std::string> const& args)
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  | - if(args.size() < 1 )
 | 
	
		
			
				|  |  | +  if(args.size() < 1 )
 | 
	
		
			
				|  |  |      {
 | 
	
		
			
				|  |  |      this->SetError("called with incorrect number of arguments");
 | 
	
		
			
				|  |  |      return false;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  | +  int generated = 0;
 | 
	
		
			
				|  |  |    for(std::vector<std::string>::const_iterator i = (args.begin() + 1);
 | 
	
		
			
				|  |  |        i != args.end(); ++i)
 | 
	
		
			
				|  |  |      {
 | 
	
		
			
				|  |  | +    std::string copy = *i;
 | 
	
		
			
				|  |  | +    if ( copy == "GENERATED" )
 | 
	
		
			
				|  |  | +      {
 | 
	
		
			
				|  |  | +      generated = 1;
 | 
	
		
			
				|  |  | +      continue;
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  |      cmSourceFile file;
 | 
	
		
			
				|  |  | -    file.SetName((*i).c_str(), m_Makefile->GetCurrentDirectory(),
 | 
	
		
			
				|  |  | -                 m_Makefile->GetSourceExtensions(),
 | 
	
		
			
				|  |  | -                 m_Makefile->GetHeaderExtensions());
 | 
	
		
			
				|  |  | +    if ( generated )
 | 
	
		
			
				|  |  | +      {
 | 
	
		
			
				|  |  | +      // This file will be generated, so we should not check
 | 
	
		
			
				|  |  | +      // if it exist. 
 | 
	
		
			
				|  |  | +      std::string ext = cmSystemTools::GetFilenameExtension(copy);
 | 
	
		
			
				|  |  | +      std::string path = cmSystemTools::GetFilenamePath(copy);
 | 
	
		
			
				|  |  | +      std::string name_no_ext = cmSystemTools::GetFilenameName(copy.c_str());
 | 
	
		
			
				|  |  | +      name_no_ext = name_no_ext.substr(0, name_no_ext.length()-ext.length());
 | 
	
		
			
				|  |  | +      if ( ext[0] == '.' )
 | 
	
		
			
				|  |  | +	{
 | 
	
		
			
				|  |  | +	ext = ext.substr(1);
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +      if((path.size() && path[0] == '/') ||
 | 
	
		
			
				|  |  | +	 (path.size() > 1 && path[1] == ':'))
 | 
	
		
			
				|  |  | +	{
 | 
	
		
			
				|  |  | +	file.SetName(name_no_ext.c_str(), path.c_str(), ext.c_str(), false);
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +      else
 | 
	
		
			
				|  |  | +	{
 | 
	
		
			
				|  |  | +	file.SetName(name_no_ext.c_str(), m_Makefile->GetCurrentOutputDirectory(), 
 | 
	
		
			
				|  |  | +		     ext.c_str(), false);
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +    else
 | 
	
		
			
				|  |  | +      {
 | 
	
		
			
				|  |  | +      file.SetName((*i).c_str(), m_Makefile->GetCurrentDirectory(),
 | 
	
		
			
				|  |  | +		   m_Makefile->GetSourceExtensions(),
 | 
	
		
			
				|  |  | +		   m_Makefile->GetHeaderExtensions());
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  |      m_Makefile->RemoveSource(file, args[0].c_str());
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |    return true;
 |