From b23cd0ab5b1dc83c72099a2b6e579961472bf3d1 Mon Sep 17 00:00:00 2001 From: Ben Kochie Date: Sat, 19 Mar 2016 18:16:49 +0100 Subject: [PATCH] Update build * Add `.gitignore`. * Update Makefile.COMMON from prometheus/utils. --- .gitignore | 4 +++ Makefile.COMMON | 76 ++++++++++++++++++++++++++++--------------------- 2 files changed, 47 insertions(+), 33 deletions(-) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..26bcd4e --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.build/ +dependencies-stamp +*.tar.gz +statsd_exporter diff --git a/Makefile.COMMON b/Makefile.COMMON index 8133160..ac286fd 100644 --- a/Makefile.COMMON +++ b/Makefile.COMMON @@ -44,14 +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))) -ifeq ($(GOOS),darwin) - RELEASE_SUFFIX ?= -osx$(shell sw_vers -productVersion) -endif - -GO_VERSION ?= 1.4.2 -GOURL ?= https://golang.org/dl -GOPKG ?= go$(GO_VERSION).$(GOOS)-$(GOARCH)$(RELEASE_SUFFIX).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. @@ -60,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. @@ -72,30 +78,11 @@ 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) @@ -109,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 $@