Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .clang-format
Original file line number Diff line number Diff line change
Expand Up @@ -26,4 +26,4 @@ AlignConsecutiveDeclarations: true
AlignTrailingComments: true
FixNamespaceComments: true
IncludeIsMainRegex: '(Test)?$'
SortUsingDeclarations: true
SortUsingDeclarations: true
6 changes: 3 additions & 3 deletions examples/example_02_libnebuild/libnebuild.cc
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,15 @@

int main(int argc, char** argv) {
#ifndef _WIN32
constexpr auto kPath = "./posix.json";
constexpr auto path = "./posix.json";
#else
constexpr auto kPath = ".\\win64.json";
constexpr auto path = ".\\win64.json";
#endif

NeBuild::JSONManifestBuilder builder;
NeBuild::BuildConfig config;

config.path_ = kPath;
config.path_ = path;
config.dry_run_ = false;

return builder.BuildTarget(config);
Expand Down
Empty file removed include/.keep
Empty file.
40 changes: 18 additions & 22 deletions include/NeBuildKit/Detail/Config.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,32 +16,30 @@
#define LIKELY(ARG) ((ARG) ? assert(false) : ((void) 0))
#define UNLIKELY(ARG) LIKELY(!(ARG))

#define LIBNEBUILD_VERSION "v0.0.7-buildkit"
#define NEBUILD_VERSION "v0.0.8-buildkit"

#define LIBNEBUILD_VERSION_BCD 0x0007
#define NEBUILD_VERSION_BCD 0x0007

#define LIBNEBUILD_VERSION_MAJOR 0
#define LIBNEBUILD_VERSION_MINOR 0
#define LIBNEBUILD_VERSION_PATCH 7
#define NEBUILD_VERSION_MAJOR 0
#define NEBUILD_VERSION_MINOR 0
#define NEBUILD_VERSION_PATCH 7

#define LIBNEBUILD_EXPORT_C extern "C"
#define NEBUILD_EXPORT_C extern "C"

#define LIBNEBUILD_UNUSED(X) ((void) X)
#define NEBUILD_UNUSED(X) ((void) X)

namespace NeBuild {
struct BuildConfig final {
bool has_failed_{false};
bool dry_run_{false};
std::string path_{};

explicit operator bool() {
return has_failed_;
}

BuildConfig() = default;
~BuildConfig() {}
};
}
struct BuildConfig final {
bool has_failed_{false};
bool dry_run_{false};
std::string path_{};

explicit operator bool() { return has_failed_; }

BuildConfig() = default;
~BuildConfig() = default;
};
} // namespace NeBuild

namespace NeBuild::Logger {
/// @brief replacement for std::cout for NeBuild logging.
Expand All @@ -51,5 +49,3 @@ inline std::ostream& info() noexcept {
return out;
}
} // namespace NeBuild::Logger


7 changes: 4 additions & 3 deletions include/NeBuildKit/IManifestBuilder.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
#pragma once

#include <NeBuildKit/Detail/Config.h>
#include <string_view>

#define NEBUILD_MANIFEST_BUILDER : public ::NeBuild::IManifestBuilder

Expand All @@ -19,8 +20,8 @@ class IManifestBuilder {
IManifestBuilder() = default;
virtual ~IManifestBuilder() = default;

IManifestBuilder& operator=(const IManifestBuilder&) = default;
IManifestBuilder(const IManifestBuilder&) = default;
IManifestBuilder& operator=(const IManifestBuilder&) = delete;
IManifestBuilder(const IManifestBuilder&) = delete;

/// =========================================================== ///
/// @brief Builds a TOML target from a file.
Expand All @@ -33,6 +34,6 @@ class IManifestBuilder {
/// =========================================================== ///
/// @brief Returns the build system name.
/// =========================================================== ///
virtual const char* BuildSystem() = 0;
virtual const std::string_view BuildSystem() = 0;
};
} // namespace NeBuild
5 changes: 1 addition & 4 deletions include/NeBuildKit/JSONManifestBuilder.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,6 @@ class JSONManifestBuilder final NEBUILD_MANIFEST_BUILDER {
JSONManifestBuilder() = default;
~JSONManifestBuilder() override = default;

JSONManifestBuilder& operator=(const JSONManifestBuilder&) = default;
JSONManifestBuilder(const JSONManifestBuilder&) = default;

public:
/// =========================================================== ///
/// @brief Builds a JSON target from a JSON file.
Expand All @@ -32,6 +29,6 @@ class JSONManifestBuilder final NEBUILD_MANIFEST_BUILDER {
/// =========================================================== ///
/// @brief Returns the build system name.
/// =========================================================== ///
const char* BuildSystem() override;
const std::string_view BuildSystem() override;
};
} // namespace NeBuild
5 changes: 1 addition & 4 deletions include/NeBuildKit/TOMLManifestBuilder.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,6 @@ class TOMLManifestBuilder final NEBUILD_MANIFEST_BUILDER {
TOMLManifestBuilder() = default;
~TOMLManifestBuilder() override = default;

TOMLManifestBuilder& operator=(const TOMLManifestBuilder&) = default;
TOMLManifestBuilder(const TOMLManifestBuilder&) = default;

public:
/// =========================================================== ///
/// @brief Builds a TOML target from a TOML file.
Expand All @@ -32,6 +29,6 @@ class TOMLManifestBuilder final NEBUILD_MANIFEST_BUILDER {
/// =========================================================== ///
/// @brief Returns the build system name.
/// =========================================================== ///
const char* BuildSystem() override;
const std::string_view BuildSystem() override;
};
} // namespace NeBuild
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
84 changes: 38 additions & 46 deletions src/cli/main.cc
Original file line number Diff line number Diff line change
Expand Up @@ -6,24 +6,24 @@

