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

default: build

libdocreflect: $(sources)
	go build .

libgenerate: $(sources)
	go build ./generate

.build:
	mkdir -p .build

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

.build/docreflect.1: $(sources) .build cmd/docreflect/docs.gen.go
	go run scripts/man.go $(version) $(release_date) ./cmd/docreflect > .build/docreflect.1

cmd/docreflect/readme.md: $(sources) cmd/docreflect/docs.gen.go
	go run scripts/markdown.go ./cmd/docreflect > cmd/docreflect/readme.md

build: libdocreflect libgenerate .build/docreflect cmd/docreflect/readme.md

testdocs_test.go: $(sources) .build
	go run ./cmd/docreflect \
		docreflect_test \
		code.squareroundforest.org/arpio/docreflect/internal/tests/src/testpackage \
		> .build/testdocs_test.go \
		&& mv .build/testdocs_test.go testdocs_test.go

cmd/docreflect/docs.gen.go: $(sources)
	go run ./cmd/docreflect \
		main \
		code.squareroundforest.org/arpio/docreflect/generate \
		> .build/docs.gen.go \
		&& mv .build/docs.gen.go cmd/docreflect/docs.gen.go

.cover: $(sources) testdocs_test.go
	go test -count 1 -coverprofile .cover . ./generate

check: .cover

cover: .cover
	go tool cover -func .cover

showcover: .cover
	go tool cover -html .cover

fmt: $(sources)
	go fmt . ./generate ./cmd/docreflect ./scripts

$(prefix)/bin/docreflect: .build/docreflect
	cp .build/docreflect $(prefix)/bin/docreflect

$(prefix)/share/man/man1/docreflect.1: .build/docreflect.1
	cp .build/docreflect.1 $(prefix)/share/man/man1/docreflect.1

install: $(prefix)/bin/docreflect $(prefix)/share/man/man1/docreflect.1

clean:
	go clean ./...
	rm -rf .build
	rm -f testdocs_test.go
