#include "./build.hpp" | #include "./build.hpp" | ||||
#include <dds/build/plan/compile_file.hpp> | |||||
#include <dds/compdb.hpp> | #include <dds/compdb.hpp> | ||||
#include <dds/logging.hpp> | #include <dds/logging.hpp> | ||||
#include <dds/proc.hpp> | |||||
#include <dds/source.hpp> | |||||
#include <dds/toolchain/toolchain.hpp> | |||||
#include <dds/usage_reqs.hpp> | #include <dds/usage_reqs.hpp> | ||||
#include <dds/util/algo.hpp> | #include <dds/util/algo.hpp> | ||||
#include <dds/util/string.hpp> | |||||
#include <libman/index.hpp> | #include <libman/index.hpp> | ||||
#include <libman/parse.hpp> | #include <libman/parse.hpp> | ||||
#include <range/v3/range/conversion.hpp> | |||||
#include <range/v3/view/drop.hpp> | |||||
#include <range/v3/view/filter.hpp> | |||||
#include <range/v3/view/transform.hpp> | |||||
#include <algorithm> | |||||
#include <chrono> | |||||
#include <iomanip> | |||||
#include <iostream> | |||||
#include <mutex> | |||||
#include <sstream> | |||||
#include <stdexcept> | #include <stdexcept> | ||||
#include <thread> | |||||
using namespace dds; | using namespace dds; | ||||
using namespace ranges; | |||||
using namespace ranges::views; | |||||
namespace { | namespace { | ||||
struct archive_failure : std::runtime_error { | struct archive_failure : std::runtime_error { |
#include <dds/build/params.hpp> | #include <dds/build/params.hpp> | ||||
#include <dds/package_manifest.hpp> | #include <dds/package_manifest.hpp> | ||||
#include <dds/util/fs.hpp> | |||||
#include <optional> | |||||
namespace dds { | namespace dds { | ||||
#include "./archive.hpp" |
#pragma once | |||||
#include <dds/toolchain/toolchain.hpp> | |||||
#include <dds/util/fs.hpp> | |||||
#include <vector> | |||||
namespace dds { | |||||
struct archive_rules { | |||||
std::vector<fs::path> objects; | |||||
fs::path out; | |||||
void create_archive(const toolchain& tc) const; | |||||
}; | |||||
} // namespace dds |
#pragma once | |||||
#include <dds/util/fs.hpp> | |||||
#include <vector> | |||||
namespace dds { | |||||
class link_executable_rules { | |||||
std::vector<fs::path> inputs; | |||||
fs::path output; | |||||
}; | |||||
} // namespace dds |
#include <spdlog/spdlog.h> | #include <spdlog/spdlog.h> | ||||
#include <atomic> | |||||
#include <mutex> | |||||
#include <thread> | |||||
#include <string> | |||||
#include <vector> | #include <vector> | ||||
using namespace dds; | using namespace dds; |
#include <spdlog/spdlog.h> | #include <spdlog/spdlog.h> | ||||
#include <algorithm> | #include <algorithm> | ||||
#include <cassert> | |||||
#include <chrono> | #include <chrono> | ||||
using namespace dds; | using namespace dds; |
#include <dds/build/plan/compile_file.hpp> | #include <dds/build/plan/compile_file.hpp> | ||||
#include <dds/util/fs.hpp> | #include <dds/util/fs.hpp> | ||||
#include <set> | |||||
#include <tuple> | |||||
#include <string> | |||||
#include <vector> | #include <vector> | ||||
namespace dds { | namespace dds { |
#include "./full.hpp" | #include "./full.hpp" | ||||
#include <dds/build/iter_compilations.hpp> | #include <dds/build/iter_compilations.hpp> | ||||
#include <dds/proc.hpp> | |||||
#include <range/v3/action/join.hpp> | |||||
#include <range/v3/view/concat.hpp> | #include <range/v3/view/concat.hpp> | ||||
#include <range/v3/view/filter.hpp> | #include <range/v3/view/filter.hpp> | ||||
#include <range/v3/view/join.hpp> | #include <range/v3/view/join.hpp> | ||||
#include <range/v3/view/repeat_n.hpp> | |||||
#include <range/v3/view/transform.hpp> | #include <range/v3/view/transform.hpp> | ||||
#include <range/v3/view/zip.hpp> | |||||
#include <spdlog/spdlog.h> | #include <spdlog/spdlog.h> | ||||
#include <chrono> | |||||
#include <mutex> | #include <mutex> | ||||
#include <thread> | #include <thread> | ||||
} | } | ||||
void build_plan::link_all(const build_env& env, int njobs) const { | void build_plan::link_all(const build_env& env, int njobs) const { | ||||
std::vector<std::pair<std::reference_wrapper<const library_plan>, std::reference_wrapper<const link_executable_plan>>> executables; | |||||
std::vector<std::pair<std::reference_wrapper<const library_plan>, | |||||
std::reference_wrapper<const link_executable_plan>>> | |||||
executables; | |||||
for (auto&& lib : iter_libraries(*this)) { | for (auto&& lib : iter_libraries(*this)) { | ||||
for (auto&& exe : lib.executables()) { | for (auto&& exe : lib.executables()) { |
#pragma once | #pragma once | ||||
#include <dds/build/params.hpp> | |||||
#include <dds/build/plan/archive.hpp> | |||||
#include <dds/build/plan/compile_file.hpp> | |||||
#include <dds/build/plan/exe.hpp> | #include <dds/build/plan/exe.hpp> | ||||
#include <dds/build/plan/library.hpp> | |||||
#include <dds/build/plan/package.hpp> | #include <dds/build/plan/package.hpp> | ||||
#include <dds/library.hpp> | |||||
namespace dds { | namespace dds { | ||||
#include <range/v3/view/concat.hpp> | #include <range/v3/view/concat.hpp> | ||||
#include <range/v3/view/filter.hpp> | #include <range/v3/view/filter.hpp> | ||||
#include <spdlog/spdlog.h> | |||||
using namespace dds; | using namespace dds; | ||||
#include <dds/usage_reqs.hpp> | #include <dds/usage_reqs.hpp> | ||||
#include <dds/util/fs.hpp> | #include <dds/util/fs.hpp> | ||||
#include <map> | |||||
#include <optional> | #include <optional> | ||||
#include <string> | #include <string> | ||||
#include <vector> | #include <vector> |
#include <dds/build/plan/library.hpp> | #include <dds/build/plan/library.hpp> | ||||
#include <map> | |||||
#include <string> | #include <string> | ||||
#include <vector> | |||||
namespace dds { | namespace dds { | ||||
#include <nlohmann/json.hpp> | #include <nlohmann/json.hpp> | ||||
#include <range/v3/view/join.hpp> | |||||
#include <range/v3/view/transform.hpp> | |||||
using namespace dds; | using namespace dds; | ||||
void dds::generate_compdb(const build_plan& plan, build_env_ref env) { | void dds::generate_compdb(const build_plan& plan, build_env_ref env) { |
#include <range/v3/view/group_by.hpp> | #include <range/v3/view/group_by.hpp> | ||||
#include <range/v3/view/transform.hpp> | #include <range/v3/view/transform.hpp> | ||||
#include <libman/parse.hpp> | |||||
#include <args.hxx> | #include <args.hxx> | ||||
#include <filesystem> | #include <filesystem> | ||||
*/ | */ | ||||
int main(int argc, char** argv) { | int main(int argc, char** argv) { | ||||
#if DDS_DEBUG | |||||
#if DDS_DEBUG | |||||
spdlog::set_level(spdlog::level::debug); | spdlog::set_level(spdlog::level::debug); | ||||
#endif | |||||
#endif | |||||
spdlog::set_pattern("[%H:%M:%S] [%^%-5l%$] %v"); | spdlog::set_pattern("[%H:%M:%S] [%^%-5l%$] %v"); | ||||
args::ArgumentParser parser("DDS - The drop-dead-simple library manager"); | args::ArgumentParser parser("DDS - The drop-dead-simple library manager"); | ||||
#include <dds/repo/repo.hpp> | #include <dds/repo/repo.hpp> | ||||
#include <dds/sdist.hpp> | #include <dds/sdist.hpp> | ||||
#include <dds/usage_reqs.hpp> | #include <dds/usage_reqs.hpp> | ||||
#include <dds/util/algo.hpp> | |||||
#include <dds/util/string.hpp> | #include <dds/util/string.hpp> | ||||
#include <libman/index.hpp> | #include <libman/index.hpp> | ||||
#include <libman/parse.hpp> | #include <libman/parse.hpp> | ||||
#include <cctype> | #include <cctype> | ||||
#include <map> | #include <map> | ||||
#include <set> | |||||
using namespace dds; | using namespace dds; | ||||
#include <dds/library_manifest.hpp> | #include <dds/library_manifest.hpp> | ||||
#include <dds/source.hpp> | #include <dds/source.hpp> | ||||
#include <optional> | |||||
#include <string> | #include <string> | ||||
namespace dds { | namespace dds { |
#include <dds/util/string.hpp> | #include <dds/util/string.hpp> | ||||
#include <algorithm> | #include <algorithm> | ||||
#include <array> | |||||
#include <cctype> | #include <cctype> | ||||
using namespace dds; | using namespace dds; |
#include <spdlog/spdlog.h> | #include <spdlog/spdlog.h> | ||||
#include <range/v3/action/join.hpp> | |||||
#include <range/v3/range/conversion.hpp> | |||||
#include <range/v3/view/filter.hpp> | #include <range/v3/view/filter.hpp> | ||||
#include <range/v3/view/join.hpp> | |||||
#include <range/v3/view/transform.hpp> | #include <range/v3/view/transform.hpp> | ||||
using namespace dds; | using namespace dds; |
#include <dds/util/flock.hpp> | #include <dds/util/flock.hpp> | ||||
#include <dds/util/fs.hpp> | #include <dds/util/fs.hpp> | ||||
#include <cassert> | |||||
#include <functional> | #include <functional> | ||||
#include <optional> | #include <optional> | ||||
#include <shared_mutex> | #include <shared_mutex> |
#include <browns/output.hpp> | #include <browns/output.hpp> | ||||
#include <neo/buffer.hpp> | #include <neo/buffer.hpp> | ||||
#include <range/v3/algorithm/for_each.hpp> | |||||
#include <range/v3/algorithm/sort.hpp> | #include <range/v3/algorithm/sort.hpp> | ||||
#include <range/v3/view/filter.hpp> | #include <range/v3/view/filter.hpp> | ||||
#include <dds/util/string.hpp> | #include <dds/util/string.hpp> | ||||
#include <spdlog/spdlog.h> | |||||
#include <algorithm> | #include <algorithm> | ||||
#include <optional> | #include <optional> | ||||
#include <vector> | #include <vector> |
#include <dds/util/fs.hpp> | #include <dds/util/fs.hpp> | ||||
#include <optional> | #include <optional> | ||||
#include <vector> | |||||
namespace dds { | namespace dds { | ||||
#include <optional> | #include <optional> | ||||
#include <string> | #include <string> | ||||
#include <string_view> | |||||
#include <vector> | #include <vector> | ||||
namespace dds { | namespace dds { |
void validate_reader(T&&, std::string_view, ...) {} | void validate_reader(T&&, std::string_view, ...) {} | ||||
template <typename... Items> | template <typename... Items> | ||||
auto read(std::string_view context[[maybe_unused]], const pair_list& pairs, Items... is) { | |||||
auto read(std::string_view context [[maybe_unused]], const pair_list& pairs, Items... is) { | |||||
std::vector<pair> bad_pairs; | std::vector<pair> bad_pairs; | ||||
for (auto [key, value] : pairs.items()) { | for (auto [key, value] : pairs.items()) { | ||||
auto did_read = (is(context, key, value) || ...); | auto did_read = (is(context, key, value) || ...); |