#include <NeBuildKit/JSONManifestBuilder.h>
#include <NeBuildKit/TOMLManifestBuilder.h>
#include <memory>
#include <thread>

static NeBuild::BuildConfig kConfig;

int main(int argc, char** argv) {
if (argc <= 1) return EXIT_FAILURE;

NeBuild::BuildConfig config;

for (size_t index = 1; index < argc; ++index) {
std::string index_path = argv[index];

if (index_path == "-v" || index_path == "-version") {
NeBuild::Logger::info() << "NeBuild (" << LIBNEBUILD_VERSION << ")\n";
NeBuild::Logger::info()
<< "Bugs, issues? https://github.com/nekernel-org/nebuild/issues\n";
NeBuild::Logger::info() << "NeBuild (" << NEBUILD_VERSION << ")\n";
NeBuild::Logger::info() << "Bugs or issues? https://github.com/nekernel-org/nebuild/issues\n";

return EXIT_SUCCESS;
} else if (index_path == "-dry-run" || index_path == "-n") {
kConfig.dry_run_ = true;
config.dry_run_ = true;
continue;
} else if (index_path == "-h" || index_path == "-help") {
NeBuild::Logger::info() << "usage: nebuild <options> <file>.\n";
Expand All @@ -33,58 +33,50 @@ int main(int argc, char** argv) {

auto index_cpy = index;

std::thread job_build_thread(
[&index_path, &index, &index_cpy, &argv]() -> void {
NeBuild::IManifestBuilder* builder = nullptr;
std::thread job_build_thread([&index_path, &index, &index_cpy, &argc, &argv, &config]() -> void {
std::unique_ptr<NeBuild::IManifestBuilder> builder;

const auto kJsonExtension = ".json";
const auto kJsonExtension = ".json";

if (index_path.ends_with(kJsonExtension)) {
builder = new NeBuild::JSONManifestBuilder();
if (index_path.ends_with(kJsonExtension)) {
builder = std::make_unique<NeBuild::JSONManifestBuilder>();

if (!builder) {
kConfig.has_failed_ = true;
return;
}
} else {
const auto kTomlExtension = ".toml";
builder = new NeBuild::TOMLManifestBuilder();
if (!builder) {
config.has_failed_ = true;
return;
}
} else {
const auto kTomlExtension = ".toml";
builder = std::make_unique<NeBuild::TOMLManifestBuilder>();

if (index_path.ends_with(kTomlExtension)) {
goto nebuild_build_target;
} else {
NeBuild::Logger::info()
<< "error: file '" << index_path << "' is not a manifest file!" << std::endl;
kConfig.has_failed_ = true;
return;
}
}
if (!index_path.ends_with(kTomlExtension)) {
NeBuild::Logger::info() << "error: file '" << index_path << "' is not a manifest file!"
<< std::endl;
config.has_failed_ = true;
return;
}
}

nebuild_build_target:
std::string next_path;
std::string next_path;

if (argv[index_cpy + 1]) next_path = argv[index_cpy + 1];
if ((index_cpy + 1) < argc && 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);
}
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;
NeBuild::Logger::info() << "building manifest: " << index_path << std::endl;

kConfig.path_ = index_path;

if (builder && !builder->BuildTarget(kConfig)) {
kConfig.has_failed_ = true;
}
config.path_ = index_path;

toml_build_done:
delete builder;
builder = nullptr;
});
if (builder && !builder->BuildTarget(config)) {
config.has_failed_ = true;
}
});

job_build_thread.join();
}

return !kConfig ? EXIT_FAILURE : EXIT_SUCCESS;
return !config ? EXIT_FAILURE : EXIT_SUCCESS;
}
11 changes: 6 additions & 5 deletions src/lib/JSONManifestBuilder.cc
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,8 @@
#include <json/json.h>
#include <fstream>

using namespace NeBuild;
using namespace nlohmann;

using JSON = json;
namespace NeBuild {
using JSON = nlohmann::json;
namespace FS = std::filesystem;

/// =========================================================== ///
Expand Down Expand Up @@ -95,10 +93,12 @@ bool JSONManifestBuilder::BuildTarget(BuildConfig& config) {
if (ret_exec > 0) {
NeBuild::Logger::info() << "error: exit with message: " << std::strerror(ret_exec) << ""
<< std::endl;
config.has_failed_ = true;
return false;
}
} catch (std::runtime_error& err) {
NeBuild::Logger::info() << "error: exit with message: " << err.what() << "" << std::endl;
config.has_failed_ = true;
return false;
}

Expand All @@ -108,6 +108,7 @@ bool JSONManifestBuilder::BuildTarget(BuildConfig& config) {
/// =========================================================== ///
/// @brief Returns the build system name.
/// =========================================================== ///
const char* JSONManifestBuilder::BuildSystem() {
const std::string_view JSONManifestBuilder::BuildSystem() {
return "NeBuild (JSON)";
}
} // namespace NeBuild
10 changes: 6 additions & 4 deletions src/lib/TOMLManifestBuilder.cc
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,10 @@
// ============================================================= //

#include <NeBuildKit/TOMLManifestBuilder.h>
#include <toml++/toml.hpp>
#include <filesystem>
#include <toml++/toml.hpp>

using namespace NeBuild;

namespace NeBuild {
namespace FS = std::filesystem;

/// =========================================================== ///
Expand Down Expand Up @@ -98,10 +97,12 @@ bool TOMLManifestBuilder::BuildTarget(BuildConfig& config) {
if (ret_exec > 0) {
NeBuild::Logger::info() << "error: exit with message: " << std::strerror(ret_exec) << ""
<< std::endl;
config.has_failed_ = true;
return false;
}
} catch (std::runtime_error& err) {
NeBuild::Logger::info() << "error: exit with message: " << err.what() << "" << std::endl;
config.has_failed_ = true;
return false;
}

Expand All @@ -111,6 +112,7 @@ bool TOMLManifestBuilder::BuildTarget(BuildConfig& config) {
/// =========================================================== ///
/// @brief Returns the build system name.
/// =========================================================== ///
const char* TOMLManifestBuilder::BuildSystem() {
const std::string_view TOMLManifestBuilder::BuildSystem() {
return "NeBuild (TOML)";
}
} // namespace NeBuild
Empty file removed vendor/.keep
Empty file.
6 changes: 3 additions & 3 deletions vendor/toml++/impl/array.inl
Original file line number Diff line number Diff line change
Expand Up @@ -207,7 +207,7 @@ TOML_NAMESPACE_START {
}

TOML_EXTERNAL_LINKAGE
void array::flatten_child(array && child, size_t & dest_index) noexcept {
void array::flatten_child(array && child, size_t& dest_index) noexcept {
for (size_t i = 0, e = child.size(); i < e; i++) {
auto type = child.elems_[i]->type();
if (type == node_type::array) {
Expand All @@ -219,7 +219,7 @@ TOML_NAMESPACE_START {
}

TOML_EXTERNAL_LINKAGE
array& array::flatten()& {
array& array::flatten() & {
if (elems_.empty()) return *this;

bool requires_flattening = false;
Expand Down Expand Up @@ -258,7 +258,7 @@ TOML_NAMESPACE_START {
}

TOML_EXTERNAL_LINKAGE
array& array::prune(bool recursive)& noexcept {
array& array::prune(bool recursive) & noexcept {
if (elems_.empty()) return *this;

for (size_t i = elems_.size(); i-- > 0u;) {
Expand Down
14 changes: 6 additions & 8 deletions vendor/toml++/impl/parser.inl
Original file line number Diff line number Diff line change
Expand Up @@ -391,11 +391,11 @@ TOML_ANON_NAMESPACE_START {
};

template <typename Char>
utf8_reader(std::basic_string_view<Char>,
std::string_view) -> utf8_reader<std::basic_string_view<Char>>;
utf8_reader(std::basic_string_view<Char>, std::string_view)
-> utf8_reader<std::basic_string_view<Char>>;
template <typename Char>
utf8_reader(std::basic_string_view<Char>,
std::string&&) -> utf8_reader<std::basic_string_view<Char>>;
utf8_reader(std::basic_string_view<Char>, std::string&&)
-> utf8_reader<std::basic_string_view<Char>>;
template <typename Char>
utf8_reader(std::basic_istream<Char>&, std::string_view) -> utf8_reader<std::basic_istream<Char>>;
template <typename Char>
Expand Down Expand Up @@ -3369,10 +3369,8 @@ TOML_ANON_NAMESPACE_START {
TOML_INTERNAL_LINKAGE
parse_result do_parse_file(std::string_view file_path) {
#if TOML_EXCEPTIONS
#define TOML_PARSE_FILE_ERROR(msg, path) \
throw parse_error { \
msg, source_position{}, std::make_shared<const std::string>(std::move(path)) \
}
#define TOML_PARSE_FILE_ERROR(msg, path) \
throw parse_error{msg, source_position{}, std::make_shared<const std::string>(std::move(path))}
#else
#define TOML_PARSE_FILE_ERROR(msg, path) \
return parse_result { \
Expand Down
Loading