From 36cb5079f273aaf9a84882749e3e15cd2ca70829 Mon Sep 17 00:00:00 2001 From: Amlal El Mahrouss Date: Sat, 29 Nov 2025 01:28:48 -0500 Subject: feat: new `-build-system` switch for NeBuild. Signed-off-by: Amlal El Mahrouss --- src/cli/AppMain.cc | 83 -------------------------------------------------- src/cli/main.cc | 89 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 89 insertions(+), 83 deletions(-) delete mode 100644 src/cli/AppMain.cc create mode 100644 src/cli/main.cc (limited to 'src') diff --git a/src/cli/AppMain.cc b/src/cli/AppMain.cc deleted file mode 100644 index 173820b..0000000 --- a/src/cli/AppMain.cc +++ /dev/null @@ -1,83 +0,0 @@ - -// ============================================================= // -// nebuild -// Copyright (C) 2024-2025, Amlal El Mahrouss, licensed under BSD-3 license. -// ============================================================= // - -#include -#include - -static bool kFailed = false; -static bool kDryRun = false; - -int main(int argc, char** argv) { - if (argc <= 1) return EXIT_FAILURE; - - for (size_t index = 1; index < argc; ++index) { - std::string index_path = argv[index]; - - if (index_path == "-v" || index_path == "-version") { - NeBuild::Logger::info() << "NeKernel Build.\n"; - NeBuild::Logger::info() - << "Bugs, Issues? Check out: https://github.com/nekernel-org/nebuild/issues\n"; - - return EXIT_SUCCESS; - } else if (index_path == "-dry-run" || index_path == "-n") { - kDryRun = true; - continue; - } else if (index_path == "-h" || index_path == "-help") { - NeBuild::Logger::info() << "usage: nebuild \n"; - - return EXIT_SUCCESS; - } - - if (index_path.starts_with("-")) { - NeBuild::Logger::info() << "error: unknown option '" << index_path << "'\n"; - - return EXIT_FAILURE; - } - - std::thread job_build_thread( - [](std::string index_path) -> void { - NeBuild::IManifestBuilder* builder = nullptr; - - const auto kJsonExtension = ".json"; - - if (index_path.ends_with(kJsonExtension)) { - builder = new NeBuild::JSONManifestBuilder(); - - if (!builder) { - kFailed = true; - return; - } - } else { - const auto kTomlExtension = ".toml"; - builder = new NeBuild::TOMLManifestBuilder(); - - if (index_path.ends_with(kTomlExtension)) { - goto end; - } else { - NeBuild::Logger::info() - << "error: file '" << index_path << "' is not a manifest file!" << std::endl; - kFailed = true; - return; - } - } - - end: - NeBuild::Logger::info() << "building manifest: " << index_path << std::endl; - - if (builder && !builder->BuildTarget(index_path, kDryRun)) { - kFailed = true; - } - - delete builder; - builder = nullptr; - }, - index_path); - - job_build_thread.join(); - } - - return kFailed ? EXIT_FAILURE : EXIT_SUCCESS; -} diff --git a/src/cli/main.cc b/src/cli/main.cc new file mode 100644 index 0000000..cbce3c0 --- /dev/null +++ b/src/cli/main.cc @@ -0,0 +1,89 @@ + +// ============================================================= // +// nebuild +// Copyright (C) 2024-2025, Amlal El Mahrouss, licensed under BSD-3 license. +// ============================================================= // + +#include +#include +#include "NeBuildKit/Defines.h" + +static bool kFailed = false; +static bool kDryRun = false; + +int main(int argc, char** argv) { + if (argc <= 1) return EXIT_FAILURE; + + for (size_t index = 1; index < argc; ++index) { + std::string index_path = argv[index]; + + if (index_path == "-v" || index_path == "-version") { + NeBuild::Logger::info() << "NeKernel Build.\n"; + NeBuild::Logger::info() + << "Bugs, Issues? Check out: https://github.com/nekernel-org/nebuild/issues\n"; + + return EXIT_SUCCESS; + } else if (index_path == "-dry-run" || index_path == "-n") { + kDryRun = true; + continue; + } else if (index_path == "-h" || index_path == "-help") { + NeBuild::Logger::info() << "usage: nebuild .\n"; + + return EXIT_SUCCESS; + } + + auto index_cpy = index; + + std::thread job_build_thread( + [&index_path, &index, &index_cpy, &argv]() -> void { + NeBuild::IManifestBuilder* builder = nullptr; + + const auto kJsonExtension = ".json"; + + if (index_path.ends_with(kJsonExtension)) { + builder = new NeBuild::JSONManifestBuilder(); + + if (!builder) { + kFailed = true; + return; + } + } else { + const auto kTomlExtension = ".toml"; + builder = new NeBuild::TOMLManifestBuilder(); + + if (index_path.ends_with(kTomlExtension)) { + goto toml_build; + } else { + NeBuild::Logger::info() + << "error: file '" << index_path << "' is not a manifest file!" << std::endl; + kFailed = true; + return; + } + } + + toml_build: + std::string next_path; + + if (argv[index_cpy + 1]) next_path = argv[index_cpy + 1]; + + if (next_path == "-build-system") { + NeBuild::Logger::info() << builder->BuildSystem() << std::endl; + std::exit(EXIT_SUCCESS); + } + + NeBuild::Logger::info() << "building manifest: " << index_path << std::endl; + + if (builder && !builder->BuildTarget(index_path, kDryRun)) { + kFailed = true; + } + + toml_build_done: + delete builder; + builder = nullptr; + }); + + job_build_thread.join(); + } + + return kFailed ? EXIT_FAILURE : EXIT_SUCCESS; +} -- cgit v1.2.3