detz: M0 scaffold
This commit is contained in:
@@ -0,0 +1,3 @@
|
||||
BasedOnStyle: LLVM
|
||||
IndentWidth: 4
|
||||
ColumnLimit: 100
|
||||
@@ -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
|
||||
@@ -0,0 +1 @@
|
||||
0.1.0
|
||||
Binary file not shown.
Executable
BIN
Binary file not shown.
Executable
BIN
Binary file not shown.
@@ -0,0 +1,3 @@
|
||||
#pragma once
|
||||
#include <string_view>
|
||||
namespace detz { constexpr std::string_view kVersion = "0.1.0"; }
|
||||
Binary file not shown.
@@ -0,0 +1,2 @@
|
||||
#include "src/cli/cli.h"
|
||||
int main(int argc, char** argv) { return detz::cli::DetzCli{}.run(argc, argv); }
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -0,0 +1,3 @@
|
||||
#pragma once
|
||||
#include <string_view>
|
||||
namespace detz { constexpr std::string_view kVersion = "@VERSION@"; }
|
||||
@@ -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;
|
||||
}
|
||||
Executable
+7
@@ -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"
|
||||
Executable
+8
@@ -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
|
||||
Executable
+4
@@ -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)"
|
||||
Executable
+8
@@ -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)"
|
||||
Reference in New Issue
Block a user