74 lines
1.8 KiB
Makefile
74 lines
1.8 KiB
Makefile
.POSIX:
|
|
|
|
NAME := comitium
|
|
|
|
# will automatically set main.Version with this string
|
|
VERSION ?= 1.6.2
|
|
|
|
# source dirs & files #
|
|
GOSRC := $(shell find . -type f -name '*.go')
|
|
GOSRC += go.mod go.sum
|
|
SCDDIR := doc
|
|
|
|
BUILDDIR ?= build
|
|
|
|
# install dirs #
|
|
PREFIX ?= /usr/local
|
|
BINDIR ?= $(PREFIX)/bin
|
|
MANDIR ?= $(PREFIX)/share/man
|
|
|
|
# program paths and flags #
|
|
#GO ?= go
|
|
# purely statically link (useful for cross compiling)
|
|
GO ?= CGO_ENABLED=0 go
|
|
GOFLAGS ?=
|
|
#GOLDFLAGS ?= -X main.Version=$(VERSION) -X main.Commit=$(COMMIT)
|
|
# also strips executable, significantly reduces size
|
|
GOLDFLAGS ?= -s -w -X golang.nytpu.com/comitium/core.Version=$(VERSION) -X golang.nytpu.com/comitium/core.Commit=$(COMMIT)
|
|
SCDOC ?= scdoc
|
|
MKDIR ?= mkdir -p
|
|
RM ?= rm -f
|
|
RMDIR ?= rmdir --ignore-fail-on-non-empty
|
|
GITC = $(shell git rev-parse --short HEAD)
|
|
GITDIRTY = $(shell git diff --quiet || echo "-dirty")
|
|
|
|
# build with `make COMMIT=tarball` if building outside of git repo
|
|
COMMIT ?= $(GITC)$(GITDIRTY)
|
|
|
|
.PHONY: all clean install uninstall test
|
|
.DEFAULT_GOAL := all
|
|
|
|
all: $(BUILDDIR)/$(NAME) $(BUILDDIR)/$(NAME).1
|
|
|
|
|
|
$(BUILDDIR):
|
|
@$(MKDIR) $(BUILDDIR)
|
|
|
|
|
|
$(BUILDDIR)/$(NAME): $(GOSRC) | $(BUILDDIR)
|
|
$(GO) build $(GOFLAGS) -ldflags "$(GOLDFLAGS)" -o $@
|
|
|
|
|
|
$(BUILDDIR)/%.1: doc/%.1.scd | $(BUILDDIR)
|
|
$(SCDOC) < $< > $@
|
|
|
|
|
|
clean:
|
|
-$(RM) -r $(BUILDDIR)
|
|
|
|
|
|
install: all
|
|
@$(MKDIR) -m755 $(DESTDIR)$(MANDIR)/man1 $(DESTDIR)$(BINDIR)
|
|
install -m755 $(BUILDDIR)/$(NAME) $(DESTDIR)$(BINDIR)/$(NAME)
|
|
install -m644 $(BUILDDIR)/$(NAME).1 $(DESTDIR)$(MANDIR)/man1/$(NAME).1
|
|
|
|
uninstall:
|
|
$(RM) $(DESTDIR)$(BINDIR)/$(NAME)
|
|
$(RM) $(DESTDIR)$(MANDIR)/man1/$(NAME).1
|
|
-@$(RMDIR) $(DESTDIR)$(BINDIR)
|
|
-@$(RMDIR) $(DESTDIR)$(MANDIR)/man1
|
|
|
|
|
|
test:
|
|
$(GO) test ./...
|