]> git.proxmox.com Git - pve-installer.git/blob - Makefile
build: run shellcheck as part of `test` step
[pve-installer.git] / Makefile
1 include /usr/share/dpkg/default.mk
2
3 PACKAGE = proxmox-installer
4 BUILDDIR ?= $(PACKAGE)-$(DEB_VERSION_UPSTREAM)
5
6 DEB=$(PACKAGE)_$(DEB_VERSION)_$(DEB_HOST_ARCH).deb
7 DSC=$(PACKAGE)_$(DEB_VERSION).dsc
8
9 CARGO ?= cargo
10 ifeq ($(BUILD_MODE), release)
11 CARGO_BUILD_ARGS += --release
12 CARGO_COMPILEDIR := target/release
13 else
14 CARGO_COMPILEDIR := target/debug
15 endif
16
17 INSTALLER_SOURCES=$(shell git ls-files) country.dat
18
19 PREFIX = /usr
20 BINDIR = $(PREFIX)/bin
21 USR_BIN := proxmox-tui-installer
22
23 COMPILED_BINS := \
24 $(addprefix $(CARGO_COMPILEDIR)/,$(USR_BIN))
25
26 SHELL_SCRIPTS := \
27 fake-start-stop-daemon \
28 policy-disable-rc.d \
29 spice-vdagent.sh \
30 unconfigured.sh \
31 xinitrc
32
33 all:
34
35 $(BUILDDIR):
36 rm -rf $@ $@.tmp; mkdir $@.tmp
37 cp -a \
38 .cargo \
39 Cargo.toml \
40 Makefile \
41 Proxmox/ \
42 Xdefaults \
43 banner/ \
44 checktime \
45 country.pl \
46 html/ \
47 interfaces \
48 proxinstall \
49 proxmox-low-level-installer \
50 proxmox-tui-installer/ \
51 proxmox-installer-common/ \
52 test/ \
53 $(SHELL_SCRIPTS) \
54 $@.tmp
55 cp -a debian $@.tmp/
56 mv $@.tmp $@
57
58 country.dat: country.pl
59 ./country.pl > country.dat.tmp
60 mv country.dat.tmp country.dat
61
62 deb: $(DEB)
63 $(DEB): $(BUILDDIR)
64 cd $(BUILDDIR); dpkg-buildpackage -b -us -uc
65 lintian $(DEB)
66
67 test-$(DEB): $(INSTALLER_SOURCES)
68 rsync --exclude='test*.img' --exclude='*.deb' --exclude='build' -a * build
69 cd build; dpkg-buildpackage -b -us -uc -nc
70 mv $(DEB) test-$(DEB)
71
72 dsc: $(DSC)
73 $(MAKE) clean
74 $(MAKE) $(DSC)
75 lintian $(DSC)
76
77 $(DSC): $(BUILDDIR)
78 cd $(BUILDDIR); dpkg-buildpackage -S -us -uc -d
79
80 sbuild: $(DSC)
81 sbuild $(DSC)
82
83 .PHONY: prepare-test-env
84 prepare-test-env: cd-info.test country.dat test.img
85 rm -rf testdir
86 mkdir -p testdir/var/lib/proxmox-installer/
87 cp -v country.dat testdir/var/lib/proxmox-installer/
88 ./proxmox-low-level-installer -t test.img dump-env
89
90 .PHONY: test
91 test: prepare-test-env
92 shellcheck $(SHELL_SCRIPTS)
93 $(MAKE) -C test check
94 $(CARGO) test --workspace $(CARGO_BUILD_ARGS)
95
96 DESTDIR=
97 VARLIBDIR=$(DESTDIR)/var/lib/proxmox-installer
98 HTMLDIR=$(VARLIBDIR)/html/common
99
100 .PHONY: install
101 install: $(INSTALLER_SOURCES) $(CARGO_COMPILEDIR)/proxmox-tui-installer
102 $(MAKE) -C banner install
103 $(MAKE) -C Proxmox install
104 install -D -m 644 interfaces $(DESTDIR)/etc/network/interfaces
105 install -D -m 755 fake-start-stop-daemon $(VARLIBDIR)/fake-start-stop-daemon
106 install -D -m 755 policy-disable-rc.d $(VARLIBDIR)/policy-disable-rc.d
107 install -D -m 644 country.dat $(VARLIBDIR)/country.dat
108 install -D -m 755 unconfigured.sh $(DESTDIR)/sbin/unconfigured.sh
109 install -D -m 755 proxinstall $(DESTDIR)/usr/bin/proxinstall
110 install -D -m 755 proxmox-low-level-installer $(DESTDIR)/$(BINDIR)/proxmox-low-level-installer
111 $(foreach i,$(USR_BIN), install -m755 $(CARGO_COMPILEDIR)/$(i) $(DESTDIR)$(BINDIR)/ ;)
112 install -D -m 755 checktime $(DESTDIR)/usr/bin/checktime
113 install -D -m 644 xinitrc $(DESTDIR)/.xinitrc
114 install -D -m 755 spice-vdagent.sh $(DESTDIR)/.spice-vdagent.sh
115 install -D -m 644 Xdefaults $(DESTDIR)/.Xdefaults
116
117 $(COMPILED_BINS): cargo-build
118 .PHONY: cargo-build
119 cargo-build:
120 $(CARGO) build --package proxmox-tui-installer --bin proxmox-tui-installer $(CARGO_BUILD_ARGS)
121
122 %-banner.png: %-banner.svg
123 rsvg-convert -o $@ $<
124
125 .PHONY: upload
126 upload: UPLOAD_DIST ?= $(DEB_DISTRIBUTION)
127 upload: $(DEB)
128 tar cf - $(DEB) | ssh -X repoman@repo.proxmox.com -- upload --product pve,pmg,pbs --dist $(UPLOAD_DIST)
129
130 %.img:
131 truncate -s 2G $@
132
133 %.big.img:
134 truncate -s 8G $@
135
136 .PHONY: prepare-check-env
137 prepare-check-env: test-$(DEB)
138 rm -rf testdir
139 dpkg -X test-$(DEB) testdir
140 mkdir -p testdir/run/proxmox-installer/
141
142 cd-info.test: PRODUCT ?= pve
143 cd-info.test:
144 printf '%s\n' "PRODUCT='$(or $(PRODUCT), pve)'" >$@.tmp
145 printf '%s\n' "PRODUCTLONG='$(or $(PRODUCTLONG), Proxmox VE)'" >>$@.tmp
146 printf '%s\n' "RELEASE='$(or $(RELEASE), 42.1)'" >>$@.tmp
147 printf '%s\n' "ISORELEASE='$(or $(ISORELEASE), 1)'" >>$@.tmp
148 printf '%s\n' "ISONAME='$(or $(ISONAME), proxmox-ve)'" >>$@.tmp
149 mv $@.tmp $@
150
151 check-pve: prepare-check-env test.img
152 rm -f cd-info.test; $(MAKE) cd-info.test
153 ./proxmox-low-level-installer dump-env -t test.img
154 G_SLICE=always-malloc perl -I testdir/usr/share/perl5 testdir/usr/bin/proxinstall -t test.img
155
156 check-pve-multidisks: prepare-check-env test.img test2.img test3.img test4.img test5.big.img
157 rm -f cd-info.test; $(MAKE) cd-info.test
158 ./proxmox-low-level-installer dump-env -t test.img,test2.img,test3.img,test4.img,test5.big.img
159 G_SLICE=always-malloc perl -I testdir/usr/share/perl5 testdir/usr/bin/proxinstall -t test.img,test2.img,test3.img,test4.img,test5.big.img
160
161 check-pve-tui: prepare-check-env test.img
162 rm -f cd-info.test; $(MAKE) cd-info.test
163 ./proxmox-low-level-installer dump-env -t test.img
164 testdir/usr/bin/proxmox-tui-installer -t test.img 2>testdir/run/stderr
165
166 check-pve-tui-multidisks: prepare-check-env test.img test2.img test3.img test4.img test5.big.img
167 rm -f cd-info.test; $(MAKE) cd-info.test
168 ./proxmox-low-level-installer dump-env -t test.img,test2.img,test3.img,test4.img,test5.big.img
169 testdir/usr/bin/proxmox-tui-installer -t test.img,test2.img,test3.img,test4.img,test5.big.img
170
171 prepare-check-pmg: prepare-check-env test.img
172 rm -f cd-info.test; $(MAKE) \
173 PRODUCT=pmg \
174 PRODUCTLONG="Proxmox Mail Gateway" \
175 ISONAME='proxmox-mail-gateway' \
176 cd-info.test
177 ./proxmox-low-level-installer dump-env -t test.img
178
179 check-pmg: prepare-check-pmg
180 G_SLICE=always-malloc perl -I testdir/usr/share/perl5 testdir/usr/bin/proxinstall -t test.img
181
182 check-pmg-tui: prepare-check-pmg
183 testdir/usr/bin/proxmox-tui-installer -t test.img 2>testdir/run/stderr
184
185 prepare-check-pbs: prepare-check-env test.img
186 rm -f cd-info.test; $(MAKE) \
187 PRODUCT='pbs' \
188 PRODUCTLONG='Proxmox Backup Server' \
189 ISONAME='proxmox-backup-server' \
190 cd-info.test
191 ./proxmox-low-level-installer dump-env -t test.img
192
193 check-pbs: prepare-check-pbs
194 G_SLICE=always-malloc perl -I testdir/usr/share/perl5 testdir/usr/bin/proxinstall -t test.img
195
196 check-pbs-tui: prepare-check-pbs
197 testdir/usr/bin/proxmox-tui-installer -t test.img 2>testdir/run/stderr
198
199 .phony: clean
200 clean:
201 rm -rf target build $(PACKAGE)-[0-9]* testdir
202 rm -f $(PACKAGE)*.tar* *.deb packages packages.tmp *.build *.dsc *.buildinfo *.changes
203 rm -f test*.img pve-final.pkglist country.dat final.pkglist cd-info.test
204 find . -name '*~' -exec rm {} ';'