summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Cole <david.cole@kitware.com>2012-04-03 19:58:42 (GMT)
committerCMake Topic Stage <kwrobot@kitware.com>2012-04-03 19:58:42 (GMT)
commit7ecf76a19b53f9821583ec5be9ed12da62046c99 (patch)
tree4a5a67b2bc2be39aef77ee8761722a7ade9e5197
parenta6100082b9aa1c4357bb0c2c0cf29f905f355669 (diff)
parent01e979acef392776bd1ea1fb38126957746954e7 (diff)
downloadCMake-7ecf76a19b53f9821583ec5be9ed12da62046c99.zip
CMake-7ecf76a19b53f9821583ec5be9ed12da62046c99.tar.gz
CMake-7ecf76a19b53f9821583ec5be9ed12da62046c99.tar.bz2
Merge topic 'fix-source-classification'
01e979a VS: Add CMakeLists.txt re-run rules at start of generation 9a2c60e Classify known header file extensions as headers 1c48992 Always compile sources with known language
-rw-r--r--Source/cmGeneratorTarget.cxx13
-rw-r--r--Source/cmGlobalVisualStudioGenerator.cxx10
-rw-r--r--Source/cmLocalVisualStudio10Generator.cxx18
-rw-r--r--Source/cmLocalVisualStudio6Generator.cxx29
-rw-r--r--Source/cmLocalVisualStudio6Generator.h1
-rw-r--r--Source/cmLocalVisualStudio7Generator.cxx40
-rw-r--r--Source/cmLocalVisualStudio7Generator.h1
-rw-r--r--Source/cmLocalVisualStudioGenerator.h2
-rw-r--r--Source/cmMakefile.cxx3
-rw-r--r--Source/cmSourceFile.h3
10 files changed, 66 insertions, 54 deletions
diff --git a/Source/cmGeneratorTarget.cxx b/Source/cmGeneratorTarget.cxx
index 7979928..42dd428 100644
--- a/Source/cmGeneratorTarget.cxx
+++ b/Source/cmGeneratorTarget.cxx
@@ -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);
diff --git a/Source/cmGlobalVisualStudioGenerator.cxx b/Source/cmGlobalVisualStudioGenerator.cxx
index 7da4f86..2a918c9 100644
--- a/Source/cmGlobalVisualStudioGenerator.cxx
+++ b/Source/cmGlobalVisualStudioGenerator.cxx
@@ -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();
}
diff --git a/Source/cmLocalVisualStudio10Generator.cxx b/Source/cmLocalVisualStudio10Generator.cxx
index 8b22705..bf0e997 100644
--- a/Source/cmLocalVisualStudio10Generator.cxx
+++ b/Source/cmLocalVisualStudio10Generator.cxx
@@ -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)
diff --git a/Source/cmLocalVisualStudio6Generator.cxx b/Source/cmLocalVisualStudio6Generator.cxx
index 5b99dfd..99a4c95 100644
--- a/Source/cmLocalVisualStudio6Generator.cxx
+++ b/Source/cmLocalVisualStudio6Generator.cxx
@@ -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();
diff --git a/Source/cmLocalVisualStudio6Generator.h b/Source/cmLocalVisualStudio6Generator.h
index a680633..1decc35 100644
--- a/Source/cmLocalVisualStudio6Generator.h
+++ b/Source/cmLocalVisualStudio6Generator.h
@@ -34,6 +34,7 @@ public:
virtual ~cmLocalVisualStudio6Generator();
virtual void AddHelperCommands();
+ virtual void AddCMakeListsRules();
/**
* Generate the makefile for this directory.
diff --git a/Source/cmLocalVisualStudio7Generator.cxx b/Source/cmLocalVisualStudio7Generator.cxx
index 363d370..9faf46d 100644
--- a/Source/cmLocalVisualStudio7Generator.cxx
+++ b/Source/cmLocalVisualStudio7Generator.cxx
@@ -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++)
diff --git a/Source/cmLocalVisualStudio7Generator.h b/Source/cmLocalVisualStudio7Generator.h
index 9d3a9f2..9aa408e 100644
--- a/Source/cmLocalVisualStudio7Generator.h
+++ b/Source/cmLocalVisualStudio7Generator.h
@@ -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:
diff --git a/Source/cmLocalVisualStudioGenerator.h b/Source/cmLocalVisualStudioGenerator.h
index 410cc9a..9968592 100644
--- a/Source/cmLocalVisualStudioGenerator.h
+++ b/Source/cmLocalVisualStudioGenerator.h
@@ -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; }
diff --git a/Source/cmMakefile.cxx b/Source/cmMakefile.cxx
index 56e3305..e7e5eda 100644
--- a/Source/cmMakefile.cxx
+++ b/Source/cmMakefile.cxx
@@ -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)$");
diff --git a/Source/cmSourceFile.h b/Source/cmSourceFile.h
index 55147e1..ae01274 100644
--- a/Source/cmSourceFile.h
+++ b/Source/cmSourceFile.h
@@ -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