} | } | ||||
} | } | ||||
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 { | ||||