| # Directory to place `go install`ed binaries into. |
| export GOBIN ?= $(shell pwd)/bin |
| |
| GOLINT = $(GOBIN)/golint |
| GEN_ATOMICINT = $(GOBIN)/gen-atomicint |
| GEN_ATOMICWRAPPER = $(GOBIN)/gen-atomicwrapper |
| STATICCHECK = $(GOBIN)/staticcheck |
| |
| GO_FILES ?= $(shell find . '(' -path .git -o -path vendor ')' -prune -o -name '*.go' -print) |
| |
| # Also update ignore section in .codecov.yml. |
| COVER_IGNORE_PKGS = \ |
| go.uber.org/atomic/internal/gen-atomicint \ |
| go.uber.org/atomic/internal/gen-atomicwrapper |
| |
| .PHONY: build |
| build: |
| go build ./... |
| |
| .PHONY: test |
| test: |
| go test -race ./... |
| |
| .PHONY: gofmt |
| gofmt: |
| $(eval FMT_LOG := $(shell mktemp -t gofmt.XXXXX)) |
| gofmt -e -s -l $(GO_FILES) > $(FMT_LOG) || true |
| @[ ! -s "$(FMT_LOG)" ] || (echo "gofmt failed:" && cat $(FMT_LOG) && false) |
| |
| $(GOLINT): |
| cd tools && go install golang.org/x/lint/golint |
| |
| $(STATICCHECK): |
| cd tools && go install honnef.co/go/tools/cmd/staticcheck |
| |
| $(GEN_ATOMICWRAPPER): $(wildcard ./internal/gen-atomicwrapper/*) |
| go build -o $@ ./internal/gen-atomicwrapper |
| |
| $(GEN_ATOMICINT): $(wildcard ./internal/gen-atomicint/*) |
| go build -o $@ ./internal/gen-atomicint |
| |
| .PHONY: golint |
| golint: $(GOLINT) |
| $(GOLINT) ./... |
| |
| .PHONY: staticcheck |
| staticcheck: $(STATICCHECK) |
| $(STATICCHECK) ./... |
| |
| .PHONY: lint |
| lint: gofmt golint staticcheck generatenodirty |
| |
| # comma separated list of packages to consider for code coverage. |
| COVER_PKG = $(shell \ |
| go list -find ./... | \ |
| grep -v $(foreach pkg,$(COVER_IGNORE_PKGS),-e "^$(pkg)$$") | \ |
| paste -sd, -) |
| |
| .PHONY: cover |
| cover: |
| go test -coverprofile=cover.out -coverpkg $(COVER_PKG) -v ./... |
| go tool cover -html=cover.out -o cover.html |
| |
| .PHONY: generate |
| generate: $(GEN_ATOMICINT) $(GEN_ATOMICWRAPPER) |
| go generate ./... |
| |
| .PHONY: generatenodirty |
| generatenodirty: |
| @[ -z "$$(git status --porcelain)" ] || ( \ |
| echo "Working tree is dirty. Commit your changes first."; \ |
| exit 1 ) |
| @make generate |
| @status=$$(git status --porcelain); \ |
| [ -z "$$status" ] || ( \ |
| echo "Working tree is dirty after `make generate`:"; \ |
| echo "$$status"; \ |
| echo "Please ensure that the generated code is up-to-date." ) |