1TOOLS= golang.org/x/tools/cover
2GOCOVER_TMPFILE?=	$(GOCOVER_FILE).tmp
3GOCOVER_FILE?=	.cover.out
4GOCOVERHTML?=	coverage.html
5FIND=`/usr/bin/which 2> /dev/null gfind find | /usr/bin/grep -v ^no | /usr/bin/head -n 1`
6XARGS=`/usr/bin/which 2> /dev/null gxargs xargs | /usr/bin/grep -v ^no | /usr/bin/head -n 1`
7
8test:: $(GOCOVER_FILE)
9	@$(MAKE) -C cmd/sockaddr test
10
11cover:: coverage_report
12
13$(GOCOVER_FILE)::
14	@${FIND} . -type d ! -path '*cmd*' ! -path '*.git*' -print0 | ${XARGS} -0 -I % sh -ec "cd % && rm -f $(GOCOVER_TMPFILE) && go test -coverprofile=$(GOCOVER_TMPFILE)"
15
16	@echo 'mode: set' > $(GOCOVER_FILE)
17	@${FIND} . -type f ! -path '*cmd*' ! -path '*.git*' -name "$(GOCOVER_TMPFILE)" -print0 | ${XARGS} -0 -n1 cat $(GOCOVER_TMPFILE) | grep -v '^mode: ' >> ${PWD}/$(GOCOVER_FILE)
18
19$(GOCOVERHTML): $(GOCOVER_FILE)
20	go tool cover -html=$(GOCOVER_FILE) -o $(GOCOVERHTML)
21
22coverage_report:: $(GOCOVER_FILE)
23	go tool cover -html=$(GOCOVER_FILE)
24
25audit_tools::
26	@go get -u github.com/golang/lint/golint && echo "Installed golint:"
27	@go get -u github.com/fzipp/gocyclo && echo "Installed gocyclo:"
28	@go get -u github.com/remyoudompheng/go-misc/deadcode && echo "Installed deadcode:"
29	@go get -u github.com/client9/misspell/cmd/misspell && echo "Installed misspell:"
30	@go get -u github.com/gordonklaus/ineffassign && echo "Installed ineffassign:"
31
32audit::
33	deadcode
34	go tool vet -all *.go
35	go tool vet -shadow=true *.go
36	golint *.go
37	ineffassign .
38	gocyclo -over 65 *.go
39	misspell *.go
40
41clean::
42	rm -f $(GOCOVER_FILE) $(GOCOVERHTML)
43
44dev::
45	@go build
46	@$(MAKE) -B -C cmd/sockaddr sockaddr
47
48install::
49	@go install
50	@$(MAKE) -C cmd/sockaddr install
51
52doc::
53	@echo Visit: http://127.0.0.1:6161/pkg/github.com/hashicorp/go-sockaddr/
54	godoc -http=:6161 -goroot $GOROOT
55
56world::
57	@set -e; \
58	for os in solaris darwin freebsd linux windows android; do \
59		for arch in amd64; do \
60			printf "Building on %s-%s\n" "$${os}" "$${arch}" ; \
61			env GOOS="$${os}" GOARCH="$${arch}" go build -o /dev/null; \
62		done; \
63	done
64
65	$(MAKE) -C cmd/sockaddr world
66