]> git.proxmox.com Git - proxmox-backup.git/blob - Makefile
update proxmox-metrics dependency to 0.3.1
[proxmox-backup.git] / Makefile
1 include /usr/share/dpkg/default.mk
2 include defines.mk
3
4 PACKAGE := proxmox-backup
5 ARCH := $(DEB_BUILD_ARCH)
6
7 SUBDIRS := etc www docs templates
8
9 # Binaries usable by users
10 USR_BIN := \
11 proxmox-backup-client \
12 proxmox-file-restore \
13 pxar \
14 proxmox-tape \
15 pmtx \
16 pmt
17
18 # Binaries usable by admins
19 USR_SBIN := \
20 proxmox-backup-manager \
21 proxmox-backup-debug
22
23 # Binaries for services:
24 SERVICE_BIN := \
25 proxmox-backup-api \
26 proxmox-backup-banner \
27 proxmox-backup-proxy \
28 proxmox-daily-update
29
30 # Single file restore daemon
31 RESTORE_BIN := \
32 proxmox-restore-daemon
33
34 SUBCRATES != cargo metadata --no-deps --format-version=1 \
35 | jq -r .workspace_members'[]' \
36 | awk '!/^proxmox-backup[[:space:]]/ { printf "%s ", $$1 }'
37
38 ifeq ($(BUILD_MODE), release)
39 CARGO_BUILD_ARGS += --release
40 COMPILEDIR := target/release
41 else
42 COMPILEDIR := target/debug
43 endif
44
45 ifeq ($(valgrind), yes)
46 CARGO_BUILD_ARGS += --features valgrind
47 endif
48
49 CARGO ?= cargo
50
51 COMPILED_BINS := \
52 $(addprefix $(COMPILEDIR)/,$(USR_BIN) $(USR_SBIN) $(SERVICE_BIN) $(RESTORE_BIN))
53
54 export DEB_VERSION DEB_VERSION_UPSTREAM
55
56 SERVER_DEB=$(PACKAGE)-server_$(DEB_VERSION)_$(ARCH).deb
57 SERVER_DBG_DEB=$(PACKAGE)-server-dbgsym_$(DEB_VERSION)_$(ARCH).deb
58 CLIENT_DEB=$(PACKAGE)-client_$(DEB_VERSION)_$(ARCH).deb
59 CLIENT_DBG_DEB=$(PACKAGE)-client-dbgsym_$(DEB_VERSION)_$(ARCH).deb
60 RESTORE_DEB=proxmox-backup-file-restore_$(DEB_VERSION)_$(ARCH).deb
61 RESTORE_DBG_DEB=proxmox-backup-file-restore-dbgsym_$(DEB_VERSION)_$(ARCH).deb
62 DOC_DEB=$(PACKAGE)-docs_$(DEB_VERSION)_all.deb
63
64 DEBS=$(SERVER_DEB) $(SERVER_DBG_DEB) $(CLIENT_DEB) $(CLIENT_DBG_DEB) \
65 $(RESTORE_DEB) $(RESTORE_DBG_DEB)
66
67 DSC = rust-$(PACKAGE)_$(DEB_VERSION).dsc
68
69 DESTDIR=
70
71 tests ?= --workspace
72
73 all: $(SUBDIRS)
74
75 .PHONY: $(SUBDIRS)
76 $(SUBDIRS):
77 $(MAKE) -C $@
78
79 test:
80 #cargo test test_broadcast_future
81 #cargo test $(CARGO_BUILD_ARGS)
82 $(CARGO) test $(tests) $(CARGO_BUILD_ARGS)
83
84 doc:
85 $(CARGO) doc --workspace --no-deps $(CARGO_BUILD_ARGS)
86
87 # always re-create this dir
88 .PHONY: build
89 build:
90 rm -rf build
91 mkdir build
92 git rev-parse HEAD > build/.repoid
93 cp -a debian \
94 Cargo.toml src \
95 $(SUBCRATES) \
96 docs etc examples tests www zsh-completions templates \
97 defines.mk Makefile \
98 ./build/
99 rm -f build/Cargo.lock
100 find build/debian -name "*.hint" -delete
101 $(foreach i,$(SUBDIRS), \
102 $(MAKE) -C build/$(i) clean ;)
103
104
105 .PHONY: proxmox-backup-docs
106 $(DOC_DEB) $(DEBS): proxmox-backup-docs
107 proxmox-backup-docs: build
108 cd build; dpkg-buildpackage -b -us -uc --no-pre-clean
109 lintian $(DOC_DEB)
110
111 # copy the local target/ dir as a build-cache
112 .PHONY: deb dsc deb-nodoc
113 deb-nodoc: build
114 cd build; dpkg-buildpackage -b -us -uc --no-pre-clean --build-profiles=nodoc
115 lintian $(DEBS)
116
117 $(DEBS): deb
118 deb: build
119 cd build; dpkg-buildpackage -b -us -uc
120 lintian $(DEBS) $(DOC_DEB)
121
122 .PHONY: dsc
123 dsc:
124 rm -rf $(DSC) build/
125 $(MAKE) $(DSC)
126 lintian $(DSC)
127
128 $(DSC): build
129 cd build; dpkg-buildpackage -S -us -uc -d
130
131 sbuild: $(DSC)
132 sbuild $<
133
134 .PHONY: clean distclean deb clean
135 distclean: clean
136 clean: clean-deb
137 $(foreach i,$(SUBDIRS), \
138 $(MAKE) -C $(i) clean ;)
139 $(CARGO) clean
140 rm -f .do-cargo-build
141
142 # allows one to avoid running cargo clean when one just wants to tidy up after a package build
143 clean-deb:
144 rm -rf build/
145 rm -f *.deb *.dsc *.tar.* *.buildinfo *.build *.changes
146
147 .PHONY: dinstall
148 dinstall: $(SERVER_DEB) $(SERVER_DBG_DEB) $(CLIENT_DEB) $(CLIENT_DBG_DEB)
149 dpkg -i $^
150
151 # make sure we build binaries before docs
152 docs: $(COMPILEDIR)/dump-catalog-shell-cli $(COMPILEDIR)/docgen
153
154 .PHONY: cargo-build
155 cargo-build:
156 rm -f .do-cargo-build
157 $(MAKE) $(COMPILED_BINS)
158
159 $(COMPILED_BINS) $(COMPILEDIR)/dump-catalog-shell-cli $(COMPILEDIR)/docgen: .do-cargo-build
160 .do-cargo-build:
161 $(CARGO) build $(CARGO_BUILD_ARGS) \
162 --package proxmox-backup-banner \
163 --bin proxmox-backup-banner \
164 --package proxmox-backup-client \
165 --bin proxmox-backup-client \
166 --bin dump-catalog-shell-cli \
167 --bin proxmox-backup-debug \
168 --package proxmox-file-restore \
169 --bin proxmox-file-restore \
170 --package pxar-bin \
171 --bin pxar \
172 --package pbs-tape \
173 --bin pmt \
174 --bin pmtx \
175 --package proxmox-restore-daemon \
176 --bin proxmox-restore-daemon \
177 --package proxmox-backup \
178 --bin docgen \
179 --bin proxmox-backup-api \
180 --bin proxmox-backup-manager \
181 --bin proxmox-backup-proxy \
182 --bin proxmox-daily-update \
183 --bin proxmox-file-restore \
184 --bin proxmox-tape \
185 --bin sg-tape-cmd
186 touch "$@"
187
188
189 .PHONY: lint
190 lint:
191 cargo clippy -- -A clippy::all -D clippy::correctness
192
193 install: $(COMPILED_BINS)
194 install -dm755 $(DESTDIR)$(BINDIR)
195 install -dm755 $(DESTDIR)$(ZSH_COMPL_DEST)
196 $(foreach i,$(USR_BIN), \
197 install -m755 $(COMPILEDIR)/$(i) $(DESTDIR)$(BINDIR)/ ; \
198 install -m644 zsh-completions/_$(i) $(DESTDIR)$(ZSH_COMPL_DEST)/ ;)
199 install -dm755 $(DESTDIR)$(SBINDIR)
200 $(foreach i,$(USR_SBIN), \
201 install -m755 $(COMPILEDIR)/$(i) $(DESTDIR)$(SBINDIR)/ ; \
202 install -m644 zsh-completions/_$(i) $(DESTDIR)$(ZSH_COMPL_DEST)/ ;)
203 install -m755 $(COMPILEDIR)/pbs2to3 $(DESTDIR)$(SBINDIR)/
204 install -dm755 $(DESTDIR)$(LIBEXECDIR)/proxmox-backup
205 install -dm755 $(DESTDIR)$(LIBEXECDIR)/proxmox-backup/file-restore
206 $(foreach i,$(RESTORE_BIN), \
207 install -m755 $(COMPILEDIR)/$(i) $(DESTDIR)$(LIBEXECDIR)/proxmox-backup/file-restore/ ;)
208 # install sg-tape-cmd as setuid binary
209 install -m4755 -o root -g root $(COMPILEDIR)/sg-tape-cmd $(DESTDIR)$(LIBEXECDIR)/proxmox-backup/sg-tape-cmd
210 $(foreach i,$(SERVICE_BIN), \
211 install -m755 $(COMPILEDIR)/$(i) $(DESTDIR)$(LIBEXECDIR)/proxmox-backup/ ;)
212 $(MAKE) -C www install
213 $(MAKE) -C docs install
214 $(MAKE) -C templates install
215
216 .PHONY: upload
217 upload: UPLOAD_DIST ?= $(DEB_DISTRIBUTION)
218 upload: $(SERVER_DEB) $(CLIENT_DEB) $(RESTORE_DEB) $(DOC_DEB)
219 # check if working directory is clean
220 git diff --exit-code --stat && git diff --exit-code --stat --staged
221 tar cf - $(SERVER_DEB) $(SERVER_DBG_DEB) $(DOC_DEB) $(CLIENT_DEB) $(CLIENT_DBG_DEB) \
222 | ssh -X repoman@repo.proxmox.com upload --product pbs --dist $(UPLOAD_DIST)
223 tar cf - $(CLIENT_DEB) $(CLIENT_DBG_DEB) | ssh -X repoman@repo.proxmox.com upload --product "pve,pmg,pbs-client" --dist $(UPLOAD_DIST)
224 tar cf - $(RESTORE_DEB) $(RESTORE_DBG_DEB) | ssh -X repoman@repo.proxmox.com upload --product "pve" --dist $(UPLOAD_DIST)