in include/poac/core/resolver.hpp [367:399]
Resolved resolve(const Deps& deps) {
Deps poac_deps;
Deps others_deps;
// Divide poac and others only when src is poac, solve dependency.
for (const auto& dep : deps) {
if (dep.source == "poac") {
poac_deps.emplace_back(dep);
}
else {
others_deps.emplace_back(dep);
}
}
// 木の末端からpush_backされていくため,依存が無いものが一番最初の要素になる.
// つまり,配列のループのそのままの順番でインストールやビルドを行うと不具合は起きない
const Resolved activated_deps = activate_deps_loop(poac_deps);
Resolved resolved_deps;
// 全ての依存関係が一つのパッケージ,一つのバージョンに依存する時はbacktrackが不要
if (duplicate_loose(activated_deps.activated)) {
resolved_deps = backtrack_loop(activated_deps.activated);
}
else {
resolved_deps = activated_to_backtracked(activated_deps);
}
// Merge others_deps into resolved_deps
for (const auto& dep : others_deps) {
resolved_deps.activated.push_back({ {dep.name}, {dep.interval}, {dep.source}, {} });
resolved_deps.backtracked[dep.name] = { {dep.interval}, {dep.source} };
}
return resolved_deps;
}