LICENSE is installed with the docs, included in make dist, and becomes the Debian package's copyright file together with the bundled Cinzel font's OFL. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
115 lines
5.1 KiB
Makefile
115 lines
5.1 KiB
Makefile
# Jarl build and install.
|
|
#
|
|
# make build bin/jarld and bin/jarl (and their bash completion)
|
|
# make test unit tests (integration tests run when BIND is found;
|
|
# set JARL_BIND_ROOT, see docs/development.md)
|
|
# make e2e end-to-end test against a real named (scripts/e2e.sh)
|
|
# sudo make install install binaries, bash completion, systemd unit,
|
|
# sysusers/tmpfiles files and an example /etc/jarl/jarl.yaml
|
|
# make deb a Debian package in dist/ (DEB_ARCH=arm64 for another
|
|
# architecture); install it with 'sudo apt install ./dist/jarl_*.deb'
|
|
# make dist static binaries for linux/amd64 and linux/arm64 in dist/
|
|
|
|
VERSION ?= $(shell cat VERSION 2>/dev/null || echo 0.0.0-dev)
|
|
LDFLAGS := -s -w -X jarl/internal/version.Version=$(VERSION)
|
|
GOFLAGS := -trimpath
|
|
export CGO_ENABLED := 0
|
|
|
|
PREFIX ?= /usr/local
|
|
BINDIR ?= $(PREFIX)/bin
|
|
DOCDIR ?= $(PREFIX)/share/doc/jarl
|
|
# bash-completion also looks in /usr/local/share (XDG_DATA_DIRS).
|
|
BASHCOMPDIR ?= $(PREFIX)/share/bash-completion/completions
|
|
UNITDIR ?= /etc/systemd/system
|
|
SYSUSERSDIR ?= /usr/lib/sysusers.d
|
|
TMPFILESDIR ?= /usr/lib/tmpfiles.d
|
|
DESTDIR ?=
|
|
|
|
# The binaries install-files copies (make deb points these at other
|
|
# architectures' builds).
|
|
JARLD_BIN ?= bin/jarld
|
|
JARL_BIN ?= bin/jarl
|
|
|
|
# make deb: the package's architecture (Debian name) and version.
|
|
DEB_ARCH ?= $(shell dpkg --print-architecture 2>/dev/null || go env GOARCH)
|
|
DEB_VERSION ?= $(subst -,~,$(VERSION))
|
|
|
|
.PHONY: all build completion test vet e2e install install-files uninstall deb dist clean
|
|
|
|
all: build
|
|
|
|
build:
|
|
go build $(GOFLAGS) -ldflags '$(LDFLAGS)' -o bin/jarld ./cmd/jarld
|
|
go build $(GOFLAGS) -ldflags '$(LDFLAGS)' -o bin/jarl ./cmd/jarl
|
|
$(MAKE) --no-print-directory completion
|
|
|
|
# Bash completion scripts, generated by the binaries themselves.
|
|
completion:
|
|
@mkdir -p bin/completion
|
|
bin/jarl completion bash > bin/completion/jarl
|
|
bin/jarld completion bash > bin/completion/jarld
|
|
|
|
vet:
|
|
go vet ./...
|
|
@test -z "$$(gofmt -l cmd internal)" || { echo "gofmt needed:"; gofmt -l cmd internal; exit 1; }
|
|
|
|
test: vet
|
|
go test ./...
|
|
|
|
e2e: build
|
|
scripts/e2e.sh
|
|
|
|
install: build install-files
|
|
@if [ ! -e $(DESTDIR)/etc/jarl/jarl.yaml ]; then \
|
|
install -d -m 0750 $(DESTDIR)/etc/jarl; \
|
|
bin/jarld config --example > $(DESTDIR)/etc/jarl/jarl.yaml; \
|
|
chmod 0640 $(DESTDIR)/etc/jarl/jarl.yaml; \
|
|
echo "wrote $(DESTDIR)/etc/jarl/jarl.yaml"; \
|
|
fi
|
|
@echo
|
|
@echo "Next (as root): systemd-sysusers jarl.conf && systemd-tmpfiles --create jarl.conf"
|
|
@echo " chgrp jarl /etc/jarl /etc/jarl/jarl.yaml && systemctl daemon-reload"
|
|
@echo "Then follow docs/install.md (init, import, adopt, start)."
|
|
|
|
# Everything but /etc/jarl/jarl.yaml (shared by install and deb).
|
|
install-files:
|
|
install -D -m 0755 $(JARLD_BIN) $(DESTDIR)$(BINDIR)/jarld
|
|
install -D -m 0755 $(JARL_BIN) $(DESTDIR)$(BINDIR)/jarl
|
|
install -D -m 0644 bin/completion/jarl $(DESTDIR)$(BASHCOMPDIR)/jarl
|
|
install -D -m 0644 bin/completion/jarld $(DESTDIR)$(BASHCOMPDIR)/jarld
|
|
install -D -m 0644 deploy/systemd/jarl.service $(DESTDIR)$(UNITDIR)/jarl.service
|
|
sed -i 's#/usr/local/bin/jarld#$(BINDIR)/jarld#; s#/usr/local/share/doc/jarl#$(DOCDIR)#' $(DESTDIR)$(UNITDIR)/jarl.service
|
|
install -D -m 0644 deploy/sysusers.d/jarl.conf $(DESTDIR)$(SYSUSERSDIR)/jarl.conf
|
|
install -D -m 0644 deploy/tmpfiles.d/jarl.conf $(DESTDIR)$(TMPFILESDIR)/jarl.conf
|
|
install -D -m 0644 README.md $(DESTDIR)$(DOCDIR)/README.md
|
|
install -D -m 0644 LICENSE $(DESTDIR)$(DOCDIR)/LICENSE
|
|
install -D -m 0644 CHANGELOG.md $(DESTDIR)$(DOCDIR)/CHANGELOG.md
|
|
install -d $(DESTDIR)$(DOCDIR)/docs $(DESTDIR)$(DOCDIR)/contrib/acme.sh $(DESTDIR)$(DOCDIR)/contrib/lego
|
|
install -m 0644 docs/*.md $(DESTDIR)$(DOCDIR)/docs/
|
|
install -m 0644 contrib/acme.sh/dns_jarl.sh $(DESTDIR)$(DOCDIR)/contrib/acme.sh/
|
|
install -m 0755 contrib/lego/jarl-lego.sh $(DESTDIR)$(DOCDIR)/contrib/lego/
|
|
|
|
uninstall:
|
|
rm -f $(DESTDIR)$(BINDIR)/jarld $(DESTDIR)$(BINDIR)/jarl $(DESTDIR)$(UNITDIR)/jarl.service \
|
|
$(DESTDIR)$(BASHCOMPDIR)/jarl $(DESTDIR)$(BASHCOMPDIR)/jarld \
|
|
$(DESTDIR)$(SYSUSERSDIR)/jarl.conf $(DESTDIR)$(TMPFILESDIR)/jarl.conf
|
|
rm -rf $(DESTDIR)$(DOCDIR)
|
|
@echo "Kept /etc/jarl, /var/lib/jarl and the files in /etc/bind/jarl and /var/lib/bind/jarl."
|
|
|
|
# A Debian package, built with dpkg-deb (no root needed). The package's
|
|
# scripts are in deploy/debian; scripts/mkdeb.sh explains the layout.
|
|
deb: build
|
|
DEB_ARCH='$(DEB_ARCH)' DEB_VERSION='$(DEB_VERSION)' VERSION='$(VERSION)' \
|
|
LDFLAGS='$(LDFLAGS)' GOFLAGS='$(GOFLAGS)' scripts/mkdeb.sh
|
|
|
|
dist: build
|
|
for arch in amd64 arm64; do \
|
|
GOOS=linux GOARCH=$$arch go build $(GOFLAGS) -ldflags '$(LDFLAGS)' -o dist/jarl-$(VERSION)-linux-$$arch/jarld ./cmd/jarld && \
|
|
GOOS=linux GOARCH=$$arch go build $(GOFLAGS) -ldflags '$(LDFLAGS)' -o dist/jarl-$(VERSION)-linux-$$arch/jarl ./cmd/jarl && \
|
|
cp -r README.md CHANGELOG.md LICENSE docs deploy contrib bin/completion dist/jarl-$(VERSION)-linux-$$arch/ && \
|
|
tar -C dist -czf dist/jarl-$(VERSION)-linux-$$arch.tar.gz jarl-$(VERSION)-linux-$$arch || exit 1; \
|
|
done
|
|
|
|
clean:
|
|
rm -rf bin dist
|