sources = $(shell find . -name '*.go' | grep -v cmd/treerack/docreflect.gen.go) parsers = $(shell find . -name '*.treerack') release_date = $(shell git show -s --format=%cs HEAD) version = $(date)-$(shell git rev-parse --short HEAD) .PHONY: cpu.out default: build deps: go get golang.org/x/tools/cmd/goimports go get -t ./... imports: $(sources) @echo imports @goimports -w $(sources) cmd/treerack/docreflect.gen.go: $(sources) go run scripts/docreflect.go > .build/docreflect.gen.go && \ mv .build/docreflect.gen.go cmd/treerack || \ rm .build/docreflect.gen.go build: $(sources) cmd/treerack/readme.md cmd/treerack/docreflect.gen.go .build/treerack .build/treerack.1 .build/treerack: go build go build -o .build/treerack ./cmd/treerack install: $(sources) go install ./cmd/treerack head: $(sources) fmt go run scripts/createhead.go -- \ char.go \ sequence.go \ choice.go \ idset.go \ results.go \ context.go \ nodehead.go \ syntaxhead.go \ > head.go @gofmt -s -w head.go go run scripts/createhead.go --exported -- \ char.go \ sequence.go \ choice.go \ idset.go \ results.go \ context.go \ nodehead.go \ syntaxhead.go \ > headexported.go @gofmt -s -w headexported.go generate: $(sources) $(parsers) fmt head install treerack generate -export -package-name self < syntax.treerack > self/self.go.next @mv self/self.go.next self/self.go @gofmt -s -w self/self.go regenerate: $(sources) $(parsers) fmt head install treerack generate -export -package-name self < syntax.treerack > self/self.go.next @mv self/self.go.next self/self.go go install ./cmd/treerack treerack generate -export -package-name self < syntax.treerack > self/self.go.next @mv self/self.go.next self/self.go @gofmt -s -w self/self.go check-generate: $(sources) $(parsers) @echo checking head @mv headexported.go headexported.go.backup @go run scripts/createhead.go --exported -- \ char.go \ sequence.go \ choice.go \ idset.go \ results.go \ context.go \ nodehead.go \ syntaxhead.go \ > headexported.go @gofmt -s -w headexported.go @if ! diff headexported.go headexported.go.backup > /dev/null; then \ mv headexported.go.backup headexported.go; \ echo head does not match; \ false; \ fi @echo checking self @mv self/self.go self/self.go.backup @treerack generate -export -package-name self < syntax.treerack > self/self.go.next @mv self/self.go.next self/self.go @gofmt -s -w self/self.go @if ! diff self/self.go self/self.go.backup > /dev/null; then \ mv self/self.go.backup self/self.go; \ echo self does not match; \ false; \ fi @echo ok @mv headexported.go.backup headexported.go @mv self/self.go.backup self/self.go .build: mkdir -p .build cmd/treerack/readme.md: $(sources) cmd/treerack/docreflect.gen.go go run scripts/cmdreadme.go ./cmd/treerack > cmd/treerack/readme.md || \ rm cmd/treerack/readme.md .build/treerack.1: $(sources) cmd/treerack/docreflect.gen.go go run scripts/man.go $(version) $(release_date) > .build/treerack.1 || \ rm .build/treerack.1 check: build $(parsers) go test -test.short -run ^Test go test ./cmd/treerack -test.short -run ^Test checkall: build $(parsers) go test go test ./cmd/treerack .coverprofile: $(sources) go test -coverprofile .coverprofile cover: .coverprofile go tool cover -func .coverprofile showcover: .coverprofile go tool cover -html .coverprofile .coverprofile-cmd: $(sources) go test ./cmd/treerack -coverprofile .coverprofile-cmd cover-cmd: .coverprofile-cmd go tool cover -func .coverprofile-cmd showcover-cmd: .coverprofile-cmd go tool cover -html .coverprofile-cmd # command line interface not included publishcoverage: .coverprofile curl -s https://codecov.io/bash -o codecov bash codecov -Zf .coverprofile cpu.out: go test -v -run TestMMLFile -cpuprofile cpu.out cpu: cpu.out go tool pprof -top cpu.out fmt: $(sources) gofmt -w -s $(sources) checkfmt: $(sources) if [ "$$(gofmt -s -d $(sources))" != "" ]; then false; else true; fi vet: go vet ./... precommit: fmt check-generate vet build checkall clean: rm -f *.test rm -f cpu.out rm -f .coverprofile go clean -i ./... rm -f .build/treerack rm -f .build/treerack.1 rm -f cmd/treerack/docreflect.gen.go rm -f cmd/treerack/readme.md ci-trigger: deps checkfmt build checkall ifeq ($(TRAVIS_BRANCH)_$(TRAVIS_PULL_REQUEST), master_false) make publishcoverage endif