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)
13ATLAS_URIS = "$(ATLAS_FREE)" "$(ATLAS_REPLSET)" "$(ATLAS_SHARD)" "$(ATLAS_TLS11)" "$(ATLAS_TLS12)" "$(ATLAS_FREE_SRV)" "$(ATLAS_REPLSET_SRV)" "$(ATLAS_SHARD_SRV)" "$(ATLAS_TLS11_SRV)" "$(ATLAS_TLS12_SRV)"
14
15TEST_TIMEOUT = 600
16
17.PHONY: default
18default: check-env check-fmt vet build-examples lint errcheck test-cover test-race
19
20.PHONY: check-env
21check-env:
22	etc/check_env.sh
23
24.PHONY: doc
25doc:
26	godoc -http=:6060 -index
27
28.PHONY: build-examples
29build-examples:
30	go build $(BUILD_TAGS) ./examples/... ./x/mongo/driver/examples/...
31
32.PHONY: build
33build:
34	go build $(filter-out ./core/auth/internal/gssapi,$(PKGS))
35
36.PHONY: build-cse
37build-cse:
38	go build -tags cse $(filter-out ./core/auth/internal/gssapi,$(PKGS))
39
40.PHONY: check-fmt
41check-fmt:
42	etc/check_fmt.sh $(PKGS)
43
44.PHONY: fmt
45fmt:
46	gofmt -l -s -w $(PKGS)
47
48.PHONY: lint
49lint:
50	golint $(PKGS) | ./etc/lintscreen.pl .lint-whitelist
51
52.PHONY: lint-add-whitelist
53lint-add-whitelist:
54	golint $(PKGS) | ./etc/lintscreen.pl -u .lint-whitelist
55	sort .lint-whitelist -o .lint-whitelist
56
57.PHONY: errcheck
58errcheck:
59	errcheck -exclude .errcheck-excludes ./bson/... ./mongo/... ./x/...
60
61.PHONY: test
62test:
63	for TEST in $(TEST_PKGS) ; do \
64		go test $(BUILD_TAGS) -timeout $(TEST_TIMEOUT)s $$TEST ; \
65	done
66
67.PHONY: test-cover
68test-cover:
69	for TEST in $(TEST_PKGS) ; do \
70    	go test $(BUILD_TAGS) -timeout $(TEST_TIMEOUT)s -cover $(COVER_ARGS) $$TEST ; \
71    done
72
73.PHONY: test-race
74test-race:
75	for TEST in $(TEST_PKGS) ; do \
76    	go test $(BUILD_TAGS) -timeout $(TEST_TIMEOUT)s -race $(COVER_ARGS) $$TEST ; \
77    done
78
79.PHONY: test-short
80test-short:
81	for TEST in $(TEST_PKGS) ; do \
82    	go test $(BUILD_TAGS) -timeout $(TEST_TIMEOUT)s -short $(COVER_ARGS) $$TEST ; \
83    done
84
85.PHONY: update-bson-corpus-tests
86update-bson-corpus-tests:
87	etc/update-spec-tests.sh bson-corpus
88
89.PHONY: update-connection-string-tests
90update-connection-string-tests:
91	etc/update-spec-tests.sh connection-string
92
93.PHONY: update-crud-tests
94update-crud-tests:
95	etc/update-spec-tests.sh crud
96
97.PHONY: update-initial-dns-seedlist-discovery-tests
98update-initial-dns-seedlist-discovery-tests:
99	etc/update-spec-tests.sh initial-dns-seedlist-discovery
100
101.PHONY: update-max-staleness-tests
102update-max-staleness-tests:
103	etc/update-spec-tests.sh max-staleness
104
105.PHONY: update-server-discovery-and-monitoring-tests
106update-server-discovery-and-monitoring-tests:
107	etc/update-spec-tests.sh server-discovery-and-monitoring
108
109.PHONY: update-server-selection-tests
110update-server-selection-tests:
111	etc/update-spec-tests.sh server-selection
112
113.PHONY: update-notices
114update-notices:
115	etc/generate-notices.pl > THIRD-PARTY-NOTICES
116
117.PHONY: vet
118vet:
119	go vet -cgocall=false -composites=false -unusedstringmethods="Error" $(PKGS)
120
121
122# Evergreen specific targets
123.PHONY: evg-test
124evg-test:
125	for TEST in $(TEST_PKGS) ; do \
126		LD_LIBRARY_PATH=$(LD_LIBRARY_PATH) PKG_CONFIG_PATH=$(PKG_CONFIG_PATH) go test $(BUILD_TAGS) -v -timeout $(TEST_TIMEOUT)s $$TEST >> test.suite ; \
127	done
128
129.PHONY: evg-test-auth
130evg-test-auth:
131	go run -tags gssapi ./x/mongo/driver/examples/count/main.go -uri $(MONGODB_URI)
132
133.PHONY: evg-test-atlas
134evg-test-atlas:
135	go run ./mongo/testatlas/main.go $(ATLAS_URIS)
136
137# benchmark specific targets and support
138perf:driver-test-data.tar.gz
139	tar -zxf $< $(if $(eq $(UNAME_S),Darwin),-s , --transform=s)/data/perf/
140	@touch $@
141driver-test-data.tar.gz:
142	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
143benchmark:perf
144	go test $(BUILD_TAGS) -benchmem -bench=. ./benchmark
145driver-benchmark:perf
146	@go run cmd/godriver-benchmark/main.go | tee perf.suite
147.PHONY:benchmark driver-benchmark
148