From 5fba44cf41312a64b1cc661d4015ba16ac9f2af8 Mon Sep 17 00:00:00 2001 From: Brad King Date: Thu, 12 Jun 2014 10:26:35 -0400 Subject: VS: Move VS-only API out of cmGlobalGenerator Move the IsDependedOn method to cmGlobalVisualStudio7Generator since that is the only caller. --- Source/cmGlobalGenerator.cxx | 30 ------------------------------ Source/cmGlobalGenerator.h | 3 --- Source/cmGlobalVisualStudio7Generator.cxx | 31 +++++++++++++++++++++++++++++++ Source/cmGlobalVisualStudio7Generator.h | 1 + 4 files changed, 32 insertions(+), 33 deletions(-) diff --git a/Source/cmGlobalGenerator.cxx b/Source/cmGlobalGenerator.cxx index 6c8be72..36932aa 100644 --- a/Source/cmGlobalGenerator.cxx +++ b/Source/cmGlobalGenerator.cxx @@ -1045,36 +1045,6 @@ void cmGlobalGenerator::ClearEnabledLanguages() this->LanguageEnabled.clear(); } -bool cmGlobalGenerator::IsDependedOn(const std::string& project, - cmTarget const* targetIn) -{ - // Get all local gens for this project - std::map >::const_iterator it = - this->ProjectMap.find(project); - if (it == this->ProjectMap.end()) - { - return false; - } - - // loop over local gens and get the targets for each one - for(std::vector::const_iterator geIt = it->second.begin(); - geIt != it->second.end(); ++geIt) - { - cmTargets const& targets = (*geIt)->GetMakefile()->GetTargets(); - for (cmTargets::const_iterator l = targets.begin(); - l != targets.end(); l++) - { - cmTarget const& target = l->second; - TargetDependSet const& tgtdeps = this->GetTargetDirectDepends(target); - if(tgtdeps.count(targetIn)) - { - return true; - } - } - } - return false; -} - void cmGlobalGenerator::Configure() { this->FirstTimeProgress = 0.0f; diff --git a/Source/cmGlobalGenerator.h b/Source/cmGlobalGenerator.h index 67bd378..6403429 100644 --- a/Source/cmGlobalGenerator.h +++ b/Source/cmGlobalGenerator.h @@ -225,9 +225,6 @@ public: that is a framework. */ bool NameResolvesToFramework(const std::string& libname) const; - /** If check to see if the target is linked to by any other - target in the project */ - bool IsDependedOn(const std::string& project, cmTarget const* target); ///! Find a local generator by its startdirectory cmLocalGenerator* FindLocalGenerator(const std::string& start_dir) const; diff --git a/Source/cmGlobalVisualStudio7Generator.cxx b/Source/cmGlobalVisualStudio7Generator.cxx index b581147..41a6371 100644 --- a/Source/cmGlobalVisualStudio7Generator.cxx +++ b/Source/cmGlobalVisualStudio7Generator.cxx @@ -1010,6 +1010,37 @@ cmGlobalVisualStudio7Generator::IsPartOfDefaultBuild( return activeConfigs; } +bool +cmGlobalVisualStudio7Generator::IsDependedOn(const std::string& project, + cmTarget const* targetIn) +{ + // Get all local gens for this project + std::map >::const_iterator it = + this->ProjectMap.find(project); + if (it == this->ProjectMap.end()) + { + return false; + } + + // loop over local gens and get the targets for each one + for(std::vector::const_iterator geIt = it->second.begin(); + geIt != it->second.end(); ++geIt) + { + cmTargets const& targets = (*geIt)->GetMakefile()->GetTargets(); + for (cmTargets::const_iterator l = targets.begin(); + l != targets.end(); l++) + { + cmTarget const& target = l->second; + TargetDependSet const& tgtdeps = this->GetTargetDirectDepends(target); + if(tgtdeps.count(targetIn)) + { + return true; + } + } + } + return false; +} + //---------------------------------------------------------------------------- static cmVS7FlagTable cmVS7ExtraFlagTable[] = { diff --git a/Source/cmGlobalVisualStudio7Generator.h b/Source/cmGlobalVisualStudio7Generator.h index 1dc709d..399ec9f 100644 --- a/Source/cmGlobalVisualStudio7Generator.h +++ b/Source/cmGlobalVisualStudio7Generator.h @@ -166,6 +166,7 @@ protected: std::set IsPartOfDefaultBuild(const std::string& project, cmTarget const* target); + bool IsDependedOn(const std::string& project, cmTarget const* target); std::vector Configurations; std::map GUIDMap; -- cgit v0.12 From 790e167718bff5660e9023f627df0413504fb207 Mon Sep 17 00:00:00 2001 From: Brad King Date: Thu, 12 Jun 2014 10:36:10 -0400 Subject: VS: Fix subproject .sln dependencies on custom targets Each project listed in a .sln must be marked (or not) as part of the "default build" for each configuration. For targets created by the add_custom_target() command we add them to the default build if they are not excluded in some way or if another target depends on them. In the top-level .sln, a custom target is excluded if it is not created with the ALL option to add_custom_target. In subdirectory .sln files, a target may also be excluded if it is not within the directory and is brought into the solution only due to a dependency from another target in the solution. Fix the "IsPartOfDefaultBuild" and "IsDependedOn" methods to check every target to be included in the .sln for a dependency on the custom target. Otherwise transitive dependencies through targets not in the current subdirectory will not be considered. Extend the SubProject test with a custom target to cover this case. Reported-by: William Deurwaarder Reported-by: Dirk Steenpass --- Source/cmGlobalVisualStudio7Generator.cxx | 39 ++++++++++--------------------- Source/cmGlobalVisualStudio7Generator.h | 8 ++++--- Tests/SubProject/CMakeLists.txt | 11 ++++++++- Tests/SubProject/bar.cxx | 5 +--- Tests/SubProject/gen.cxx.in | 4 ++++ 5 files changed, 32 insertions(+), 35 deletions(-) create mode 100644 Tests/SubProject/gen.cxx.in diff --git a/Source/cmGlobalVisualStudio7Generator.cxx b/Source/cmGlobalVisualStudio7Generator.cxx index 41a6371..08f685e 100644 --- a/Source/cmGlobalVisualStudio7Generator.cxx +++ b/Source/cmGlobalVisualStudio7Generator.cxx @@ -392,8 +392,7 @@ void cmGlobalVisualStudio7Generator::WriteTargetConfigurations( else { const std::set& configsPartOfDefaultBuild = - this->IsPartOfDefaultBuild(root->GetMakefile()->GetProjectName(), - target); + this->IsPartOfDefaultBuild(projectTargets, target); const char *vcprojName = target->GetProperty("GENERATOR_FILE_NAME"); if (vcprojName) @@ -981,8 +980,7 @@ cmGlobalVisualStudio7Generator std::set cmGlobalVisualStudio7Generator::IsPartOfDefaultBuild( - const std::string& project, - cmTarget const* target) + OrderedTargetDependSet const& projectTargets, cmTarget const* target) { std::set activeConfigs; // if it is a utilitiy target then only make it part of the @@ -992,7 +990,7 @@ cmGlobalVisualStudio7Generator::IsPartOfDefaultBuild( { return activeConfigs; } - if(type == cmTarget::UTILITY && !this->IsDependedOn(project, target)) + if(type == cmTarget::UTILITY && !this->IsDependedOn(projectTargets, target)) { return activeConfigs; } @@ -1011,31 +1009,18 @@ cmGlobalVisualStudio7Generator::IsPartOfDefaultBuild( } bool -cmGlobalVisualStudio7Generator::IsDependedOn(const std::string& project, - cmTarget const* targetIn) +cmGlobalVisualStudio7Generator +::IsDependedOn(OrderedTargetDependSet const& projectTargets, + cmTarget const* targetIn) { - // Get all local gens for this project - std::map >::const_iterator it = - this->ProjectMap.find(project); - if (it == this->ProjectMap.end()) - { - return false; - } - - // loop over local gens and get the targets for each one - for(std::vector::const_iterator geIt = it->second.begin(); - geIt != it->second.end(); ++geIt) + for (OrderedTargetDependSet::const_iterator l = projectTargets.begin(); + l != projectTargets.end(); ++l) { - cmTargets const& targets = (*geIt)->GetMakefile()->GetTargets(); - for (cmTargets::const_iterator l = targets.begin(); - l != targets.end(); l++) + cmTarget const& target = **l; + TargetDependSet const& tgtdeps = this->GetTargetDirectDepends(target); + if(tgtdeps.count(targetIn)) { - cmTarget const& target = l->second; - TargetDependSet const& tgtdeps = this->GetTargetDirectDepends(target); - if(tgtdeps.count(targetIn)) - { - return true; - } + return true; } } return false; diff --git a/Source/cmGlobalVisualStudio7Generator.h b/Source/cmGlobalVisualStudio7Generator.h index 399ec9f..7f55381 100644 --- a/Source/cmGlobalVisualStudio7Generator.h +++ b/Source/cmGlobalVisualStudio7Generator.h @@ -164,9 +164,11 @@ protected: std::string ConvertToSolutionPath(const char* path); - std::set IsPartOfDefaultBuild(const std::string& project, - cmTarget const* target); - bool IsDependedOn(const std::string& project, cmTarget const* target); + std::set + IsPartOfDefaultBuild(OrderedTargetDependSet const& projectTargets, + cmTarget const* target); + bool IsDependedOn(OrderedTargetDependSet const& projectTargets, + cmTarget const* target); std::vector Configurations; std::map GUIDMap; diff --git a/Tests/SubProject/CMakeLists.txt b/Tests/SubProject/CMakeLists.txt index b669621..b2bada9 100644 --- a/Tests/SubProject/CMakeLists.txt +++ b/Tests/SubProject/CMakeLists.txt @@ -1,6 +1,15 @@ cmake_minimum_required (VERSION 2.6) project(SubProject) -message("${CMAKE_IMPORT_LIBRARY_SUFFIX}") +file(REMOVE ${CMAKE_CURRENT_BINARY_DIR}/gen.cxx) # require generation +add_custom_command( + OUTPUT gen.cxx + DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/gen.cxx.in + COMMAND ${CMAKE_COMMAND} -E copy + ${CMAKE_CURRENT_SOURCE_DIR}/gen.cxx.in gen.cxx + ) +add_custom_target(gen DEPENDS gen.cxx) add_library(bar bar.cxx) +target_include_directories(bar PRIVATE ${CMAKE_CURRENT_BINARY_DIR}) +add_dependencies(bar gen) add_executable(car car.cxx) add_subdirectory(foo) diff --git a/Tests/SubProject/bar.cxx b/Tests/SubProject/bar.cxx index c3f6a18..c8b8743 100644 --- a/Tests/SubProject/bar.cxx +++ b/Tests/SubProject/bar.cxx @@ -1,4 +1 @@ -int bar() -{ - return 10; -} +#include "gen.cxx" diff --git a/Tests/SubProject/gen.cxx.in b/Tests/SubProject/gen.cxx.in new file mode 100644 index 0000000..c3f6a18 --- /dev/null +++ b/Tests/SubProject/gen.cxx.in @@ -0,0 +1,4 @@ +int bar() +{ + return 10; +} -- cgit v0.12 From cb67509b06b9acdc3e23ea7dfc13257e9e8d1b20 Mon Sep 17 00:00:00 2001 From: Brad King Date: Fri, 13 Jun 2014 08:57:34 -0400 Subject: VS: Remove unused parameter of WriteTargetConfigurations The cmGlobalVisualStudio7Generator::WriteTargetConfigurations 'root' parameter is no longer used, so remove it. --- Source/cmGlobalVisualStudio71Generator.cxx | 2 +- Source/cmGlobalVisualStudio7Generator.cxx | 3 +-- Source/cmGlobalVisualStudio7Generator.h | 1 - 3 files changed, 2 insertions(+), 4 deletions(-) diff --git a/Source/cmGlobalVisualStudio71Generator.cxx b/Source/cmGlobalVisualStudio71Generator.cxx index 4bea5ac..a67a649 100644 --- a/Source/cmGlobalVisualStudio71Generator.cxx +++ b/Source/cmGlobalVisualStudio71Generator.cxx @@ -118,7 +118,7 @@ void cmGlobalVisualStudio71Generator fout << "\tGlobalSection(" << this->ProjectConfigurationSectionName << ") = postSolution\n"; // Write out the configurations for all the targets in the project - this->WriteTargetConfigurations(fout, root, orderedProjectTargets); + this->WriteTargetConfigurations(fout, orderedProjectTargets); fout << "\tEndGlobalSection\n"; if (useFolderProperty) diff --git a/Source/cmGlobalVisualStudio7Generator.cxx b/Source/cmGlobalVisualStudio7Generator.cxx index 08f685e..a918d1d 100644 --- a/Source/cmGlobalVisualStudio7Generator.cxx +++ b/Source/cmGlobalVisualStudio7Generator.cxx @@ -366,7 +366,6 @@ void cmGlobalVisualStudio7Generator::OutputSLNFile() void cmGlobalVisualStudio7Generator::WriteTargetConfigurations( std::ostream& fout, - cmLocalGenerator* root, OrderedTargetDependSet const& projectTargets) { // loop over again and write out configurations for each target @@ -578,7 +577,7 @@ void cmGlobalVisualStudio7Generator // Write out the configurations for all the targets in the project fout << "\tGlobalSection(ProjectConfiguration) = postSolution\n"; - this->WriteTargetConfigurations(fout, root, orderedProjectTargets); + this->WriteTargetConfigurations(fout, orderedProjectTargets); fout << "\tEndGlobalSection\n"; // Write out global sections diff --git a/Source/cmGlobalVisualStudio7Generator.h b/Source/cmGlobalVisualStudio7Generator.h index 7f55381..291d297 100644 --- a/Source/cmGlobalVisualStudio7Generator.h +++ b/Source/cmGlobalVisualStudio7Generator.h @@ -150,7 +150,6 @@ protected: OrderedTargetDependSet const& projectTargets); virtual void WriteTargetConfigurations( std::ostream& fout, - cmLocalGenerator* root, OrderedTargetDependSet const& projectTargets); void GenerateConfigurations(cmMakefile* mf); -- cgit v0.12