From 1b5e3f41369e8bf6a43c79eb62a4d636caab2b5a Mon Sep 17 00:00:00 2001 From: Brad King Date: Thu, 9 Feb 2006 18:42:58 -0500 Subject: [PATCH] BUG: Fixed generation of cmake re-run rules. --- Source/cmLocalVisualStudio6Generator.cxx | 21 +++++++++++---------- Source/cmLocalVisualStudio6Generator.h | 2 +- Source/cmLocalVisualStudio7Generator.cxx | 23 ++++++++++++----------- Source/cmLocalVisualStudio7Generator.h | 2 +- 4 files changed, 25 insertions(+), 23 deletions(-) diff --git a/Source/cmLocalVisualStudio6Generator.cxx b/Source/cmLocalVisualStudio6Generator.cxx index f3155f6d4d..8873ab66de 100644 --- a/Source/cmLocalVisualStudio6Generator.cxx +++ b/Source/cmLocalVisualStudio6Generator.cxx @@ -85,6 +85,15 @@ void cmLocalVisualStudio6Generator::OutputDSPFile() 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 = + m_Makefile->GetDefinition("CMAKE_SUPPRESS_REGENERATION"); + if (!cmSystemTools::IsOn(suppRegenRule)) + { + this->AddDSPBuildRule(l->second); + } + // INCLUDE_EXTERNAL_MSPROJECT command only affects the workspace // so don't build a projectfile for it if ((l->second.GetType() != cmTarget::INSTALL_FILES) @@ -210,9 +219,9 @@ void cmLocalVisualStudio6Generator::CreateSingleDSP(const char *lname, cmTarget } -void cmLocalVisualStudio6Generator::AddDSPBuildRule() +void cmLocalVisualStudio6Generator::AddDSPBuildRule(cmTarget& tgt) { - std::string dspname = *(m_CreatedProjectNames.end()-1); + std::string dspname = tgt.GetName(); dspname += ".dsp.cmake"; const char* dsprule = m_Makefile->GetRequiredDefinition("CMAKE_COMMAND"); cmCustomCommandLine commandLine; @@ -262,14 +271,6 @@ void cmLocalVisualStudio6Generator::WriteDSPFile(std::ostream& fout, const char *libName, cmTarget &target) { - // if we should add regen rule then... - const char *suppRegenRule = - m_Makefile->GetDefinition("CMAKE_SUPPRESS_REGENERATION"); - if (!cmSystemTools::IsOn(suppRegenRule)) - { - this->AddDSPBuildRule(); - } - // For utility targets need custom command since pre- and post- // build does not do anything in Visual Studio 6. In order for the // rules to run in the correct order as custom commands, we need diff --git a/Source/cmLocalVisualStudio6Generator.h b/Source/cmLocalVisualStudio6Generator.h index 6b8286c3b6..f0067cb7fb 100644 --- a/Source/cmLocalVisualStudio6Generator.h +++ b/Source/cmLocalVisualStudio6Generator.h @@ -79,7 +79,7 @@ private: cmTarget &tgt, std::vector &sgs); void WriteDSPFooter(std::ostream& fout); - void AddDSPBuildRule(); + void AddDSPBuildRule(cmTarget& tgt); void WriteCustomRule(std::ostream& fout, const char* source, const char* command, diff --git a/Source/cmLocalVisualStudio7Generator.cxx b/Source/cmLocalVisualStudio7Generator.cxx index 4b03bbd42e..02db5aa3b8 100644 --- a/Source/cmLocalVisualStudio7Generator.cxx +++ b/Source/cmLocalVisualStudio7Generator.cxx @@ -101,6 +101,16 @@ void cmLocalVisualStudio7Generator::OutputVCProjFile() 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 = + m_Makefile->GetDefinition("CMAKE_SUPPRESS_REGENERATION"); + if (!cmSystemTools::IsOn(suppRegenRule) && + (strcmp(l->first.c_str(), CMAKE_CHECK_BUILD_SYSTEM_TARGET) != 0)) + { + this->AddVCProjBuildRule(l->second); + } + // INCLUDE_EXTERNAL_MSPROJECT command only affects the workspace // so don't build a projectfile for it if ((l->second.GetType() != cmTarget::INSTALL_FILES) @@ -213,9 +223,9 @@ void cmLocalVisualStudio7Generator::CreateSingleVCProj(const char *lname, cmTarg } -void cmLocalVisualStudio7Generator::AddVCProjBuildRule() +void cmLocalVisualStudio7Generator::AddVCProjBuildRule(cmTarget& tgt) { - std::string dspname = *(m_CreatedProjectNames.end()-1); + std::string dspname = tgt.GetName(); dspname += ".vcproj.cmake"; const char* dsprule = m_Makefile->GetRequiredDefinition("CMAKE_COMMAND"); cmCustomCommandLine commandLine; @@ -970,15 +980,6 @@ void cmLocalVisualStudio7Generator::WriteVCProjFile(std::ostream& fout, static_cast (m_GlobalGenerator)->GetConfigurations(); - // if we should add regen rule then... - const char *suppRegenRule = - m_Makefile->GetDefinition("CMAKE_SUPPRESS_REGENERATION"); - if (!cmSystemTools::IsOn(suppRegenRule) && - (strcmp(libName, CMAKE_CHECK_BUILD_SYSTEM_TARGET) != 0)) - { - this->AddVCProjBuildRule(); - } - // trace the visual studio dependencies std::string name = libName; name += ".vcproj.cmake"; diff --git a/Source/cmLocalVisualStudio7Generator.h b/Source/cmLocalVisualStudio7Generator.h index 6a83e3be22..2f5c3237f9 100644 --- a/Source/cmLocalVisualStudio7Generator.h +++ b/Source/cmLocalVisualStudio7Generator.h @@ -76,7 +76,7 @@ private: void CreateSingleVCProj(const char *lname, cmTarget &tgt); void WriteVCProjFile(std::ostream& fout, const char *libName, cmTarget &tgt); - void AddVCProjBuildRule(); + void AddVCProjBuildRule(cmTarget& tgt); void WriteConfigurations(std::ostream& fout, const char *libName, cmTarget &tgt); void WriteConfiguration(std::ostream& fout,