Dpkg::OpenPGP::Backend::GnuPG: Accept keybox format keyrings as-is
[dpkg.git] / tests / t-multiarch / Makefile
blob31449437bac48c7a1cc0312b2bc71108e059f348
1 # Copyright © 2011 Linaro Limited
2 # Copyright © 2011 Raphaël Hertzog <hertzog@debian.org>
3 # Copyright © 2011-2012 Guillem Jover <guillem@debian.org>
5 TESTS_DEB :=
7 include ../Test.mk
9 NATIVE_ARCH := $(shell dpkg --print-architecture)
10 ifeq ($(NATIVE_ARCH),i386)
11 FOREIGN_ARCH := amd64
12 else
13 FOREIGN_ARCH := i386
14 endif
16 ma-setup:
17 $(DPKG) --add-architecture $(FOREIGN_ARCH)
19 ## BUILDING THE TEST PACKAGES ##
21 # Params are (dirname, pkgname, ver, arch, ma, dep)
22 # Dirname and pkgname are auto-prefixed with "pkg-ma"
23 define build_pkg
24 PKG_TO_BUILD += pkg-ma-$(1).deb
26 pkg-ma-$(1):: pkg-template
27 [ -e pkg-ma-$(1) ] || cp -a pkg-template pkg-ma-$(1)
28 sed -i -e "s/Package: .*/Package: pkg-ma-$(2)/" \
29 -e "s/Version: .*/Version: $(3)/" \
30 -e "s/Architecture: .*/Architecture: $(4)/" \
31 -e "s/Multi-Arch: .*/Multi-Arch: $(5)/" \
32 -e "s/Depends:.*/Depends: $(6)/" \
33 pkg-ma-$(1)/DEBIAN/control
34 mkdir -p pkg-ma-$(1)/m-a
35 echo "In file pkg-ma-$(1)" > pkg-ma-$(1)/m-a/foo-$(1)
36 touch pkg-ma-$(1)
38 pkg-ma-$(1).deb: pkg-ma-$(1)
39 $(DPKG_BUILD_DEB) --nocheck pkg-ma-$(1) pkg-ma-$(1).deb
41 clean-hook::
42 rm -rf pkg-ma-$(1)
43 rm -f pkg-ma-$(1).deb
44 endef
46 $(foreach arch,$(NATIVE_ARCH) $(FOREIGN_ARCH),\
47 $(foreach ma,same foreign allowed no,\
48 $(foreach version,1.0 2.0,\
49 $(eval $(call build_pkg,$(ma)_$(version)_$(arch),$(ma),$(version),$(arch),$(ma),)))))
51 # Arch: all done separately because M-A: same can't be Arch: all
52 $(foreach ma,foreign allowed no,\
53 $(eval $(call build_pkg,$(ma)_1.0_all,$(ma),1.0,all,$(ma),)))
55 $(eval $(call build_pkg,same_1.0_all,same,1.0,all,no,))
57 $(foreach arch,$(NATIVE_ARCH) $(FOREIGN_ARCH),\
58 $(eval $(call build_pkg,self-conflict_1.0_$(arch),self-conflict,1.0,$(arch),same,))\
59 $(foreach ma,same foreign foreign-any allowed allowed-any allowed-fake no,\
60 $(eval $(call build_pkg,dep-on-$(ma)_1.0_$(arch),dep-on-$(ma),1.0,$(arch),foreign,pkg-ma-$(subst -,:,$(ma)) (>= 1.0)))))
62 $(foreach ma,same foreign foreign-any allowed allowed-any allowed-fake no,\
63 $(eval $(call build_pkg,dep-on-$(ma)_1.0_all,dep-on-$(ma),1.0,all,no,pkg-ma-$(subst -,:,$(ma)) (>= 1.0))))
65 shared_file_types := file symlink fifo
66 ifdef DPKG_AS_ROOT
67 shared_file_types += chardev blockdev
68 endif
69 $(foreach arch,$(NATIVE_ARCH) $(FOREIGN_ARCH),\
70 $(foreach version,1.0 2.0,\
71 $(eval $(call build_pkg,shared-conffiles_$(version)_orig_$(arch),shared-conffiles,$(version),$(arch),same,))\
72 $(eval $(call build_pkg,shared-conffiles_$(version)_alt_$(arch),shared-conffiles,$(version),$(arch),same,))\
73 $(foreach variant,orig alt,\
74 $(foreach type,$(shared_file_types),\
75 $(eval $(call build_pkg,shared-files_$(version)_$(variant)-$(type)_$(arch),shared-files,$(version),$(arch),same,))))))
77 $(foreach arch,$(NATIVE_ARCH) $(FOREIGN_ARCH),\
78 $(eval $(call build_pkg,triggers_1.0_$(arch),triggers,1.0,$(arch),same,))\
79 $(eval $(call build_pkg,shared-diversion_1.0_$(arch),shared-diversion,1.0,$(arch),same,)))
81 $(eval $(call build_pkg,act-trig_1.0_all,act-trig,1.0,all,no,))
82 $(eval $(call build_pkg,diversion_1.0_all,diversion,1.0,all,no,))
83 $(eval $(call build_pkg,diverted_1.0_all,diverted,1.0,all,no,))
84 $(eval $(call build_pkg,db-layout_1.0_$(NATIVE_ARCH),db-layout,1.0,$(NATIVE_ARCH),no,))
85 $(eval $(call build_pkg,db-layout_2.0_$(NATIVE_ARCH),db-layout,2.0,$(NATIVE_ARCH),same,))
87 build-hook: $(PKG_TO_BUILD)
89 ## TEST CASES BELOW ##
91 TEST_CASES += test-print-foreign-architecture
92 TEST_CASES += test-build-invalid
93 TEST_CASES += test-build-valid
94 TEST_CASES += test-install-native
95 TEST_CASES += test-install-foreign
96 TEST_CASES += test-coinstall-ma-same
97 TEST_CASES += test-crossgrade
98 TEST_CASES += test-deps
99 TEST_CASES += test-coinstall-shared-files
100 TEST_CASES += test-coinstall-shared-conffiles
101 TEST_CASES += test-coinstall-triggers
102 TEST_CASES += test-coinstall-diversions
103 TEST_CASES += test-dpkg-output
104 TEST_CASES += test-db-layout
106 test-case: $(TEST_CASES)
108 test-print-foreign-architecture:
109 echo $(FOREIGN_ARCH) >ref-arch
110 echo foobar >>ref-arch
111 $(DPKG) --remove-architecture $(FOREIGN_ARCH)
112 $(DPKG) --remove-architecture foobar
113 $(call stdout_is,$(DPKG) --print-foreign-architectures,)
114 $(DPKG) --add-architecture $(FOREIGN_ARCH)
115 $(call stdout_is,$(DPKG) --print-foreign-architectures,$(FOREIGN_ARCH))
116 $(DPKG) --add-architecture foobar
117 $(DPKG) --print-foreign-architectures | cmp ref-arch -
118 # Ensure all/any can't be added as foreign arch
119 ! $(DPKG) --add-architecture all
120 ! $(DPKG) --add-architecture any
121 # Ensure the native arch is never considered as
122 $(DPKG) --add-architecture $(NATIVE_ARCH)
123 $(DPKG) --print-foreign-architectures | cmp ref-arch -
124 $(DPKG) --remove-architecture foobar
125 rm -f ref-arch
127 test-build-invalid:
128 # Test build of Architecture: all with Multi-Arch: same field
129 ! $(DPKG_BUILD_DEB) pkg-template foo.deb
130 rm -f foo.deb
132 test-build-valid:
133 # Test build of package with valid dependency (ma-allowed:fake)
134 $(DPKG_BUILD_DEB) pkg-ma-dep-on-allowed-fake_1.0_$(NATIVE_ARCH) foo.deb
135 rm -f foo.deb
137 test-install-native:
138 $(DPKG_INSTALL) pkg-ma-same_1.0_$(NATIVE_ARCH).deb
139 $(DPKG_INSTALL) pkg-ma-foreign_1.0_$(NATIVE_ARCH).deb
140 $(DPKG_INSTALL) pkg-ma-allowed_1.0_$(NATIVE_ARCH).deb
141 $(DPKG_INSTALL) pkg-ma-no_1.0_$(NATIVE_ARCH).deb
142 $(call pkg_is_installed,pkg-ma-same:$(NATIVE_ARCH))
143 $(call pkg_is_installed,pkg-ma-foreign)
144 $(call pkg_is_installed,pkg-ma-allowed)
145 $(call pkg_is_installed,pkg-ma-no)
146 $(DPKG_PURGE) pkg-ma-same:$(NATIVE_ARCH) pkg-ma-foreign pkg-ma-allowed pkg-ma-no
147 $(call pkg_is_not_installed,pkg-ma-same:$(NATIVE_ARCH))
148 $(call pkg_is_not_installed,pkg-ma-foreign)
149 $(call pkg_is_not_installed,pkg-ma-allowed)
150 $(call pkg_is_not_installed,pkg-ma-no)
152 test-install-foreign:
153 $(DPKG) --remove-architecture $(FOREIGN_ARCH)
154 # Installation of foreign arch packages must fail by default
155 ! $(DPKG_INSTALL) pkg-ma-same_1.0_$(FOREIGN_ARCH).deb
156 ! $(DPKG_INSTALL) pkg-ma-foreign_1.0_$(FOREIGN_ARCH).deb
157 ! $(DPKG_INSTALL) pkg-ma-allowed_1.0_$(FOREIGN_ARCH).deb
158 ! $(DPKG_INSTALL) pkg-ma-no_1.0_$(FOREIGN_ARCH).deb
159 # Once architecture has been added it should succeed
160 $(DPKG) --add-architecture $(FOREIGN_ARCH)
161 $(DPKG_INSTALL) pkg-ma-same_1.0_$(FOREIGN_ARCH).deb
162 $(DPKG_INSTALL) pkg-ma-foreign_1.0_$(FOREIGN_ARCH).deb
163 $(DPKG_INSTALL) pkg-ma-allowed_1.0_$(FOREIGN_ARCH).deb
164 $(DPKG_INSTALL) pkg-ma-no_1.0_$(FOREIGN_ARCH).deb
165 $(call pkg_is_installed,pkg-ma-same:$(FOREIGN_ARCH))
166 $(call pkg_is_installed,pkg-ma-foreign:$(FOREIGN_ARCH))
167 $(call pkg_is_installed,pkg-ma-allowed:$(FOREIGN_ARCH))
168 $(call pkg_is_installed,pkg-ma-no:$(FOREIGN_ARCH))
169 $(DPKG_PURGE) pkg-ma-same:$(FOREIGN_ARCH) pkg-ma-foreign:$(FOREIGN_ARCH) pkg-ma-allowed:$(FOREIGN_ARCH) pkg-ma-no:$(FOREIGN_ARCH)
170 $(call pkg_is_not_installed,pkg-ma-same:$(FOREIGN_ARCH))
171 $(call pkg_is_not_installed,pkg-ma-foreign:$(FOREIGN_ARCH))
172 $(call pkg_is_not_installed,pkg-ma-allowed:$(FOREIGN_ARCH))
173 $(call pkg_is_not_installed,pkg-ma-no:$(FOREIGN_ARCH))
175 test-coinstall-ma-same: ma-setup
176 # Coinstall 2 Multi-Arch: same packages
177 $(DPKG_INSTALL) pkg-ma-same_1.0_$(NATIVE_ARCH).deb
178 $(DPKG_INSTALL) pkg-ma-same_1.0_$(FOREIGN_ARCH).deb
179 $(call pkg_is_installed,pkg-ma-same:$(NATIVE_ARCH))
180 $(call pkg_is_installed,pkg-ma-same:$(FOREIGN_ARCH))
181 # Upgrade one, the other must be unconfigured
182 $(DPKG_UNPACK) pkg-ma-same_2.0_$(NATIVE_ARCH).deb
183 $(call pkg_status_is,pkg-ma-same:$(NATIVE_ARCH),install ok unpacked)
184 $(call pkg_status_is,pkg-ma-same:$(FOREIGN_ARCH),install ok half-configured)
185 # Configure one alone must fail
186 ! $(DPKG_CONFIGURE) pkg-ma-same:$(NATIVE_ARCH)
187 ! $(DPKG_CONFIGURE) pkg-ma-same:$(FOREIGN_ARCH)
188 # Upgrade the other and it's now possible to configure them
189 $(DPKG_UNPACK) pkg-ma-same_2.0_$(FOREIGN_ARCH).deb
190 $(DPKG_CONFIGURE) --pending
191 $(call pkg_is_installed,pkg-ma-same:$(NATIVE_ARCH))
192 $(call pkg_is_installed,pkg-ma-same:$(FOREIGN_ARCH))
193 $(DPKG_PURGE) pkg-ma-same:$(NATIVE_ARCH) pkg-ma-same:$(FOREIGN_ARCH)
195 TEST_CASES_CROSSGRADE :=
196 TEST_CASES_CROSSGRADE += test-crossgrade-foreign-allowed
198 test-crossgrade: $(TEST_CASES_CROSSGRADE)
200 test-crossgrade-foreign-allowed: ma-setup
201 # Ensure we can cross-grade Multi-Arch: foreign/allowed
202 $(DPKG_INSTALL) pkg-ma-foreign_1.0_$(NATIVE_ARCH).deb
203 $(DPKG_INSTALL) pkg-ma-foreign_1.0_$(FOREIGN_ARCH).deb
204 $(DPKG_INSTALL) pkg-ma-allowed_1.0_$(FOREIGN_ARCH).deb
205 $(DPKG_INSTALL) pkg-ma-allowed_1.0_$(NATIVE_ARCH).deb
206 $(DPKG_PURGE) pkg-ma-foreign:$(NATIVE_ARCH) pkg-ma-allowed:$(FOREIGN_ARCH)
208 TEST_CASES_CROSSGRADE :=
209 TEST_CASES_CROSSGRADE += test-crossgrade-any-all-same
210 TEST_CASES_CROSSGRADE += test-crossgrade-any-all-foreign
211 TEST_CASES_CROSSGRADE += test-crossgrade-any-all-allowed
212 TEST_CASES_CROSSGRADE += test-crossgrade-all-any-same
213 TEST_CASES_CROSSGRADE += test-crossgrade-all-any-foreign
214 TEST_CASES_CROSSGRADE += test-crossgrade-all-any-allowed
215 TEST_CASES_CROSSGRADE += test-crossgrade-same-all
216 TEST_CASES_CROSSGRADE += test-crossgrade-no
218 test-crossgrade: $(TEST_CASES_CROSSGRADE)
220 test-crossgrade-any-all-%: ma-setup
221 # M-A: $* / Upgrade from arch: any-native -> all
222 $(DPKG_INSTALL) pkg-ma-$*_1.0_$(NATIVE_ARCH).deb
223 $(DPKG_INSTALL) pkg-ma-$*_1.0_all.deb
224 $(call pkg_is_installed,pkg-ma-$*:all)
225 $(call pkg_is_not_installed,pkg-ma-$*:$(NATIVE_ARCH))
226 $(call pkg_field_is,pkg-ma-$*,Architecture,all)
227 $(DPKG_PURGE) pkg-ma-$*
228 $(call pkg_is_not_installed,pkg-ma-$*)
229 # M-A: $* / Upgrade from arch: any-foreign -> all
230 $(DPKG_INSTALL) pkg-ma-$*_1.0_$(FOREIGN_ARCH).deb
231 $(DPKG_INSTALL) pkg-ma-$*_1.0_all.deb
232 $(call pkg_is_installed,pkg-ma-$*:all)
233 $(call pkg_is_not_installed,pkg-ma-$*:$(FOREIGN_ARCH))
234 $(DPKG_PURGE) pkg-ma-$*
236 test-crossgrade-all-any-%: ma-setup
237 # M-A: $* / Upgrade from arch: all -> any-native
238 $(DPKG_INSTALL) pkg-ma-$*_1.0_all.deb
239 $(DPKG_INSTALL) pkg-ma-$*_1.0_$(NATIVE_ARCH).deb
240 $(call pkg_is_installed,pkg-ma-$*:$(NATIVE_ARCH))
241 $(call pkg_is_not_installed,pkg-ma-$*:all)
242 $(call pkg_field_is,pkg-ma-$*,Architecture,$(NATIVE_ARCH))
243 $(DPKG_PURGE) pkg-ma-$*:$(NATIVE_ARCH)
244 $(call pkg_is_not_installed,pkg-ma-$*:all)
245 $(call pkg_is_not_installed,pkg-ma-$*:$(NATIVE_ARCH))
246 # M-A: $* / Upgrade from arch: all -> any-foreign
247 $(DPKG_INSTALL) pkg-ma-$*_1.0_all.deb
248 $(DPKG_INSTALL) pkg-ma-$*_1.0_$(FOREIGN_ARCH).deb
249 $(call pkg_is_not_installed,pkg-ma-$*:all)
250 $(call pkg_is_installed,pkg-ma-$*:$(FOREIGN_ARCH))
251 $(DPKG_PURGE) pkg-ma-$*
253 test-crossgrade-same-all: ma-setup
254 # Several M-A: same installed, can't upgrade to single arch all
255 $(DPKG_INSTALL) pkg-ma-same_1.0_$(NATIVE_ARCH).deb
256 $(DPKG_INSTALL) pkg-ma-same_1.0_$(FOREIGN_ARCH).deb
257 ! $(DPKG_INSTALL) pkg-ma-same_1.0_all.deb
258 $(call pkg_is_installed,pkg-ma-same:$(NATIVE_ARCH))
259 $(call pkg_is_installed,pkg-ma-same:$(FOREIGN_ARCH))
260 $(call pkg_is_not_installed,pkg-ma-same:all)
261 $(DPKG_PURGE) pkg-ma-same:$(NATIVE_ARCH) pkg-ma-same:$(FOREIGN_ARCH)
263 pkg-ma-no_1.0_$(NATIVE_ARCH) pkg-ma-no_1.0_$(FOREIGN_ARCH):: pkg-template
264 echo "A conffile" > $@/m-a/conffile-$@
265 echo "/m-a/conffile-$@" > $@/DEBIAN/conffiles
267 test-crossgrade-no: ma-setup
268 $(DPKG_INSTALL) pkg-ma-no_1.0_$(NATIVE_ARCH).deb
269 $(DPKG_REMOVE) pkg-ma-no:$(NATIVE_ARCH)
270 $(call pkg_status_is,pkg-ma-no:$(NATIVE_ARCH),deinstall ok config-files)
271 $(call pkg_is_not_installed,pkg-ma-no:$(FOREIGN_ARCH))
272 $(call stdout_has,$(DPKG_QUERY) -L pkg-ma-no,/m-a/conffile-pkg-ma-no_1.0_$(NATIVE_ARCH))
273 $(DPKG_INSTALL) pkg-ma-no_1.0_$(FOREIGN_ARCH).deb
274 # Verify the replaced package disappeared
275 $(call pkg_is_not_installed,pkg-ma-no:$(NATIVE_ARCH))
276 $(call pkg_is_installed,pkg-ma-no:$(FOREIGN_ARCH))
277 $(call stdout_has,$(DPKG_QUERY) -L pkg-ma-no:$(FOREIGN_ARCH),/m-a/conffile-pkg-ma-no_1.0_$(FOREIGN_ARCH))
278 # Ensure the conffile of the disappeared package is still tracked
279 $(call stdout_has,$(DPKG_QUERY) -L pkg-ma-no:$(FOREIGN_ARCH),/m-a/conffile-pkg-ma-no_1.0_$(NATIVE_ARCH))
280 $(call stdout_has,$(DPKG_QUERY) -f '$${Conffiles}' -W pkg-ma-no:$(FOREIGN_ARCH), /m-a/conffile-pkg-ma-no_1.0_$(NATIVE_ARCH) [a-f0-9]+ obsolete$$)
281 $(DPKG_PURGE) pkg-ma-no:$(FOREIGN_ARCH)
283 TEST_CASES_DEPS :=
284 TEST_CASES_DEPS += test-deps-same
285 TEST_CASES_DEPS += test-deps-foreign
286 TEST_CASES_DEPS += test-deps-allowed
287 TEST_CASES_DEPS += test-deps-no
288 TEST_CASES_DEPS += test-deps-self-conflict
289 TEST_CASES_DEPS += test-deps-force
291 test-deps: $(TEST_CASES_DEPS)
293 test-deps-same: ma-setup
294 # Native M-A: same is installed, no cross-arch dep allowed
295 $(DPKG_INSTALL) pkg-ma-same_1.0_$(NATIVE_ARCH).deb
296 ! $(DPKG_INSTALL) pkg-ma-dep-on-same_1.0_$(FOREIGN_ARCH).deb
297 $(DPKG_PURGE) pkg-ma-dep-on-same:$(FOREIGN_ARCH)
298 $(DPKG_INSTALL) pkg-ma-dep-on-same_1.0_all.deb
299 $(call pkg_is_installed,pkg-ma-dep-on-same)
300 $(DPKG_PURGE) pkg-ma-dep-on-same
301 $(DPKG_INSTALL) pkg-ma-dep-on-same_1.0_$(NATIVE_ARCH).deb
302 $(call pkg_is_installed,pkg-ma-dep-on-same:$(NATIVE_ARCH))
303 $(DPKG_PURGE) pkg-ma-dep-on-same:$(NATIVE_ARCH)
304 $(DPKG_PURGE) pkg-ma-same:$(NATIVE_ARCH)
305 # Foreign M-A: same is installed
306 $(DPKG_INSTALL) pkg-ma-same_1.0_$(FOREIGN_ARCH).deb
307 ! $(DPKG_INSTALL) pkg-ma-dep-on-same_1.0_$(NATIVE_ARCH).deb
308 $(DPKG_PURGE) pkg-ma-dep-on-same:$(NATIVE_ARCH)
309 ! $(DPKG_INSTALL) pkg-ma-dep-on-same_1.0_all.deb
310 $(DPKG_PURGE) pkg-ma-dep-on-same
311 $(DPKG_INSTALL) pkg-ma-dep-on-same_1.0_$(FOREIGN_ARCH).deb
312 $(call pkg_is_installed,pkg-ma-dep-on-same:$(FOREIGN_ARCH))
313 $(DPKG_PURGE) pkg-ma-dep-on-same:$(FOREIGN_ARCH)
314 $(DPKG_PURGE) pkg-ma-same:$(FOREIGN_ARCH)
315 # Arch: all M-A: same can't exist
317 test-deps-foreign: ma-setup
318 # Native M-A: foreign is installed
319 $(DPKG_INSTALL) pkg-ma-foreign_1.0_$(NATIVE_ARCH).deb
320 $(DPKG_INSTALL) pkg-ma-dep-on-foreign_1.0_$(FOREIGN_ARCH).deb
321 $(call pkg_is_installed,pkg-ma-dep-on-foreign:$(FOREIGN_ARCH))
322 $(DPKG_PURGE) pkg-ma-dep-on-foreign:$(FOREIGN_ARCH)
323 $(DPKG_INSTALL) pkg-ma-dep-on-foreign_1.0_all.deb
324 $(call pkg_is_installed,pkg-ma-dep-on-foreign)
325 $(DPKG_PURGE) pkg-ma-dep-on-foreign
326 $(DPKG_INSTALL) pkg-ma-dep-on-foreign_1.0_$(NATIVE_ARCH).deb
327 $(call pkg_is_installed,pkg-ma-dep-on-foreign:$(NATIVE_ARCH))
328 $(DPKG_PURGE) pkg-ma-dep-on-foreign:$(NATIVE_ARCH)
329 $(DPKG_PURGE) pkg-ma-foreign:$(NATIVE_ARCH)
330 # Foreign M-A: foreign is installed
331 $(DPKG_INSTALL) pkg-ma-foreign_1.0_$(FOREIGN_ARCH).deb
332 $(DPKG_INSTALL) pkg-ma-dep-on-foreign_1.0_$(FOREIGN_ARCH).deb
333 $(call pkg_is_installed,pkg-ma-dep-on-foreign:$(FOREIGN_ARCH))
334 $(DPKG_PURGE) pkg-ma-dep-on-foreign:$(FOREIGN_ARCH)
335 $(DPKG_INSTALL) pkg-ma-dep-on-foreign_1.0_all.deb
336 $(call pkg_is_installed,pkg-ma-dep-on-foreign)
337 $(DPKG_PURGE) pkg-ma-dep-on-foreign
338 $(DPKG_INSTALL) pkg-ma-dep-on-foreign_1.0_$(NATIVE_ARCH).deb
339 $(call pkg_is_installed,pkg-ma-dep-on-foreign:$(NATIVE_ARCH))
340 $(DPKG_PURGE) pkg-ma-dep-on-foreign:$(NATIVE_ARCH)
341 $(DPKG_PURGE) pkg-ma-foreign:$(FOREIGN_ARCH)
342 # Arch: all M-A: foreign is installed
343 $(DPKG_INSTALL) pkg-ma-foreign_1.0_all.deb
344 $(DPKG_INSTALL) pkg-ma-dep-on-foreign_1.0_$(FOREIGN_ARCH).deb
345 $(call pkg_is_installed,pkg-ma-dep-on-foreign:$(FOREIGN_ARCH))
346 $(DPKG_PURGE) pkg-ma-dep-on-foreign:$(FOREIGN_ARCH)
347 $(DPKG_INSTALL) pkg-ma-dep-on-foreign_1.0_all.deb
348 $(call pkg_is_installed,pkg-ma-dep-on-foreign)
349 $(DPKG_PURGE) pkg-ma-dep-on-foreign
350 $(DPKG_INSTALL) pkg-ma-dep-on-foreign_1.0_$(NATIVE_ARCH).deb
351 $(call pkg_is_installed,pkg-ma-dep-on-foreign:$(NATIVE_ARCH))
352 $(DPKG_PURGE) pkg-ma-dep-on-foreign:$(NATIVE_ARCH)
353 $(DPKG_PURGE) pkg-ma-foreign
355 test-deps-allowed: ma-setup
356 ## Native M-A: allowed is installed
357 $(DPKG_INSTALL) pkg-ma-allowed_1.0_$(NATIVE_ARCH).deb
358 # Non-annotated dependency on pkg-ma-allowed
359 ! $(DPKG_INSTALL) pkg-ma-dep-on-allowed_1.0_$(FOREIGN_ARCH).deb
360 $(DPKG_PURGE) pkg-ma-dep-on-allowed:$(FOREIGN_ARCH)
361 $(DPKG_INSTALL) pkg-ma-dep-on-allowed_1.0_$(NATIVE_ARCH).deb
362 $(call pkg_is_installed,pkg-ma-dep-on-allowed:$(NATIVE_ARCH))
363 $(DPKG_PURGE) pkg-ma-dep-on-allowed:$(NATIVE_ARCH)
364 $(DPKG_INSTALL) pkg-ma-dep-on-allowed_1.0_all.deb
365 $(call pkg_is_installed,pkg-ma-dep-on-allowed)
366 $(DPKG_PURGE) pkg-ma-dep-on-allowed
367 # Annotated dep: pkg-ma-allowed:any
368 $(DPKG_INSTALL) pkg-ma-dep-on-allowed-any_1.0_$(FOREIGN_ARCH).deb
369 $(call pkg_is_installed,pkg-ma-dep-on-allowed-any:$(FOREIGN_ARCH))
370 $(DPKG_PURGE) pkg-ma-dep-on-allowed-any:$(FOREIGN_ARCH)
371 $(DPKG_INSTALL) pkg-ma-dep-on-allowed-any_1.0_$(NATIVE_ARCH).deb
372 $(call pkg_is_installed,pkg-ma-dep-on-allowed-any:$(NATIVE_ARCH))
373 $(DPKG_PURGE) pkg-ma-dep-on-allowed-any:$(NATIVE_ARCH)
374 $(DPKG_INSTALL) pkg-ma-dep-on-allowed-any_1.0_all.deb
375 $(call pkg_is_installed,pkg-ma-dep-on-allowed-any)
376 $(DPKG_PURGE) pkg-ma-dep-on-allowed-any
377 $(DPKG_PURGE) pkg-ma-allowed:$(NATIVE_ARCH)
378 ## Foreign M-A: allowed is installed
379 $(DPKG_INSTALL) pkg-ma-allowed_1.0_$(FOREIGN_ARCH).deb
380 # Non-annotated dependency on pkg-ma-allowed
381 $(DPKG_INSTALL) pkg-ma-dep-on-allowed_1.0_$(FOREIGN_ARCH).deb
382 $(call pkg_is_installed,pkg-ma-dep-on-allowed:$(FOREIGN_ARCH))
383 $(DPKG_PURGE) pkg-ma-dep-on-allowed:$(FOREIGN_ARCH)
384 ! $(DPKG_INSTALL) pkg-ma-dep-on-allowed_1.0_$(NATIVE_ARCH).deb
385 $(DPKG_PURGE) pkg-ma-dep-on-allowed:$(NATIVE_ARCH)
386 ! $(DPKG_INSTALL) pkg-ma-dep-on-allowed_1.0_all.deb
387 $(DPKG_PURGE) pkg-ma-dep-on-allowed
388 # Annotated dep: pkg-ma-allowed:any
389 $(DPKG_INSTALL) pkg-ma-dep-on-allowed-any_1.0_$(FOREIGN_ARCH).deb
390 $(call pkg_is_installed,pkg-ma-dep-on-allowed-any:$(FOREIGN_ARCH))
391 $(DPKG_PURGE) pkg-ma-dep-on-allowed-any:$(FOREIGN_ARCH)
392 $(DPKG_INSTALL) pkg-ma-dep-on-allowed-any_1.0_$(NATIVE_ARCH).deb
393 $(call pkg_is_installed,pkg-ma-dep-on-allowed-any:$(NATIVE_ARCH))
394 $(DPKG_PURGE) pkg-ma-dep-on-allowed-any:$(NATIVE_ARCH)
395 $(DPKG_INSTALL) pkg-ma-dep-on-allowed-any_1.0_all.deb
396 $(call pkg_is_installed,pkg-ma-dep-on-allowed-any)
397 $(DPKG_PURGE) pkg-ma-dep-on-allowed-any
398 $(DPKG_PURGE) pkg-ma-allowed:$(FOREIGN_ARCH)
399 ## Arch: all M-A: allowed is installed
400 $(DPKG_INSTALL) pkg-ma-allowed_1.0_all.deb
401 # Non-annotated dependency on pkg-ma-allowed
402 ! $(DPKG_INSTALL) pkg-ma-dep-on-allowed_1.0_$(FOREIGN_ARCH).deb
403 $(DPKG_PURGE) pkg-ma-dep-on-allowed:$(FOREIGN_ARCH)
404 $(DPKG_INSTALL) pkg-ma-dep-on-allowed_1.0_$(NATIVE_ARCH).deb
405 $(call pkg_is_installed,pkg-ma-dep-on-allowed:$(NATIVE_ARCH))
406 $(DPKG_PURGE) pkg-ma-dep-on-allowed:$(NATIVE_ARCH)
407 $(DPKG_INSTALL) pkg-ma-dep-on-allowed_1.0_all.deb
408 $(call pkg_is_installed,pkg-ma-dep-on-allowed)
409 $(DPKG_PURGE) pkg-ma-dep-on-allowed
410 # Annotated dep: pkg-ma-allowed:any
411 $(DPKG_INSTALL) pkg-ma-dep-on-allowed-any_1.0_$(FOREIGN_ARCH).deb
412 $(call pkg_is_installed,pkg-ma-dep-on-allowed-any:$(FOREIGN_ARCH))
413 $(DPKG_PURGE) pkg-ma-dep-on-allowed-any:$(FOREIGN_ARCH)
414 $(DPKG_INSTALL) pkg-ma-dep-on-allowed-any_1.0_$(NATIVE_ARCH).deb
415 $(call pkg_is_installed,pkg-ma-dep-on-allowed-any:$(NATIVE_ARCH))
416 $(DPKG_PURGE) pkg-ma-dep-on-allowed-any:$(NATIVE_ARCH)
417 $(DPKG_INSTALL) pkg-ma-dep-on-allowed-any_1.0_all.deb
418 $(call pkg_is_installed,pkg-ma-dep-on-allowed-any)
419 $(DPKG_PURGE) pkg-ma-dep-on-allowed-any
420 $(DPKG_PURGE) pkg-ma-allowed
422 test-deps-no: ma-setup
423 # Native M-A: no is installed
424 $(DPKG_INSTALL) pkg-ma-no_1.0_$(NATIVE_ARCH).deb
425 ! $(DPKG_INSTALL) pkg-ma-dep-on-no_1.0_$(FOREIGN_ARCH).deb
426 $(DPKG_PURGE) pkg-ma-dep-on-no:$(FOREIGN_ARCH)
427 $(DPKG_INSTALL) pkg-ma-dep-on-no_1.0_all.deb
428 $(call pkg_is_installed,pkg-ma-dep-on-no)
429 $(DPKG_PURGE) pkg-ma-dep-on-no
430 $(DPKG_INSTALL) pkg-ma-dep-on-no_1.0_$(NATIVE_ARCH).deb
431 $(call pkg_is_installed,pkg-ma-dep-on-no:$(NATIVE_ARCH))
432 $(DPKG_PURGE) pkg-ma-dep-on-no:$(NATIVE_ARCH)
433 $(DPKG_PURGE) pkg-ma-no:$(NATIVE_ARCH)
434 # Foreign M-A: no is installed (with --force-architecture)
435 $(DPKG_INSTALL) --force-architecture pkg-ma-no_1.0_$(FOREIGN_ARCH).deb
436 $(DPKG_INSTALL) pkg-ma-dep-on-no_1.0_$(FOREIGN_ARCH).deb
437 $(call pkg_is_installed,pkg-ma-dep-on-no:$(FOREIGN_ARCH))
438 $(DPKG_PURGE) pkg-ma-dep-on-no:$(FOREIGN_ARCH)
439 ! $(DPKG_INSTALL) pkg-ma-dep-on-no_1.0_all.deb
440 $(DPKG_PURGE) pkg-ma-dep-on-no
441 ! $(DPKG_INSTALL) pkg-ma-dep-on-no_1.0_$(NATIVE_ARCH).deb
442 $(DPKG_PURGE) pkg-ma-dep-on-no:$(NATIVE_ARCH)
443 $(DPKG_PURGE) pkg-ma-no:$(FOREIGN_ARCH)
444 # Arch: all M-A: no is installed
445 $(DPKG_INSTALL) pkg-ma-no_1.0_all.deb
446 ! $(DPKG_INSTALL) pkg-ma-dep-on-no_1.0_$(FOREIGN_ARCH).deb
447 $(DPKG_PURGE) pkg-ma-dep-on-no:$(FOREIGN_ARCH)
448 $(DPKG_INSTALL) pkg-ma-dep-on-no_1.0_all.deb
449 $(call pkg_is_installed,pkg-ma-dep-on-no)
450 $(DPKG_PURGE) pkg-ma-dep-on-no
451 $(DPKG_INSTALL) pkg-ma-dep-on-no_1.0_$(NATIVE_ARCH).deb
452 $(call pkg_is_installed,pkg-ma-dep-on-no:$(NATIVE_ARCH))
453 $(DPKG_PURGE) pkg-ma-dep-on-no:$(NATIVE_ARCH)
454 $(DPKG_PURGE) pkg-ma-no
456 pkg-ma-self-conflict_1.0_$(NATIVE_ARCH) pkg-ma-self-conflict_1.0_$(FOREIGN_ARCH):: pkg-template
457 grep -q "Conflicts: " $@/DEBIAN/control || \
458 (echo "Conflicts: virtual-foo" >> $@/DEBIAN/control; \
459 echo "Provides: virtual-foo" >> $@/DEBIAN/control)
461 test-deps-self-conflict: ma-setup
462 $(DPKG_INSTALL) pkg-ma-self-conflict_1.0_$(NATIVE_ARCH).deb
463 $(DPKG_INSTALL) pkg-ma-self-conflict_1.0_$(FOREIGN_ARCH).deb
464 $(DPKG_PURGE) pkg-ma-self-conflict:$(NATIVE_ARCH)
465 $(DPKG_PURGE) pkg-ma-self-conflict:$(FOREIGN_ARCH)
467 test-deps-force: ma-setup
468 # Try --force-depends when dependency is missing
469 $(DPKG_INSTALL) --force-depends pkg-ma-dep-on-no_1.0_$(FOREIGN_ARCH).deb
470 $(DPKG_PURGE) pkg-ma-dep-on-no:$(FOREIGN_ARCH)
471 # Try --force-depends when dependency is of the wrong arch
472 $(DPKG_INSTALL) pkg-ma-no_1.0_$(NATIVE_ARCH).deb
473 $(DPKG_INSTALL) --force-depends pkg-ma-dep-on-no_1.0_$(FOREIGN_ARCH).deb
474 $(DPKG_PURGE) pkg-ma-dep-on-no:$(FOREIGN_ARCH)
475 $(DPKG_PURGE) pkg-ma-no
477 common_file = /m-a/common-file
479 # Further customize test packages for test-coinstall-shared-files
480 define customize_shared_files
481 pkg-ma-shared-files_$(1)_$(2)-file_$(3):: pkg-template
482 echo "Variant: $(2) Version: $(1)" > pkg-ma-shared-files_$(1)_$(2)-file_$(3)$(common_file)
484 pkg-ma-shared-files_$(1)_$(2)-symlink_$(3):: pkg-template
485 ln -sf "$(2)-$(1)" pkg-ma-shared-files_$(1)_$(2)-symlink_$(3)$(common_file)
487 pkg-ma-shared-files_$(1)_$(2)-fifo_$(3):: pkg-template
488 test -e pkg-ma-shared-files_$(1)_$(2)-fifo_$(3)$(common_file) || \
489 $(BEROOT) mkfifo pkg-ma-shared-files_$(1)_$(2)-fifo_$(3)$(common_file)
491 pkg-ma-shared-files_$(1)_$(2)-chardev_$(3):: pkg-template
492 [ "$(2)" = "orig" ] && major=1 || major=2; \
493 [ "$(1)" = "1.0" ] && minor=3 || minor=4; \
494 test -e pkg-ma-shared-files_$(1)_$(2)-chardev_$(3)$(common_file) || \
495 $(BEROOT) mknod pkg-ma-shared-files_$(1)_$(2)-chardev_$(3)$(common_file) c $$$$major $$$$minor
497 pkg-ma-shared-files_$(1)_$(2)-blockdev_$(3):: pkg-template
498 [ "$(2)" = "orig" ] && major=1 || major=2; \
499 [ "$(1)" = "1.0" ] && minor=3 || minor=4; \
500 test -e pkg-ma-shared-files_$(1)_$(2)-blockdev_$(3)$(common_file) || \
501 $(BEROOT) mknod pkg-ma-shared-files_$(1)_$(2)-blockdev_$(3)$(common_file) b $$$$major $$$$minor
502 endef
504 $(foreach version,1.0 2.0,$(foreach variant,orig alt,\
505 $(eval $(call customize_shared_files,$(version),$(variant),$(NATIVE_ARCH)))\
506 $(eval $(call customize_shared_files,$(version),$(variant),$(FOREIGN_ARCH)))))
508 test-coinstall-shared-files: ma-setup
509 # Ensure we can't install a shared file conflicting with a
510 # multi-arch sibling package of the same version
511 $(DPKG_INSTALL) pkg-ma-shared-files_1.0_orig-file_$(NATIVE_ARCH).deb
512 ! $(DPKG_INSTALL) pkg-ma-shared-files_1.0_alt-symlink_$(FOREIGN_ARCH).deb
513 test -f "$(DPKG_INSTDIR)$(common_file)"
514 ! $(DPKG_INSTALL) pkg-ma-shared-files_1.0_alt-fifo_$(FOREIGN_ARCH).deb
515 test -f "$(DPKG_INSTDIR)$(common_file)"
516 ifdef DPKG_AS_ROOT
517 ! $(DPKG_INSTALL) pkg-ma-shared-files_1.0_alt-chardev_$(FOREIGN_ARCH).deb
518 test -f "$(DPKG_INSTDIR)$(common_file)"
519 ! $(DPKG_INSTALL) pkg-ma-shared-files_1.0_alt-blockdev_$(FOREIGN_ARCH).deb
520 test -f "$(DPKG_INSTDIR)$(common_file)"
521 endif
522 ! $(DPKG_INSTALL) pkg-ma-shared-files_1.0_alt-file_$(FOREIGN_ARCH).deb
523 grep -q "Variant: orig Version: 1.0" "$(DPKG_INSTDIR)$(common_file)"
524 $(DPKG_INSTALL) pkg-ma-shared-files_1.0_orig-file_$(FOREIGN_ARCH).deb
525 $(call stdout_has,$(DPKG_QUERY) -L pkg-ma-shared-files:$(NATIVE_ARCH),$(common_file))
526 $(call stdout_has,$(DPKG_QUERY) -L pkg-ma-shared-files:$(FOREIGN_ARCH),$(common_file))
527 ! $(DPKG_INSTALL) pkg-ma-shared-files_1.0_alt-file_$(FOREIGN_ARCH).deb
528 # But that we can install another version while upgrading
529 $(DPKG_UNPACK) pkg-ma-shared-files_2.0_orig-file_$(NATIVE_ARCH).deb
530 grep -q "Variant: orig Version: 2.0" "$(DPKG_INSTDIR)$(common_file)"
531 ! $(DPKG_UNPACK) pkg-ma-shared-files_2.0_alt-file_$(FOREIGN_ARCH).deb
532 $(DPKG_UNPACK) pkg-ma-shared-files_2.0_orig-file_$(FOREIGN_ARCH).deb
533 $(DPKG_CONFIGURE) --pending
534 $(DPKG_UNPACK) pkg-ma-shared-files_1.0_alt-file_$(NATIVE_ARCH).deb
535 grep -q "Variant: alt" "$(DPKG_INSTDIR)$(common_file)"
536 # Even during upgrade you can't come with a conflicting version
537 ! $(DPKG_UNPACK) pkg-ma-shared-files_1.0_orig-file_$(FOREIGN_ARCH).deb
538 $(DPKG_UNPACK) pkg-ma-shared-files_1.0_alt-file_$(FOREIGN_ARCH).deb
539 $(DPKG_CONFIGURE) --pending
540 $(DPKG_PURGE) pkg-ma-shared-files:$(NATIVE_ARCH)
541 $(DPKG_PURGE) pkg-ma-shared-files:$(FOREIGN_ARCH)
542 # Ensure we can re-install a conflicting version of a package if
543 # no multi-arch siblings are installed
544 $(DPKG_INSTALL) pkg-ma-shared-files_1.0_orig-file_$(NATIVE_ARCH).deb
545 $(DPKG_INSTALL) pkg-ma-shared-files_1.0_alt-file_$(NATIVE_ARCH).deb
546 $(DPKG_PURGE) pkg-ma-shared-files:$(NATIVE_ARCH)
547 $(DPKG_INSTALL) pkg-ma-shared-files_1.0_orig-file_$(FOREIGN_ARCH).deb
548 $(DPKG_INSTALL) pkg-ma-shared-files_1.0_alt-file_$(FOREIGN_ARCH).deb
549 $(DPKG_PURGE) pkg-ma-shared-files:$(FOREIGN_ARCH)
550 # Ensure files are kept during removal
551 $(DPKG_INSTALL) pkg-ma-shared-files_1.0_orig-file_$(NATIVE_ARCH).deb
552 $(DPKG_INSTALL) pkg-ma-shared-files_1.0_orig-file_$(FOREIGN_ARCH).deb
553 $(DPKG_PURGE) pkg-ma-shared-files:$(FOREIGN_ARCH)
554 grep -q "Variant: orig Version: 1.0" "$(DPKG_INSTDIR)$(common_file)"
555 $(call stdout_has,$(DPKG_QUERY) -L pkg-ma-shared-files:$(NATIVE_ARCH),$(common_file))
556 $(DPKG_PURGE) pkg-ma-shared-files:$(NATIVE_ARCH)
557 # Ensure we detect differences with non-files too
558 $(DPKG_INSTALL) pkg-ma-shared-files_1.0_orig-symlink_$(NATIVE_ARCH).deb
559 ! $(DPKG_INSTALL) pkg-ma-shared-files_1.0_alt-symlink_$(FOREIGN_ARCH).deb
560 $(DPKG_INSTALL) pkg-ma-shared-files_1.0_orig-symlink_$(FOREIGN_ARCH).deb
561 $(call stdout_is,readlink "$(DPKG_INSTDIR)$(common_file)",orig-1.0)
562 $(DPKG_PURGE) pkg-ma-shared-files:$(NATIVE_ARCH) pkg-ma-shared-files:$(FOREIGN_ARCH)
563 ifdef DPKG_AS_ROOT
564 $(DPKG_INSTALL) pkg-ma-shared-files_1.0_orig-chardev_$(NATIVE_ARCH).deb
565 ! $(DPKG_INSTALL) pkg-ma-shared-files_1.0_alt-chardev_$(FOREIGN_ARCH).deb
566 $(DPKG_INSTALL) pkg-ma-shared-files_1.0_orig-chardev_$(FOREIGN_ARCH).deb
567 test -c "$(DPKG_INSTDIR)$(common_file)"
568 $(call stdout_is,stat -c "%t %T" "$(DPKG_INSTDIR)$(common_file)",1 3)
569 $(DPKG_PURGE) pkg-ma-shared-files:$(NATIVE_ARCH) pkg-ma-shared-files:$(FOREIGN_ARCH)
570 $(DPKG_INSTALL) pkg-ma-shared-files_1.0_orig-blockdev_$(NATIVE_ARCH).deb
571 ! $(DPKG_INSTALL) pkg-ma-shared-files_1.0_alt-blockdev_$(FOREIGN_ARCH).deb
572 $(DPKG_INSTALL) pkg-ma-shared-files_1.0_orig-blockdev_$(FOREIGN_ARCH).deb
573 test -b "$(DPKG_INSTDIR)$(common_file)"
574 $(call stdout_is,stat -c "%t %T" "$(DPKG_INSTDIR)$(common_file)",1 3)
575 $(DPKG_PURGE) pkg-ma-shared-files:$(NATIVE_ARCH) pkg-ma-shared-files:$(FOREIGN_ARCH)
576 endif
578 # Further customize test packages for test-coinstall-shared-conffiles
579 define customize_shared_conffiles
580 pkg-ma-shared-conffiles_$(1)_$(2)_$(3):: pkg-template
581 echo "Variant: $(2) Version: $(1)" > pkg-ma-shared-conffiles_$(1)_$(2)_$(3)/m-a/conffile
582 echo "/m-a/conffile" > pkg-ma-shared-conffiles_$(1)_$(2)_$(3)/DEBIAN/conffiles
583 endef
585 $(foreach version,1.0 2.0,$(foreach variant,orig alt,\
586 $(eval $(call customize_shared_conffiles,$(version),$(variant),$(NATIVE_ARCH)))\
587 $(eval $(call customize_shared_conffiles,$(version),$(variant),$(FOREIGN_ARCH)))))
589 test-coinstall-shared-conffiles: ma-setup
590 # Ensure we can't install a shared conffile conflicting with a
591 # multi-arch sibling package of the same version
592 $(DPKG_INSTALL) pkg-ma-shared-conffiles_1.0_orig_$(NATIVE_ARCH).deb
593 ! $(DPKG_INSTALL) pkg-ma-shared-conffiles_1.0_alt_$(FOREIGN_ARCH).deb
594 grep -q "Variant: orig Version: 1.0" "$(DPKG_INSTDIR)/m-a/conffile"
595 $(DPKG_INSTALL) pkg-ma-shared-conffiles_1.0_orig_$(FOREIGN_ARCH).deb
596 ! $(DPKG_INSTALL) pkg-ma-shared-conffiles_1.0_alt_$(FOREIGN_ARCH).deb
597 $(DPKG_PURGE) pkg-ma-shared-conffiles:$(NATIVE_ARCH)
598 $(DPKG_PURGE) pkg-ma-shared-conffiles:$(FOREIGN_ARCH)
599 # Ensure this is still true even if the installed conffile is modified
600 $(DPKG_INSTALL) pkg-ma-shared-conffiles_1.0_orig_$(NATIVE_ARCH).deb
601 $(BEROOT) sh -c "echo 'MODIFIED' >>'$(DPKG_INSTDIR)/m-a/conffile'"
602 ! $(DPKG_INSTALL) pkg-ma-shared-conffiles_1.0_alt_$(FOREIGN_ARCH).deb
603 grep -q "Variant: orig Version: 1.0" "$(DPKG_INSTDIR)/m-a/conffile"
604 $(DPKG_INSTALL) --force-confold pkg-ma-shared-conffiles_1.0_orig_$(FOREIGN_ARCH).deb
605 ! $(DPKG_INSTALL) pkg-ma-shared-conffiles_1.0_alt_$(FOREIGN_ARCH).deb
606 # Ensure we can install another version while upgrading even
607 # with a modified conffile
608 $(DPKG_UNPACK) pkg-ma-shared-conffiles_2.0_orig_$(NATIVE_ARCH).deb
609 grep -q "Variant: orig Version: 2.0" "$(DPKG_INSTDIR)/m-a/conffile.dpkg-new"
610 ! $(DPKG_UNPACK) pkg-ma-shared-conffiles_2.0_alt_$(FOREIGN_ARCH).deb
611 grep -q "Variant: orig Version: 2.0" "$(DPKG_INSTDIR)/m-a/conffile.dpkg-new"
612 $(DPKG_UNPACK) pkg-ma-shared-conffiles_2.0_orig_$(FOREIGN_ARCH).deb
613 $(DPKG_CONFIGURE) --force-confnew --pending
614 grep -q "Variant: orig Version: 2.0" "$(DPKG_INSTDIR)/m-a/conffile"
615 # Ensure the conffile hashes are correct, i.e. the new hashes have
616 # propagated to all instances
617 $(call stdout_is,$(DPKG_QUERY) -f '$${Conffiles}' -W pkg-ma-shared-conffiles:$(NATIVE_ARCH), /m-a/conffile 7404b80581282025ee3ec6689e111114)
618 $(call stdout_is,$(DPKG_QUERY) -f '$${Conffiles}' -W pkg-ma-shared-conffiles:$(FOREIGN_ARCH), /m-a/conffile 7404b80581282025ee3ec6689e111114)
619 # Ensure we can reinstall coinstallable packages with conffiles on
620 # the same run
621 $(DPKG_INSTALL) pkg-ma-shared-conffiles_2.0_orig_$(NATIVE_ARCH).deb \
622 pkg-ma-shared-conffiles_2.0_orig_$(FOREIGN_ARCH).deb
623 grep -q "Variant: orig Version: 2.0" "$(DPKG_INSTDIR)/m-a/conffile"
624 # Ensure we can reinstall coinstallable packages with conffiles on
625 # different runs
626 $(DPKG_UNPACK) pkg-ma-shared-conffiles_2.0_orig_$(FOREIGN_ARCH).deb
627 $(DPKG_UNPACK) pkg-ma-shared-conffiles_2.0_orig_$(NATIVE_ARCH).deb
628 $(DPKG_CONFIGURE) pkg-ma-shared-conffiles:$(NATIVE_ARCH)
629 $(DPKG_CONFIGURE) pkg-ma-shared-conffiles:$(FOREIGN_ARCH)
630 grep -q "Variant: orig Version: 2.0" "$(DPKG_INSTDIR)/m-a/conffile"
631 # Another time with a downgrade and an unmodified conffile
632 $(DPKG_UNPACK) pkg-ma-shared-conffiles_1.0_alt_$(NATIVE_ARCH).deb
633 grep -q "Variant: alt" "$(DPKG_INSTDIR)/m-a/conffile.dpkg-new"
634 ! $(DPKG_UNPACK) pkg-ma-shared-conffiles_1.0_orig_$(FOREIGN_ARCH).deb
635 $(DPKG_UNPACK) pkg-ma-shared-conffiles_1.0_alt_$(FOREIGN_ARCH).deb
636 $(DPKG_CONFIGURE) --force-confnew --pending
637 # Verify shared conffiles are forgotten on remove, and really
638 # removed on purge of last package
639 $(DPKG_REMOVE) pkg-ma-shared-conffiles:$(NATIVE_ARCH)
640 ! $(call stdout_has,$(DPKG_QUERY) -L pkg-ma-shared-conffiles:$(NATIVE_ARCH),/m-a/conffile)
641 $(DPKG_PURGE) pkg-ma-shared-conffiles:$(NATIVE_ARCH)
642 test -e "$(DPKG_INSTDIR)/m-a/conffile"
643 $(DPKG_PURGE) pkg-ma-shared-conffiles:$(FOREIGN_ARCH)
644 ! test -e "$(DPKG_INSTDIR)/m-a/conffile"
645 # Ensure we can re-install a conflicting version of a package if
646 # no multi-arch siblings are installed
647 $(DPKG_INSTALL) pkg-ma-shared-conffiles_1.0_orig_$(NATIVE_ARCH).deb
648 $(DPKG_INSTALL) pkg-ma-shared-conffiles_1.0_alt_$(NATIVE_ARCH).deb
649 $(DPKG_PURGE) pkg-ma-shared-conffiles:$(NATIVE_ARCH)
650 $(DPKG_INSTALL) pkg-ma-shared-conffiles_1.0_orig_$(FOREIGN_ARCH).deb
651 $(DPKG_INSTALL) pkg-ma-shared-conffiles_1.0_alt_$(FOREIGN_ARCH).deb
652 $(DPKG_PURGE) pkg-ma-shared-conffiles:$(FOREIGN_ARCH)
653 # Same with modified conffile
654 $(DPKG_INSTALL) pkg-ma-shared-conffiles_1.0_orig_$(NATIVE_ARCH).deb
655 $(BEROOT) sh -c "echo 'MODIFIED' >>'$(DPKG_INSTDIR)/m-a/conffile'"
656 $(DPKG_INSTALL) --force-confnew pkg-ma-shared-conffiles_1.0_alt_$(NATIVE_ARCH).deb
657 $(DPKG_PURGE) pkg-ma-shared-conffiles:$(NATIVE_ARCH)
658 $(DPKG_INSTALL) pkg-ma-shared-conffiles_1.0_orig_$(FOREIGN_ARCH).deb
659 $(BEROOT) sh -c "echo 'MODIFIED' >>'$(DPKG_INSTDIR)/m-a/conffile'"
660 $(DPKG_INSTALL) --force-confnew pkg-ma-shared-conffiles_1.0_alt_$(FOREIGN_ARCH).deb
661 $(DPKG_PURGE) pkg-ma-shared-conffiles:$(FOREIGN_ARCH)
663 # Further customize test packages for test-coinstall-triggers
664 pkg-ma-triggers_1.0_$(NATIVE_ARCH) pkg-ma-triggers_1.0_$(FOREIGN_ARCH):: pkg-template
665 echo "#!/bin/sh" >$@/DEBIAN/postinst
666 echo '[ "$$1" = "triggered" ] || exit 0' >>$@/DEBIAN/postinst
667 echo 'case " $$2 " in' >>$@/DEBIAN/postinst
668 echo '*" /m-a/trigger-watch "*) ' >>$@/DEBIAN/postinst
669 echo ' echo "FILE $$DPKG_MAINTSCRIPT_ARCH" >>"$$DPKG_ROOT/m-a/triggers" ;;' >>$@/DEBIAN/postinst
670 echo 'esac' >>$@/DEBIAN/postinst
671 echo 'case " $$2 " in' >>$@/DEBIAN/postinst
672 echo '*" test-m-a-same "*)' >>$@/DEBIAN/postinst
673 echo ' echo "MANUAL $$DPKG_MAINTSCRIPT_ARCH" >>"$$DPKG_ROOT/m-a/triggers" ;;' >>$@/DEBIAN/postinst
674 echo 'esac' >>$@/DEBIAN/postinst
675 chmod 755 $@/DEBIAN/postinst
676 echo 'interest /m-a/trigger-watch' >$@/DEBIAN/triggers
677 echo 'interest test-m-a-same' >>$@/DEBIAN/triggers
679 pkg-ma-act-trig_1.0_all:: pkg-template
680 echo "Activates a trigger" >$@/m-a/trigger-watch
681 echo "#!/bin/sh" >$@/DEBIAN/postinst
682 echo "dpkg-trigger test-m-a-same" >>$@/DEBIAN/postinst
683 chmod 755 $@/DEBIAN/postinst
685 test-coinstall-triggers: ma-setup
686 -cat "$(DPKG_ADMINDIR)/triggers/File"
687 $(DPKG_INSTALL) pkg-ma-triggers_1.0_$(NATIVE_ARCH).deb
688 cat "$(DPKG_ADMINDIR)/triggers/File"
689 $(DPKG_INSTALL) pkg-ma-triggers_1.0_$(FOREIGN_ARCH).deb
690 cat "$(DPKG_ADMINDIR)/triggers/File"
691 # Test file trigger processing
692 $(BEROOT) sh -c ":>'$(DPKG_INSTDIR)/m-a/triggers'"
693 $(DPKG_UNPACK) --no-triggers pkg-ma-act-trig_1.0_all.deb
694 $(call pkg_status_is,pkg-ma-triggers:$(NATIVE_ARCH),install ok triggers-pending)
695 $(call pkg_status_is,pkg-ma-triggers:$(FOREIGN_ARCH),install ok triggers-pending)
696 $(DPKG_CONFIGURE) pkg-ma-triggers:$(NATIVE_ARCH) pkg-ma-triggers:$(FOREIGN_ARCH)
697 $(call pkg_is_installed,pkg-ma-triggers:$(NATIVE_ARCH))
698 $(call pkg_is_installed,pkg-ma-triggers:$(FOREIGN_ARCH))
699 $(call stdout_is,grep -c FILE "$(DPKG_INSTDIR)/m-a/triggers",2)
700 grep -q "FILE $(NATIVE_ARCH)" "$(DPKG_INSTDIR)/m-a/triggers"
701 grep -q "FILE $(FOREIGN_ARCH)" "$(DPKG_INSTDIR)/m-a/triggers"
702 # Test manual trigger processing
703 $(DPKG_CONFIGURE) pkg-ma-act-trig
704 $(call pkg_is_installed,pkg-ma-triggers:$(NATIVE_ARCH))
705 $(call pkg_is_installed,pkg-ma-triggers:$(FOREIGN_ARCH))
706 $(call stdout_is,grep -c MANUAL "$(DPKG_INSTDIR)/m-a/triggers",2)
707 grep -q "MANUAL $(NATIVE_ARCH)" "$(DPKG_INSTDIR)/m-a/triggers"
708 grep -q "MANUAL $(FOREIGN_ARCH)" "$(DPKG_INSTDIR)/m-a/triggers"
709 # Clean up
710 $(DPKG_PURGE) pkg-ma-act-trig
711 $(BEROOT) rm -f "$(DPKG_INSTDIR)/m-a/triggers"
712 $(DPKG_PURGE) pkg-ma-triggers:$(NATIVE_ARCH)
713 $(DPKG_PURGE) pkg-ma-triggers:$(FOREIGN_ARCH)
715 # Further customize test packages for test-coinstall-diversions
716 pkg-ma-diversion_1.0_all:: pkg-template
717 echo "File provided by pkg-ma-diversion" >$@$(common_file)
718 echo "#!/bin/sh" >$@/DEBIAN/preinst
719 echo '[ "$$1" = "install" ] || exit 0' >>$@/DEBIAN/preinst
720 echo 'dpkg-divert --add --rename $(common_file)' >>$@/DEBIAN/preinst
721 echo "#!/bin/sh" >$@/DEBIAN/postrm
722 echo '[ "$$1" = "remove" ] || exit 0' >>$@/DEBIAN/postrm
723 echo 'dpkg-divert --remove --rename $(common_file)' >>$@/DEBIAN/postrm
724 chmod 755 $@/DEBIAN/preinst $@/DEBIAN/postrm
726 pkg-ma-diverted_1.0_all:: pkg-template
727 echo "File provided by pkg-ma-diverted" >$@$(common_file)
729 pkg-ma-shared-diversion_1.0_$(NATIVE_ARCH) pkg-ma-shared-diversion_1.0_$(FOREIGN_ARCH):: pkg-template
730 echo "File provided by pkg-ma-shared-diversion" >$@$(common_file)
731 echo "#!/bin/sh" >$@/DEBIAN/preinst
732 echo '[ "$$1" = "install" ] || exit 0' >>$@/DEBIAN/preinst
733 echo 'dpkg-divert --add --rename $(common_file)' >>$@/DEBIAN/preinst
734 echo "#!/bin/sh" >$@/DEBIAN/postrm
735 echo '[ "$$1" = "remove" ] || exit 0' >>$@/DEBIAN/postrm
736 echo 'dpkg-divert --remove --rename $(common_file)' >>$@/DEBIAN/postrm
737 chmod 755 $@/DEBIAN/preinst $@/DEBIAN/postrm
739 test-coinstall-diversions: ma-setup
740 # Test shared files with a diversion
741 $(DPKG_DIVERT_ADD) --local --divert $(common_file).real $(common_file)
742 $(MAKE) test-coinstall-shared-files common_file=$(common_file).real
743 $(DPKG_DIVERT_DEL) --local --divert $(common_file).real $(common_file)
744 $(DPKG_INSTALL) pkg-ma-diversion_1.0_all.deb
745 $(MAKE) test-coinstall-shared-files common_file=$(common_file).distrib
746 $(DPKG_PURGE) pkg-ma-diversion
747 # Test with another package providing a conflicting file
748 # and the multiarch packages registering the diversion
749 $(DPKG_INSTALL) pkg-ma-diverted_1.0_all.deb
750 $(DPKG_INSTALL) pkg-ma-shared-diversion_1.0_$(NATIVE_ARCH).deb
751 $(DPKG_INSTALL) pkg-ma-shared-diversion_1.0_$(FOREIGN_ARCH).deb
752 grep -q "pkg-ma-diverted" "$(DPKG_INSTDIR)$(common_file).distrib"
753 grep -q "pkg-ma-shared-diversion" "$(DPKG_INSTDIR)$(common_file)"
754 $(DPKG_PURGE) pkg-ma-shared-diversion:$(NATIVE_ARCH)
755 $(call stdout_has,$(DPKG_DIVERT) --list,$(common_file).distrib)
756 $(DPKG_PURGE) pkg-ma-shared-diversion:$(FOREIGN_ARCH)
757 ! $(call stdout_has,$(DPKG_DIVERT) --list,$(common_file).distrib)
758 $(DPKG_PURGE) pkg-ma-diverted
760 test-dpkg-output: ma-setup
761 $(DPKG_INSTALL) pkg-ma-shared-files_1.0_orig-file_$(NATIVE_ARCH).deb
762 $(DPKG_INSTALL) pkg-ma-shared-files_1.0_orig-file_$(FOREIGN_ARCH).deb
763 $(call stdout_has,$(DPKG_QUERY) -W,^pkg-ma-shared-files:$(NATIVE_ARCH) 1.0$)
764 $(call stdout_has,$(DPKG_QUERY) -W,^pkg-ma-shared-files:$(FOREIGN_ARCH) 1.0$)
765 ! $(call stdout_is,$(DPKG_QUERY) -f'$${binary:Package}' -W pkg-ma-shared-files,pkg-ma-shared-files)
766 $(call stdout_is,$(DPKG_QUERY) -f'$${binary:Package}' -W pkg-ma-shared-files:$(NATIVE_ARCH),pkg-ma-shared-files:$(NATIVE_ARCH))
767 $(call stdout_is,$(DPKG_QUERY) -f'$${binary:Package}' -W pkg-ma-shared-files:$(FOREIGN_ARCH),pkg-ma-shared-files:$(FOREIGN_ARCH))
768 ! $(call stdout_is,$(DPKG_QUERY) -f'$${Package}' -W pkg-ma-shared-files,pkg-ma-shared-files)
769 $(call stdout_is,$(DPKG_QUERY) -f'$${Package}' -W pkg-ma-shared-files:$(NATIVE_ARCH),pkg-ma-shared-files)
770 $(call stdout_is,$(DPKG_QUERY) -f'$${Package}' -W pkg-ma-shared-files:$(FOREIGN_ARCH),pkg-ma-shared-files)
771 $(call stdout_has,$(DPKG_QUERY) -W,^pkg-ma-shared-files:$(FOREIGN_ARCH) 1.0$)
772 $(call stdout_has,$(DPKG_QUERY) --search $(common_file),(, |^)pkg-ma-shared-files:$(NATIVE_ARCH)(, |: ))
773 $(call stdout_has,$(DPKG_QUERY) --search $(common_file),(, |^)pkg-ma-shared-files:$(FOREIGN_ARCH)(, |: ))
774 $(call stdout_has,$(DPKG_QUERY) --list,^ii pkg-ma-shared-files:$(NATIVE_ARCH))
775 $(call stdout_has,$(DPKG_QUERY) --list,^ii pkg-ma-shared-files:$(FOREIGN_ARCH) )
776 $(call stdout_has,$(DPKG) --get-selections,^pkg-ma-shared-files:$(NATIVE_ARCH) +install$)
777 $(call stdout_has,$(DPKG) --get-selections,^pkg-ma-shared-files:$(FOREIGN_ARCH) +install$)
778 echo "pkg-ma-shared-files:$(NATIVE_ARCH) hold" | $(BEROOT) $(DPKG) --set-selections
779 $(call stdout_has,$(DPKG) --get-selections,^pkg-ma-shared-files:$(NATIVE_ARCH) +hold$)
780 $(call stdout_has,$(DPKG) --get-selections,^pkg-ma-shared-files:$(FOREIGN_ARCH) +install$)
781 echo "pkg-ma-shared-files:$(FOREIGN_ARCH) deinstall" | $(BEROOT) $(DPKG) --set-selections
782 $(call stdout_has,$(DPKG) --get-selections,^pkg-ma-shared-files:$(NATIVE_ARCH) +hold$)
783 $(call stdout_has,$(DPKG) --get-selections,^pkg-ma-shared-files:$(FOREIGN_ARCH) +deinstall$)
784 echo "pkg-ma-shared-files:$(NATIVE_ARCH) install" | $(BEROOT) $(DPKG) --set-selections
785 $(call stdout_has,$(DPKG) --get-selections,^pkg-ma-shared-files:$(NATIVE_ARCH) +install$)
786 $(call stdout_has,$(DPKG) --get-selections,^pkg-ma-shared-files:$(FOREIGN_ARCH) +deinstall$)
787 $(DPKG_PURGE) pkg-ma-shared-files:$(NATIVE_ARCH) pkg-ma-shared-files:$(FOREIGN_ARCH)
789 pkg-ma-db-layout_1.0_$(NATIVE_ARCH):: pkg-template
790 touch pkg-ma-db-layout_1.0_$(NATIVE_ARCH)/DEBIAN/foo-1
792 pkg-ma-db-layout_2.0_$(NATIVE_ARCH):: pkg-template
793 touch pkg-ma-db-layout_2.0_$(NATIVE_ARCH)/DEBIAN/foo-2
795 test-db-layout: ma-setup
796 $(DPKG_INSTALL) pkg-ma-db-layout_1.0_$(NATIVE_ARCH).deb
797 test -e "$(DPKG_ADMINDIR)/info/pkg-ma-db-layout.list"
798 test -e "$(DPKG_ADMINDIR)/info/pkg-ma-db-layout.foo-1"
799 $(DPKG_INSTALL) pkg-ma-db-layout_2.0_$(NATIVE_ARCH).deb
800 ! test -e "$(DPKG_ADMINDIR)/info/pkg-ma-db-layout.list"
801 ! test -e "$(DPKG_ADMINDIR)/info/pkg-ma-db-layout.foo-1"
802 test -e "$(DPKG_ADMINDIR)/info/pkg-ma-db-layout:$(NATIVE_ARCH).list"
803 test -e "$(DPKG_ADMINDIR)/info/pkg-ma-db-layout:$(NATIVE_ARCH).foo-2"
804 $(DPKG_INSTALL) pkg-ma-db-layout_1.0_$(NATIVE_ARCH).deb
805 test -e "$(DPKG_ADMINDIR)/info/pkg-ma-db-layout.list"
806 test -e "$(DPKG_ADMINDIR)/info/pkg-ma-db-layout.foo-1"
807 ! test -e "$(DPKG_ADMINDIR)/info/pkg-ma-db-layout:$(NATIVE_ARCH).list"
808 ! test -e "$(DPKG_ADMINDIR)/info/pkg-ma-db-layout:$(NATIVE_ARCH).foo-2"
809 $(DPKG_PURGE) pkg-ma-db-layout
810 # Test the upgrade of the db layout
811 $(DPKG_INSTALL) pkg-ma-db-layout_2.0_$(NATIVE_ARCH).deb
812 rm -f "$(DPKG_ADMINDIR)/info/format"
813 mv "$(DPKG_ADMINDIR)/info/pkg-ma-db-layout:$(NATIVE_ARCH).list" "$(DPKG_ADMINDIR)/info/pkg-ma-db-layout.list"
814 mv "$(DPKG_ADMINDIR)/info/pkg-ma-db-layout:$(NATIVE_ARCH).foo-2" "$(DPKG_ADMINDIR)/info/pkg-ma-db-layout.foo-2"
815 $(call stdout_has,$(DPKG_QUERY) --control-path pkg-ma-db-layout foo-2,/pkg-ma-db-layout\.foo-2$$)
816 $(DPKG_CONFIGURE) -a
817 grep -q "^1$$" "$(DPKG_ADMINDIR)/info/format"
818 test -e "$(DPKG_ADMINDIR)/info/pkg-ma-db-layout:$(NATIVE_ARCH).list"
819 test -e "$(DPKG_ADMINDIR)/info/pkg-ma-db-layout:$(NATIVE_ARCH).foo-2"
820 ! test -e "$(DPKG_ADMINDIR)/info/pkg-ma-db-layout.list"
821 ! test -e "$(DPKG_ADMINDIR)/info/pkg-ma-db-layout.foo-2"
822 $(call stdout_has,$(DPKG_QUERY) --control-path pkg-ma-db-layout foo-2,/pkg-ma-db-layout:$(NATIVE_ARCH)\.foo-2$$)
823 $(DPKG_PURGE) pkg-ma-db-layout
825 test-clean:
826 $(BEROOT) rm -f "$(DPKG_INSTDIR)/m-a/triggers"
827 $(DPKG_QUERY) -W | grep ^pkg-ma- | (while read pkg ver; do \
828 $(DPKG_PURGE) $$pkg; \
829 done)
830 -$(DPKG_DIVERT_DEL) --local --divert $(common_file).real $(common_file)
831 rm -f "$(DPKG_ADMINDIR)/arch"