Update build

* Add `.gitignore`.
* Update Makefile.COMMON from prometheus/utils.
This commit is contained in:
Ben Kochie 2016-03-19 18:16:49 +01:00
parent e9eb193ff9
commit b23cd0ab5b
2 changed files with 47 additions and 33 deletions

4
.gitignore vendored Normal file
View file

@ -0,0 +1,4 @@
.build/
dependencies-stamp
*.tar.gz
statsd_exporter

View file

@ -44,14 +44,10 @@ SRC ?= $(shell find . -type f -name "*.go" ! -path "./.build/*")
GOOS ?= $(shell uname | tr A-Z a-z) GOOS ?= $(shell uname | tr A-Z a-z)
GOARCH ?= $(subst x86_64,amd64,$(patsubst i%86,386,$(shell uname -m))) GOARCH ?= $(subst x86_64,amd64,$(patsubst i%86,386,$(shell uname -m)))
ifeq ($(GOOS),darwin) GO_VERSION ?= 1.5.3
RELEASE_SUFFIX ?= -osx$(shell sw_vers -productVersion) GOPATH ?= $(CURDIR)/.build/gopath
endif ROOTPKG ?= github.com/prometheus/$(TARGET)
SELFLINK ?= $(GOPATH)/src/$(ROOTPKG)
GO_VERSION ?= 1.4.2
GOURL ?= https://golang.org/dl
GOPKG ?= go$(GO_VERSION).$(GOOS)-$(GOARCH)$(RELEASE_SUFFIX).tar.gz
GOPATH := $(CURDIR)/.build/gopath
# Check for the correct version of go in the path. If we find it, use it. # Check for the correct version of go in the path. If we find it, use it.
# Otherwise, prepare to build go locally. # 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") GOFMT ?= $(shell command -v "gofmt")
GO ?= GOPATH=$(GOPATH) $(GOCC) GO ?= GOPATH=$(GOPATH) $(GOCC)
else else
GOURL ?= https://golang.org/dl
GOPKG ?= go$(GO_VERSION).$(GOOS)-$(GOARCH).tar.gz
GOROOT ?= $(CURDIR)/.build/go$(GO_VERSION) GOROOT ?= $(CURDIR)/.build/go$(GO_VERSION)
GOCC ?= $(GOROOT)/bin/go GOCC ?= $(GOROOT)/bin/go
GOFMT ?= $(GOROOT)/bin/gofmt 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 endif
# Never honor GOBIN, should it be set at all. # Never honor GOBIN, should it be set at all.
@ -72,30 +78,11 @@ unexport GOBIN
SUFFIX ?= $(GOOS)-$(GOARCH) SUFFIX ?= $(GOOS)-$(GOARCH)
BINARY ?= $(TARGET) BINARY ?= $(TARGET)
ARCHIVE ?= $(TARGET)-$(VERSION).$(SUFFIX).tar.gz ARCHIVE ?= $(TARGET)-$(VERSION).$(SUFFIX).tar.gz
ROOTPKG ?= github.com/prometheus/$(TARGET)
SELFLINK ?= $(GOPATH)/src/$(ROOTPKG)
default: $(BINARY) default: $(BINARY)
$(GOCC): $(BINARY): $(GOCC) $(SRC) $(DEPENDENCIES) Makefile Makefile.COMMON | $(SELFLINK)
@echo Go version $(GO_VERSION) required but not found in PATH. cd $(SELFLINK) && $(GO) build $(GOFLAGS) -o $@
@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 $@
.PHONY: archive .PHONY: archive
archive: $(ARCHIVE) archive: $(ARCHIVE)
@ -109,13 +96,36 @@ tag:
git push --tags git push --tags
.PHONY: test .PHONY: test
test: $(GOCC) dependencies-stamp test: $(GOCC) $(DEPENDENCIES) | $(SELFLINK)
$(GO) test ./... cd $(SELFLINK) && $(GO) test $$($(GO) list ./... | grep -v /vendor/)
.PHONY: format .PHONY: format
format: $(GOCC) 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 .PHONY: clean
clean: clean:
rm -rf $(BINARY) $(ARCHIVE) .build *-stamp 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 $@