| } | } | ||||
| } | } | ||||
| void add_deps_to_build(build_plan& plan, | |||||
| usage_requirement_map& ureqs, | |||||
| const build_params& params, | |||||
| build_env_ref env) { | |||||
| void add_deps_to_build(build_plan& plan, | |||||
| usage_requirement_map& ureqs, | |||||
| const build_params& params, | |||||
| build_env_ref env) { | |||||
| auto sd_idx = params.dep_sdists // | auto sd_idx = params.dep_sdists // | ||||
| | ranges::views::transform([](const auto& sd) { | | ranges::views::transform([](const auto& sd) { | ||||
| return std::pair(sd.manifest.pkg_id.name, std::cref(sd)); | return std::pair(sd.manifest.pkg_id.name, std::cref(sd)); |
| temporary_sdist get_package_sdist(const package_info&); | temporary_sdist get_package_sdist(const package_info&); | ||||
| } // namespace dds | |||||
| } // namespace dds |
| for (const compile_file_plan& cf : iter_compilations(plan)) { | for (const compile_file_plan& cf : iter_compilations(plan)) { | ||||
| auto cmd_info = cf.generate_compile_command(env); | auto cmd_info = cf.generate_compile_command(env); | ||||
| auto entry = nlohmann::json::object({ | |||||
| auto entry = nlohmann::json::object({ | |||||
| {"directory", env.output_root.string()}, | {"directory", env.output_root.string()}, | ||||
| {"arguments", cmd_info.command}, | {"arguments", cmd_info.command}, | ||||
| {"file", cf.source_path().string()}, | {"file", cf.source_path().string()}, |
| #include <range/v3/range/conversion.hpp> | #include <range/v3/range/conversion.hpp> | ||||
| #include <range/v3/view/transform.hpp> | #include <range/v3/view/transform.hpp> | ||||
| #include <spdlog/spdlog.h> | |||||
| #include <spdlog/fmt/ostr.h> | #include <spdlog/fmt/ostr.h> | ||||
| #include <spdlog/spdlog.h> | |||||
| #include <cctype> | #include <cctype> | ||||
| #include <map> | #include <map> |
| #ifdef _WIN32 | #ifdef _WIN32 | ||||
| #include "./proc.hpp" | #include "./proc.hpp" | ||||
| #include <wil/resource.h> | |||||
| #include <spdlog/spdlog.h> | #include <spdlog/spdlog.h> | ||||
| #include <wil/resource.h> | |||||
| #include <windows.h> | #include <windows.h> | ||||
| } | } | ||||
| std::vector<package_id> repository::solve(const std::vector<dependency>& deps, | std::vector<package_id> repository::solve(const std::vector<dependency>& deps, | ||||
| const catalog& ctlg) const { | |||||
| return dds::solve(deps, | |||||
| [&](std::string_view name) -> std::vector<package_id> { | |||||
| auto mine = ranges::views::all(_sdists) // | |||||
| | ranges::views::filter([&](const sdist& sd) { | |||||
| return sd.manifest.pkg_id.name == name; | |||||
| }) | |||||
| | ranges::views::transform( | |||||
| [](const sdist& sd) { return sd.manifest.pkg_id; }); | |||||
| auto avail = ctlg.by_name(name); | |||||
| auto all = ranges::views::concat(mine, avail) | ranges::to_vector; | |||||
| ranges::sort(all, std::less<>{}); | |||||
| ranges::unique(all, std::less<>{}); | |||||
| return all; | |||||
| }, | |||||
| [&](const package_id& pkg_id) { | |||||
| auto found = find(pkg_id); | |||||
| if (found) { | |||||
| return found->manifest.dependencies; | |||||
| } | |||||
| return ctlg.dependencies_of(pkg_id); | |||||
| }); | |||||
| const catalog& ctlg) const { | |||||
| return dds::solve( | |||||
| deps, | |||||
| [&](std::string_view name) -> std::vector<package_id> { | |||||
| auto mine = ranges::views::all(_sdists) // | |||||
| | ranges::views::filter( | |||||
| [&](const sdist& sd) { return sd.manifest.pkg_id.name == name; }) | |||||
| | ranges::views::transform([](const sdist& sd) { return sd.manifest.pkg_id; }); | |||||
| auto avail = ctlg.by_name(name); | |||||
| auto all = ranges::views::concat(mine, avail) | ranges::to_vector; | |||||
| ranges::sort(all, std::less<>{}); | |||||
| ranges::unique(all, std::less<>{}); | |||||
| return all; | |||||
| }, | |||||
| [&](const package_id& pkg_id) { | |||||
| auto found = find(pkg_id); | |||||
| if (found) { | |||||
| return found->manifest.dependencies; | |||||
| } | |||||
| return ctlg.dependencies_of(pkg_id); | |||||
| }); | |||||
| } | } |
| #pragma once | #pragma once | ||||
| #include <dds/catalog/catalog.hpp> | |||||
| #include <dds/sdist.hpp> | #include <dds/sdist.hpp> | ||||
| #include <dds/util/flock.hpp> | #include <dds/util/flock.hpp> | ||||
| #include <dds/catalog/catalog.hpp> | |||||
| #include <dds/util/fs.hpp> | #include <dds/util/fs.hpp> | ||||
| #include <functional> | #include <functional> |
| } | } | ||||
| TEST_CASE("Generating toolchain commands") { | TEST_CASE("Generating toolchain commands") { | ||||
| check_tc_compile("Compiler-ID: GNU", | |||||
| "g++ -fPIC -fdiagnostics-color -pthread -MD -MF foo.o.d -MT foo.o -c foo.cpp -ofoo.o", | |||||
| "g++ -fPIC -fdiagnostics-color -pthread -Wall -Wextra -Wpedantic -Wconversion " | |||||
| "-MD -MF foo.o.d -MT foo.o -c foo.cpp -ofoo.o", | |||||
| "ar rcs stuff.a foo.o bar.o", | |||||
| "g++ -fPIC -fdiagnostics-color foo.o bar.a -pthread -lstdc++fs -omeow.exe"); | |||||
| check_tc_compile( | |||||
| "Compiler-ID: GNU", | |||||
| "g++ -fPIC -fdiagnostics-color -pthread -MD -MF foo.o.d -MT foo.o -c foo.cpp -ofoo.o", | |||||
| "g++ -fPIC -fdiagnostics-color -pthread -Wall -Wextra -Wpedantic -Wconversion " | |||||
| "-MD -MF foo.o.d -MT foo.o -c foo.cpp -ofoo.o", | |||||
| "ar rcs stuff.a foo.o bar.o", | |||||
| "g++ -fPIC -fdiagnostics-color foo.o bar.a -pthread -lstdc++fs -omeow.exe"); | |||||
| check_tc_compile( | check_tc_compile( | ||||
| "Compiler-ID: GNU\nDebug: True", | "Compiler-ID: GNU\nDebug: True", |
| return replace(_def_template, "<DEF>", s); | return replace(_def_template, "<DEF>", s); | ||||
| } | } | ||||
| compile_command_info toolchain::create_compile_command(const compile_file_spec& spec) const | |||||
| noexcept { | |||||
| compile_command_info | |||||
| toolchain::create_compile_command(const compile_file_spec& spec) const noexcept { | |||||
| vector<string> flags; | vector<string> flags; | ||||
| using namespace std::literals; | using namespace std::literals; |
| #pragma once | #pragma once | ||||
| #include <algorithm> | #include <algorithm> | ||||
| #include <functional> | |||||
| #include <initializer_list> | #include <initializer_list> | ||||
| #include <vector> | #include <vector> | ||||
| #include <functional> | |||||
| namespace dds { | namespace dds { | ||||