Skip to content

Commit

Permalink
Use a separate Makefile for gotools
Browse files Browse the repository at this point in the history
Lets try to simplify the top-level makefile by moving some of the major
subsystems to their own area.

Signed-off-by: Greg Haskins <[email protected]>
  • Loading branch information
ghaskins committed Jun 23, 2016
1 parent 1f95fd1 commit 7de8265
Show file tree
Hide file tree
Showing 2 changed files with 64 additions and 31 deletions.
45 changes: 14 additions & 31 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -45,27 +45,25 @@ EXECUTABLES = go docker git
K := $(foreach exec,$(EXECUTABLES),\
$(if $(shell which $(exec)),some string,$(error "No $(exec) in PATH: Check dependencies")))

# SUBDIRS are components that have their own Makefiles that we can invoke
SUBDIRS = gotools
SUBDIRS:=$(strip $(SUBDIRS))

# Make our baseimage depend on any changes to images/base or scripts/provision
BASEIMAGE_RELEASE = $(shell cat ./images/base/release)
BASEIMAGE_DEPS = $(shell git ls-files images/base scripts/provision)

GOTOOLS = golint govendor goimports protoc-gen-go ginkgo gomega
GOTOOLS_BIN = $(patsubst %,$(GOPATH)/bin/%, $(GOTOOLS))

PROJECT_FILES = $(shell git ls-files)
IMAGES = base src ccenv peer membersrvc

# go tool->path mapping
go.fqp.govendor := github.com/kardianos/govendor
go.fqp.golint := github.com/golang/lint/golint
go.fqp.goimports := golang.org/x/tools/cmd/goimports
go.fqp.ginkgo := github.com/onsi/ginkgo/ginkgo
go.fqp.gomega := github.com/onsi/gomega

all: peer membersrvc checks

checks: linter unit-test behave

.PHONY: $(SUBDIRS)
$(SUBDIRS):
cd $@ && $(MAKE)

.PHONY: peer
peer: build/bin/peer
peer-image: build/image/peer/.dummy
Expand Down Expand Up @@ -93,8 +91,6 @@ behave: behave-deps
@echo "Running behave tests"
@cd bddtests; behave $(BEHAVE_OPTS)

gotools: $(GOTOOLS_BIN)

linter: gotools
@echo "LINT: Running code checks.."
@echo "Running go vet"
Expand All @@ -109,22 +105,6 @@ linter: gotools
@echo "Running goimports"
@./scripts/goimports.sh

# Special override for protoc-gen-go since we want to use the version vendored with the project
gotool.protoc-gen-go:
mkdir -p $(GOPATH)/src/github.com/golang/protobuf/
cp -r $(GOPATH)/src/github.com/hyperledger/fabric/vendor/github.com/golang/protobuf/ $(GOPATH)/src/github.com/golang/
go install github.com/golang/protobuf/protoc-gen-go
rm -rf $(GOPATH)/src/github.com/golang/protobuf

# Default rule for gotools uses the name->path map for a generic 'go get' style build
gotool.%:
$(eval TOOL = ${subst gotool.,,${@}})
go get ${go.fqp.${TOOL}}

$(GOPATH)/bin/%:
$(eval TOOL = ${subst $(GOPATH)/bin/,,${@}})
$(MAKE) gotool.$(TOOL)

# We (re)build protoc-gen-go from within docker context so that
# we may later inject the binary into a different docker environment
# This is necessary since we cannot guarantee that binaries built
Expand Down Expand Up @@ -227,11 +207,14 @@ node-sdk:
node-sdk-unit-tests: node-sdk
@./sdk/node/bin/run-unit-tests.sh

.PHONY: $(SUBDIRS:=-clean)
$(SUBDIRS:=-clean):
cd $(patsubst %-clean,%,$@) && $(MAKE) clean

.PHONY: clean
clean: images-clean
clean: images-clean $(filter-out gotools-clean, $(SUBDIRS:=-clean))
-@rm -rf build ||:

.PHONY: dist-clean
dist-clean: clean
dist-clean: clean gotools-clean
-@rm -rf /var/hyperledger/* ||:
-@rm -f $(GOTOOLS_BIN) ||:
50 changes: 50 additions & 0 deletions gotools/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you 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.
#

GOTOOLS = golint govendor goimports protoc-gen-go ginkgo gomega
GOTOOLS_BIN = $(patsubst %,$(GOPATH)/bin/%, $(GOTOOLS))

# go tool->path mapping
go.fqp.govendor := github.com/kardianos/govendor
go.fqp.golint := github.com/golang/lint/golint
go.fqp.goimports := golang.org/x/tools/cmd/goimports
go.fqp.ginkgo := github.com/onsi/ginkgo/ginkgo
go.fqp.gomega := github.com/onsi/gomega

all: $(GOTOOLS_BIN)

# Special override for protoc-gen-go since we want to use the version vendored with the project
gotool.protoc-gen-go:
mkdir -p $(GOPATH)/src/github.com/golang/protobuf/
cp -r $(GOPATH)/src/github.com/hyperledger/fabric/vendor/github.com/golang/protobuf/ $(GOPATH)/src/github.com/golang/
go install github.com/golang/protobuf/protoc-gen-go
rm -rf $(GOPATH)/src/github.com/golang/protobuf

# Default rule for gotools uses the name->path map for a generic 'go get' style build
gotool.%:
$(eval TOOL = ${subst gotool.,,${@}})
@echo "Building $(TOOL)"
go get ${go.fqp.${TOOL}}

$(GOPATH)/bin/%:
$(eval TOOL = ${subst $(GOPATH)/bin/,,${@}})
@$(MAKE) gotool.$(TOOL)

.PHONY: clean
clean:
-@rm -f $(GOTOOLS_BIN) ||:

0 comments on commit 7de8265

Please sign in to comment.