github.com/whamcloud/lemur@v0.0.0-20190827193804-4655df8a52af/Makefile (about) 1 # variable definitions 2 NAME := lemur 3 DESC := Lustre HSM Agent and Movers 4 PREFIX ?= $(PWD)/usr/local 5 BUILDROOT ?= 6 VERSION := $(shell git describe --tags --always --dirty | tr '-' '_') 7 BUILDDATE := $(shell date -u +"%B %d, %Y") 8 GOVERSION := $(shell go version) 9 PKG_RELEASE ?= 1 10 PROJECT_URL := "https://github.com/intel-hpdd/$(NAME)" 11 LDFLAGS := -X 'main.version=$(VERSION)' 12 FEATURE_TESTS := uat/features 13 14 CMD_SOURCES := $(shell find cmd -name main.go) 15 FEATURE_FILES := $(shell find $(FEATURE_TESTS) -type f -name *.feature -exec basename {} \; | tr '\n' ' ') 16 17 TARGETS := $(patsubst cmd/%/main.go,%,$(CMD_SOURCES)) 18 RACE_TARGETS := $(patsubst cmd/%/main.go,%.race,$(CMD_SOURCES)) 19 PANDOC_BIN := $(shell if which pandoc >/dev/null 2>&1; then echo pandoc; else echo true; fi) 20 21 $(TARGETS): 22 go build -v -i -ldflags "$(LDFLAGS)" -o $@ ./cmd/$@ 23 24 $(RACE_TARGETS): 25 go build -v -i -ldflags "$(LDFLAGS)" --race -o $@ ./cmd/$(basename $@) 26 27 # build tasks 28 rpm: docker-rpm 29 docker-rpm: docker 30 rm -fr $(CURDIR)/output 31 mkdir -p $(CURDIR)/output/{BUILD,BUILDROOT,RPMS/{noarch,x86_64},SPECS,SRPMS} 32 docker run --rm -v $(CURDIR):/source:z -v $(CURDIR)/output:/root/rpmbuild:z lemur-rpm-build 33 34 local-rpm: 35 $(MAKE) -C packaging/rpm NAME=$(NAME) VERSION=$(VERSION) RELEASE=$(PKG_RELEASE) URL=$(PROJECT_URL) 36 37 docker: 38 $(MAKE) -C packaging/docker 39 40 vendor: 41 $(MAKE) -C vendor 42 43 # development tasks 44 check: test uat 45 46 test: 47 go test $$(go list ./... | egrep -v '(*vendor/*|*uat/*)' ) 48 49 uat: $(RACE_TARGETS) 50 @make -C uat test PATH=$(PWD):$(PATH) 51 52 coverage: 53 @-go test -v -coverprofile=cover.out $$(go list ./... | grep -v /vendor/ | grep -v /cmd/) 54 @-go tool cover -html=cover.out -o cover.html 55 56 benchmark: 57 @echo "Running tests..." 58 @go test -bench=. $$(go list ./... | grep -v /vendor/ | grep -v /cmd/) 59 60 %.1: man/%.1.md 61 sed "s/REPLACE_DATE/$(BUILDDATE)/" $< | $(PANDOC_BIN) -s -t man -o $@ 62 63 # Man pages 64 MAN_SOURCES := $(shell find man -name "*.md") 65 MAN_TARGETS := $(patsubst man/%.md,%,$(MAN_SOURCES)) 66 67 docs: $(MAN_TARGETS) 68 69 all: lint $(TARGETS) $(MAN_TARGETS) 70 .DEFAULT_GOAL:=all 71 72 # Installation 73 INSTALLED_TARGETS = $(addprefix $(PREFIX)/bin/, $(TARGETS)) 74 INSTALLED_MAN_TARGETS = $(addprefix $(PREFIX)/share/man/man1/, $(MAN_TARGETS)) 75 # test targets 76 UAT_RACE_TARGETS_DEST := libexec/$(NAME)-testing 77 INSTALLED_RACE_TARGETS = $(addprefix $(PREFIX)/$(UAT_RACE_TARGETS_DEST)/, $(RACE_TARGETS)) 78 UAT_FEATURES_DEST := share/$(NAME)/test/features 79 INSTALLED_FEATURES = $(addprefix $(PREFIX)/$(UAT_FEATURES_DEST)/, $(FEATURE_FILES)) 80 81 # Sample config files 82 # 83 EXAMPLES = $(shell find doc -name "*.example") 84 EXAMPLE_TARGETS = $(patsubst doc/%,%,$(EXAMPLES)) 85 INSTALLED_EXAMPLES = $(addprefix $(PREFIX)/etc/lhsmd/, $(EXAMPLE_TARGETS)) 86 87 # Cleanliness... 88 lint: 89 @ln -sf vendor src 90 git rev-parse HEAD 91 GOPATH=$(PWD):$(GOPATH) gometalinter -j2 --vendor -D gotype -D errcheck -D dupl -D gocyclo --deadline 60s ./... --exclude pdm/ 92 @rm src 93 94 # install tasks 95 $(PREFIX)/bin/%: % 96 install -d $$(dirname $@) 97 install -m 755 $< $@ 98 99 $(PREFIX)/share/man/man1/%: % 100 install -d $$(dirname $@) 101 install -m 644 $< $@ 102 103 $(PREFIX)/$(UAT_FEATURES_DEST)/%: $(FEATURE_TESTS)/% 104 install -d $$(dirname $@) 105 install -m 644 $< $@ 106 107 $(PREFIX)/$(UAT_RACE_TARGETS_DEST)/%: % 108 install -d $$(dirname $@) 109 install -m 755 $< $@ 110 111 $(PREFIX)/etc/lhsmd/%: 112 install -d $$(dirname $@) 113 install -m 644 doc/$$(basename $@) $@ 114 115 install-example: $(INSTALLED_EXAMPLES) 116 117 install: $(INSTALLED_TARGETS) $(INSTALLED_MAN_TARGETS) 118 119 local-install: 120 $(MAKE) install PREFIX=usr/local 121 122 123 $(NAME)-uat-runner: uat/*.go 124 cd uat && \ 125 go test -c -o $(PWD)/$@ -ldflags="-X 'github.com/intel-hpdd/lemur/uat.runDir=$(subst $(BUILDROOT),,$(dir $(PREFIX)/$(UAT_FEATURES_DEST)))' -X 'github.com/intel-hpdd/lemur/uat.raceBinPath=$(subst $(BUILDROOT),,$(PREFIX)/$(UAT_RACE_TARGETS_DEST))'" 126 127 uat-install: $(NAME)-uat-runner $(INSTALLED_RACE_TARGETS) $(INSTALLED_FEATURES) 128 install -m 755 $(NAME)-uat-runner $(PREFIX)/$(UAT_RACE_TARGETS_DEST) 129 130 # clean up tasks 131 clean-docs: 132 rm -rf ./docs 133 134 clean-deps: 135 rm -rf $(DEPDIR) 136 137 clean: clean-docs clean-deps 138 rm -rf ./usr 139 rm -f $(TARGETS) 140 rm -f $(RACE_TARGETS) 141 rm -f $(MAN_TARGETS) 142 rm -f $(NAME)-uat-runner 143 144 .PHONY: $(TARGETS) $(RACE_TARGETS) 145 .PHONY: all check test uat rpm deb install local-install packages coverage docs jekyll deploy-docs clean-docs clean-deps clean uat-install vendor