diff options
Diffstat (limited to 'Source')
-rw-r--r-- | Source/cmSourceFilesRemoveCommand.cxx | 41 |
1 files changed, 37 insertions, 4 deletions
diff --git a/Source/cmSourceFilesRemoveCommand.cxx b/Source/cmSourceFilesRemoveCommand.cxx index 86efc2f..0d1d4de 100644 --- a/Source/cmSourceFilesRemoveCommand.cxx +++ b/Source/cmSourceFilesRemoveCommand.cxx @@ -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; |