From 67bd8cc9a2e58aeb3a753cc1b4f8f9d288a8784a Mon Sep 17 00:00:00 2001 From: morganamilo Date: Fri, 23 Mar 2018 04:23:16 +0000 Subject: [PATCH] Improve makefile Created .go/src which symlinks to vendor/. Running `make` now builds yay using the packages in vendor. This can still be overiden by running `make GOPATH=$HOME/go` Even though the makefile calls git to get the version, that can be overiden using `make MAJORVERSION=5 MINORVERSION=400`, skipping the call to git. This allows building yay/yay-bin using the makefile The yay binary is now always yay instead of taking the name of the parent directory. Added vet and fmt checks to `make test` for more checking. Reordered some stuff, made sure the dependency order is correct. Any command such as `make package` can be ran at any point, even after a `make clean` instead of having to execute the correct make commands in order. Changed install form using `go install` to a traditional install. The pkgbuilds can now use `make DESTDIR=$PKGDIR install`. Added uninstall to match. One thing this commit does not do is have proper recepies which depend on files instead of phonies. The reason for this is that it does not play that well with go's build system. Go is smart enough to only recompile needed files anyway. --- .go/src | 1 + Makefile | 63 ++++++++++++++++++++++++++++++++++++++++++-------------- 2 files changed, 48 insertions(+), 16 deletions(-) create mode 120000 .go/src diff --git a/.go/src b/.go/src new file mode 120000 index 00000000..9c39cc9f --- /dev/null +++ b/.go/src @@ -0,0 +1 @@ +../vendor \ No newline at end of file diff --git a/Makefile b/Makefile index 9b4675b5..33d86405 100644 --- a/Makefile +++ b/Makefile @@ -1,31 +1,62 @@ -.PHONY: all default install test build release clean -VERSION := 5.$(shell git rev-list --count master) -LDFLAGS=-ldflags '-s -w -X main.version=${VERSION}' -GOFILES := $(shell ls *.go | grep -v /vendor/) -ARCH=$(shell uname -m) -PKGNAME=yay +.PHONY: all default install uninstall test build release clean -PACKAGE=${PKGNAME}_${VERSION}_${ARCH} +PREFIX := /usr +DESTDIR := + +ifndef VERSION +MAJORVERSION := 5 +MINORVERSION ?= $(shell git rev-list --count master) +endif +VERSION := ${MAJORVERSION}.${MINORVERSION} + +LDFLAGS := -ldflags '-s -w -X main.version=${VERSION}' +GOFILES := $(shell ls *.go | grep -v /vendor/) +ARCH := $(shell uname -m) +PKGNAME := yay +BINNAME := yay +PACKAGE := ${PKGNAME}_${VERSION}_${ARCH} + +export GOPATH=$(shell pwd)/.go +export GOROOT=/usr/lib/go default: build -all: clean build release package +all: | clean package install: - go install -v ${LDFLAGS} ${GO_FILES} + install -Dm755 ${BINNAME} $(DESTDIR)$(PREFIX)/bin/${BINNAME} + install -Dm644 doc/${PKGNAME}.8 $(DESTDIR)$(PREFIX)/share/man/man8/${PKGNAME}.8 + install -Dm644 completions/bash $(DESTDIR)$(PREFIX)/share/bash-completion/completions/${PKGNAME} + install -Dm644 completions/zsh $(DESTDIR)$(PREFIX)/share/zsh/site-functions/_${PKGNAME} + install -Dm644 completions/fish $(DESTDIR)$(PREFIX)/share/fish/vendor_completions.d/${PKGNAME}.fish + +uninstall: + rm -f $(DESTDIR)$(PREFIX)/bin/${BINNAME} + rm -f $(DESTDIR)$(PREFIX)/share/man/man8/${PKGNAME}.8 + rm -f $(DESTDIR)$(PREFIX)/share/bash-completion/completions/${PKGNAME} + rm -f $(DESTDIR)$(PREFIX)/share/zsh/site-functions/_${PKGNAME} + rm -f $(DESTDIR)$(PREFIX)/share/fish/vendor_completions.d/${PKGNAME}.fish + test: - go test ./... + gofmt -l *.go + @test -z "$$(gofmt -l *.go)" || (echo "Files need to be linted" && false) + go vet + go test -v + build: - go build -v ${LDFLAGS} -release: + go build -v ${LDFLAGS} -o ${BINNAME} + +release: | test build mkdir ${PACKAGE} - cp ./yay ${PACKAGE}/ - cp ./doc/yay.8 ${PACKAGE}/ + cp ./${BINNAME} ${PACKAGE}/ + cp ./doc/${PKGNAME}.8 ${PACKAGE}/ cp ./completions/zsh ${PACKAGE}/ cp ./completions/fish ${PACKAGE}/ cp ./completions/bash ${PACKAGE}/ -package: + +package: release tar -czvf ${PACKAGE}.tar.gz ${PACKAGE} clean: - -rm -rf ${PKGNAME}_* + rm -rf ${PKGNAME}_* + rm -f ${BINNAME}