sources = $(shell find . -name "*.go" | grep -v iniparser.gen.go | grep -v docreflect.gen.go | grep -v docreflect_test.go)
PREFIX ?= /usr/local
prefix ?= $(PREFIX)
date = $(shell git show -s --format=%cs HEAD)
version = $(date)-$(shell git rev-parse --short HEAD)

default: build

build: lib .build/wand .build/wand.1 cmd/wand/readme.md

lib: $(sources) iniparser.gen.go docreflect.gen.go
	go build ./...

check: $(sources) build docreflect_test.go
	go test -count 1 ./...

.cover: $(sources) build docreflect_test.go
	go test -count 1 -coverprofile .cover ./...

cover: .cover
	go tool cover -func .cover

showcover: .cover
	go tool cover -html .cover

fmt: $(sources) iniparser.gen.go docreflect.gen.go
	go fmt ./...

iniparser.gen.go: ini.treerack
	go run internal/script/ini-parser/parser.go wand < ini.treerack > iniparser.gen.go || rm -f iniparser.gen.go

docreflect.gen.go: $(sources)
	go run internal/script/docreflect/docs.go \
		wand \
		code.squareroundforest.org/arpio/wand/tools \
		> docreflect.gen.go \
	|| rm -f docreflect.gen.go

docreflect_test.go: $(sources)
	go run internal/script/docreflect/docs.go \
		wand \
		code.squareroundforest.org/arpio/wand/internal/tests/testlib \
		> docreflect_test.go \
	|| rm -f docreflect_test.go

.build:
	mkdir -p .build

.build/wand: $(sources) lib iniparser.gen.go docreflect.gen.go lib .build
	go build \
		-o .build/wand \
		-ldflags "-X main.version=$(version)" \
		./cmd/wand

.build/wand.1: $(sources) iniparser.gen.go docreflect.gen.go .build
	go run internal/script/man/man.go $(date) $(version) ./cmd/wand > .build/wand.1

cmd/wand/readme.md: $(sources) docreflect.gen.go
	go run internal/script/markdown/md.go 0 ./cmd/wand > cmd/wand/readme.md

$(prefix)/bin:
	mkdir -p $(prefix)/bin

$(prefix)/share/man/man1:
	mkdir -p $(prefix)/share/man/man1

install: .build/wand .build/wand.1 $(prefix)/bin $(prefix)/share/man/man1
	cp .build/wand $(prefix)/bin
	cp .build/wand.1 $(prefix)/share/man/man1

uninstall:
	rm $(prefix)/bin/wand
	rm $(prefix)/share/man/man1/wand.1

clean:
	go clean ./...
	rm -rf .build
	rm -f docreflect.gen.go
	rm -f docreflect_test.go
	rm -f iniparser.gen.go
	rm -f .cover
