1BSON_PKGS = $(shell etc/list_pkgs.sh ./bson)
2BSON_TEST_PKGS = $(shell etc/list_test_pkgs.sh ./bson)
3MONGO_PKGS = $(shell etc/list_pkgs.sh ./mongo)
4MONGO_TEST_PKGS = $(shell etc/list_test_pkgs.sh ./mongo)
5UNSTABLE_PKGS = $(shell etc/list_pkgs.sh ./x)
6UNSTABLE_TEST_PKGS = $(shell etc/list_test_pkgs.sh ./x)
7TAG_PKG = $(shell etc/list_pkgs.sh ./tag)
8TAG_TEST_PKG = $(shell etc/list_test_pkgs.sh ./tag)
9EXAMPLES_PKGS = $(shell etc/list_pkgs.sh ./examples)
10EXAMPLES_TEST_PKGS = $(shell etc/list_test_pkgs.sh ./examples)
11PKGS = $(BSON_PKGS) $(MONGO_PKGS) $(UNSTABLE_PKGS) $(TAG_PKG) $(EXAMPLES_PKGS)
12TEST_PKGS = $(BSON_TEST_PKGS) $(MONGO_TEST_PKGS) $(UNSTABLE_TEST_PKGS) $(TAG_PKG) $(EXAMPLES_TEST_PKGS)
13
14TEST_TIMEOUT = 600
15
16.PHONY: default
17default: check-env check-fmt vet build-examples lint errcheck test-cover test-race
18
19.PHONY: check-env
20check-env:
21	etc/check_env.sh
22
23.PHONY: doc
24doc:
25	godoc -http=:6060 -index
26
27.PHONY: build-examples
28build-examples:
29	go build $(BUILD_TAGS) ./examples/... ./x/network/examples/...
30
31.PHONY: build
32build:
33	go build $(filter-out ./core/auth/internal/gssapi,$(PKGS))
34
35.PHONY: check-fmt
36check-fmt:
37	@gofmt -l -s $(PKGS) | read; if [ $$? == 0 ]; then echo "gofmt check failed for:"; gofmt -l -s $(PKGS) | sed -e 's/^/ - /'; exit 1; fi
38
39.PHONY: fmt
40fmt:
41	gofmt -l -s -w $(PKGS)
42
43.PHONY: lint
44lint:
45	golint $(PKGS) | ./etc/lintscreen.pl .lint-whitelist
46
47.PHONY: lint-add-whitelist
48lint-add-whitelist:
49	golint $(PKGS) | ./etc/lintscreen.pl -u .lint-whitelist
50	sort .lint-whitelist -o .lint-whitelist
51
52.PHONY: errcheck
53errcheck:
54	errcheck -exclude .errcheck-excludes ./bson/... ./mongo/... ./x/...
55
56.PHONY: test
57test:
58	go test $(BUILD_TAGS) -timeout $(TEST_TIMEOUT)s $(TEST_PKGS)
59
60.PHONY: test-cover
61test-cover:
62	go test $(BUILD_TAGS) -timeout $(TEST_TIMEOUT)s -cover $(COVER_ARGS) $(TEST_PKGS)
63
64.PHONY: test-race
65test-race:
66	go test $(BUILD_TAGS) -timeout $(TEST_TIMEOUT)s -race $(TEST_PKGS)
67
68.PHONY: test-short
69test-short:
70	go test $(BUILD_TAGS) -timeout $(TEST_TIMEOUT)s -short $(TEST_PKGS)
71
72.PHONY: update-bson-corpus-tests
73update-bson-corpus-tests:
74	etc/update-spec-tests.sh bson-corpus
75
76.PHONY: update-connection-string-tests
77update-connection-string-tests:
78	etc/update-spec-tests.sh connection-string
79
80.PHONY: update-crud-tests
81update-crud-tests:
82	etc/update-spec-tests.sh crud
83
84.PHONY: update-initial-dns-seedlist-discovery-tests
85update-initial-dns-seedlist-discovery-tests:
86	etc/update-spec-tests.sh initial-dns-seedlist-discovery
87
88.PHONY: update-max-staleness-tests
89update-max-staleness-tests:
90	etc/update-spec-tests.sh max-staleness
91
92.PHONY: update-server-discovery-and-monitoring-tests
93update-server-discovery-and-monitoring-tests:
94	etc/update-spec-tests.sh server-discovery-and-monitoring
95
96.PHONY: update-server-selection-tests
97update-server-selection-tests:
98	etc/update-spec-tests.sh server-selection
99
100.PHONY: update-notices
101update-notices:
102	etc/generate-notices.pl > THIRD-PARTY-NOTICES
103
104.PHONY: vet
105vet:
106	go vet -cgocall=false -composites=false -unusedstringmethods="Error" $(PKGS)
107
108
109# Evergreen specific targets
110.PHONY: evg-test
111evg-test:
112	go test $(BUILD_TAGS) -v -timeout $(TEST_TIMEOUT)s $(TEST_PKGS) > test.suite
113
114.PHONY: evg-test-auth
115evg-test-auth:
116	go run -tags gssapi ./x/network/examples/count/main.go -uri $(MONGODB_URI)
117
118# benchmark specific targets and support
119perf:driver-test-data.tar.gz
120	tar -zxf $< $(if $(eq $(UNAME_S),Darwin),-s , --transform=s)/data/perf/
121	@touch $@
122driver-test-data.tar.gz:
123	curl --retry 5 "https://s3.amazonaws.com/boxes.10gen.com/build/driver-test-data.tar.gz" -o driver-test-data.tar.gz --silent --max-time 120
124benchmark:perf
125	go test $(BUILD_TAGS) -benchmem -bench=. ./benchmark
126driver-benchmark:perf
127	@go run cmd/godriver-benchmark/main.go | tee perf.suite
128.PHONY:benchmark driver-benchmark
129