1 # Copyright © 2011 Linaro Limited
2 # Copyright © 2011 Raphaël Hertzog <hertzog@debian.org>
3 # Copyright © 2011-2012 Guillem Jover <guillem@debian.org>
9 NATIVE_ARCH
:= $(shell dpkg
--print-architecture
)
10 ifeq ($(NATIVE_ARCH
),i386
)
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"
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)
38 pkg-ma-
$(1).deb
: pkg-ma-
$(1)
39 $(DPKG_BUILD_DEB
) --nocheck pkg-ma-
$(1) pkg-ma-
$(1).deb
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
67 shared_file_types
+= chardev blockdev
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
128 # Test build of Architecture: all with Multi-Arch: same field
129 ! $(DPKG_BUILD_DEB
) pkg-template foo.deb
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
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
)
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
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)"
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)"
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
)
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
)
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
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
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
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"
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
$$)
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
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; \
830 -$(DPKG_DIVERT_DEL
) --local
--divert
$(common_file
).real
$(common_file
)
831 rm -f
"$(DPKG_ADMINDIR)/arch"