From 3b81a4329420f0cb2ea0f3e7a4662c903e1b3aa0 Mon Sep 17 00:00:00 2001 From: Brad King Date: Thu, 28 Apr 2005 16:21:28 -0400 Subject: ENH: Added dependency from INSTALL target to ALL_BUILD target so that targets build before being installed. --- Source/cmGlobalVisualStudio6Generator.cxx | 25 +++++++++++++++-- Source/cmGlobalVisualStudio6Generator.h | 2 +- Source/cmGlobalVisualStudio71Generator.cxx | 44 ++++++++++++++++++++++-------- Source/cmGlobalVisualStudio71Generator.h | 4 +-- Source/cmGlobalVisualStudio7Generator.cxx | 40 +++++++++++++++++++++++---- Source/cmGlobalVisualStudio7Generator.h | 2 +- 6 files changed, 94 insertions(+), 23 deletions(-) diff --git a/Source/cmGlobalVisualStudio6Generator.cxx b/Source/cmGlobalVisualStudio6Generator.cxx index e392f552dd..917581c3d5 100644 --- a/Source/cmGlobalVisualStudio6Generator.cxx +++ b/Source/cmGlobalVisualStudio6Generator.cxx @@ -290,6 +290,7 @@ void cmGlobalVisualStudio6Generator::WriteDSWFile(std::ostream& fout, if ((l->second.GetType() != cmTarget::INSTALL_FILES) && (l->second.GetType() != cmTarget::INSTALL_PROGRAMS)) { + const char* extra_depend = 0; bool skip = false; // skip ALL_BUILD and RUN_TESTS if they have already been added if(l->first == "ALL_BUILD" ) @@ -313,6 +314,16 @@ void cmGlobalVisualStudio6Generator::WriteDSWFile(std::ostream& fout, { doneInstall = true; } + + // Make the INSTALL target depend on ALL_BUILD unless the + // project says to not do so. + const char* noall = + root->GetMakefile() + ->GetDefinition("CMAKE_SKIP_INSTALL_ALL_DEPENDENCY"); + if(!noall || cmSystemTools::IsOff(noall)) + { + extra_depend = "ALL_BUILD"; + } } if(l->first == "RUN_TESTS") { @@ -327,7 +338,8 @@ void cmGlobalVisualStudio6Generator::WriteDSWFile(std::ostream& fout, } if(!skip) { - this->WriteProject(fout, si->c_str(), dir.c_str(),l->second); + this->WriteProject(fout, si->c_str(), dir.c_str(),l->second, + extra_depend); } ++si; } @@ -377,7 +389,8 @@ void cmGlobalVisualStudio6Generator::OutputDSWFile() void cmGlobalVisualStudio6Generator::WriteProject(std::ostream& fout, const char* dspname, const char* dir, - const cmTarget& target) + const cmTarget& target, + const char* extra_depend) { fout << "#########################################################" "######################\n\n"; @@ -411,6 +424,14 @@ void cmGlobalVisualStudio6Generator::WriteProject(std::ostream& fout, } } + // Add an extra dependency if specified. + if(extra_depend) + { + fout << "Begin Project Dependency\n"; + fout << "Project_Dep_Name " << extra_depend << "\n"; + fout << "End Project Dependency\n"; + } + std::set::const_iterator i, end; // write utility dependencies. i = target.GetUtilities().begin(); diff --git a/Source/cmGlobalVisualStudio6Generator.h b/Source/cmGlobalVisualStudio6Generator.h index 5dbef61dd8..b31b3cad6c 100644 --- a/Source/cmGlobalVisualStudio6Generator.h +++ b/Source/cmGlobalVisualStudio6Generator.h @@ -82,7 +82,7 @@ private: void WriteDSWHeader(std::ostream& fout); void WriteProject(std::ostream& fout, const char* name, const char* path, - const cmTarget &t); + const cmTarget &t, const char* extra_depend); void WriteExternalProject(std::ostream& fout, const char* name, const char* path, const std::vector& dependencies); diff --git a/Source/cmGlobalVisualStudio71Generator.cxx b/Source/cmGlobalVisualStudio71Generator.cxx index 07167735f0..8d87f2ae5c 100644 --- a/Source/cmGlobalVisualStudio71Generator.cxx +++ b/Source/cmGlobalVisualStudio71Generator.cxx @@ -130,6 +130,7 @@ void cmGlobalVisualStudio71Generator::WriteSLNFile(std::ostream& fout, if ((l->second.GetType() != cmTarget::INSTALL_FILES) && (l->second.GetType() != cmTarget::INSTALL_PROGRAMS)) { + const char* extra_depend = 0; bool skip = false; if(l->first == "ALL_BUILD" ) { @@ -152,6 +153,15 @@ void cmGlobalVisualStudio71Generator::WriteSLNFile(std::ostream& fout, { doneInstall = true; } + // Make the INSTALL target depend on ALL_BUILD unless the + // project says to not do so. + const char* noall = + root->GetMakefile() + ->GetDefinition("CMAKE_SKIP_INSTALL_ALL_DEPENDENCY"); + if(!noall || cmSystemTools::IsOff(noall)) + { + extra_depend = "ALL_BUILD"; + } } if(l->first == "RUN_TESTS") { @@ -166,7 +176,8 @@ void cmGlobalVisualStudio71Generator::WriteSLNFile(std::ostream& fout, } if(!skip) { - this->WriteProject(fout, si->c_str(), dir.c_str(),l->second); + this->WriteProject(fout, si->c_str(), dir.c_str(),l->second, + extra_depend); } ++si; } @@ -225,10 +236,12 @@ void cmGlobalVisualStudio71Generator::WriteSLNFile(std::ostream& fout, // Write a dsp file into the SLN file, // Note, that dependencies from executables to // the libraries it uses are also done here -void cmGlobalVisualStudio71Generator::WriteProject(std::ostream& fout, - const char* dspname, - const char* dir, - const cmTarget& t) +void +cmGlobalVisualStudio71Generator::WriteProject(std::ostream& fout, + const char* dspname, + const char* dir, + const cmTarget& t, + const char* extra_depend) { std::string d = cmSystemTools::ConvertToOutputPath(dir); fout << "Project(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"" @@ -236,7 +249,7 @@ void cmGlobalVisualStudio71Generator::WriteProject(std::ostream& fout, << d << "\\" << dspname << ".vcproj\", \"{" << this->GetGUID(dspname) << "}\"\n"; fout << "\tProjectSection(ProjectDependencies) = postProject\n"; - this->WriteProjectDepends(fout, dspname, dir, t); + this->WriteProjectDepends(fout, dspname, dir, t, extra_depend); fout << "\tEndProjectSection\n"; fout <<"EndProject\n"; @@ -247,11 +260,13 @@ void cmGlobalVisualStudio71Generator::WriteProject(std::ostream& fout, // Write a dsp file into the SLN file, // Note, that dependencies from executables to // the libraries it uses are also done here -void cmGlobalVisualStudio71Generator::WriteProjectDepends(std::ostream& fout, - const char* dspname, - const char* , - const cmTarget& target - ) +void +cmGlobalVisualStudio71Generator +::WriteProjectDepends(std::ostream& fout, + const char* dspname, + const char*, + const cmTarget& target, + const char* extra_depend) { // insert Begin Project Dependency Project_Dep_Name project stuff here if (target.GetType() != cmTarget::STATIC_LIBRARY) @@ -276,6 +291,13 @@ void cmGlobalVisualStudio71Generator::WriteProjectDepends(std::ostream& fout, } } + // Add the extra dependency if requested. + if(extra_depend) + { + fout << "\t\t{" << this->GetGUID(extra_depend) << "} = {" + << this->GetGUID(extra_depend) << "}\n"; + } + std::set::const_iterator i, end; // write utility dependencies. i = target.GetUtilities().begin(); diff --git a/Source/cmGlobalVisualStudio71Generator.h b/Source/cmGlobalVisualStudio71Generator.h index a5a47a871c..1ae3fa9dd2 100644 --- a/Source/cmGlobalVisualStudio71Generator.h +++ b/Source/cmGlobalVisualStudio71Generator.h @@ -48,10 +48,10 @@ protected: std::vector& generators); virtual void WriteProject(std::ostream& fout, const char* name, const char* path, - const cmTarget &t); + const cmTarget &t, const char* extra_depend); virtual void WriteProjectDepends(std::ostream& fout, const char* name, const char* path, - const cmTarget &t); + const cmTarget &t, const char* extra_depend); virtual void WriteProjectConfigurations(std::ostream& fout, const char* name, bool in_all); virtual void WriteExternalProject(std::ostream& fout, const char* name, const char* path, const std::vector& depends); diff --git a/Source/cmGlobalVisualStudio7Generator.cxx b/Source/cmGlobalVisualStudio7Generator.cxx index 7172d7cd86..5dbc678b56 100644 --- a/Source/cmGlobalVisualStudio7Generator.cxx +++ b/Source/cmGlobalVisualStudio7Generator.cxx @@ -453,7 +453,21 @@ void cmGlobalVisualStudio7Generator::WriteSLNFile(std::ostream& fout, else if ((l->second.GetType() != cmTarget::INSTALL_FILES) && (l->second.GetType() != cmTarget::INSTALL_PROGRAMS)) { - this->WriteProjectDepends(fout, si->c_str(), dir.c_str(),l->second); + // Make the INSTALL target depend on ALL_BUILD unless the + // project says to not do so. + const char* extra_depend = 0; + if(l->first == "INSTALL") + { + const char* noall = + root->GetMakefile() + ->GetDefinition("CMAKE_SKIP_INSTALL_ALL_DEPENDENCY"); + if(!noall || cmSystemTools::IsOff(noall)) + { + extra_depend = "ALL_BUILD"; + } + } + this->WriteProjectDepends(fout, si->c_str(), dir.c_str(), l->second, + extra_depend); ++si; } } @@ -519,11 +533,13 @@ void cmGlobalVisualStudio7Generator::WriteProject(std::ostream& fout, // Write a dsp file into the SLN file, // Note, that dependencies from executables to // the libraries it uses are also done here -void cmGlobalVisualStudio7Generator::WriteProjectDepends(std::ostream& fout, - const char* dspname, - const char* , - const cmTarget& target - ) +void +cmGlobalVisualStudio7Generator +::WriteProjectDepends(std::ostream& fout, + const char* dspname, + const char*, + const cmTarget& target, + const char* extra_depend) { int depcount = 0; // insert Begin Project Dependency Project_Dep_Name project stuff here @@ -560,6 +576,18 @@ void cmGlobalVisualStudio7Generator::WriteProjectDepends(std::ostream& fout, } } + // Add the extra dependency if requested. + if(extra_depend) + { + std::string guid = this->GetGUID(extra_depend); + if(!guid.empty()) + { + fout << "\t\t{" << this->GetGUID(dspname) << "}." << depcount << " = {" + << guid << "}\n"; + depcount++; + } + } + std::set::const_iterator i, end; // write utility dependencies. i = target.GetUtilities().begin(); diff --git a/Source/cmGlobalVisualStudio7Generator.h b/Source/cmGlobalVisualStudio7Generator.h index fbc14894db..dea1c15536 100644 --- a/Source/cmGlobalVisualStudio7Generator.h +++ b/Source/cmGlobalVisualStudio7Generator.h @@ -92,7 +92,7 @@ protected: const cmTarget &t); virtual void WriteProjectDepends(std::ostream& fout, const char* name, const char* path, - const cmTarget &t); + const cmTarget &t, const char* extra_depend); virtual void WriteProjectConfigurations(std::ostream& fout, const char* name, bool in_all); virtual void WriteSLNFooter(std::ostream& fout); virtual void WriteSLNHeader(std::ostream& fout); -- cgit v1.2.1