2017-01-11 09:07:35 +00:00
|
|
|
# A Self-Documenting Makefile: http://marmelab.com/blog/2016/02/29/auto-documented-makefile.html
|
2014-11-24 15:45:48 +00:00
|
|
|
|
2017-06-13 16:42:45 +00:00
|
|
|
PACKAGE = github.com/gohugoio/hugo
|
2017-01-11 09:07:35 +00:00
|
|
|
COMMIT_HASH = `git rev-parse --short HEAD 2>/dev/null`
|
|
|
|
BUILD_DATE = `date +%FT%T%z`
|
|
|
|
LDFLAGS = -ldflags "-X ${PACKAGE}/hugolib.CommitHash=${COMMIT_HASH} -X ${PACKAGE}/hugolib.BuildDate=${BUILD_DATE}"
|
|
|
|
NOGI_LDFLAGS = -ldflags "-X ${PACKAGE}/hugolib.BuildDate=${BUILD_DATE}"
|
2014-11-24 15:45:48 +00:00
|
|
|
|
2017-07-15 21:18:38 +00:00
|
|
|
# allow user to override go executable by running as GOEXE=xxx make ... on unix-like systems
|
|
|
|
GOEXE ?= go
|
|
|
|
|
2017-01-11 09:07:35 +00:00
|
|
|
.PHONY: vendor docker check fmt lint test test-race vet test-cover-html help
|
|
|
|
.DEFAULT_GOAL := help
|
2014-11-24 15:45:48 +00:00
|
|
|
|
2017-01-11 09:07:35 +00:00
|
|
|
vendor: ## Install govendor and sync Hugo's vendored dependencies
|
2017-07-15 21:18:38 +00:00
|
|
|
${GOEXE} get github.com/kardianos/govendor
|
2017-01-11 09:07:35 +00:00
|
|
|
govendor sync ${PACKAGE}
|
2014-11-24 15:45:48 +00:00
|
|
|
|
2017-01-11 09:07:35 +00:00
|
|
|
hugo: vendor ## Build hugo binary
|
2017-07-15 21:18:38 +00:00
|
|
|
${GOEXE} build ${LDFLAGS} ${PACKAGE}
|
2014-12-09 02:54:49 +00:00
|
|
|
|
2017-01-11 09:07:35 +00:00
|
|
|
hugo-race: vendor ## Build hugo binary with race detector enabled
|
2017-07-15 21:18:38 +00:00
|
|
|
${GOEXE} build -race ${LDFLAGS} ${PACKAGE}
|
2014-11-24 15:45:48 +00:00
|
|
|
|
2017-01-11 09:07:35 +00:00
|
|
|
install: vendor ## Install hugo binary
|
2017-07-15 21:18:38 +00:00
|
|
|
${GOEXE} install ${LDFLAGS} ${PACKAGE}
|
2014-12-09 02:54:49 +00:00
|
|
|
|
2017-01-11 09:07:35 +00:00
|
|
|
hugo-no-gitinfo: LDFLAGS = ${NOGI_LDFLAGS}
|
|
|
|
hugo-no-gitinfo: vendor hugo ## Build hugo without git info
|
2014-11-24 15:45:48 +00:00
|
|
|
|
2017-01-11 09:07:35 +00:00
|
|
|
docker: ## Build hugo Docker container
|
2016-01-04 07:27:21 +00:00
|
|
|
docker build -t hugo .
|
|
|
|
docker rm -f hugo-build || true
|
|
|
|
docker run --name hugo-build hugo ls /go/bin
|
|
|
|
docker cp hugo-build:/go/bin/hugo .
|
|
|
|
docker rm hugo-build
|
2016-03-21 14:49:18 +00:00
|
|
|
|
2017-01-11 09:07:35 +00:00
|
|
|
govendor: vendor # Deprecated: use "vendor" target
|
|
|
|
get: vendor # Deprecated: use "vendor"
|
|
|
|
gitinfo: hugo # Deprecated: use "hugo" target
|
|
|
|
install-gitinfo: install # Deprecated: use "install" target
|
|
|
|
no-git-info: hugo-no-gitinfo # Deprecated: use "hugo-no-gitinfo" target
|
2016-03-21 14:49:18 +00:00
|
|
|
|
2017-04-19 16:12:01 +00:00
|
|
|
check: test-race test386 fmt vet ## Run tests and linters
|
2016-03-21 14:49:18 +00:00
|
|
|
|
2017-01-11 09:07:35 +00:00
|
|
|
test386: ## Run tests in 32-bit mode
|
|
|
|
GOARCH=386 govendor test +local
|
|
|
|
|
|
|
|
test: ## Run tests
|
|
|
|
govendor test +local
|
|
|
|
|
|
|
|
test-race: ## Run tests with race detector
|
|
|
|
govendor test -race +local
|
2016-03-21 14:49:18 +00:00
|
|
|
|
2017-01-11 09:07:35 +00:00
|
|
|
fmt: ## Run gofmt linter
|
2017-06-13 17:06:34 +00:00
|
|
|
@for d in `govendor list -no-status +local | sed 's/github.com.gohugoio.hugo/./'` ; do \
|
2016-03-21 14:49:18 +00:00
|
|
|
if [ "`gofmt -l $$d/*.go | tee /dev/stderr`" ]; then \
|
|
|
|
echo "^ improperly formatted go files" && echo && exit 1; \
|
|
|
|
fi \
|
|
|
|
done
|
|
|
|
|
2017-01-11 09:07:35 +00:00
|
|
|
lint: ## Run golint linter
|
2017-06-13 17:06:34 +00:00
|
|
|
@for d in `govendor list -no-status +local | sed 's/github.com.gohugoio.hugo/./'` ; do \
|
2016-09-18 22:10:10 +00:00
|
|
|
if [ "`golint $$d | tee /dev/stderr`" ]; then \
|
|
|
|
echo "^ golint errors!" && echo && exit 1; \
|
|
|
|
fi \
|
|
|
|
done
|
2016-03-21 14:49:18 +00:00
|
|
|
|
2017-01-11 09:07:35 +00:00
|
|
|
vet: ## Run go vet linter
|
2016-09-18 22:10:10 +00:00
|
|
|
@if [ "`govendor vet +local | tee /dev/stderr`" ]; then \
|
2016-03-21 14:49:18 +00:00
|
|
|
echo "^ go vet errors!" && echo && exit 1; \
|
|
|
|
fi
|
|
|
|
|
2017-06-13 17:06:34 +00:00
|
|
|
test-cover-html: PACKAGES = $(shell govendor list -no-status +local | sed 's/github.com.gohugoio.hugo/./')
|
2017-01-11 09:07:35 +00:00
|
|
|
test-cover-html: ## Generate test coverage report
|
2016-11-27 22:21:10 +00:00
|
|
|
echo "mode: count" > coverage-all.out
|
|
|
|
$(foreach pkg,$(PACKAGES),\
|
|
|
|
govendor test -coverprofile=coverage.out -covermode=count $(pkg);\
|
|
|
|
tail -n +2 coverage.out >> coverage-all.out;)
|
2017-07-15 21:18:38 +00:00
|
|
|
${GOEXE} tool cover -html=coverage-all.out
|
2017-01-11 09:07:35 +00:00
|
|
|
|
2017-04-19 13:05:20 +00:00
|
|
|
check-vendor: ## Verify that vendored packages match git HEAD
|
2017-04-19 18:41:52 +00:00
|
|
|
@git diff-index --quiet HEAD vendor/ || (echo "check-vendor target failed: vendored packages out of sync" && echo && git diff vendor/ && exit 1)
|
2017-04-19 13:05:20 +00:00
|
|
|
|
2017-01-11 09:07:35 +00:00
|
|
|
help:
|
|
|
|
@grep -E '^[a-zA-Z0-9_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'
|