Merge topic 'fix-source-classification'
01e979a
VS: Add CMakeLists.txt re-run rules at start of generation9a2c60e
Classify known header file extensions as headers1c48992
Always compile sources with known language
This commit is contained in:
commit
7ecf76a19b
|
@ -30,6 +30,7 @@ cmGeneratorTarget::cmGeneratorTarget(cmTarget* t): Target(t)
|
|||
//----------------------------------------------------------------------------
|
||||
void cmGeneratorTarget::ClassifySources()
|
||||
{
|
||||
cmsys::RegularExpression header(CM_HEADER_REGEX);
|
||||
bool isObjLib = this->Target->GetType() == cmTarget::OBJECT_LIBRARY;
|
||||
std::vector<cmSourceFile*> badObjLib;
|
||||
std::vector<cmSourceFile*> const& sources = this->Target->GetSourceFiles();
|
||||
|
@ -58,6 +59,10 @@ void cmGeneratorTarget::ClassifySources()
|
|||
this->ExternalObjects.push_back(sf);
|
||||
if(isObjLib) { badObjLib.push_back(sf); }
|
||||
}
|
||||
else if(sf->GetLanguage())
|
||||
{
|
||||
this->ObjectSources.push_back(sf);
|
||||
}
|
||||
else if(ext == "def")
|
||||
{
|
||||
this->ModuleDefinitionFile = sf->GetFullPath();
|
||||
|
@ -68,6 +73,10 @@ void cmGeneratorTarget::ClassifySources()
|
|||
this->IDLSources.push_back(sf);
|
||||
if(isObjLib) { badObjLib.push_back(sf); }
|
||||
}
|
||||
else if(header.find(sf->GetFullPath().c_str()))
|
||||
{
|
||||
this->HeaderSources.push_back(sf);
|
||||
}
|
||||
else if(this->GlobalGenerator->IgnoreFile(sf->GetExtension().c_str()))
|
||||
{
|
||||
// We only get here if a source file is not an external object
|
||||
|
@ -75,10 +84,6 @@ void cmGeneratorTarget::ClassifySources()
|
|||
// No message or diagnosis should be given.
|
||||
this->ExtraSources.push_back(sf);
|
||||
}
|
||||
else if(sf->GetLanguage())
|
||||
{
|
||||
this->ObjectSources.push_back(sf);
|
||||
}
|
||||
else
|
||||
{
|
||||
this->ExtraSources.push_back(sf);
|
||||
|
|
|
@ -95,6 +95,16 @@ void cmGlobalVisualStudioGenerator::Generate()
|
|||
// of Visual Studio.
|
||||
this->ConfigureCMakeVisualStudioMacros();
|
||||
|
||||
// Add CMakeLists.txt with custom command to rerun CMake.
|
||||
for(std::vector<cmLocalGenerator*>::const_iterator
|
||||
lgi = this->LocalGenerators.begin();
|
||||
lgi != this->LocalGenerators.end(); ++lgi)
|
||||
{
|
||||
cmLocalVisualStudioGenerator* lg =
|
||||
static_cast<cmLocalVisualStudioGenerator*>(*lgi);
|
||||
lg->AddCMakeListsRules();
|
||||
}
|
||||
|
||||
// Run all the local generators.
|
||||
this->cmGlobalGenerator::Generate();
|
||||
}
|
||||
|
|
|
@ -74,24 +74,6 @@ void cmLocalVisualStudio10Generator::Generate()
|
|||
{
|
||||
|
||||
cmTargets &tgts = this->Makefile->GetTargets();
|
||||
// Create the regeneration custom rule.
|
||||
if(!this->Makefile->IsOn("CMAKE_SUPPRESS_REGENERATION"))
|
||||
{
|
||||
// Create a rule to regenerate the build system when the target
|
||||
// specification source changes.
|
||||
if(cmSourceFile* sf = this->CreateVCProjBuildRule())
|
||||
{
|
||||
// Add the rule to targets that need it.
|
||||
for(cmTargets::iterator l = tgts.begin(); l != tgts.end(); ++l)
|
||||
{
|
||||
if(l->first != CMAKE_CHECK_BUILD_SYSTEM_TARGET)
|
||||
{
|
||||
l->second.AddSourceFile(sf);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for(cmTargets::iterator l = tgts.begin(); l != tgts.end(); ++l)
|
||||
{
|
||||
if(static_cast<cmGlobalVisualStudioGenerator*>(this->GlobalGenerator)
|
||||
|
|
|
@ -85,6 +85,23 @@ void cmLocalVisualStudio6Generator::AddHelperCommands()
|
|||
this->CreateCustomTargetsAndCommands(lang);
|
||||
}
|
||||
|
||||
void cmLocalVisualStudio6Generator::AddCMakeListsRules()
|
||||
{
|
||||
cmTargets &tgts = this->Makefile->GetTargets();
|
||||
for(cmTargets::iterator l = tgts.begin();
|
||||
l != tgts.end(); l++)
|
||||
{
|
||||
// Add a rule to regenerate the build system when the target
|
||||
// specification source changes.
|
||||
const char* suppRegenRule =
|
||||
this->Makefile->GetDefinition("CMAKE_SUPPRESS_REGENERATION");
|
||||
if (!cmSystemTools::IsOn(suppRegenRule))
|
||||
{
|
||||
this->AddDSPBuildRule(l->second);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void cmLocalVisualStudio6Generator::Generate()
|
||||
{
|
||||
this->OutputDSPFile();
|
||||
|
@ -107,18 +124,6 @@ void cmLocalVisualStudio6Generator::OutputDSPFile()
|
|||
// Create the DSP or set of DSP's for libraries and executables
|
||||
|
||||
cmTargets &tgts = this->Makefile->GetTargets();
|
||||
for(cmTargets::iterator l = tgts.begin();
|
||||
l != tgts.end(); l++)
|
||||
{
|
||||
// Add a rule to regenerate the build system when the target
|
||||
// specification source changes.
|
||||
const char* suppRegenRule =
|
||||
this->Makefile->GetDefinition("CMAKE_SUPPRESS_REGENERATION");
|
||||
if (!cmSystemTools::IsOn(suppRegenRule))
|
||||
{
|
||||
this->AddDSPBuildRule(l->second);
|
||||
}
|
||||
}
|
||||
|
||||
// build any targets
|
||||
for(cmTargets::iterator l = tgts.begin();
|
||||
|
|
|
@ -34,6 +34,7 @@ public:
|
|||
virtual ~cmLocalVisualStudio6Generator();
|
||||
|
||||
virtual void AddHelperCommands();
|
||||
virtual void AddCMakeListsRules();
|
||||
|
||||
/**
|
||||
* Generate the makefile for this directory.
|
||||
|
|
|
@ -100,6 +100,28 @@ void cmLocalVisualStudio7Generator::Generate()
|
|||
this->WriteStampFiles();
|
||||
}
|
||||
|
||||
void cmLocalVisualStudio7Generator::AddCMakeListsRules()
|
||||
{
|
||||
cmTargets &tgts = this->Makefile->GetTargets();
|
||||
// Create the regeneration custom rule.
|
||||
if(!this->Makefile->IsOn("CMAKE_SUPPRESS_REGENERATION"))
|
||||
{
|
||||
// Create a rule to regenerate the build system when the target
|
||||
// specification source changes.
|
||||
if(cmSourceFile* sf = this->CreateVCProjBuildRule())
|
||||
{
|
||||
// Add the rule to targets that need it.
|
||||
for(cmTargets::iterator l = tgts.begin(); l != tgts.end(); ++l)
|
||||
{
|
||||
if(l->first != CMAKE_CHECK_BUILD_SYSTEM_TARGET)
|
||||
{
|
||||
l->second.AddSourceFile(sf);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void cmLocalVisualStudio7Generator::FixGlobalTargets()
|
||||
{
|
||||
// Visual Studio .NET 2003 Service Pack 1 will not run post-build
|
||||
|
@ -156,24 +178,6 @@ void cmLocalVisualStudio7Generator::WriteProjectFiles()
|
|||
// Get the set of targets in this directory.
|
||||
cmTargets &tgts = this->Makefile->GetTargets();
|
||||
|
||||
// Create the regeneration custom rule.
|
||||
if(!this->Makefile->IsOn("CMAKE_SUPPRESS_REGENERATION"))
|
||||
{
|
||||
// Create a rule to regenerate the build system when the target
|
||||
// specification source changes.
|
||||
if(cmSourceFile* sf = this->CreateVCProjBuildRule())
|
||||
{
|
||||
// Add the rule to targets that need it.
|
||||
for(cmTargets::iterator l = tgts.begin(); l != tgts.end(); ++l)
|
||||
{
|
||||
if(l->first != CMAKE_CHECK_BUILD_SYSTEM_TARGET)
|
||||
{
|
||||
l->second.AddSourceFile(sf);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Create the project file for each target.
|
||||
for(cmTargets::iterator l = tgts.begin();
|
||||
l != tgts.end(); l++)
|
||||
|
|
|
@ -64,6 +64,7 @@ public:
|
|||
|
||||
virtual void ReadAndStoreExternalGUID(const char* name,
|
||||
const char* path);
|
||||
virtual void AddCMakeListsRules();
|
||||
protected:
|
||||
void CreateSingleVCProj(const char *lname, cmTarget &tgt);
|
||||
private:
|
||||
|
|
|
@ -58,6 +58,8 @@ public:
|
|||
|
||||
virtual std::string ComputeLongestObjectDirectory(cmTarget&) const = 0;
|
||||
|
||||
virtual void AddCMakeListsRules() = 0;
|
||||
|
||||
protected:
|
||||
virtual const char* ReportErrorLabel() const;
|
||||
virtual bool CustomCommandUseLocal() const { return false; }
|
||||
|
|
|
@ -778,8 +778,7 @@ void cmMakefile::SetLocalGenerator(cmLocalGenerator* lg)
|
|||
("Source Files",
|
||||
"\\.(C|M|c|c\\+\\+|cc|cpp|cxx|f|f90|for|fpp"
|
||||
"|ftn|m|mm|rc|def|r|odl|idl|hpj|bat)$");
|
||||
this->AddSourceGroup("Header Files",
|
||||
"\\.(h|hh|h\\+\\+|hm|hpp|hxx|in|txx|inl)$");
|
||||
this->AddSourceGroup("Header Files", CM_HEADER_REGEX);
|
||||
this->AddSourceGroup("CMake Rules", "\\.rule$");
|
||||
this->AddSourceGroup("Resources", "\\.plist$");
|
||||
this->AddSourceGroup("Object Files", "\\.(lo|o|obj)$");
|
||||
|
|
|
@ -116,4 +116,7 @@ private:
|
|||
std::vector<std::string> Depends;
|
||||
};
|
||||
|
||||
// TODO: Factor out into platform information modules.
|
||||
#define CM_HEADER_REGEX "\\.(h|hh|h\\+\\+|hm|hpp|hxx|in|txx|inl)$"
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue