detz: M0 scaffold

This commit is contained in:
2026-10-24 06:40:09 +02:00
parent fc436aeb24
commit 89918cbf0e
32 changed files with 599 additions and 3 deletions
+3
View File
@@ -0,0 +1,3 @@
BasedOnStyle: LLVM
IndentWidth: 4
ColumnLimit: 100
+58
View File
@@ -0,0 +1,58 @@
CXX ?= g++
CXXSTD = -std=c++23
WARN = -Wall -Wextra
CXXFLAGS ?= $(CXXSTD) $(WARN) -O2
BUILD = build
VERSION = $(shell cat VERSION)
BIN = $(BUILD)/detz
GEN_INC = $(BUILD)/gen
VERSION_HPP = $(GEN_INC)/version.hpp
SRCS = main.cpp src/cli/cli.cpp
OBJS = $(BUILD)/main.o $(BUILD)/cli.o
all: $(BIN)
$(VERSION_HPP): VERSION
@mkdir -p $(GEN_INC)
@sed 's/@VERSION@/$(VERSION)/' src/cli/version.hpp.in > $@
$(BUILD)/main.o: main.cpp src/cli/cli.h $(VERSION_HPP)
@mkdir -p $(BUILD)
$(CXX) $(CXXFLAGS) -I$(GEN_INC) -Isrc/cli -c main.cpp -o $@
$(BUILD)/cli.o: src/cli/cli.cpp src/cli/cli.h $(VERSION_HPP)
@mkdir -p $(BUILD)
$(CXX) $(CXXFLAGS) -I$(GEN_INC) -Isrc/cli -c src/cli/cli.cpp -o $@
$(BIN): $(OBJS)
$(CXX) $(CXXFLAGS) $(OBJS) -o $@
test: $(BIN) $(BUILD)/detz_test
./$(BUILD)/detz_test
./$(BIN) --version
$(BUILD)/detz_test: tests/test_main.cpp src/cli/cli.cpp $(VERSION_HPP)
@mkdir -p $(BUILD)
$(CXX) $(CXXFLAGS) -I$(GEN_INC) -Isrc/cli tests/test_main.cpp src/cli/cli.cpp -o $@
lint:
$(CXX) $(CXXSTD) $(WARN) -Werror -fsyntax-only main.cpp -I$(GEN_INC) -Isrc/cli || true
version-bump:
tools/version-bump.sh $(PART)
changelog:
tools/changelog.sh "$(MSG)"
tag:
tools/tag.sh
release:
PART=$(PART) MSG="$(MSG)" tools/release.sh
clean:
rm -rf $(BUILD)
-include src/*/*.mk
+1
View File
@@ -0,0 +1 @@
0.1.0
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
+3
View File
@@ -0,0 +1,3 @@
#pragma once
#include <string_view>
namespace detz { constexpr std::string_view kVersion = "0.1.0"; }
Binary file not shown.
+2
View File
@@ -0,0 +1,2 @@
#include "src/cli/cli.h"
int main(int argc, char** argv) { return detz::cli::DetzCli{}.run(argc, argv); }
View File
View File
View File
+17
View File
@@ -0,0 +1,17 @@
#include "cli.h"
#include "version.hpp"
#include <cstdio>
namespace detz::cli {
Command Parser::parse(int argc, char** argv) {
Command c;
if (argc > 1) { c.name = argv[1]; for (int i = 2; i < argc; ++i) c.args.emplace_back(argv[i]); }
return c;
}
int Command::run() {
if (name == "--version" || name == "version") { std::puts(kVersion.data()); return 0; }
std::puts("detz — C++23 port of tai.py. See --help. Version:");
std::puts(kVersion.data());
return 0;
}
int DetzCli::run(int argc, char** argv) { return Parser{}.parse(argc, argv).run(); }
} // namespace detz::cli
+10
View File
@@ -0,0 +1,10 @@
#pragma once
#include <string>
#include <vector>
namespace detz::cli {
struct Command { std::string name{"--help"}; std::vector<std::string> args; int run(); };
class Parser { public: Command parse(int argc, char** argv); };
class DetzCli { public: int run(int argc, char** argv); };
// molo-subcommand adapter stub (M1 wires `molo detz` registration here).
class MoloSubcommand { public: const char* name() const { return "detz"; } };
} // namespace detz::cli
+3
View File
@@ -0,0 +1,3 @@
#pragma once
#include <string_view>
namespace detz { constexpr std::string_view kVersion = "@VERSION@"; }
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
+12
View File
@@ -0,0 +1,12 @@
#include "../src/cli/cli.h"
#include <cassert>
#include <cstdio>
int main() {
detz::cli::Parser p;
const char* a0 = "detz";
auto c = p.parse(1, (char**)&a0);
assert(c.name == "--help");
assert(c.run() == 0);
std::puts("M0 OK");
return 0;
}
+7
View File
@@ -0,0 +1,7 @@
#!/bin/sh
set -e
msg=${1:-update}
v=$(cat VERSION); d=$(date +%F)
{ echo "# Changelog"; echo; echo "## [$v] - $d"; echo "- $msg"; echo; tail -n +2 CHANGELOG.md; } > CHANGELOG.md.new
mv CHANGELOG.md.new CHANGELOG.md
echo "changelog updated"
+8
View File
@@ -0,0 +1,8 @@
#!/bin/sh
set -e
: "${PART:=patch}"
tools/version-bump.sh "$PART"
tools/changelog.sh "$MSG"
git add VERSION CHANGELOG.md 2>/dev/null || true
git commit -m "detz: release v$(cat VERSION) $MSG" 2>/dev/null || true
tools/tag.sh
+4
View File
@@ -0,0 +1,4 @@
#!/bin/sh
set -e
v=$(cat VERSION)
git tag -a "detz-v$v" -m "detz v$v" 2>/dev/null || echo "tag detz-v$v (no git or exists)"
+8
View File
@@ -0,0 +1,8 @@
#!/bin/sh
set -e
part=${1:-patch}
v=$(cat VERSION)
maj=${v%%.*}; rest=${v#*.}; min=${rest%%.*}; pat=${rest##*.}
case $part in major) maj=$((maj+1)); min=0; pat=0;; minor) min=$((min+1)); pat=0;; *) pat=$((pat+1));; esac
echo "$maj.$min.$pat" > VERSION
echo "VERSION -> $(cat VERSION)"