diff options
| author | Stefan Boberg <[email protected]> | 2025-11-07 14:49:13 +0100 |
|---|---|---|
| committer | GitHub Enterprise <[email protected]> | 2025-11-07 14:49:13 +0100 |
| commit | 24e43a913f29ac3b314354e8ce5175f135bcc64f (patch) | |
| tree | ca442937ceeb63461012b33a4576e9835099f106 /thirdparty/ryml/tools/parse_emit.cpp | |
| parent | get oplog attachments (#622) (diff) | |
| download | zen-24e43a913f29ac3b314354e8ce5175f135bcc64f.tar.xz zen-24e43a913f29ac3b314354e8ce5175f135bcc64f.zip | |
switch to xmake for package management (#611)
This change removes our dependency on vcpkg for package management, in favour of bringing some code in-tree in the `thirdparty` folder as well as using the xmake build-in package management feature. For the latter, all the package definitions are maintained in the zen repo itself, in the `repo` folder.
It should now also be easier to build the project as it will no longer depend on having the right version of vcpkg installed, which has been a common problem for new people coming in to the codebase. Now you should only need xmake to build.
* Bumps xmake requirement on github runners to 2.9.9 to resolve an issue where xmake on Windows invokes cmake with `v144` toolchain which does not exist
* BLAKE3 is now in-tree at `thirdparty/blake3`
* cpr is now in-tree at `thirdparty/cpr`
* cxxopts is now in-tree at `thirdparty/cxxopts`
* fmt is now in-tree at `thirdparty/fmt`
* robin-map is now in-tree at `thirdparty/robin-map`
* ryml is now in-tree at `thirdparty/ryml`
* sol2 is now in-tree at `thirdparty/sol2`
* spdlog is now in-tree at `thirdparty/spdlog`
* utfcpp is now in-tree at `thirdparty/utfcpp`
* xmake package repo definitions is in `repo`
* implemented support for sanitizers. ASAN is supported on windows, TSAN, UBSAN, MSAN etc are supported on Linux/MacOS though I have not yet tested it extensively on MacOS
* the zencore encryption implementation also now supports using mbedTLS which is used on MacOS, though for now we still use openssl on Linux
* crashpad
* bumps libcurl to 8.11.0 (from 8.8.0) which should address a rare build upload bug
Diffstat (limited to 'thirdparty/ryml/tools/parse_emit.cpp')
| -rw-r--r-- | thirdparty/ryml/tools/parse_emit.cpp | 116 |
1 files changed, 116 insertions, 0 deletions
diff --git a/thirdparty/ryml/tools/parse_emit.cpp b/thirdparty/ryml/tools/parse_emit.cpp new file mode 100644 index 000000000..6ae807964 --- /dev/null +++ b/thirdparty/ryml/tools/parse_emit.cpp @@ -0,0 +1,116 @@ +#ifdef RYML_SINGLE_HEADER +#include <ryml_all.hpp> +#else +#include <c4/yml/std/std.hpp> +#include <c4/yml/parse.hpp> +#include <c4/yml/emit.hpp> +#endif +#include <c4/fs/fs.hpp> + +#include <cstdio> +#include <chrono> + + +using namespace c4; + + +//----------------------------------------------------------------------------- + +struct timed_section +{ + using myclock = std::chrono::steady_clock; + using msecs = std::chrono::duration<double, std::milli>; + + csubstr name; + myclock::time_point start; + + msecs since() const { return myclock::now() - start; } + timed_section(csubstr n) : name(n), start(myclock::now()) {} + ~timed_section() + { + fprintf(stderr, "%.6fms: %.*s\n", since().count(), (int)name.len, name.str); + fflush(stderr); + } +}; + +#define TS(name) timed_section name##__##__LINE__(#name) + + +//----------------------------------------------------------------------------- +//----------------------------------------------------------------------------- +//----------------------------------------------------------------------------- + +int main(int argc, const char *argv[]) +{ + bool print_emitted_to_stdout = true; + csubstr file; + // LCOV_EXCL_START + auto show_usage = [argv]{ + printf("usage: %s [-s] <path/to/file.yaml>\n", argv[0]); + }; + if(argc == 2) + { + file = to_csubstr(argv[1]); + } + else if(argc > 2) + { + file = to_csubstr(argv[2]); + csubstr arg = to_csubstr(argv[1]); + if(arg == "-s") + { + print_emitted_to_stdout = false; + } + else + { + show_usage(); + return 1; + } + } + else + { + show_usage(); + return 1; + } + // LCOV_EXCL_STOP + + TS(TOTAL); + + C4_CHECK_MSG(fs::path_exists(file.str), "cannot find file: %s (cwd=%s)", file.str, fs::cwd<std::string>().c_str()); + + { + TS(objects); + std::string contents, output; + yml::Tree tree; + { + TS(read_file); + fs::file_get_contents(file.str, &contents); + } + { + TS(tree_reserve); + size_t nlines; + { + TS(count_lines); + nlines = to_csubstr(contents).count('\n'); + } + fprintf(stderr, "reserving #lines=%zu\n", nlines); + tree.reserve(nlines); + } + { + TS(parse_yml); + yml::parse_in_place(file, to_substr(contents), &tree); + } + { + TS(emit_to_buffer); + output.resize(contents.size()); // resize, not just reserve + yml::emitrs_yaml(tree, &output); + } + if(print_emitted_to_stdout) + { + TS(print_stdout); + fwrite(output.data(), 1, output.size(), stdout); + putchar('\n'); + } + } + + return 0; +} |