diff options
author | Andy Cedilnik <andy.cedilnik@kitware.com> | 2002-01-17 19:11:26 (GMT) |
---|---|---|
committer | Andy Cedilnik <andy.cedilnik@kitware.com> | 2002-01-17 19:11:26 (GMT) |
commit | e77515c2da3fcbc52809de9f148b6807459e1f28 (patch) | |
tree | 6e54579c8f873c7651c785be25ee48782cb10da4 /Source/cmSourceFilesCommand.cxx | |
parent | 3df3d839ccf5430e6c033ab4f0745d5f2e65d8c6 (diff) | |
download | CMake-e77515c2da3fcbc52809de9f148b6807459e1f28.zip CMake-e77515c2da3fcbc52809de9f148b6807459e1f28.tar.gz CMake-e77515c2da3fcbc52809de9f148b6807459e1f28.tar.bz2 |
Add option of adding generated files to source list
Diffstat (limited to 'Source/cmSourceFilesCommand.cxx')
-rw-r--r-- | Source/cmSourceFilesCommand.cxx | 59 |
1 files changed, 46 insertions, 13 deletions
diff --git a/Source/cmSourceFilesCommand.cxx b/Source/cmSourceFilesCommand.cxx index 003bc2f..e6d7176 100644 --- a/Source/cmSourceFilesCommand.cxx +++ b/Source/cmSourceFilesCommand.cxx @@ -51,32 +51,65 @@ bool cmSourceFilesCommand::InitialPass(std::vector<std::string> const& args) std::string name = args[0]; m_Makefile->ExpandVariablesInString(name); + + int generated = 0; for(std::vector<std::string>::const_iterator i = (args.begin() + 1); i != args.end(); ++i) { std::string copy = *i; - m_Makefile->ExpandVariablesInString(copy); + // Keyword GENERATED in the source file list means that + // from here on files will be generated + if ( copy == "GENERATED" ) + { + generated = 1; + continue; + } cmSourceFile file; + m_Makefile->ExpandVariablesInString(copy); file.SetIsAnAbstractClass(false); std::string path = cmSystemTools::GetFilenamePath(copy); - // if this is a full path then - if((path.size() && path[0] == '/') || - (path.size() > 1 && path[1] == ':')) + if ( generated ) { - file.SetName(cmSystemTools::GetFilenameName(copy.c_str()).c_str(), - path.c_str(), - m_Makefile->GetSourceExtensions(), - m_Makefile->GetHeaderExtensions()); + // This file will be generated, so we should not check + // if it exist. + std::string ext = cmSystemTools::GetFilenameExtension(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(copy.c_str(), m_Makefile->GetCurrentDirectory(), - m_Makefile->GetSourceExtensions(), - m_Makefile->GetHeaderExtensions()); - } + // if this is a full path then + if((path.size() && path[0] == '/') || + (path.size() > 1 && path[1] == ':')) + { + file.SetName(cmSystemTools::GetFilenameName(copy.c_str()).c_str(), + path.c_str(), + m_Makefile->GetSourceExtensions(), + m_Makefile->GetHeaderExtensions()); + } + else + { + file.SetName(copy.c_str(), m_Makefile->GetCurrentDirectory(), + m_Makefile->GetSourceExtensions(), + m_Makefile->GetHeaderExtensions()); + } m_Makefile->AddSource(file, name.c_str()); } + return true; } |