This repository has been archived by the owner on Dec 30, 2021. It is now read-only.
forked from google/mtail
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Makefile
171 lines (131 loc) · 4.1 KB
/
Makefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
# Copyright 2011 Google Inc. All Rights Reserved.
# This file is available under the Apache license.
# Set the timeout for tests run under the race detector.
timeout := 60s
ifeq ($(TRAVIS),true)
timeout := 5m
endif
ifeq ($(CIRCLECI),true)
timeout := 5m
endif
GOFILES=$(shell find . -name '*.go' -a ! -name '*_test.go')
GOTESTFILES=$(shell find . -name '*_test.go')
CLEANFILES+=\
vm/parser.go\
vm/y.output\
all: mtail
.PHONY: clean covclean crossclean
clean: covclean crossclean
rm -f $(CLEANFILES) .*dep-stamp
covclean:
rm -f *.coverprofile coverage.html
crossclean:
rm -rf build
version := $(shell git describe --tags)
revision := $(shell git rev-parse HEAD)
release := $(shell git describe --tags | cut -d"-" -f 1,2)
GO_LDFLAGS := "-X main.Version=${version} -X main.Revision=${revision}"
.PHONY: install mtail
install mtail: $(GOFILES)
go install -ldflags $(GO_LDFLAGS)
vm/parser.go: vm/parser.y .gen-dep-stamp
go generate -x ./vm
emgen/emgen: emgen/emgen.go
cd emgen && go build
.PHONY: install_crossbuild
install_crossbuild: .crossbuild-dep-stamp
.crossbuild-dep-stamp:
go get github.com/mitchellh/gox
touch $@
GOX_OSARCH ?= "linux/amd64 windows/amd64 darwin/amd64"
#GOX_OSARCH := ""
.PHONY: crossbuild
crossbuild: install_crossbuild $(GOFILES) .dep-stamp
mkdir -p build
gox --output="./build/mtail_${release}_{{.OS}}_{{.Arch}}" -osarch=$(GOX_OSARCH) -ldflags $(GO_LDFLAGS)
.PHONY: test check
check test: $(GOFILES) $(GOTESTFILES)
go test -timeout 10s ./...
.PHONY: testrace
testrace: $(GOFILES) $(GOTESTFILES)
go test -timeout ${timeout} -race -v ./...
.PHONY: testex
testex:
go test -timeout ${timeout} -run Test.*ExamplePrograms -v
.PHONY: smoke
smoke: $(GOFILES) $(GOTESTFILES)
go test -timeout 1s -test.short ./...
.PHONY: ex_test
ex_test: ex_test.go testdata/* examples/*
go test -run TestExamplePrograms --logtostderr
.PHONY: bench
bench: $(GOFILES) $(GOTESTFILES)
go test -bench=. -timeout=60s -run=XXX ./...
.PHONY: bench_cpu
bench_cpu:
go test -bench=. -run=XXX -timeout=60s -cpuprofile=cpu.out
.PHONY: bench_mem
bench_mem:
go test -bench=. -run=XXX -timeout=60s -memprofile=mem.out
.PHONY: recbench
recbench: $(GOFILES) $(GOTESTFILES)
go test -bench=. -run=XXX --record_benchmark ./...
.PHONY: regtest
regtest:
tests/regtest.sh
PACKAGES := $(shell find . -name '*.go' -exec dirname {} \; | sort -u)
PHONY: coverage
coverage: gover.coverprofile
gover.coverprofile: $(GOFILES) $(GOTESTFILES)
for package in $(PACKAGES); do\
go test -covermode=count -coverprofile=$$(echo $$package | tr './' '__').coverprofile ./$$package;\
done
gover
.PHONY: covrep
covrep: coverage.html
xdg-open $<
coverage.html: gover.coverprofile
go tool cover -html=$< -o $@
.PHONY: testall
testall: testrace bench regtest
.PHONY: install_deps
install_deps: .dep-stamp
IMPORTS := $(shell go list -f '{{join .Imports "\n"}}' ./... | sort | uniq | grep -v mtail)
TESTIMPORTS := $(shell go list -f '{{join .TestImports "\n"}}' ./... | sort | uniq | grep -v mtail)
.dep-stamp: vm/parser.go
@echo "Install all dependencies, ensuring they're updated"
go get -u -v $(IMPORTS)
go get -u -v $(TESTIMPORTS)
touch $@
.PHONY: install_gen_deps
install_gen_deps: .gen-dep-stamp
.gen-dep-stamp:
go get golang.org/x/tools/cmd/goyacc
touch $@
.PHONY: install_coverage_deps
install_coverage_deps: .cov-dep-stamp vm/parser.go
.cov-dep-stamp: install_deps
go get golang.org/x/tools/cmd/cover
go get github.com/sozorogami/gover
go get github.com/mattn/goveralls
touch $@
ifeq ($(CIRCLECI),true)
COVERALLS_SERVICE := circle-ci
endif
ifeq ($(TRAVIS),true)
COVERALLS_SERVICE := travis-ci
endif
upload_to_coveralls: gover.coverprofile
goveralls -coverprofile=gover.coverprofile -service=$(COVERALLS_SERVICE)
## make u a container
.PHONY: container
container: Dockerfile
docker build -t mtail \
--build-arg version=${version} \
--build-arg commit_hash=${revision} \
--build-arg build_date=$(shell date -Iseconds --utc) \
.
# Append the bin subdirs of every element of the GOPATH list to PATH, so we can find goyacc.
empty :=
space := $(empty) $(empty)
export PATH := $(PATH):$(subst $(space),:,$(patsubst %,%/bin,$(subst :, ,$(GOPATH))))