From cdf83741c28e5491ce643bebdae25ecc73cba1d7 Mon Sep 17 00:00:00 2001 From: Julius Volz Date: Mon, 9 Mar 2015 19:14:42 +0100 Subject: [PATCH] Use Makefile.COMMON in node exporter. --- Makefile | 81 ++++++--------------------------- Makefile.COMMON | 117 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 131 insertions(+), 67 deletions(-) create mode 100644 Makefile.COMMON diff --git a/Makefile b/Makefile index 39f0961a..62ee8a65 100644 --- a/Makefile +++ b/Makefile @@ -1,70 +1,17 @@ -VERSION := 0.7.1 +# Copyright 2015 The Prometheus Authors +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. -SRC := $(wildcard *.go) +VERSION := 0.7.1 TARGET := node_exporter -OS := $(subst Darwin,darwin,$(subst Linux,linux,$(subst FreeBSD,freebsd,$(shell uname)))) -ARCH := $(subst x86_64,amd64,$(patsubst i%86,386,$(shell uname -m))) - -# The release engineers apparently need to key their binary artifacts to the -# Mac OS X release family. -MAC_OS_X_VERSION ?= 10.8 - -GOOS ?= $(OS) -GOARCH ?= $(ARCH) - -ifeq ($(GOOS),darwin) -RELEASE_SUFFIX ?= -osx$(MAC_OS_X_VERSION) -else -RELEASE_SUFFIX ?= -endif - -GO_VERSION ?= 1.4.1 -GOURL ?= https://golang.org/dl -GOPKG ?= go$(GO_VERSION).$(GOOS)-$(GOARCH)$(RELEASE_SUFFIX).tar.gz -GOROOT := $(CURDIR)/.deps/go -GOPATH := $(CURDIR)/.deps/gopath -GOCC := $(GOROOT)/bin/go -GOLIB := $(GOROOT)/pkg/$(GOOS)_$(GOARCH) -GO := GOROOT=$(GOROOT) GOPATH=$(GOPATH) $(GOCC) - -SUFFIX := $(GOOS)-$(GOARCH) -BINARY := $(TARGET) -ARCHIVE := $(TARGET)-$(VERSION).$(SUFFIX).tar.gz -SELFLINK := $(GOPATH)/src/github.com/prometheus/node_exporter - -default: $(BINARY) - -.deps/$(GOPKG): - mkdir -p .deps - curl -o .deps/$(GOPKG) -L $(GOURL)/$(GOPKG) - -$(GOCC): .deps/$(GOPKG) - tar -C .deps -xzf .deps/$(GOPKG) - touch $@ - -$(SELFLINK): - mkdir -p $(GOPATH)/src/github.com/prometheus - ln -s $(CURDIR) $(SELFLINK) - -dependencies: $(SRC) $(SELFLINK) - $(GO) get -d - -$(BINARY): $(GOCC) $(SRC) dependencies - $(GO) build $(GOFLAGS) -o $@ - -$(ARCHIVE): $(BINARY) - tar -czf $@ $< - -release: REMOTE ?= $(error "can't release, REMOTE not set") -release: REMOTE_DIR ?= $(error "can't release, REMOTE_DIR not set") -release: $(ARCHIVE) - scp $< $(REMOTE):$(REMOTE_DIR)/$(ARCHIVE) - -test: $(GOCC) dependencies - $(GO) test ./... - -clean: - rm -rf node_exporter .deps - -.PHONY: clean default dependencies release test +include Makefile.COMMON diff --git a/Makefile.COMMON b/Makefile.COMMON new file mode 100644 index 00000000..d229cb39 --- /dev/null +++ b/Makefile.COMMON @@ -0,0 +1,117 @@ +# Copyright 2015 The Prometheus Authors +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# THE AUTHORITATIVE VERSION OF THIS MAKEFILE LIVES IN: +# +# https://github.com/prometheus/utils +# +# PLEASE MAKE ANY CHANGES THERE AND PROPAGATE THEM TO ALL PROMETHEUS +# REPOSITORIES THAT ARE USING THIS MAKEFILE. +# +# This file provides common Makefile infrastructure for several Prometheus +# components. This includes make tasks for downloading Go, setting up a +# self-contained build environment, fetching Go dependencies, building +# binaries, running tests, and doing release management. This file is intended +# to be included from a project's Makefile, which needs to define the following +# variables, at a minimum: +# +# * VERSION - The current version of the project in question. +# * TARGET - The desired name of the built binary. +# +# Many of the variables defined below are defined conditionally (using '?'), +# which allows the project's main Makefile to override any of these settings, if +# needed. See also: +# +# https://www.gnu.org/software/make/manual/html_node/Flavors.html#Flavors. +# +# The including Makefile may define any number of extra targets that are +# specific to that project. + +VERSION ?= $(error VERSION not set in including Makefile) +TARGET ?= $(error TARGET not set in including Makefile) + +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 +GOCC ?= $(GOROOT)/bin/go +GO ?= GOROOT=$(GOROOT) GOPATH=$(GOPATH) $(GOCC) +GOFMT ?= $(GOROOT)/bin/gofmt + +ifeq ($(shell type go >/dev/null && go version | sed 's/.*go\([0-9.]*\).*/\1/'), $(GO_VERSION)) + GOROOT := $(shell go env GOROOT) +else + GOROOT := $(CURDIR)/.build/go$(GO_VERSION) +endif + +# Never honor GOBIN, should it be set at all. +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 $@ + +.PHONY: archive +archive: $(ARCHIVE) + +$(ARCHIVE): $(BINARY) + tar -czf $@ $< + +.PHONY: tag +tag: + git tag $(VERSION) + git push --tags + +.PHONY: test +test: $(GOCC) dependencies-stamp + $(GO) test ./... + +.PHONY: format +format: $(GOCC) + find . -iname '*.go' | egrep -v "^\./\.build|./generated|\./Godeps|\.(l|y)\.go" | xargs -n1 $(GOFMT) -w -s=true + +.PHONY: clean +clean: + rm -rf $(BINARY) $(ARCHIVE) .build *-stamp