void build_deps()

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`");
            }
        }