GOOS ?= $(shell uname | tr A-Z a-z)
GOARCH ?= $(subst x86_64,amd64,$(patsubst i%86,386,$(shell uname -m)))
-GO_VERSION ?= 1.5.1
-GOURL ?= https://golang.org/dl
-GOPKG ?= go$(GO_VERSION).$(GOOS)-$(GOARCH).tar.gz
-GOPATH := $(CURDIR)/.build/gopath
+GO_VERSION ?= 1.5.3
+GOPATH ?= $(CURDIR)/.build/gopath
+ROOTPKG ?= github.com/prometheus/$(TARGET)
+SELFLINK ?= $(GOPATH)/src/$(ROOTPKG)
# Check for the correct version of go in the path. If we find it, use it.
# Otherwise, prepare to build go locally.
GOFMT ?= $(shell command -v "gofmt")
GO ?= GOPATH=$(GOPATH) $(GOCC)
else
+ GOURL ?= https://golang.org/dl
+ GOPKG ?= go$(GO_VERSION).$(GOOS)-$(GOARCH).tar.gz
GOROOT ?= $(CURDIR)/.build/go$(GO_VERSION)
GOCC ?= $(GOROOT)/bin/go
GOFMT ?= $(GOROOT)/bin/gofmt
- GO ?= GOROOT=$(GOROOT) GOPATH=$(GOPATH) $(GOCC)
+ GO ?= GOPATH=$(GOPATH) GOROOT=$(GOROOT) $(GOCC)
+endif
+
+# Use vendored dependencies if available. Otherwise try to download them.
+ifneq (,$(wildcard vendor))
+ DEPENDENCIES := $(shell find vendor/ -type f -iname '*.go')
+ GO := GO15VENDOREXPERIMENT=1 $(GO)
+else
+ DEPENDENCIES := dependencies-stamp
endif
# Never honor GOBIN, should it be set at all.
SUFFIX ?= $(GOOS)-$(GOARCH)
BINARY ?= $(TARGET)
ARCHIVE ?= $(TARGET)-$(VERSION).$(SUFFIX).tar.gz
-ROOTPKG ?= github.com/prometheus/$(TARGET)
-SELFLINK ?= $(GOPATH)/src/$(ROOTPKG)
default: $(BINARY)
-$(GOCC):
- @echo Go version $(GO_VERSION) required but not found in PATH.
- @echo About to download and install go$(GO_VERSION) to $(GOROOT)
- @echo Abort now if you want to manually install it system-wide instead.
- @echo
- @sleep 5
- mkdir -p $(GOROOT)
- curl -L $(GOURL)/$(GOPKG) | tar -C $(GOROOT) --strip 1 -xz
-
-$(SELFLINK):
- mkdir -p $(dir $@)
- ln -s $(CURDIR) $@
-
-dependencies-stamp: $(GOCC) $(SRC) | $(SELFLINK)
- $(GO) get -d
- touch $@
-
-$(BINARY): $(GOCC) $(SRC) dependencies-stamp Makefile Makefile.COMMON
- $(GO) build $(GOFLAGS) -o $@
+$(BINARY): $(GOCC) $(SRC) $(DEPENDENCIES) Makefile Makefile.COMMON | $(SELFLINK)
+ cd $(SELFLINK) && $(GO) build $(GOFLAGS) -o $@
.PHONY: archive
archive: $(ARCHIVE)
$(ARCHIVE): $(BINARY)
- tar --owner=root --group=root -czf $@ $<
+ tar -czf $@ $<
.PHONY: tag
tag:
git push --tags
.PHONY: test
-test: $(GOCC) dependencies-stamp
- $(GO) test ./...
+test: $(GOCC) $(DEPENDENCIES) | $(SELFLINK)
+ cd $(SELFLINK) && $(GO) test $$($(GO) list ./... | grep -v /vendor/)
.PHONY: format
format: $(GOCC)
- find . -iname '*.go' | egrep -v "^\./\.build|./generated|\./Godeps|\.(l|y)\.go" | xargs -n1 $(GOFMT) -w -s=true
+ find . -iname '*.go' | egrep -v "^\./\.build|./generated|\./vendor|\.(l|y)\.go" | xargs -n1 $(GOFMT) -w -s=true
.PHONY: clean
clean:
rm -rf $(BINARY) $(ARCHIVE) .build *-stamp
+
+
+
+$(GOCC):
+ @echo Go version $(GO_VERSION) required but not found in PATH.
+ @echo About to download and install go$(GO_VERSION) to $(GOROOT)
+ @echo Abort now if you want to manually install it system-wide instead.
+ @echo
+ @sleep 5
+ mkdir -p .build
+ # The archive contains a single directory called 'go/'.
+ curl -L $(GOURL)/$(GOPKG) | tar -C .build -xzf -
+ rm -rf $(GOROOT)
+ mv .build/go $(GOROOT)
+
+$(SELFLINK):
+ mkdir -p $(dir $@)
+ ln -s $(CURDIR) $@
+
+# Download dependencies if project doesn't vendor them.
+dependencies-stamp: $(GOCC) $(SRC) | $(SELFLINK)
+ $(GO) get -d
+ touch $@