diff options
author | Brad King <brad.king@kitware.com> | 2014-06-12 14:36:10 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2014-06-12 15:14:06 (GMT) |
commit | 790e167718bff5660e9023f627df0413504fb207 (patch) | |
tree | 77b8523cd5123ba95064aa3448a74adb00846234 /Source/cmGlobalVisualStudio7Generator.cxx | |
parent | 5fba44cf41312a64b1cc661d4015ba16ac9f2af8 (diff) | |
download | CMake-790e167718bff5660e9023f627df0413504fb207.zip CMake-790e167718bff5660e9023f627df0413504fb207.tar.gz CMake-790e167718bff5660e9023f627df0413504fb207.tar.bz2 |
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 <William.Deurwaarder@tomtom.com>
Reported-by: Dirk Steenpass <dirk.steenpass@gmail.com>
Diffstat (limited to 'Source/cmGlobalVisualStudio7Generator.cxx')
-rw-r--r-- | Source/cmGlobalVisualStudio7Generator.cxx | 39 |
1 files changed, 12 insertions, 27 deletions
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<std::string>& 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<std::string> cmGlobalVisualStudio7Generator::IsPartOfDefaultBuild( - const std::string& project, - cmTarget const* target) + OrderedTargetDependSet const& projectTargets, cmTarget const* target) { std::set<std::string> 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<std::string, std::vector<cmLocalGenerator*> >::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<cmLocalGenerator*>::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; |