|
| 1 | +PREFIX ?= $(shell pwd) |
| 2 | + |
1 | 3 | NAME = fsql |
2 | | -MAIN = ./cmd/fsql |
| 4 | +PKG = github.com/kshvmdn/$(NAME) |
| 5 | +MAIN = $(PKG)/cmd/$(NAME) |
| 6 | + |
| 7 | +DIST_DIR := ${PREFIX}/dist |
| 8 | +DIST_DIRS := find . -type d | sed "s|^\./||" | grep -v \\. | tr '\n' '\0' | xargs -0 -I '{}' |
| 9 | + |
3 | 10 | SRCS := $(shell find . -type f -name '*.go') |
4 | 11 | PKGS := $(shell go list ./... | grep -v /vendor) |
5 | 12 |
|
6 | | -build = GOOS=$(1) GOARCH=$(2) go build -o build/$(NAME)$(3) $(MAIN) |
7 | | -tar = cd build && tar -cvzf $(1)_$(2).tar.gz $(NAME)$(3) && rm $(NAME)$(3) |
8 | | -zip = cd build && zip $(1)_$(2).zip $(NAME)$(3) && rm $(NAME)$(3) |
| 13 | +VERSION := $(shell cat VERSION) |
| 14 | +GITCOMMIT := $(shell git rev-parse --short HEAD) |
| 15 | +ifneq ($(shell git status --porcelain --untracked-files=no),) |
| 16 | + GITCOMMIT := $(GITCOMMIT)-dirty |
| 17 | +endif |
9 | 18 |
|
10 | | -.PHONY: all coverage clean fmt fmt-save get-tools install lint test vet |
11 | | -.DEFAULT: all |
| 19 | +LDFLAGS := ${LDFLAGS} \ |
| 20 | + -X $(PKG)/meta.GITCOMMIT=${GITCOMMIT} \ |
| 21 | + -X $(PKG)/meta.VERSION=${VERSION} |
12 | 22 |
|
13 | | -all: fsql |
| 23 | +.PHONY: build |
| 24 | +build: $(SRCS) VERSION |
| 25 | + @echo "+ $@" |
| 26 | + @go build -ldflags "${LDFLAGS}" -o $(NAME) -v $(MAIN) |
14 | 27 |
|
| 28 | +.PHONY: install |
15 | 29 | install: |
16 | 30 | @echo "+ $@" |
17 | 31 | @go install $(PKGS) |
18 | 32 |
|
| 33 | +.PHONY: get-tools |
19 | 34 | get-tools: |
20 | 35 | @echo "+ $@" |
21 | 36 | @go get -u -v github.com/golang/lint/golint |
22 | 37 |
|
| 38 | +.PHONY: clean |
23 | 39 | clean: |
24 | 40 | @echo "+ $@" |
25 | | - rm -rf build ./$(NAME) |
26 | | - mkdir -p build |
27 | | - |
28 | | -fsql: $(SRCS) |
29 | | - @echo "+ $@" |
30 | | - @go build -o ./$(NAME) -v $(MAIN) |
| 41 | + $(RM) $(NAME) |
| 42 | + $(RM) -r $(DIST_DIR) |
31 | 43 |
|
| 44 | +.PHONY: fmt |
32 | 45 | fmt: |
33 | 46 | @echo "+ $@" |
34 | 47 | @test -z "$$(gofmt -s -l . 2>&1 | grep -v ^vendor/ | tee /dev/stderr)" || \ |
35 | 48 | (echo >&2 "+ please format Go code with 'gofmt -s', or use 'make fmt-save'" && false) |
36 | 49 |
|
| 50 | +.PHONY: fmt-save |
37 | 51 | fmt-save: |
38 | 52 | @echo "+ $@" |
39 | 53 | @gofmt -s -l . 2>&1 | grep -v ^vendor/ | xargs gofmt -s -l -w |
40 | 54 |
|
| 55 | +.PHONY: vet |
41 | 56 | vet: |
42 | 57 | @echo "+ $@" |
43 | 58 | @go vet $(PKGS) |
44 | 59 |
|
| 60 | +.PHONY: lint |
45 | 61 | lint: |
46 | 62 | @echo "+ $@" |
47 | | - $(if $(shell which golint || echo ''), , \ |
| 63 | + $(if $(shell which golint || echo ''),, \ |
48 | 64 | $(error Please install golint: `make get-tools`)) |
49 | 65 | @test -z "$$(golint ./... 2>&1 | grep -v ^vendor/ | grep -v mock/ | tee /dev/stderr)" |
50 | 66 |
|
| 67 | +.PHONY: test |
51 | 68 | test: |
52 | 69 | @echo "+ $@" |
53 | | - @go test -race -v $(PKGS) |
| 70 | + @go test -race $(PKGS) |
54 | 71 |
|
| 72 | +.PHONY: coverage |
55 | 73 | coverage: |
56 | 74 | @echo "+ $@" |
57 | 75 | @for pkg in $(PKGS); do \ |
58 | 76 | go test -test.short -race -coverprofile="../../../$$pkg/coverage.txt" $${pkg} || exit 1; \ |
59 | 77 | done |
60 | 78 |
|
61 | | -binaries: darwin linux windows |
62 | | - |
63 | | -##### DARWIN BUILDS ##### |
64 | | - |
65 | | -darwin: build/darwin_amd64.tar.gz |
66 | | - |
67 | | -build/darwin_amd64.tar.gz: $(SRCS) |
68 | | - $(call build,darwin,amd64,) |
69 | | - $(call tar,darwin,amd64) |
70 | | - |
71 | | -##### LINUX BUILDS ##### |
72 | | - |
73 | | -linux: build/linux_arm.tar.gz build/linux_arm64.tar.gz build/linux_386.tar.gz build/linux_amd64.tar.gz |
74 | | - |
75 | | -build/linux_386.tar.gz: $(SRCS) |
76 | | - $(call build,linux,386,) |
77 | | - $(call tar,linux,386) |
78 | | - |
79 | | -build/linux_amd64.tar.gz: $(SRCS) |
80 | | - $(call build,linux,amd64,) |
81 | | - $(call tar,linux,amd64) |
82 | | - |
83 | | -build/linux_arm.tar.gz: $(SRCS) |
84 | | - $(call build,linux,arm,) |
85 | | - $(call tar,linux,arm) |
86 | | - |
87 | | -build/linux_arm64.tar.gz: $(SRCS) |
88 | | - $(call build,linux,arm64,) |
89 | | - $(call tar,linux,arm64) |
90 | | - |
91 | | -##### WINDOWS BUILDS ##### |
92 | | - |
93 | | -windows: build/windows_386.zip build/windows_amd64.zip |
94 | | - |
95 | | -build/windows_386.zip: $(SRCS) |
96 | | - $(call build,windows,386,.exe) |
97 | | - $(call zip,windows,386,.exe) |
| 79 | +.PHONY: bootstrap-dist |
| 80 | +bootstrap-dist: |
| 81 | + @echo "+ $@" |
| 82 | + @go get -u -v github.com/franciscocpg/gox |
98 | 83 |
|
99 | | -build/windows_amd64.zip: $(SRCS) |
100 | | - $(call build,windows,amd64,.exe) |
101 | | - $(call zip,windows,amd64,.exe) |
| 84 | +.PHONY: build-all |
| 85 | +build-all: $(SRCS) VERSION |
| 86 | + @echo "+ $@" |
| 87 | + @gox -verbose \ |
| 88 | + -ldflags "${LDFLAGS}" \ |
| 89 | + -os="darwin freebsd netbsd openbsd linux windows" \ |
| 90 | + -arch="386 amd64 arm arm64" \ |
| 91 | + -osarch="!darwin/arm !darwin/arm64" \ |
| 92 | + -output="$(DIST_DIR)/{{.OS}}-{{.Arch}}/{{.Dir}}" $(MAIN) |
| 93 | + |
| 94 | +.PHONY: dist |
| 95 | +dist: build-all |
| 96 | + @echo "+ $@" |
| 97 | + @cd $(DIST_DIR) && \ |
| 98 | + $(DIST_DIRS) cp ../LICENSE {} && \ |
| 99 | + $(DIST_DIRS) cp ../README.md {} && \ |
| 100 | + $(DIST_DIRS) tar -zcf fsql-${VERSION}-{}.tar.gz {} && \ |
| 101 | + $(DIST_DIRS) zip -r -q fsql-${VERSION}-{}.zip {} && \ |
| 102 | + $(DIST_DIRS) rm -rf {} && \ |
| 103 | + cd .. |
0 commit comments