Files
kappa/include/kappa/dsl/ast.hpp
T
huntedbytheirs a8b53681fc feat: DSL parser, eval system, and project structure
- Hand-written lexer + recursive-descent parser for .kap package definitions
- Package constructs: const, license, provides, outputs, patches, depends
  (version-constrained, feature-gated, output-targeted), features (enabled/
  forced/flag), config files (default/replace/merge with cfg interpolation),
  env (?= soft-set), prepare/build/check/install phases
- Evaluator: recursive  resolver for prefix, jobopts, destdir, userargs,
  cfg.*, feature.*, package vars
- Comments: // single-line, /* */ multi-line
- /kappa/{bin,temp,db,system,system/builds} path layout
- Clang 22, C++23, CMake + vcpkg (tomlplusplus)
- .clangd + .clang-tidy configured
2026-07-29 22:16:16 -04:00

67 lines
1.3 KiB
C++

#pragma once
#include <string>
#include <unordered_map>
#include <unordered_set>
#include <vector>
namespace kappa::dsl {
using Command = std::string;
struct Phase {
std::vector<Command> commands;
};
struct Dependency {
std::string name;
std::string version;
std::string output;
std::string feature; // empty = unconditional
};
struct ConfigFile {
std::string path;
std::string mode;
std::unordered_map<std::string, std::string> entries;
};
struct FeatureDef {
bool enabled = false;
bool force = false;
std::string flag;
};
struct Patch {
std::string url;
std::string sha256;
int level = 1;
};
struct EnvEntry {
std::string key;
std::string value;
bool soft = false;
};
struct PackageDef {
std::string name;
std::string version;
std::string source;
std::string license;
std::vector<Dependency> depends;
std::vector<std::string> provides;
std::vector<std::string> outputs;
std::unordered_map<std::string, FeatureDef> features;
std::vector<ConfigFile> config_files;
std::vector<Patch> patches;
std::vector<EnvEntry> env_entries;
std::unordered_set<std::string> const_keys;
Phase prepare;
Phase build;
Phase check;
Phase install;
};
} // namespace kappa::dsl