Update Makefile.COMMON from utils repo
authorRichard Hartmann <rih@space.net>
Wed, 27 Jan 2016 07:25:43 +0000 (08:25 +0100)
committerRichard Hartmann <rih@space.net>
Wed, 27 Jan 2016 07:25:43 +0000 (08:25 +0100)
Makefile.COMMON

index 29f8ec130a97be4b5d9f31e9724c2d6783cb029a..ac286fd41cfaf0d015d94e12dcd1ed9d903f4cc1 100644 (file)
@@ -44,10 +44,10 @@ SRC    ?= $(shell find . -type f -name "*.go" ! -path "./.build/*")
 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.
@@ -56,10 +56,20 @@ ifeq ($(shell command -v "go" >/dev/null && go version | sed -e 's/^[^0-9.]*\([0
        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.
@@ -68,36 +78,17 @@ unexport GOBIN
 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:
@@ -105,13 +96,36 @@ 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 $@