Makefile 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. export GO111MODULE=on
  2. GOPROXY ?= https://gocenter.io,direct
  3. export GOPROXY
  4. BUILD_TAG = devel
  5. ARCH ?= $(shell uname -m)
  6. BIN := yay
  7. DESTDIR :=
  8. GO ?= go
  9. PKGNAME := yay
  10. PREFIX := /usr/local
  11. MAJORVERSION := 10
  12. MINORVERSION := 0
  13. PATCHVERSION := 0
  14. VERSION ?= ${MAJORVERSION}.${MINORVERSION}.${PATCHVERSION}
  15. LOCALEDIR := po
  16. SYSTEMLOCALEPATH := $(PREFIX)/share/locale/
  17. LANGS := pt pt_BR en es eu fr_FR pl_PL ru_RU zh_CN
  18. POTFILE := default.pot
  19. POFILES := $(addprefix $(LOCALEDIR)/,$(addsuffix .po,$(LANGS)))
  20. MOFILES := $(POFILES:.po=.mo)
  21. GOFLAGS ?= -v -trimpath -mod=readonly -modcacherw
  22. EXTRA_GOFLAGS ?= -buildmode=pie
  23. LDFLAGS := $(LDFLAGS) -X "main.yayVersion=${VERSION}" -X "main.localePath=${SYSTEMLOCALEPATH}"
  24. RELEASE_DIR := ${PKGNAME}_${VERSION}_${ARCH}
  25. PACKAGE := $(RELEASE_DIR).tar.gz
  26. SOURCES ?= $(shell find . -name "*.go" -type f)
  27. .PRECIOUS: ${LOCALEDIR}/%.po
  28. .PHONY: default
  29. default: build
  30. .PHONY: all
  31. all: | clean release
  32. .PHONY: clean
  33. clean:
  34. $(GO) clean $(GOFLAGS) -i ./...
  35. rm -rf $(BIN) $(PKGNAME)_*
  36. .PHONY: test_lint
  37. test_lint: test lint
  38. .PHONY: test
  39. test:
  40. $(GO) vet $(GOFLAGS) ./...
  41. @test -z "$$(gofmt -l $(SOURCES))" || (echo "Files need to be linted. Use make fmt" && false)
  42. $(GO) test $(GOFLAGS) ./...
  43. .PHONY: build
  44. build: $(BIN)
  45. .PHONY: release
  46. release: $(PACKAGE)
  47. .PHONY: docker-release-all
  48. docker-release-all:
  49. make docker-release-armv7h ARCH=armv7h
  50. make docker-release-x86_64 ARCH=x86_64
  51. make docker-release-aarch64 ARCH=aarch64
  52. .PHONY: docker-release-armv7h
  53. docker-release-armv7h:
  54. docker build --build-arg="BUILD_TAG=arm32v7-devel" -t yay-$(ARCH):${VERSION} .
  55. docker run -e="ARCH=$(ARCH)" --name yay-$(ARCH) yay-$(ARCH):${VERSION} make release VERSION=${VERSION} PREFIX=${PREFIX}
  56. docker cp yay-$(ARCH):/app/${PACKAGE} $(PACKAGE)
  57. docker container rm yay-$(ARCH)
  58. .PHONY: docker-release-aarch64
  59. docker-release-aarch64:
  60. docker build --build-arg="BUILD_TAG=arm64v8-devel" -t yay-$(ARCH):${VERSION} .
  61. docker run -e="ARCH=$(ARCH)" --name yay-$(ARCH) yay-$(ARCH):${VERSION} make release VERSION=${VERSION} PREFIX=${PREFIX}
  62. docker cp yay-$(ARCH):/app/${PACKAGE} $(PACKAGE)
  63. docker container rm yay-$(ARCH)
  64. .PHONY: docker-release-x86_64
  65. docker-release-x86_64:
  66. docker build --build-arg="BUILD_TAG=devel" -t yay-$(ARCH):${VERSION} .
  67. docker run -e="ARCH=$(ARCH)" --name yay-$(ARCH) yay-$(ARCH):${VERSION} make release VERSION=${VERSION} PREFIX=${PREFIX}
  68. docker cp yay-$(ARCH):/app/${PACKAGE} $(PACKAGE)
  69. docker container rm yay-$(ARCH)
  70. .PHONY: docker-build
  71. docker-build:
  72. docker build -t yay-$(ARCH):${VERSION} .
  73. docker run -e="ARCH=$(ARCH)" --name yay-$(ARCH) yay-$(ARCH):${VERSION} make build VERSION=${VERSION} PREFIX=${PREFIX}
  74. docker cp yay-$(ARCH):/app/${BIN} $(BIN)
  75. docker container rm yay-$(ARCH)
  76. .PHONY: test-vendor
  77. test-vendor: vendor
  78. @diff=$$(git diff vendor/); \
  79. if [ -n "$$diff" ]; then \
  80. echo "Please run 'make vendor' and commit the result:"; \
  81. echo "$${diff}"; \
  82. exit 1; \
  83. fi;
  84. .PHONY: lint
  85. lint:
  86. golangci-lint run ./...
  87. .PHONY: fmt
  88. fmt:
  89. go fmt ./...
  90. .PHONY: install
  91. install: build ${MOFILES}
  92. install -Dm755 ${BIN} $(DESTDIR)$(PREFIX)/bin/${BIN}
  93. install -Dm644 doc/${PKGNAME}.8 $(DESTDIR)$(PREFIX)/share/man/man8/${PKGNAME}.8
  94. install -Dm644 completions/bash $(DESTDIR)$(PREFIX)/share/bash-completion/completions/${PKGNAME}
  95. install -Dm644 completions/zsh $(DESTDIR)$(PREFIX)/share/zsh/site-functions/_${PKGNAME}
  96. install -Dm644 completions/fish $(DESTDIR)$(PREFIX)/share/fish/vendor_completions.d/${PKGNAME}.fish
  97. for lang in ${LANGS}; do \
  98. install -Dm644 ${LOCALEDIR}/$${lang}.mo $(DESTDIR)$(PREFIX)/share/locale/$$lang/LC_MESSAGES/${PKGNAME}.mo; \
  99. done
  100. .PHONY: uninstall
  101. uninstall:
  102. rm -f $(DESTDIR)$(PREFIX)/bin/${BIN}
  103. rm -f $(DESTDIR)$(PREFIX)/share/man/man8/${PKGNAME}.8
  104. rm -f $(DESTDIR)$(PREFIX)/share/bash-completion/completions/${PKGNAME}
  105. rm -f $(DESTDIR)$(PREFIX)/share/zsh/site-functions/_${PKGNAME}
  106. rm -f $(DESTDIR)$(PREFIX)/share/fish/vendor_completions.d/${PKGNAME}.fish
  107. for lang in ${LANGS}; do \
  108. rm -f $(DESTDIR)$(PREFIX)/share/locale/$$lang/LC_MESSAGES/${PKGNAME}.mo; \
  109. done
  110. $(BIN): $(SOURCES)
  111. $(GO) build $(GOFLAGS) -ldflags '-s -w $(LDFLAGS)' $(EXTRA_GOFLAGS) -o $@
  112. $(RELEASE_DIR):
  113. mkdir $(RELEASE_DIR)
  114. $(PACKAGE): $(BIN) $(RELEASE_DIR) ${MOFILES}
  115. cp -t $(RELEASE_DIR) ${BIN} doc/${PKGNAME}.8 completions/* ${MOFILES}
  116. tar -czvf $(PACKAGE) $(RELEASE_DIR)
  117. locale:
  118. xgotext -in . -out po
  119. test -f $@ || msginit -l $* -i $< -o $@
  120. msgmerge -U $@ $<
  121. touch $@
  122. ${LOCALEDIR}/%.mo: ${LOCALEDIR}/%.po
  123. msgfmt $< -o $@