.PHONY: all build build-daemon build-ctl test test-contrib vet coverage freebsd build-linux clean help # ==================================================================================== # Variables # ==================================================================================== BINARY ?= migadu_counters CTL_BINARY ?= counterctl BIN_DIR ?= ./bin SRC = ./cmd/migadu_counters CTL_SRC = ./cmd/counterctl # Version information (falls back when not in a git checkout) VERSION ?= $(shell git describe --tags --always --dirty --match='v*' 2>/dev/null || echo dev) COMMIT ?= $(shell git rev-parse --short HEAD 2>/dev/null || echo none) DATE ?= $(shell date -u +"%Y-%m-%dT%H:%M:%SZ") LDFLAGS_VARS = -X 'main.version=${VERSION}' -X 'main.commit=${COMMIT}' -X 'main.date=${DATE}' LDFLAGS = -ldflags="${LDFLAGS_VARS}" # Cross-compilation (FreeBSD hosts run these under rc.d + daemon(8)) FREEBSD_BINARY ?= migadu_counters-freebsd-amd64 CTL_FREEBSD_BINARY ?= counterctl-freebsd-amd64 LINUX_BINARY ?= migadu_counters-linux-amd64 CTL_LINUX_BINARY ?= counterctl-linux-amd64 # ==================================================================================== # Targets # ==================================================================================== all: build build: build-daemon build-ctl build-daemon: @mkdir -p $(BIN_DIR) go build $(LDFLAGS) -o $(BIN_DIR)/$(BINARY) $(SRC) build-ctl: @mkdir -p $(BIN_DIR) go build $(LDFLAGS) -o $(BIN_DIR)/$(CTL_BINARY) $(CTL_SRC) test: go test -race ./... # Shell test for contrib/pull-domains.sh (needs tinycdb's cdb and rsync). test-contrib: bash contrib/pull-domains_test.sh vet: go vet ./... @test -z "$$(gofmt -l . | grep -v -e '^test_files/' -e '^review/')" || (echo "gofmt needed:" && gofmt -l . | grep -v -e '^test_files/' -e '^review/' && exit 1) coverage: go test -coverprofile=coverage.out ./... go tool cover -html=coverage.out freebsd: @mkdir -p $(BIN_DIR) CGO_ENABLED=0 GOOS=freebsd GOARCH=amd64 go build -ldflags="${LDFLAGS_VARS}" -o $(BIN_DIR)/$(FREEBSD_BINARY) $(SRC) CGO_ENABLED=0 GOOS=freebsd GOARCH=amd64 go build -ldflags="${LDFLAGS_VARS}" -o $(BIN_DIR)/$(CTL_FREEBSD_BINARY) $(CTL_SRC) build-linux: @mkdir -p $(BIN_DIR) CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags="${LDFLAGS_VARS}" -o $(BIN_DIR)/$(LINUX_BINARY) $(SRC) CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags="${LDFLAGS_VARS}" -o $(BIN_DIR)/$(CTL_LINUX_BINARY) $(CTL_SRC) clean: rm -rf $(BIN_DIR) coverage.out help: @echo "Targets:" @echo " build Build migadu_counters and counterctl into $(BIN_DIR)" @echo " test go test -race ./..." @echo " test-contrib Shell test for contrib/pull-domains.sh" @echo " vet go vet + gofmt check" @echo " coverage Coverage report" @echo " freebsd Cross-compile static FreeBSD amd64 binaries" @echo " build-linux Cross-compile static Linux amd64 binaries" @echo " clean Remove build artifacts"