magnetico/Makefile
2024-07-25 15:37:27 +02:00

58 lines
1.9 KiB
Makefile

PREFIX ?= /usr/local
GOFLAGS = -tags='fts5,libsqlite3' -ldflags="-s -w -X main.compiledOn=$(SOURCE_DATE_EPOCH)"
.PHONY: all
all: bin/magneticod bin/magneticow
bin/magneticod:
go install $(GOFLAGS) ./cmd/magneticod
bin/magneticow:
# TODO: minify /data/* files!
go install $(GOFLAGS) ./cmd/magneticow
.PHONY: vet
vet:
go vet ./...
.PHONY: check
check:
go test $(GOFLAGS) ./...
.PHONY: install
install: bin/magneticod bin/magneticow
install -m 555 -Dt "$(PREFIX)/bin/" bin/magnetico{w,d}
.PHONY: format
format:
gofmt -w ./cmd/
gofmt -w ./pkg/
# Formatting Errors
# Since gofmt returns zero even if there are files to be formatted, we use:
#
# ! gofmt -d ${GOPATH}/path/ 2>&1 | read
#
# to return 1 if there are files to be formatted, and 0 if not.
# https://groups.google.com/forum/#!topic/Golang-Nuts/pdrN4zleUio
#
# How can I use Bash syntax in Makefile targets?
# Because `read` is a bash command.
# https://stackoverflow.com/a/589300/4466589
#
# How to ignore bindata.go
# Due to irrational insistence of some Go developers, gofmt, like many
# other tools of Go ecosystem, does not have flags for common scenarios
# such as ignoring certain files by pattern etc. Thus we use `go list`
# and grep together to achieve the desired result.
#
# The original query is this:
# gofmt -l $(go list -f $'{{range .GoFiles}}{{$.Dir}}/{{.}}\n{{end}}' ./... | grep -v bindata.go)
#
# The original query is then escaped for Makefile (by repeating dollar signs $ -> $$).
.PHONY: check-formatting
check-formatting: SHELL:=/bin/bash # HERE: this is setting the shell for check-formatting only
check-formatting:
! gofmt -l $$(go list -f $$'{{range .GoFiles}}{{$$.Dir}}/{{.}}\n{{end}}' ./... | grep -v bindata.go) 2>&1 | tee /dev/fd/2 | read
! gofmt -l $$(go list -f $$'{{range .GoFiles}}{{$$.Dir}}/{{.}}\n{{end}}' ./... | grep -v bindata.go) 2>&1 | tee /dev/fd/2 | read