Makefile 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. .PHONY: all default install uninstall test build release clean package
  2. PREFIX := /usr/local
  3. DESTDIR :=
  4. MAJORVERSION := 9
  5. MINORVERSION ?= 1
  6. PATCHVERSION := 0
  7. VERSION ?= ${MAJORVERSION}.${MINORVERSION}.${PATCHVERSION}
  8. LDFLAGS := -ldflags '-s -w -X main.version=${VERSION}'
  9. MOD := -mod=vendor
  10. export GO111MODULE=on
  11. ARCH := $(shell uname -m)
  12. GOCC := $(shell go version)
  13. PKGNAME := yay
  14. BINNAME := yay
  15. PACKAGE := ${PKGNAME}_${VERSION}_${ARCH}
  16. ifneq (,$(findstring gccgo,$(GOCC)))
  17. export GOPATH=$(shell pwd)/.go
  18. LDFLAGS := -gccgoflags '-s -w'
  19. MOD :=
  20. endif
  21. default: build
  22. all: | clean package
  23. install:
  24. install -Dm755 ${BINNAME} $(DESTDIR)$(PREFIX)/bin/${BINNAME}
  25. install -Dm644 doc/${PKGNAME}.8 $(DESTDIR)$(PREFIX)/share/man/man8/${PKGNAME}.8
  26. install -Dm644 completions/bash $(DESTDIR)$(PREFIX)/share/bash-completion/completions/${PKGNAME}
  27. install -Dm644 completions/zsh $(DESTDIR)$(PREFIX)/share/zsh/site-functions/_${PKGNAME}
  28. install -Dm644 completions/fish $(DESTDIR)$(PREFIX)/share/fish/vendor_completions.d/${PKGNAME}.fish
  29. uninstall:
  30. rm -f $(DESTDIR)$(PREFIX)/bin/${BINNAME}
  31. rm -f $(DESTDIR)$(PREFIX)/share/man/man8/${PKGNAME}.8
  32. rm -f $(DESTDIR)$(PREFIX)/share/bash-completion/completions/${PKGNAME}
  33. rm -f $(DESTDIR)$(PREFIX)/share/zsh/site-functions/_${PKGNAME}
  34. rm -f $(DESTDIR)$(PREFIX)/share/fish/vendor_completions.d/${PKGNAME}.fish
  35. test:
  36. gofmt -l *.go
  37. @test -z "$$(gofmt -l *.go)" || (echo "Files need to be linted" && false)
  38. go vet
  39. go test -v
  40. build:
  41. go build -v ${LDFLAGS} -o ${BINNAME} ${MOD}
  42. release: | test build
  43. mkdir ${PACKAGE}
  44. cp ./${BINNAME} ${PACKAGE}/
  45. cp ./doc/${PKGNAME}.8 ${PACKAGE}/
  46. cp ./completions/zsh ${PACKAGE}/
  47. cp ./completions/fish ${PACKAGE}/
  48. cp ./completions/bash ${PACKAGE}/
  49. docker-release-aarch64:
  50. docker build -f build/aarch64.Dockerfile -t yay-aarch64:${VERSION} .
  51. docker run --name yay-aarch64 yay-aarch64:${VERSION}
  52. docker cp yay-aarch64:${PKGNAME}_${VERSION}_aarch64.tar.gz ${PKGNAME}_${VERSION}_aarch64.tar.gz
  53. docker container rm yay-aarch64
  54. docker-release-x86_64:
  55. docker build -f build/x86_64.Dockerfile -t yay-x86_64:${VERSION} .
  56. docker create --name yay-x86_64 yay-x86_64:${VERSION}
  57. docker cp yay-x86_64:${PKGNAME}_${VERSION}_x86_64.tar.gz ${PKGNAME}_${VERSION}_x86_64.tar.gz
  58. docker container rm yay-x86_64
  59. docker-release: | docker-release-x86_64 docker-release-aarch64
  60. docker-build:
  61. docker build -f build/${ARCH}.Dockerfile --build-arg MAKE_ARG=build -t yay-build-${ARCH}:${VERSION} .
  62. docker create --name yay-build-${ARCH} yay-build-${ARCH}:${VERSION}
  63. docker cp yay-build-${ARCH}:${BINNAME} ${BINNAME}
  64. docker container rm yay-build-${ARCH}
  65. package: release
  66. tar -czvf ${PACKAGE}.tar.gz ${PACKAGE}
  67. clean:
  68. rm -rf ${PKGNAME}_*
  69. rm -f ${BINNAME}