]> git.proxmox.com Git - proxmox-backup.git/blob - Makefile
Merge branch 'master' of ssh://proxdev.maurer-it.com/rust/proxmox-backup
[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
8
9 # Binaries usable by users
10 USR_BIN := \
11 proxmox-backup-client \
12 pxar \
13 pmtx \
14 pmt
15
16 # Binaries usable by admins
17 USR_SBIN := \
18 proxmox-backup-manager
19
20 # Binaries for services:
21 SERVICE_BIN := \
22 proxmox-backup-api \
23 proxmox-backup-banner \
24 proxmox-backup-proxy \
25 proxmox-daily-update
26
27 ifeq ($(BUILD_MODE), release)
28 CARGO_BUILD_ARGS += --release
29 COMPILEDIR := target/release
30 else
31 COMPILEDIR := target/debug
32 endif
33
34 ifeq ($(valgrind), yes)
35 CARGO_BUILD_ARGS += --features valgrind
36 endif
37
38 CARGO ?= cargo
39
40 COMPILED_BINS := \
41 $(addprefix $(COMPILEDIR)/,$(USR_BIN) $(USR_SBIN) $(SERVICE_BIN))
42
43 export DEB_VERSION DEB_VERSION_UPSTREAM
44
45 SERVER_DEB=${PACKAGE}-server_${DEB_VERSION}_${ARCH}.deb
46 SERVER_DBG_DEB=${PACKAGE}-server-dbgsym_${DEB_VERSION}_${ARCH}.deb
47 CLIENT_DEB=${PACKAGE}-client_${DEB_VERSION}_${ARCH}.deb
48 CLIENT_DBG_DEB=${PACKAGE}-client-dbgsym_${DEB_VERSION}_${ARCH}.deb
49 DOC_DEB=${PACKAGE}-docs_${DEB_VERSION}_all.deb
50
51 DEBS=${SERVER_DEB} ${SERVER_DBG_DEB} ${CLIENT_DEB} ${CLIENT_DBG_DEB}
52
53 DSC = rust-${PACKAGE}_${DEB_VERSION}.dsc
54
55 DESTDIR=
56
57 all: cargo-build $(SUBDIRS)
58
59 .PHONY: $(SUBDIRS)
60 $(SUBDIRS):
61 $(MAKE) -C $@
62
63 test:
64 #cargo test test_broadcast_future
65 #cargo test $(CARGO_BUILD_ARGS)
66 $(CARGO) test $(tests) $(CARGO_BUILD_ARGS)
67
68 doc:
69 $(CARGO) doc --no-deps $(CARGO_BUILD_ARGS)
70
71 # always re-create this dir
72 .PHONY: build
73 build:
74 rm -rf build
75 rm -f debian/control
76 debcargo package --config debian/debcargo.toml --changelog-ready --no-overlay-write-back --directory build proxmox-backup $(shell dpkg-parsechangelog -l debian/changelog -SVersion | sed -e 's/-.*//')
77 sed -e '1,/^$$/ ! d' build/debian/control > build/debian/control.src
78 cat build/debian/control.src build/debian/control.in > build/debian/control
79 rm build/debian/control.in build/debian/control.src
80 cp build/debian/control debian/control
81 rm build/Cargo.lock
82 find build/debian -name "*.hint" -delete
83 $(foreach i,$(SUBDIRS), \
84 $(MAKE) -C build/$(i) clean ;)
85
86
87 .PHONY: proxmox-backup-docs
88 $(DOC_DEB) $(DEBS): proxmox-backup-docs
89 proxmox-backup-docs: build
90 cd build; dpkg-buildpackage -b -us -uc --no-pre-clean
91 lintian $(DOC_DEB)
92
93 # copy the local target/ dir as a build-cache
94 .PHONY: deb
95 $(DEBS): deb
96 deb: build
97 cd build; dpkg-buildpackage -b -us -uc --no-pre-clean --build-profiles=nodoc
98 lintian $(DEBS)
99
100 .PHONY: deb-all
101 deb-all: $(DOC_DEB) $(DEBS)
102
103 .PHONY: dsc
104 dsc: $(DSC)
105 $(DSC): build
106 cd build; dpkg-buildpackage -S -us -uc -d -nc
107 lintian $(DSC)
108
109 distclean: clean
110
111 clean:
112 $(foreach i,$(SUBDIRS), \
113 $(MAKE) -C $(i) clean ;)
114 $(CARGO) clean
115 rm -rf *.deb *.dsc *.tar.gz *.buildinfo *.changes build
116 find . -name '*~' -exec rm {} ';'
117
118 .PHONY: dinstall
119 dinstall: ${DEBS}
120 dpkg -i ${DEBS}
121
122 # make sure we build binaries before docs
123 docs: cargo-build
124
125 .PHONY: cargo-build
126 cargo-build:
127 $(CARGO) build $(CARGO_BUILD_ARGS)
128
129 $(COMPILED_BINS): cargo-build
130
131 .PHONY: lint
132 lint:
133 cargo clippy -- -A clippy::all -D clippy::correctness
134
135 install: $(COMPILED_BINS)
136 install -dm755 $(DESTDIR)$(BINDIR)
137 install -dm755 $(DESTDIR)$(ZSH_COMPL_DEST)
138 $(foreach i,$(USR_BIN), \
139 install -m755 $(COMPILEDIR)/$(i) $(DESTDIR)$(BINDIR)/ ; \
140 install -m644 zsh-completions/_$(i) $(DESTDIR)$(ZSH_COMPL_DEST)/ ;)
141 install -dm755 $(DESTDIR)$(SBINDIR)
142 $(foreach i,$(USR_SBIN), \
143 install -m755 $(COMPILEDIR)/$(i) $(DESTDIR)$(SBINDIR)/ ; \
144 install -m644 zsh-completions/_$(i) $(DESTDIR)$(ZSH_COMPL_DEST)/ ;)
145 install -dm755 $(DESTDIR)$(LIBEXECDIR)/proxmox-backup
146 # install sg-tape-cmd as setuid binary
147 install -m4755 -o root -g root $(COMPILEDIR)/sg-tape-cmd $(DESTDIR)$(LIBEXECDIR)/proxmox-backup/sg-tape-cmd
148 $(foreach i,$(SERVICE_BIN), \
149 install -m755 $(COMPILEDIR)/$(i) $(DESTDIR)$(LIBEXECDIR)/proxmox-backup/ ;)
150 $(MAKE) -C www install
151 $(MAKE) -C docs install
152
153 .PHONY: upload
154 upload: ${SERVER_DEB} ${CLIENT_DEB} ${DOC_DEB}
155 # check if working directory is clean
156 git diff --exit-code --stat && git diff --exit-code --stat --staged
157 tar cf - ${SERVER_DEB} ${SERVER_DBG_DEB} ${DOC_DEB} | ssh -X repoman@repo.proxmox.com upload --product pbs --dist buster
158 tar cf - ${CLIENT_DEB} ${CLIENT_DBG_DEB} | ssh -X repoman@repo.proxmox.com upload --product "pbs,pve,pmg" --dist buster