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