-
Notifications
You must be signed in to change notification settings - Fork 0
/
Makefile
150 lines (129 loc) · 4.22 KB
/
Makefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
# Destination directory
ifeq ($(DESTDIR),)
# If DESTDIR is not specified, use the default value.
_destdir ?= /usr
else
# If DESTDIR was specified, use its value.
_destdir ?= ${DESTDIR}
endif
# Name of the binary to be created
BINARY_NAME=synctropy
# Path to the directory where the binary will be installed
INSTALL_PATH=${_destdir}/bin
# Documentation output directory
DOCS_OUT=./docs
DOCS_PATH=${_destdir}/share/doc/${BINARY_NAME}
# Autocompletion files
AUTOCOMPLETION_OUT=./autocompletion
BASH_AUTOCOMPLETION_FILE=${BINARY_NAME}
BASH_AUTOCOMPLETION_INSTALL=${_destdir}/share/bash-completion/completions
ZSH_AUTOCOMPLETION_FILE=_${BINARY_NAME}
ZSH_AUTOCOMPLETION_INSTALL=${_destdir}/share/zsh/site-functions
FISH_AUTOCOMPLETION_FILE=${BINARY_NAME}.fish
FISH_AUTOCOMPLETION_INSTALL=${_destdir}/share/fish/vendor_completions.d
# License
LICENSE_PATH=${_destdir}/share/licenses/${BINARY_NAME}
# Flags to pass to the go build command
GO_BUILD_FLAGS=-v
GO_BUILD_LDFLAGS=-w
.DEFAULT_GOAL := build
.PHONY: clean
clean:
@echo "====> Removing binary"
if [ -f ${BINARY_NAME} ]; then \
rm ${BINARY_NAME}; \
fi
@echo "====> Removing autocompletion files"
if [ -d ${AUTOCOMPLETION_OUT} ]; then \
rm -rf ${AUTOCOMPLETION_OUT}; \
fi
@echo "====> Removing documentation"
if [ -d ${DOCS_OUT} ]; then \
rm -rf ${DOCS_OUT}; \
fi
.PHONY: deps
deps:
@echo "====> Installing dependencies"
go get -v
.PHONY: build
build: deps
@echo "====> Building binary"
go build ${GO_BUILD_FLAGS} -ldflags "$(GO_BUILD_LDFLAGS)"
strip ${BINARY_NAME}
mkdir -p ${AUTOCOMPLETION_OUT}
@echo "====> Building autocompletion file for Bash"
./${BINARY_NAME} completion bash > ${AUTOCOMPLETION_OUT}/${BASH_AUTOCOMPLETION_FILE}
@echo "====> Building autocompletion file for Zsh"
./${BINARY_NAME} completion zsh > ${AUTOCOMPLETION_OUT}/${ZSH_AUTOCOMPLETION_FILE}
@echo "====> Building autocompletion file for Fish"
./${BINARY_NAME} completion fish > ${AUTOCOMPLETION_OUT}/${FISH_AUTOCOMPLETION_FILE}
@echo "====> Building documentation"
./${BINARY_NAME} docs generate -o ${DOCS_OUT}
.PHONY: install
install:
# Binary
@echo "====> Installing binary"
mkdir -p ${INSTALL_PATH}
cp ${BINARY_NAME} ${INSTALL_PATH}
# Autocompletion
@echo "====> Installing autocompletion files"
if [ -d "${BASH_AUTOCOMPLETION_INSTALL}" ]; then \
cp ${AUTOCOMPLETION_OUT}/${BASH_AUTOCOMPLETION_FILE} ${BASH_AUTOCOMPLETION_INSTALL}/; \
fi
if [ -d "${ZSH_AUTOCOMPLETION_INSTALL}" ]; then \
cp ${AUTOCOMPLETION_OUT}/${ZSH_AUTOCOMPLETION_FILE} ${ZSH_AUTOCOMPLETION_INSTALL}/; \
fi
if [ -d "${FISH_AUTOCOMPLETION_INSTALL}" ]; then \
cp ${AUTOCOMPLETION_OUT}/${FISH_AUTOCOMPLETION_FILE} ${FISH_AUTOCOMPLETION_INSTALL}/; \
fi
# Documentation
@echo "====> Installing documentation"
mkdir -p "${DOCS_PATH}"
cp ${DOCS_OUT}/* ${DOCS_PATH}/
cp ./README.md ${DOCS_PATH}/
# License
@echo "====> Installing license"
mkdir -p "${LICENSE_PATH}"
cp ./LICENSE ${LICENSE_PATH}/
.PHONY: uninstall
uninstall:
# Binary
@echo "====> Uninstalling binary"
rm ${INSTALL_PATH}/${BINARY_NAME}
# Autocompletion
@echo "====> Uninstalling autocompletion files"
if [ -f "${BASH_AUTOCOMPLETION_INSTALL}/${BASH_AUTOCOMPLETION_FILE}" ]; then \
rm -f "${BASH_AUTOCOMPLETION_INSTALL}/${BASH_AUTOCOMPLETION_FILE}"; \
fi
if [ -f "${ZSH_AUTOCOMPLETION_INSTALL}/${ZSH_AUTOCOMPLETION_FILE}" ]; then \
rm -f "${ZSH_AUTOCOMPLETION_INSTALL}/${ZSH_AUTOCOMPLETION_FILE}"; \
fi
if [ -f "${FISH_AUTOCOMPLETION_INSTALL}/${FISH_AUTOCOMPLETION_FILE}" ]; then \
rm -f "${FISH_AUTOCOMPLETION_INSTALL}/${FISH_AUTOCOMPLETION_FILE}"; \
fi
# Documentation
@echo "====> Uninstalling documentation"
rm -rf ${DOCS_PATH}
# License
@echo "====> Uninstalling license"
rm -rf "${LICENSE_PATH}"
##
### RELEASES
##
RELEASES_OS = linux darwin freebsd openbsd netbsd
GOX_OUTPUT_PATH = ./gox_output
.PHONY: releases_clean
releases_clean:
@echo "Removing binaries generated by gox"
rm -rf $(GOX_OUTPUT_PATH)
.PHONY: releases_build
releases_build:
mkdir -p $(GOX_OUTPUT_PATH)
# Build binaries
@echo "Building binaries with gox"
@echo "Output: $(GOX_OUTPUT_PATH)"
@for GOOS in $(RELEASES_OS); do \
echo ""; \
echo "Building binaries for OS: $$GOOS"; \
gox -os=$$GOOS -ldflags="-w" -output "$(GOX_OUTPUT_PATH)"'/{{.Dir}}_{{.OS}}_{{.Arch}}'; \
done