#include <fmt/ostream.h> | #include <fmt/ostream.h> | ||||
#include <neo/event.hpp> | #include <neo/event.hpp> | ||||
#include <clocale> | |||||
#include <filesystem> | #include <filesystem> | ||||
#include <iostream> | #include <iostream> | ||||
#include <locale> | #include <locale> |
if (!fs::exists(catch_hpp)) { | if (!fs::exists(catch_hpp)) { | ||||
fs::create_directories(catch_hpp.parent_path()); | fs::create_directories(catch_hpp.parent_path()); | ||||
auto hpp_strm = open(catch_hpp, std::ios::out | std::ios::binary); | auto hpp_strm = open(catch_hpp, std::ios::out | std::ios::binary); | ||||
hpp_strm.write(detail::catch2_embedded_single_header_str, | |||||
std::strlen(detail::catch2_embedded_single_header_str)); | |||||
auto c2_str = detail::catch2_embedded_single_header_str(); | |||||
hpp_strm.write(c2_str.data(), c2_str.size()); | |||||
hpp_strm.close(); | hpp_strm.close(); | ||||
} | } | ||||
ret_lib.include_paths.push_back(test_include_root); | ret_lib.include_paths.push_back(test_include_root); |
} | } | ||||
} | } | ||||
std::optional<prior_compilation> dds::get_prior_compilation(const database& db, path_ref output_path) { | |||||
std::optional<prior_compilation> dds::get_prior_compilation(const database& db, | |||||
path_ref output_path) { | |||||
auto cmd_ = db.command_of(output_path); | auto cmd_ = db.command_of(output_path); | ||||
if (!cmd_) { | if (!cmd_) { | ||||
return {}; | return {}; |
*/ | */ | ||||
struct prior_compilation { | struct prior_compilation { | ||||
std::vector<fs::path> newer_inputs; | std::vector<fs::path> newer_inputs; | ||||
completed_compilation previous_command; | |||||
completed_compilation previous_command; | |||||
}; | }; | ||||
/** | /** |
#pragma once | #pragma once | ||||
#include <string_view> | |||||
namespace dds::detail { | namespace dds::detail { | ||||
extern const char* const catch2_embedded_single_header_str; | |||||
std::string_view catch2_embedded_single_header_str() noexcept; | |||||
} // namespace dds::detail | |||||
} // namespace dds::detail |
int dispatch_main(const options&) noexcept; | int dispatch_main(const options&) noexcept; | ||||
} // namespace dds | |||||
} // namespace dds::cli |
ret._pool = _impl; | ret._pool = _impl; | ||||
if (iter == _impl->_clients.end()) { | if (iter == _impl->_clients.end()) { | ||||
// Nothing for this origin yet | // Nothing for this origin yet | ||||
dds_log(debug, "Opening new connection to {}://{}:{}", origin.protocol, origin.hostname, origin.port); | |||||
dds_log(debug, | |||||
"Opening new connection to {}://{}:{}", | |||||
origin.protocol, | |||||
origin.hostname, | |||||
origin.port); | |||||
auto ptr = std::make_shared<detail::http_client_impl>(origin); | auto ptr = std::make_shared<detail::http_client_impl>(origin); | ||||
ptr->connect(); | ptr->connect(); | ||||
ret._impl = ptr; | ret._impl = ptr; |
return clen; | return clen; | ||||
} | } | ||||
std::optional<std::string_view> http_response_info::header_value(std::string_view key) const noexcept { | |||||
std::optional<std::string_view> | |||||
http_response_info::header_value(std::string_view key) const noexcept { | |||||
auto hdr = headers.find(key); | auto hdr = headers.find(key); | ||||
if (!hdr) { | if (!hdr) { | ||||
return {}; | return {}; |
from pathlib import Path | from pathlib import Path | ||||
import gzip | |||||
ROOT = Path(__file__).absolute().parent.parent | ROOT = Path(__file__).absolute().parent.parent | ||||
c2_header = ROOT / 'res/catch2.hpp' | c2_header = ROOT / 'res/catch2.hpp' | ||||
buf = c2_header.read_bytes() | buf = c2_header.read_bytes() | ||||
compr = gzip.compress(buf, compresslevel=9) | |||||
chars = ', '.join(f"'\\x{b:02x}'" for b in compr) | |||||
chars = ', '.join(f"'\\x{b:02x}'" for b in buf) | |||||
c2_embedded = ROOT / 'src/dds/catch2_embeddead_header.cpp' | |||||
def oct_encode_one(b: int) -> str: | |||||
if b >= 33 and b <= 126: | |||||
c = chr(b) | |||||
if c in ('"', '\\'): | |||||
return '\\' + c | |||||
return c | |||||
else: | |||||
return f'\\{oct(b)[2:]:>03}' | |||||
def oct_encode(b: bytes) -> str: | |||||
return ''.join(oct_encode_one(byt) for byt in b) | |||||
bufs = [] | |||||
while compr: | |||||
head = compr[:2000] | |||||
compr = compr[len(head):] | |||||
octl = oct_encode(head) | |||||
bufs.append(f'"{octl}"_buf') | |||||
bufs_arr = ',\n '.join(bufs) | |||||
c2_embedded = ROOT / 'src/dds/catch2_embedded.generated.cpp' | |||||
c2_embedded.write_text(f''' | c2_embedded.write_text(f''' | ||||
#include "./catch2_embedded.hpp" | #include "./catch2_embedded.hpp" | ||||
#include <neo/gzip_io.hpp> | |||||
#include <neo/string_io.hpp> | |||||
using namespace neo::literals; | |||||
namespace dds::detail {{ | namespace dds::detail {{ | ||||
static const char bytes[] = {{ | |||||
{chars}, '\\x00' | |||||
static const neo::const_buffer catch2_gzip_bufs[] = {{ | |||||
{bufs_arr} | |||||
}}; | }}; | ||||
const char* const catch2_embedded_single_header_str = bytes; | |||||
}} | }} | ||||
''') | |||||
std::string_view dds::detail::catch2_embedded_single_header_str() noexcept {{ | |||||
static const std::string decompressed = [] {{ | |||||
neo::string_dynbuf_io str; | |||||
neo::gzip_decompress(str, catch2_gzip_bufs); | |||||
str.shrink_uncommitted(); | |||||
return std::move(str.string()); | |||||
}}(); | |||||
return decompressed; | |||||
}} | |||||
''') |