in include/poac/subcmd/build.hpp [198:241]
void build_deps(const YAML::Node& node, const bool verbose) {
namespace fs = boost::filesystem;
namespace exception = core::exception;
namespace lock = core::lock;
namespace naming = core::naming;
namespace yaml = io::file::yaml;
if (!yaml::get(node, "deps")) {
return; // depsが存在しない
}
// TODO: ビルド順序
if (const auto locked_deps = lock::load_ignore_timestamp()) {
for (const auto& [name, dep] : (*locked_deps).backtracked) {
const std::string current_package_name = naming::to_current(dep.source, name, dep.version);
const auto deps_path = fs::current_path() / "deps" / current_package_name;
if (fs::exists(deps_path)) {
// IF dep.source == "github"
// ./deps/pack/poac.yml は存在しないと見做す (TODO: poac projectなのにgithubをsourceとしている場合がある)
// 現状は,./poac.ymlから,buildキーを読み込む -> 無いなら header-onlyと見做す.
// IF dep.source == "poac"
// プロジェクトルートの方に,buildキーがあるならそちらを
// -> 無いなら,提供者->deps_pathの方を選ぶ
// -> 無いなら,header-onlyと見做す.
if (!compile_deps(node, name, deps_path, verbose) && dep.source == "poac") {
const auto deps_config_node = yaml::load_config_by_dir(deps_path);
compile_deps(deps_config_node, name, deps_path, verbose);
}
}
else {
throw exception::error(
name + " is not installed.\n"
"Please build after running `poac install`");
}
}
}
else {
throw exception::error(
"Could not load poac.lock.\n"
"Please build after running `poac install`");
}
}