Makefile
Rama master · réplica de lectura del repositorio original.
# Roster – Build- und Entwicklungs-Tasks.
# modernc-SQLite + gopsutil sind CGo-frei, daher CGO_ENABLED=0 für statische Cross-Builds.
# Versionsnummer aus der VERSION-Datei (Single Source of Truth); überschreibbar via `make VERSION=x`.
VERSION ?= $(shell cat $(CURDIR)/VERSION 2>/dev/null || echo 0.0.0-dev)
LDFLAGS := -s -w -X main.version=$(VERSION)
GOFLAGS := CGO_ENABLED=0
BIN := bin
AGENT_EMBED := internal/server/agentdist/bin
# Windows-EXEs nach dem Linken: Mindest-Windows-Version im PE-Kopf von 10.0 auf 6.1 senken,
# damit sie auch auf Windows 7/8 und Server 2008 R2–2012 R2 starten (siehe tools/pepatch).
PEPATCH := go run ./tools/pepatch
.PHONY: help web server agent agents-embed viewer tray install-tray install-tray-autostart uninstall-tray build test vet tidy clean run-server cross
help: ## Diese Hilfe anzeigen
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | awk 'BEGIN{FS=":.*?## "}{printf " \033[36m%-14s\033[0m %s\n",$$1,$$2}'
web: ## Frontend bauen (nach web/dist, wird ins Server-Binary eingebettet)
cd web && npm install && npm run build
agents-embed: ## Agent-Binaries für alle Plattformen ins Server-Embed cross-kompilieren
mkdir -p $(AGENT_EMBED)
$(GOFLAGS) GOOS=linux GOARCH=amd64 go build -ldflags "$(LDFLAGS)" -o $(AGENT_EMBED)/agent-linux-amd64 ./cmd/agent
$(GOFLAGS) GOOS=linux GOARCH=arm64 go build -ldflags "$(LDFLAGS)" -o $(AGENT_EMBED)/agent-linux-arm64 ./cmd/agent
$(GOFLAGS) GOOS=darwin GOARCH=amd64 go build -ldflags "$(LDFLAGS)" -o $(AGENT_EMBED)/agent-darwin-amd64 ./cmd/agent
$(GOFLAGS) GOOS=darwin GOARCH=arm64 go build -ldflags "$(LDFLAGS)" -o $(AGENT_EMBED)/agent-darwin-arm64 ./cmd/agent
$(GOFLAGS) GOOS=windows GOARCH=amd64 go build -ldflags "$(LDFLAGS)" -o $(AGENT_EMBED)/agent-windows-amd64.exe ./cmd/agent
$(PEPATCH) $(AGENT_EMBED)/agent-windows-amd64.exe
$(GOFLAGS) GOOS=freebsd GOARCH=amd64 go build -ldflags "$(LDFLAGS)" -o $(AGENT_EMBED)/agent-freebsd-amd64 ./cmd/agent
server: web agents-embed ## Server-Binary bauen (inkl. Frontend + Agent-Downloads)
$(GOFLAGS) go build -ldflags "$(LDFLAGS)" -o $(BIN)/server ./cmd/server
agent: ## Agent-Binary für die aktuelle Plattform bauen
$(GOFLAGS) go build -ldflags "$(LDFLAGS)" -o $(BIN)/agent ./cmd/agent
viewer: ## Nativer Fernsteuerungs-Viewer für die aktuelle Plattform (SDL3, cgo-frei)
$(GOFLAGS) go build -ldflags "$(LDFLAGS)" -o $(BIN)/roster-viewer ./cmd/viewer
tray: ## Taskleisten-App für die aktuelle Plattform bauen (SDL3, cgo-frei)
$(GOFLAGS) go build -ldflags "$(LDFLAGS)" -o $(BIN)/roster-tray ./cmd/tray
tray-cross: ## Taskleisten-App für Linux/Windows/macOS bauen (SDL3 wird zur Laufzeit geladen)
$(GOFLAGS) GOOS=linux GOARCH=amd64 go build -ldflags "$(LDFLAGS)" -o $(BIN)/roster-tray-linux-amd64 ./cmd/tray
$(GOFLAGS) GOOS=windows GOARCH=amd64 go build -ldflags "$(LDFLAGS)" -o $(BIN)/roster-tray-windows-amd64.exe ./cmd/tray
$(PEPATCH) $(BIN)/roster-tray-windows-amd64.exe
$(GOFLAGS) GOOS=darwin GOARCH=arm64 go build -ldflags "$(LDFLAGS)" -o $(BIN)/roster-tray-darwin-arm64 ./cmd/tray
# Benutzer-Installation der Taskleisten-App (kein root nötig) – dünne Hülle um
# `roster-tray --install`, das auch ohne Quellbaum funktioniert (Download aus den
# Einstellungen). PREFIX überschreibbar, z. B. `sudo make install-tray PREFIX=/usr/local`.
PREFIX ?= $(HOME)/.local
install-tray: tray ## roster-tray + Desktop-Eintrag/Symbol installieren (Anwendungsmenü)
$(BIN)/roster-tray --install --prefix "$(PREFIX)"
install-tray-autostart: tray ## Zusätzlich beim Anmelden ins Tray starten
$(BIN)/roster-tray --install --autostart --prefix "$(PREFIX)"
uninstall-tray: ## Taskleisten-App und Desktop-Eintrag wieder entfernen
$(BIN)/roster-tray --uninstall --prefix "$(PREFIX)"
viewer-embed: ## Linux-Viewer ins Server-Embed bauen (cgo-frei; SDL3 aus dem System)
mkdir -p internal/server/viewerdist/bin
$(GOFLAGS) GOOS=linux GOARCH=amd64 go build -ldflags "$(LDFLAGS)" -o internal/server/viewerdist/bin/roster-viewer-linux-amd64 ./cmd/viewer
viewer-embed-arm64: ## Linux-ARM64-Viewer ins Server-Embed bauen (Raspberry Pi & Co.)
mkdir -p internal/server/viewerdist/bin
$(GOFLAGS) GOOS=linux GOARCH=arm64 go build -ldflags "$(LDFLAGS)" -o internal/server/viewerdist/bin/roster-viewer-linux-arm64 ./cmd/viewer
# SDL3-Laufzeitbibliotheken zum Bündeln für Windows/macOS (der Viewer selbst ist
# cgo-frei; SDL3 wird zur Laufzeit geladen). Pfade überschreibbar via `make VAR=…`.
SDL3_WIN_DLL ?= third_party/sdl3/SDL3.dll
SDL3_MAC_DYLIB ?= third_party/sdl3/libSDL3.dylib
SDL3_VERSION ?= 3.4.12
fetch-sdl3: ## SDL3-Windows-DLL (zum Bündeln) herunterladen und entpacken
mkdir -p third_party/sdl3
curl -fsSL -o /tmp/sdl3-win.zip "https://github.com/libsdl-org/SDL/releases/download/release-$(SDL3_VERSION)/SDL3-$(SDL3_VERSION)-win32-x64.zip"
unzip -o -j /tmp/sdl3-win.zip SDL3.dll -d third_party/sdl3
rm -f /tmp/sdl3-win.zip
viewer-embed-windows: ## Windows-Viewer (cgo-frei) + gebündelte SDL3.dll als ZIP ins Embed
mkdir -p internal/server/viewerdist/bin
$(GOFLAGS) GOOS=windows GOARCH=amd64 go build -ldflags "$(LDFLAGS)" -o $(BIN)/roster-viewer.exe ./cmd/viewer
$(PEPATCH) $(BIN)/roster-viewer.exe
cp "$(SDL3_WIN_DLL)" $(BIN)/SDL3.dll
cd $(BIN) && rm -f roster-viewer-windows-amd64.zip && zip -j roster-viewer-windows-amd64.zip roster-viewer.exe SDL3.dll
mv $(BIN)/roster-viewer-windows-amd64.zip internal/server/viewerdist/bin/roster-viewer-windows-amd64.zip
rm -f $(BIN)/roster-viewer.exe $(BIN)/SDL3.dll
viewer-embed-darwin: ## macOS-Viewer (cgo-frei) + gebündelte libSDL3.dylib als ZIP ins Embed
mkdir -p internal/server/viewerdist/bin
$(GOFLAGS) GOOS=darwin GOARCH=arm64 go build -ldflags "$(LDFLAGS)" -o $(BIN)/roster-viewer ./cmd/viewer
cp "$(SDL3_MAC_DYLIB)" $(BIN)/libSDL3.dylib
cd $(BIN) && rm -f roster-viewer-darwin-arm64.zip && zip -j roster-viewer-darwin-arm64.zip roster-viewer libSDL3.dylib
mv $(BIN)/roster-viewer-darwin-arm64.zip internal/server/viewerdist/bin/roster-viewer-darwin-arm64.zip
rm -f $(BIN)/roster-viewer $(BIN)/libSDL3.dylib
# Taskleisten-App (roster-tray) ins Server-Embed – gleiches Schema wie der Viewer,
# Download in den Einstellungen unter „Downloads“.
tray-embed: ## Linux-Taskleisten-App ins Server-Embed bauen (cgo-frei; SDL3 aus dem System)
mkdir -p internal/server/traydist/bin
$(GOFLAGS) GOOS=linux GOARCH=amd64 go build -ldflags "$(LDFLAGS)" -o internal/server/traydist/bin/roster-tray-linux-amd64 ./cmd/tray
tray-embed-arm64: ## Linux-ARM64-Taskleisten-App ins Server-Embed bauen (Raspberry Pi & Co.)
mkdir -p internal/server/traydist/bin
$(GOFLAGS) GOOS=linux GOARCH=arm64 go build -ldflags "$(LDFLAGS)" -o internal/server/traydist/bin/roster-tray-linux-arm64 ./cmd/tray
tray-embed-windows: ## Windows-Taskleisten-App (cgo-frei) + gebündelte SDL3.dll als ZIP ins Embed
mkdir -p internal/server/traydist/bin
$(GOFLAGS) GOOS=windows GOARCH=amd64 go build -ldflags "$(LDFLAGS)" -o $(BIN)/roster-tray.exe ./cmd/tray
$(PEPATCH) $(BIN)/roster-tray.exe
cp "$(SDL3_WIN_DLL)" $(BIN)/SDL3.dll
cd $(BIN) && rm -f roster-tray-windows-amd64.zip && zip -j roster-tray-windows-amd64.zip roster-tray.exe SDL3.dll
mv $(BIN)/roster-tray-windows-amd64.zip internal/server/traydist/bin/roster-tray-windows-amd64.zip
rm -f $(BIN)/roster-tray.exe $(BIN)/SDL3.dll
tray-embed-darwin: ## macOS-Taskleisten-App (cgo-frei) + gebündelte libSDL3.dylib als ZIP ins Embed
mkdir -p internal/server/traydist/bin
$(GOFLAGS) GOOS=darwin GOARCH=arm64 go build -ldflags "$(LDFLAGS)" -o $(BIN)/roster-tray ./cmd/tray
cp "$(SDL3_MAC_DYLIB)" $(BIN)/libSDL3.dylib
cd $(BIN) && rm -f roster-tray-darwin-arm64.zip && zip -j roster-tray-darwin-arm64.zip roster-tray libSDL3.dylib
mv $(BIN)/roster-tray-darwin-arm64.zip internal/server/traydist/bin/roster-tray-darwin-arm64.zip
rm -f $(BIN)/roster-tray $(BIN)/libSDL3.dylib
build: server agent ## Server und Agent bauen
test: ## Tests ausführen
go test ./...
vet: ## go vet
go vet ./...
tidy: ## go mod tidy
go mod tidy
geoip: ## Eingebettete IP→Land-Datenbank erneuern (GEOIP_DIR = Ordner mit *-ipv4-num.csv/*-ipv6-num.csv von ip-location-db)
go run internal/server/geoip/gen/main.go -in $(GEOIP_DIR) -out internal/server/geoip/data
release: ## Version freigeben: Changelog-Abschnitt, VERSION, Commit + Tag (make release VERSION=0.17.0)
./scripts/release.sh $(VERSION)
run-server: ## Server lokal starten (SQLite, ohne TLS – nur Entwicklung)
ROSTER_DB=sqlite://./inventory.db ROSTER_ADDR=:8443 ROSTER_SECURE_COOKIE=false go run ./cmd/server run
# Cross-Compile des Agents für alle Zielplattformen.
cross: web ## Agent für Windows/Linux/macOS und Server für Linux/Windows bauen
$(GOFLAGS) GOOS=windows GOARCH=amd64 go build -ldflags "$(LDFLAGS)" -o $(BIN)/agent-windows-amd64.exe ./cmd/agent
$(PEPATCH) $(BIN)/agent-windows-amd64.exe
$(GOFLAGS) GOOS=linux GOARCH=amd64 go build -ldflags "$(LDFLAGS)" -o $(BIN)/agent-linux-amd64 ./cmd/agent
$(GOFLAGS) GOOS=darwin GOARCH=arm64 go build -ldflags "$(LDFLAGS)" -o $(BIN)/agent-darwin-arm64 ./cmd/agent
$(GOFLAGS) GOOS=linux GOARCH=amd64 go build -ldflags "$(LDFLAGS)" -o $(BIN)/server-linux-amd64 ./cmd/server
$(GOFLAGS) GOOS=windows GOARCH=amd64 go build -ldflags "$(LDFLAGS)" -o $(BIN)/server-windows-amd64.exe ./cmd/server
$(PEPATCH) $(BIN)/server-windows-amd64.exe
clean: ## Build-Artefakte entfernen
rm -rf $(BIN) web/dist/assets
rm -f $(AGENT_EMBED)/agent-*