Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 24 additions & 4 deletions src/vcpkg/dependencies.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1493,13 +1493,19 @@ namespace vcpkg
// We want to batch as many dep_infos as possible, so look ahead in the frame and stack
std::unordered_set<PackageSpec> spec_set = {frame.spec};
for (auto&& d : frame.deps)
{
spec_set.emplace(d.name, d.host ? m_host_triplet : frame.spec.triplet());
}

for (auto&& s : m_resolve_stack)
{
spec_set.insert(s.spec);
for (auto&& d : s.deps)
{
spec_set.emplace(d.name, d.host ? m_host_triplet : s.spec.triplet());
}
}

std::vector<PackageSpec> spec_vec(spec_set.begin(), spec_set.end());
m_var_provider.load_dep_info_vars(spec_vec, m_host_triplet);
return m_var_provider.get_dep_info_vars(frame.spec).value_or_exit(VCPKG_LINE_INFO);
Expand All @@ -1511,6 +1517,7 @@ namespace vcpkg
{
for (auto&& dep : frame.deps)
{
// duplicate is_empty check avoids possibly needless batch_load_vars call
if (!dep.platform.is_empty() && !dep.platform.evaluate(batch_load_vars(frame))) continue;

PackageSpec dep_spec(dep.name, dep.host ? m_host_triplet : frame.spec.triplet());
Expand Down Expand Up @@ -1546,7 +1553,11 @@ namespace vcpkg
// apply selected features
for (auto&& f : dep.features)
{
if (f.name == FeatureNameDefault) abort();
if (f.name == FeatureNameDefault)
{
Checks::unreachable(VCPKG_LINE_INFO);
}

if (evaluate(frame.spec, f.platform))
{
require_port_feature(*node, f.name, frame.spec.name());
Expand Down Expand Up @@ -1710,6 +1721,11 @@ namespace vcpkg
bool VersionedPackageGraph::evaluate(const PackageSpec& spec,
const PlatformExpression::Expr& platform_expr) const
{
if (platform_expr.is_empty())
{
return true;
}

return platform_expr.evaluate(m_var_provider.get_or_load_dep_info_vars(spec, m_host_triplet));
}

Expand All @@ -1722,7 +1738,7 @@ namespace vcpkg
{
for (auto&& dep : deps)
{
if (!dep.platform.is_empty() && !evaluate(m_toplevel, dep.platform))
if (!evaluate(m_toplevel, dep.platform))
{
continue;
}
Expand Down Expand Up @@ -1809,9 +1825,12 @@ namespace vcpkg
PackageSpec fspec{fdep.name, fdep.host ? m_host_triplet : node.first.triplet()};

// Ignore intra-package dependencies
if (fspec == node.first) continue;
if (fspec == node.first)
{
continue;
}

if (!fdep.platform.is_empty() && !evaluate(node.first, fdep.platform))
if (!evaluate(node.first, fdep.platform))
{
continue;
}
Expand All @@ -1824,6 +1843,7 @@ namespace vcpkg
fspecs.emplace_back(fspec, g.name);
}
}

out_dep_specs.push_back({std::move(fspec), fdep.constraint, fdep.features});
}
Util::sort_unique_erase(fspecs);
Expand Down
Loading