Add option of adding generated files to source list

This commit is contained in:
Andy Cedilnik 2002-01-17 14:11:26 -05:00
parent 3df3d839cc
commit e77515c2da
2 changed files with 56 additions and 14 deletions

View File

@ -51,32 +51,65 @@ bool cmSourceFilesCommand::InitialPass(std::vector<std::string> const& args)
std::string name = args[0]; std::string name = args[0];
m_Makefile->ExpandVariablesInString(name); m_Makefile->ExpandVariablesInString(name);
int generated = 0;
for(std::vector<std::string>::const_iterator i = (args.begin() + 1); for(std::vector<std::string>::const_iterator i = (args.begin() + 1);
i != args.end(); ++i) i != args.end(); ++i)
{ {
std::string copy = *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; cmSourceFile file;
m_Makefile->ExpandVariablesInString(copy);
file.SetIsAnAbstractClass(false); file.SetIsAnAbstractClass(false);
std::string path = cmSystemTools::GetFilenamePath(copy); std::string path = cmSystemTools::GetFilenamePath(copy);
// if this is a full path then if ( generated )
if((path.size() && path[0] == '/') ||
(path.size() > 1 && path[1] == ':'))
{ {
file.SetName(cmSystemTools::GetFilenameName(copy.c_str()).c_str(), // This file will be generated, so we should not check
path.c_str(), // if it exist.
m_Makefile->GetSourceExtensions(), std::string ext = cmSystemTools::GetFilenameExtension(copy);
m_Makefile->GetHeaderExtensions()); 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 else
{ // if this is a full path then
file.SetName(copy.c_str(), m_Makefile->GetCurrentDirectory(), if((path.size() && path[0] == '/') ||
m_Makefile->GetSourceExtensions(), (path.size() > 1 && path[1] == ':'))
m_Makefile->GetHeaderExtensions()); {
} 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()); m_Makefile->AddSource(file, name.c_str());
} }
return true; return true;
} }

View File

@ -53,6 +53,15 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* dependent on other packages (use SOURCE_FILES_REQUIRED() to add * dependent on other packages (use SOURCE_FILES_REQUIRED() to add
* dependent source files). * dependent source files).
* *
* It allows sources to be added even if they are generated by a build
* process. This can be achieved usiong GENERATED keyword:
* SOURCE_FILES( Project_SRCS
* Source1
* Source2
* ...
* GENERATED
* SourceThatDoesNotExist )
*
* \sa cmSourceFilesRequireCommand * \sa cmSourceFilesRequireCommand
*/ */
class cmSourceFilesCommand : public cmCommand class cmSourceFilesCommand : public cmCommand
@ -91,7 +100,7 @@ public:
virtual const char* GetFullDocumentation() virtual const char* GetFullDocumentation()
{ {
return return
"SOURCE_FILES(NAME file1 file2 ...)"; "SOURCE_FILES(NAME file1 file2 ... [ GENERATED generated_file1 ... ])";
} }
cmTypeMacro(cmSourceFilesCommand, cmCommand); cmTypeMacro(cmSourceFilesCommand, cmCommand);