compiles!

This commit is contained in:
2026-09-07 21:15:36 -06:00
parent 3331ca2cec
commit 3528fd003f
4 changed files with 48 additions and 50 deletions
+3 -23
View File
@@ -79,29 +79,9 @@ Custom variables from `vars` and `distros.*.vars` are also available.
## Building and Testing
```bash
# Configure
cmake -B build -S .
# Build
cmake --build build -j4
# Run
./build/kmake [options]
# Run with specific distro(s)
./build/kmake linux-gcc windows-msvc
# Set verbosity (debug, high, normal, low)
./build/kmake -verbosity normal
# Show version
./build/kmake -version
# List available distros
./build/kmake -list
# Print project description and authors
./build/kmake -descr
# On Windows, development is done on MSYS2 UCRT64.
# Please use the dedicated script to forward commands there.
./msys2.ps1 make
```
## Common Tasks
+1 -1
View File
@@ -29,7 +29,7 @@ CFLAGS := -std=c++20 -O2 \
LFLAGS := -std=c++20 -static-libstdc++ -static-libgcc \
-Wl,--fatal-warnings -Wl,--warn-common
LIBDIRS := $(EXT_LIBDIRS)
LIB := $(EXT_LIB)
LIB := -lryml -ldesktoplib $(EXT_LIB)
INC := -I./src/ $(EXT_INC)
#---------------------------------------------------------------------------------
+11
View File
@@ -0,0 +1,11 @@
# msys2-ucrt.ps1
$msysShell = "C:\msys64\msys2_shell.cmd"
if ($args.Count -gt 0) {
# Combine arguments into a single string for bash execution
$bashCommand = $args -join ' '
& $msysShell -defterm -here -no-start -ucrt64 -c $bashCommand
} else {
# Open interactive UCRT64 shell
& $msysShell -defterm -here -no-start -ucrt64
}
+26 -19
View File
@@ -32,7 +32,7 @@ namespace kmake {
// Extracts a string list and logs unexpected nodes/types
static void parse_string_list(ryml::ConstNodeRef node, vector<string>& dest, const string& path, vector<string>& log) {
if (!node.valid()) {
if (!node.readable()) {
log.push_back("[WARN] Section missing at path: '" + path + "'");
return;
}
@@ -53,7 +53,7 @@ namespace kmake {
}
string val;
child.load(val);
child.load(&val);
if (val.empty()) {
log.push_back("[WARN] Empty string element ignored at '" + item_path + "'");
@@ -65,7 +65,7 @@ namespace kmake {
// Extracts a key-value string map and logs unexpected entries/types
static void parse_string_map(ryml::ConstNodeRef node, map<string, string>& dest, const string& path, vector<string>& log) {
if (!node.valid()) {
if (!node.readable()) {
log.push_back("[WARN] Section missing at path: '" + path + "'");
return;
}
@@ -91,7 +91,7 @@ namespace kmake {
}
string v;
child.load(v);
child.load(&v);
if (v.empty()) {
log.push_back("[WARN] Value for key '" + key_path + "' is empty.");
@@ -133,7 +133,12 @@ namespace kmake {
std::streamsize size = file.tellg();
file.seekg(0, std::ios::beg);
vector<char> buffer(size);
if (size < 0) {
logs.push_back("Invalid file size: " + filename);
return false;
}
vector<char> buffer(static_cast<size_t>(size));
if (!file.read(buffer.data(), size)) {
logs.push_back("Failed to read file content: " + filename);
return false;
@@ -145,12 +150,12 @@ namespace kmake {
if (!root.is_map()) {
logs.push_back("[ERROR] Root YAML document must be a map.");
return;
return false;
}
// Parse 'name'
if (root.has_child("name") && root["name"].has_val()) {
root["name"].load(name);
root["name"].load(&name);
} else {
logs.push_back("[WARN] Key 'name' is missing or empty.");
}
@@ -158,7 +163,7 @@ namespace kmake {
// Parse combined 'author' and 'authors'
if (root.has_child("author") && root["author"].has_val()) {
string single_author;
root["author"].load(single_author);
root["author"].load(&single_author);
authors.push_back(single_author);
}
if (root.has_child("authors")) {
@@ -173,7 +178,7 @@ namespace kmake {
// Parse 'verbosity'
if (root.has_child("verbosity") && root["verbosity"].has_val()) {
string v_str;
root["verbosity"].load(v_str);
root["verbosity"].load(&v_str);
v_str = strings::to_lower(v_str);
if (v_str == "debug") {
verbosity = Verbosity::DEBUG;
@@ -196,7 +201,7 @@ namespace kmake {
if (b_node.has_child("src")) {
ryml::ConstNodeRef src_node = b_node["src"];
if (src_node.has_child("path") && src_node["path"].has_val()) {
src_node["path"].load(build.src.path);
src_node["path"].load(&build.src.path);
}
if (src_node.has_child("targets")) {
parse_string_list(src_node["targets"], build.src.targets, "build.src.targets", logs);
@@ -206,21 +211,21 @@ namespace kmake {
if (b_node.has_child("out")) {
ryml::ConstNodeRef out_node = b_node["out"];
if (out_node.has_child("path") && out_node["path"].has_val()) {
out_node["path"].load(build.out.path);
out_node["path"].load(&build.out.path);
}
if (out_node.has_child("target") && out_node["target"].has_val()) {
out_node["target"].load(build.out.target);
out_node["target"].load(&build.out.target);
}
}
if (b_node.has_child("bin")) {
ryml::ConstNodeRef bin_node = b_node["bin"];
if (bin_node.has_child("path") && bin_node["path"].has_val()) {
bin_node["path"].load(build.bin.path);
bin_node["path"].load(&build.bin.path);
}
if (bin_node.has_child("target") && bin_node["target"].has_val()) {
string target;
bin_node["target"].load(target);
bin_node["target"].load(&target);
build.bin.targets.push_back(target);
}
if (bin_node.has_child("targets")) {
@@ -231,21 +236,23 @@ namespace kmake {
if (b_node.has_child("deps")) {
ryml::ConstNodeRef deps_node = b_node["deps"];
if (deps_node.has_child("path") && deps_node["path"].has_val()) {
deps_node["path"].load(build.deps.path);
deps_node["path"].load(&build.deps.path);
}
if (deps_node.has_child("target") && deps_node["target"].has_val()) {
deps_node["target"].load(build.deps.target);
deps_node["target"].load(&build.deps.target);
}
if (deps_node.has_child("rev_target") && deps_node["rev_target"].has_val()) {
deps_node["rev_target"].load(build.deps.rev_target);
deps_node["rev_target"].load(&build.deps.rev_target);
}
if (deps_node.has_child("style") && deps_node["style"].has_val()) {
deps_node["style"].load(build.deps.style);
deps_node["style"].load(&build.deps.style);
}
}
if (b_node.has_child("threads") && b_node["threads"].has_val()) {
b_node["threads"].load(build.threads);
string threads_str;
b_node["threads"].load(&threads_str);
build.threads = std::stoi(threads_str);
}
}