mirror of
https://github.com/vbatts/go-mtree.git
synced 2024-11-22 08:25:38 +00:00
Vincent Batts
626d2f2040
Clean up Makefile for the tools to be pulled in as needed by jobs like building man pages (or linting, etc.) Building docs in the default step. But installing the man page is currently an exercise for the reader. Signed-off-by: Vincent Batts <vbatts@hashbangbash.com>
109 lines
2.7 KiB
Makefile
109 lines
2.7 KiB
Makefile
|
|
BUILD := gomtree
|
|
BUILDPATH := github.com/vbatts/go-mtree/cmd/gomtree
|
|
CWD := $(shell pwd)
|
|
SOURCE_FILES := $(shell find . -type f -name "*.go")
|
|
CLEAN_FILES := *~
|
|
TAGS :=
|
|
ARCHES := linux,386 linux,amd64 linux,arm linux,arm64 linux,mips64 linux,riscv64 openbsd,amd64 windows,amd64 windows,arm64 darwin,amd64 darwin,arm64
|
|
|
|
default: build validation lint docs
|
|
|
|
.PHONY: validation
|
|
validation: .test .vet .cli.test
|
|
|
|
.PHONY: validation.tags
|
|
validation.tags: .test.tags .vet.tags .cli.test
|
|
|
|
.PHONY: gocyclo
|
|
gocyclo: .gocyclo
|
|
|
|
CLEAN_FILES += .gocyclo
|
|
.gocyclo: .gocyclo.tool
|
|
gocyclo -avg -over 15 -ignore 'vendor/*' . && touch $@
|
|
|
|
.PHONY: test
|
|
test: .test
|
|
|
|
CLEAN_FILES += .test .test.tags
|
|
NO_VENDOR_DIR := $(shell find . -type f -name '*.go' ! -path './vendor*' ! -path './.git*' ! -path './.vscode*' -exec dirname "{}" \; | sort -u)
|
|
|
|
.test: $(SOURCE_FILES)
|
|
go test -v $(NO_VENDOR_DIR) && touch $@
|
|
|
|
.test.tags: $(SOURCE_FILES)
|
|
set -e ; for tag in $(TAGS) ; do go test -tags $$tag -v $(NO_VENDOR_DIR) ; done && touch $@
|
|
|
|
.PHONY: lint
|
|
lint: .lint
|
|
|
|
CLEAN_FILES += .lint
|
|
.lint: .golangci-lint.tool $(SOURCE_FILES)
|
|
set -e ; golangci-lint run && touch $@
|
|
|
|
.PHONY: vet
|
|
vet: .vet .vet.tags
|
|
|
|
CLEAN_FILES += .vet .vet.tags
|
|
.vet: $(SOURCE_FILES)
|
|
go vet $(NO_VENDOR_DIR) && touch $@
|
|
|
|
.vet.tags: $(SOURCE_FILES)
|
|
set -e ; for tag in $(TAGS) ; do go vet -tags $$tag -v $(NO_VENDOR_DIR) ; done && touch $@
|
|
|
|
.PHONY: cli.test
|
|
cli.test: .cli.test
|
|
|
|
CLEAN_FILES += .cli.test .cli.test.tags
|
|
.cli.test: $(BUILD) $(wildcard ./test/cli/*.sh)
|
|
@go run ./test/cli-test/main.go ./test/cli/*.sh && touch $@
|
|
|
|
.cli.test.tags: $(BUILD) $(wildcard ./test/cli/*.sh)
|
|
@set -e ; for tag in $(TAGS) ; do go run -tags $$tag ./test/cli-test/main.go ./test/cli/*.sh ; done && touch $@
|
|
|
|
docs: gomtree.1
|
|
|
|
CLEAN_FILES += gomtree.1
|
|
%.1: %.1.md .go-md2man.tool
|
|
go-md2man -in $< -out $@
|
|
|
|
.PHONY: build
|
|
build: $(BUILD)
|
|
|
|
$(BUILD): $(SOURCE_FILES)
|
|
go build -ldflags="-X 'main.Version=$(shell git describe --always --dirty)'" -mod=vendor -o $(BUILD) $(BUILDPATH)
|
|
|
|
TOOLS += .gocyclo.tool
|
|
.gocyclo.tool:
|
|
go install github.com/fzipp/gocyclo/cmd/gocyclo@latest && touch $@
|
|
|
|
TOOLS += .go-md2man.tool
|
|
.go-md2man.tool:
|
|
go install github.com/cpuguy83/go-md2man@latest && touch $@
|
|
|
|
TOOLS += .golangci-lint.tool
|
|
.golangci-lint.tool:
|
|
go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest && touch $@
|
|
|
|
install.tools: $(TOOLS)
|
|
|
|
./bin:
|
|
mkdir -p $@
|
|
|
|
CLEAN_FILES += bin
|
|
build.arches: ./bin
|
|
@set -e ;\
|
|
for pair in $(ARCHES); do \
|
|
p=$$(echo $$pair | cut -d , -f 1);\
|
|
a=$$(echo $$pair | cut -d , -f 2);\
|
|
echo "Building $$p/$$a ...";\
|
|
GOOS=$$p GOARCH=$$a go build -mod=vendor -o ./bin/gomtree.$$p.$$a $(BUILDPATH) ;\
|
|
done ;\
|
|
cd bin ;\
|
|
sha1sum gomtree.* > SUMS ;\
|
|
sha512sum gomtree.* >> SUMS ;\
|
|
cd -
|
|
|
|
clean:
|
|
rm -rf $(BUILD) $(CLEAN_FILES)
|
|
|