]> git.proxmox.com Git - grub2.git/blob - debian/rules
eb892e1e64a266ecf04bfcc65c83057e313ae3dc
[grub2.git] / debian / rules
1 #!/usr/bin/make -f
2 SHELL := bash
3
4 deb_version := $(shell dpkg-parsechangelog | sed -ne "s/^Version: \(.*\)/\1/p")
5 upstream_version := $(shell echo $(deb_version) | sed -e "s/-[^-]*$$//")
6
7 package := grub2
8
9 DEB_HOST_ARCH ?= $(shell dpkg-architecture -qDEB_HOST_ARCH 2>/dev/null)
10 DEB_HOST_ARCH_OS ?= $(shell dpkg-architecture -qDEB_HOST_ARCH_OS 2>/dev/null)
11 DEB_HOST_ARCH_CPU ?= $(shell dpkg-architecture -qDEB_HOST_ARCH_CPU 2>/dev/null)
12
13 export DEB_BUILD_MAINT_OPTIONS = optimize=-lto
14
15 HOST_CPPFLAGS := $(shell dpkg-buildflags --get CPPFLAGS)
16 # -O3 (default on Ubuntu ppc64el) introduces various -Werror failures, and
17 # isn't worth it here.
18 HOST_CFLAGS := -Wall -Wno-error=unused-result $(shell dpkg-buildflags --get CFLAGS | perl -pe 's/-O3\b/-O2/')
19 HOST_LDFLAGS := $(shell dpkg-buildflags --get LDFLAGS)
20
21 export DEB_HOST_ARCH
22 export HOST_CPPFLAGS
23 export HOST_CFLAGS
24 export HOST_LDFLAGS
25 export TARGET_CPPFLAGS := -Wno-unused-but-set-variable
26 export TARGET_LDFLAGS := -no-pie
27
28 # Ensure that debhelper doesn't try to set these; we need to be careful
29 # about HOST_* vs. TARGET_*.
30 export CPPFLAGS :=
31 export CFLAGS :=
32 export LDFLAGS :=
33
34 ifeq (,$(shell command -v qemu-system-i386))
35 with_check := no
36 else
37 with_check := yes
38 endif
39
40 CC := gcc-12
41
42 confflags = \
43 PACKAGE_VERSION="$(deb_version)" PACKAGE_STRING="GRUB $(deb_version)" \
44 CC=$(CC) TARGET_CC=$(CC) \
45 --libdir=\$${prefix}/lib --libexecdir=\$${prefix}/lib \
46 --enable-grub-mkfont \
47 --disable-grub-emu-usb
48 substvars =
49
50 AUTOGEN_DEB_FILES = config templates preinst postinst postrm dirs install links maintscript bash-completion
51
52 BUILD_PACKAGES := $(strip $(shell dh_listpackages))
53 # REAL_PACKAGES build an actual grub variant (and therefore have both configure
54 # and build stages). EXTRA_PACKAGES do not build grub but may depend on a
55 # REAL_PACKAGE (and therefore only have a build stage)
56 REAL_PACKAGES = grub-common grub-emu grub-pc grub-coreboot grub-efi-ia32 grub-efi-amd64 grub-efi-ia64 grub-efi-arm grub-efi-arm64 grub-ieee1275 grub-firmware-qemu grub-uboot grub-xen grub-yeeloong
57 EXTRA_PACKAGES = grub-rescue-pc grub-xen-host
58
59 ifneq (,$(filter i386 amd64,$(DEB_HOST_ARCH_CPU)))
60 COMMON_PLATFORM := pc
61 else ifneq (,$(filter powerpc ppc64 ppc64el sparc sparc64,$(DEB_HOST_ARCH_CPU)))
62 COMMON_PLATFORM := ieee1275
63 else ifeq (mipsel,$(DEB_HOST_ARCH_CPU))
64 COMMON_PLATFORM := yeeloong
65 else ifeq (ia64,$(DEB_HOST_ARCH_CPU))
66 COMMON_PLATFORM := efi-ia64
67 else ifeq (arm,$(DEB_HOST_ARCH_CPU))
68 COMMON_PLATFORM := uboot
69 else ifeq (arm64,$(DEB_HOST_ARCH_CPU))
70 COMMON_PLATFORM := efi-arm64
71 else
72 COMMON_PLATFORM := none
73 BUILD_PACKAGES += grub-none
74 endif
75
76 ifeq (yes,$(shell dpkg-vendor --derives-from Ubuntu && echo yes))
77 DEFAULT_CMDLINE := quiet splash
78 DEFAULT_TIMEOUT := 10
79 ifeq ($(DEB_HOST_ARCH_CPU),ppc64el)
80 FLICKER_FREE_BOOT := no
81 else
82 FLICKER_FREE_BOOT := yes
83 endif
84 confflags += --enable-ubuntu-recovery
85 else ifeq (yes,$(shell dpkg-vendor --derives-from Tanglu && echo yes))
86 DEFAULT_CMDLINE := quiet splash
87 DEFAULT_TIMEOUT := 10
88 FLICKER_FREE_BOOT := yes
89 else
90 DEFAULT_CMDLINE := quiet
91 DEFAULT_TIMEOUT := 5
92 FLICKER_FREE_BOOT := no
93 endif
94
95 ifeq ($(FLICKER_FREE_BOOT),yes)
96 DEFAULT_HIDDEN_TIMEOUT := 0
97 DEFAULT_HIDDEN_TIMEOUT_BOOL := true
98 confflags += \
99 --enable-quiet-boot \
100 --enable-quick-boot \
101 --enable-gfxpayload-dynamic \
102 --enable-vt-handoff
103 substvars += \
104 -Vlsb-base-depends="lsb-base (>= 3.0-6)" \
105 -Vgfxpayload-depends="grub-gfxpayload-lists [any-i386 any-amd64]"
106 else
107 DEFAULT_HIDDEN_TIMEOUT :=
108 DEFAULT_HIDDEN_TIMEOUT_BOOL := false
109 endif
110
111 # Secure Boot
112 debian/stamps/build-grub-efi-ia32 install/grub-efi-ia32: export SB_PLATFORM := i386-efi
113 debian/stamps/build-grub-efi-ia32 install/grub-efi-ia32: export SB_EFI_NAME := ia32
114 debian/stamps/build-grub-efi-amd64 install/grub-efi-amd64: export SB_PLATFORM := x86_64-efi
115 debian/stamps/build-grub-efi-amd64 install/grub-efi-amd64: export SB_EFI_NAME := x64
116 debian/stamps/build-grub-efi-arm64 install/grub-efi-arm64: export SB_PLATFORM := arm64-efi
117 debian/stamps/build-grub-efi-arm64 install/grub-efi-arm64: export SB_EFI_NAME := aa64
118 SB_PACKAGE :=
119 ifeq (yes,$(shell dpkg-vendor --derives-from Ubuntu && echo yes))
120 ifeq ($(DEB_HOST_ARCH),amd64)
121 SB_PACKAGE := grub-efi-amd64
122 endif
123 ifeq ($(DEB_HOST_ARCH),arm64)
124 SB_PACKAGE := grub-efi-arm64
125 endif
126 endif
127
128 # Downstream distributions that want to support SB and build images, but do not
129 # rebuild grub, need a programmatic way to get the vendor, as it's used by build-efi-images
130 # to create the monolithic Grub image and thus is needed to create the partitions on the EFI
131 # media. Add it to the control file user metadata: XB-Efi-Vendor: $vendor
132 SB_EFI_VENDOR ?= proxmox
133
134 %:
135 dh $@ --with=bash_completion
136
137 override_dh_auto_configure: $(patsubst %,configure/%,$(BUILD_PACKAGES))
138
139 override_dh_auto_build: $(patsubst %,build/%,$(BUILD_PACKAGES))
140
141 override_dh_auto_install: $(patsubst %,install/%,$(BUILD_PACKAGES))
142
143 $(patsubst %,configure/%,$(REAL_PACKAGES)) :: configure/% : debian/stamps/configure-%
144 $(patsubst %,build/%,$(REAL_PACKAGES) $(EXTRA_PACKAGES)) :: build/% : debian/stamps/build-%
145
146 debian/stamps/configure-%: package = $(subst debian/stamps/configure-,,$@)
147 debian/stamps/configure-%: export DH_OPTIONS = -p$(package) -Bobj/$(package)
148
149 debian/stamps/build-%: package = $(subst debian/stamps/build-,,$@)
150 debian/stamps/build-%: export DH_OPTIONS = -p$(package) -Bobj/$(package)
151
152 install/%: package = $(subst install/,,$@)
153 install/%: package_bin = $(package)-bin
154 install/%: package_dbg = $(package)-dbg
155 install/grub-emu: package_bin = grub-emu
156 install/grub-emu: package_dbg = grub-emu-dbg
157 install/%: export DH_OPTIONS = -p$(package) -Bobj/$(patsubst grub-common,grub-$(COMMON_PLATFORM),$(package))
158
159 override_dh_autoreconf:
160 mkdir -p debian/stamps
161 rm -rf debian/grub-extras-enabled
162 mkdir debian/grub-extras-enabled
163 set -e; for extra in 915resolution ntldr-img; do \
164 cp -a debian/grub-extras/$$extra debian/grub-extras-enabled/; \
165 done
166 env -u DH_OPTIONS GRUB_CONTRIB=$(CURDIR)/debian/grub-extras-enabled \
167 PYTHON=python3 \
168 dh_autoreconf -- ./autogen.sh
169
170 debian/stamps/configure-grub-common: debian/stamps/configure-grub-$(COMMON_PLATFORM)
171 touch $@
172
173 debian/stamps/build-grub-common: debian/stamps/build-grub-$(COMMON_PLATFORM)
174 touch $@
175
176 debian/stamps/configure-grub-none debian/stamps/configure-grub-pc debian/stamps/configure-grub-ieee1275 debian/stamps/configure-grub-coreboot debian/stamps/configure-grub-emu debian/stamps/configure-grub-uboot debian/stamps/configure-grub-yeeloong:
177 mkdir -p debian/stamps obj/$(package)
178 dh_auto_configure -- $(confflags) --with-platform=$(subst grub-,,$(package))
179 touch $@
180
181 # This name scheme leaves room for things like amd32 someday
182 debian/stamps/configure-grub-efi-ia32:
183 mkdir -p debian/stamps obj/$(package)
184 dh_auto_configure -- $(confflags) --with-platform=efi --target=i386-pe --program-prefix=""
185 touch $@
186 debian/stamps/configure-grub-efi-amd64:
187 mkdir -p debian/stamps $(subst debian/stamps/configure-,obj/,$@)
188 dh_auto_configure -- $(confflags) --with-platform=efi --target=amd64-pe --program-prefix=""
189 touch $@
190 debian/stamps/configure-grub-efi-ia64 debian/stamps/configure-grub-efi-arm debian/stamps/configure-grub-efi-arm64:
191 mkdir -p debian/stamps $(subst debian/stamps/configure-,obj/,$@)
192 dh_auto_configure -- $(confflags) --with-platform=efi
193 touch $@
194
195 debian/stamps/configure-grub-xen-i386 debian/stamps/configure-grub-xen-amd64:
196 mkdir -p debian/stamps obj/$(package)
197 dh_auto_configure -- $(confflags) --with-platform=xen --target=$(subst debian/stamps/configure-grub-xen-,,$@) --program-prefix=""
198 touch $@
199 debian/stamps/configure-grub-xen-pvh-i386:
200 mkdir -p debian/stamps obj/$(package)
201 dh_auto_configure -- $(confflags) --with-platform=xen_pvh --target=i386 --program-prefix=""
202 touch $@
203 debian/stamps/configure-grub-xen: debian/stamps/configure-grub-xen-i386 debian/stamps/configure-grub-xen-amd64 debian/stamps/configure-grub-xen-pvh-i386
204 touch $@
205
206 debian/stamps/configure-grub-firmware-qemu:
207 mkdir -p debian/stamps $(subst debian/stamps/configure-,obj/,$@)
208 dh_auto_configure -- $(confflags) --with-platform=qemu
209 touch $@
210
211 debian/stamps/build-grub-none debian/stamps/build-grub-efi-ia64 debian/stamps/build-grub-efi-arm debian/stamps/build-grub-coreboot debian/stamps/build-grub-emu debian/stamps/build-grub-uboot debian/stamps/build-grub-xen-i386 debian/stamps/build-grub-xen-amd64 debian/stamps/build-grub-xen-pvh-i386 debian/stamps/build-grub-yeeloong: debian/stamps/build-%: debian/stamps/configure-%
212 dh_auto_build
213 touch $@
214
215 debian/stamps/build-grub-efi-ia32 debian/stamps/build-grub-efi-amd64 debian/stamps/build-grub-efi-arm64: debian/stamps/build-%: debian/stamps/configure-% debian/stamps/build-grub-$(COMMON_PLATFORM)
216 dh_auto_build
217 grub_dir=`mktemp -d` ; \
218 sed -e "s/@DEB_VERSION@/$(deb_version)/g" \
219 -e "s/@UPSTREAM_VERSION@/$(upstream_version)/g" \
220 <debian/sbat.$(SB_EFI_VENDOR).csv.in \
221 >$${grub_dir}/sbat.$(SB_EFI_VENDOR).csv; \
222 debian/build-efi-images \
223 obj/grub-$(COMMON_PLATFORM)/grub-mkimage \
224 obj/$(package)/grub-core \
225 obj/monolithic/$(package) \
226 $(DEB_HOST_ARCH) $(SB_PLATFORM) $(SB_EFI_NAME) \
227 $${grub_dir}/sbat.$(SB_EFI_VENDOR).csv $(SB_EFI_VENDOR)
228 touch $@
229
230 debian/stamps/build-grub-xen-host-i386: PVBOOT_ARCH := i386
231 debian/stamps/build-grub-xen-host-i386: debian/stamps/build-grub-xen-i386
232 debian/stamps/build-grub-xen-host-amd64: PVBOOT_ARCH := x86_64
233 debian/stamps/build-grub-xen-host-amd64: debian/stamps/build-grub-xen-amd64
234 debian/stamps/build-grub-xen-host-i386 debian/stamps/build-grub-xen-host-amd64:
235 target=$(subst debian/stamps/build-grub-xen-host-,,$@) ; \
236 obj_dir=$(CURDIR)/obj/grub-xen-$${target} ; \
237 grub_dir=`mktemp -d` ; \
238 grub_memdisk=`mktemp` ; \
239 trap "rm -rf $${grub_dir} $${grub_memdisk}" EXIT HUP INT QUIT TERM ; \
240 mkdir -p $${grub_dir}/boot/grub ; \
241 mkdir -p $(CURDIR)/obj/$(package) ; \
242 sed -e "s/@@PVBOOT_ARCH@@/$(PVBOOT_ARCH)/g" \
243 <debian/grub-xen-host_grub.cfg \
244 >$${grub_dir}/grub.cfg ; \
245 tar -cf - -C $${grub_dir} grub.cfg > $${grub_memdisk} ; \
246 $${obj_dir}/grub-mkimage \
247 -O $(PVBOOT_ARCH)-xen \
248 -c $(CURDIR)/debian/grub-xen-host_grub-bootstrap.cfg \
249 -d $${obj_dir}/grub-core \
250 $${obj_dir}/grub-core/*.mod \
251 -m $${grub_memdisk} \
252 -o $(CURDIR)/obj/$(package)/grub-$(PVBOOT_ARCH)-xen.bin
253 touch $@
254
255 debian/stamps/build-grub-xen-host-pvh-i386: debian/stamps/build-grub-xen-pvh-i386
256 target=$(subst debian/stamps/build-grub-xen-host-,,$@) ; \
257 obj_dir=$(CURDIR)/obj/grub-xen-$${target} ; \
258 grub_dir=`mktemp -d` ; \
259 grub_memdisk=`mktemp` ; \
260 trap "rm -rf $${grub_dir} $${grub_memdisk}" EXIT HUP INT QUIT TERM ; \
261 mkdir -p $${grub_dir}/boot/grub ; \
262 mkdir -p $(CURDIR)/obj/$(package) ; \
263 cp -a debian/grub-xen-host_grub-pvh.cfg $${grub_dir}/grub.cfg ; \
264 tar -cf - -C $${grub_dir} grub.cfg > $${grub_memdisk} ; \
265 $${obj_dir}/grub-mkimage \
266 -O i386-xen_pvh \
267 -c $(CURDIR)/debian/grub-xen-host_grub-bootstrap.cfg \
268 -d $${obj_dir}/grub-core \
269 $${obj_dir}/grub-core/*.mod \
270 -m $${grub_memdisk} \
271 -o $(CURDIR)/obj/$(package)/grub-i386-xen_pvh.bin
272 touch $@
273
274 debian/stamps/build-grub-xen-host: debian/stamps/build-grub-xen-host-i386 debian/stamps/build-grub-xen-host-amd64 debian/stamps/build-grub-xen-host-pvh-i386
275 touch $@
276
277 debian/stamps/build-grub-pc: debian/stamps/configure-grub-pc
278 dh_auto_build
279 ifeq ($(with_check), yes)
280 LC_MESSAGES=C.UTF-8 LC_CTYPE=C.UTF-8 PATH="$$PATH:/sbin:/usr/sbin" VERBOSE=1 dh_auto_test --max-parallel=1
281 endif
282 touch $@
283
284 debian/stamps/build-grub-ieee1275: debian/stamps/configure-grub-ieee1275
285 dh_auto_build
286 ifneq (,$(filter powerpc ppc64 ppc64el,$(DEB_HOST_ARCH_CPU)))
287 $(CC) $(HOST_CFLAGS) debian/prep-bootdev.c -o debian/prep-bootdev -lparted
288 endif
289 touch $@
290
291 debian/stamps/build-grub-xen: debian/stamps/build-grub-xen-i386 debian/stamps/build-grub-xen-amd64 debian/stamps/build-grub-xen-pvh-i386
292 touch $@
293
294 debian/stamps/build-grub-firmware-qemu: debian/stamps/configure-grub-firmware-qemu
295 dh_auto_build
296 grub_dir=`mktemp -d` ; \
297 grub_memdisk=`mktemp` ; \
298 trap "rm -rf $${grub_dir} $${grub_memdisk}" EXIT HUP INT QUIT TERM ; \
299 mkdir -p $${grub_dir}/boot/grub ; \
300 cp debian/grub-firmware-qemu_grub.cfg $${grub_dir}/boot/grub/grub.cfg ; \
301 tar -cf - -C $${grub_dir} boot > $${grub_memdisk} ; \
302 obj/$(package)/grub-mkimage \
303 -O i386-qemu \
304 -d $(CURDIR)/obj/$(package)/grub-core \
305 $(CURDIR)/obj/$(package)/grub-core/*.mod \
306 -m $${grub_memdisk} \
307 -o $(CURDIR)/obj/$(package)/grub.bin
308 touch $@
309
310 debian/stamps/build-grub-rescue-pc: debian/stamps/build-grub-pc
311 mkdir -p obj/grub-rescue-pc/rescue-disk/boot/grub
312 cp docs/grub.cfg obj/grub-rescue-pc/rescue-disk/boot/grub/
313 rm -rf obj/grub-rescue-pc/grub-core
314 cp -a obj/grub-pc/grub-core obj/grub-rescue-pc/grub-core
315 cp -a obj/grub-pc/unicode.pf2 obj/grub-rescue-pc/
316 pkgdatadir=$(CURDIR)/obj/grub-rescue-pc \
317 obj/grub-pc/grub-mkrescue \
318 --directory=$(CURDIR)/obj/grub-rescue-pc/grub-core \
319 --locale-directory=$(CURDIR)/obj/grub-rescue-pc/grub-core/po \
320 --output=$(CURDIR)/obj/grub-rescue-pc/grub-rescue-cdrom.iso \
321 $(CURDIR)/obj/grub-rescue-pc/rescue-disk
322 # save space for floppy image
323 rm -rf obj/grub-rescue-pc/grub-core/po obj/grub-rescue-pc/unicode.pf2
324 pkgdatadir=$(CURDIR)/obj/grub-rescue-pc \
325 obj/grub-pc/grub-mkrescue \
326 --directory=$(CURDIR)/obj/grub-rescue-pc/grub-core \
327 --locale-directory=$(CURDIR)/obj/grub-rescue-pc/grub-core/po \
328 --output=$(CURDIR)/obj/grub-rescue-pc/grub-rescue-floppy.img \
329 --compress=xz \
330 -no-pad \
331 $(CURDIR)/obj/grub-rescue-pc/rescue-disk
332 touch $@
333
334 platform_subst = \
335 if [ -e debian/$(1) ]; then \
336 debian/platform-subst \
337 PACKAGE="$(2)" \
338 DEFAULT_CMDLINE="$(DEFAULT_CMDLINE)" \
339 DEFAULT_TIMEOUT="$(DEFAULT_TIMEOUT)" \
340 DEFAULT_HIDDEN_TIMEOUT_BOOL="$(DEFAULT_HIDDEN_TIMEOUT_BOOL)" \
341 debian/$(1) >> debian/$(2).$(3); \
342 fi
343
344 install/grub-none:
345 dh_auto_install --destdir=debian/tmp-$(package)
346
347 # Avoid failures later if we're building from a tree with no .po
348 # files.
349 mkdir -p debian/tmp-$(package)/usr/share/locale
350
351 install/grub-pc install/grub-efi-ia32 install/grub-efi-amd64 install/grub-efi-ia64 install/grub-efi-arm install/grub-efi-arm64 install/grub-ieee1275 install/grub-coreboot install/grub-emu install/grub-uboot install/grub-xen install/grub-yeeloong:
352 set -e ; \
353 if [ "$@" = "install/grub-xen" ] ; then \
354 dh_auto_install -Bobj/grub-xen-i386 --destdir=debian/tmp-$(package); \
355 dh_auto_install -Bobj/grub-xen-amd64 --destdir=debian/tmp-$(package); \
356 dh_auto_install -Bobj/grub-xen-pvh-i386 --destdir=debian/tmp-$(package); \
357 else \
358 dh_auto_install --destdir=debian/tmp-$(package); \
359 fi
360
361 set -e ; \
362 if [ -d "obj/monolithic/$(package)" ] ; then \
363 install -m 0755 -d debian/$(package_bin)/usr/lib/grub/$(SB_PLATFORM)/monolithic ; \
364 install -m 0644 -t debian/$(package_bin)/usr/lib/grub/$(SB_PLATFORM)/monolithic obj/monolithic/$(package)/*.efi ; \
365 debian/signing-template.generate "$(package)" ; \
366 fi
367
368 set -e ; \
369 for i in $(AUTOGEN_DEB_FILES) ; do \
370 > debian/$(package).$$i; \
371 if [ "$@" != "install/grub-emu" ] ; then \
372 $(call platform_subst,$$i.in,$(package),$$i); \
373 fi ; \
374 $(call platform_subst,$(package).$$i.in,$(package),$$i); \
375 $(call platform_subst,$(package).$$i.$(DEB_HOST_ARCH_CPU).in,$(package),$$i); \
376 $(call platform_subst,$(package).$$i.$(DEB_HOST_ARCH_OS).in,$(package),$$i); \
377 $(call platform_subst,$(package).$$i.$(DEB_HOST_ARCH_OS)-$(DEB_HOST_ARCH_CPU).in,$(package),$$i); \
378 [ -s debian/$(package).$$i ] || rm -f debian/$(package).$$i; \
379 if [ "$@" != "install/grub-emu" ] ; then \
380 > debian/$(package_bin).$$i; \
381 $(call platform_subst,$$i-bin.in,$(package_bin),$$i); \
382 $(call platform_subst,$(package_bin).$$i.in,$(package_bin),$$i); \
383 $(call platform_subst,$(package_bin).$$i.$(DEB_HOST_ARCH_CPU).in,$(package_bin),$$i); \
384 $(call platform_subst,$(package_bin).$$i.$(DEB_HOST_ARCH_OS).in,$(package_bin),$$i); \
385 $(call platform_subst,$(package_bin).$$i.$(DEB_HOST_ARCH_OS)-$(DEB_HOST_ARCH_CPU).in,$(package_bin),$$i); \
386 [ -s debian/$(package_bin).$$i ] || rm -f debian/$(package_bin).$$i; \
387 fi ; \
388 > debian/$(package_dbg).$$i; \
389 if [ "$@" != "install/grub-emu" ] ; then \
390 $(call platform_subst,$$i-dbg.in,$(package_dbg),$$i); \
391 fi ; \
392 $(call platform_subst,$(package_dbg).$$i.in,$(package_dbg),$$i); \
393 $(call platform_subst,$(package_dbg).$$i.$(DEB_HOST_ARCH_CPU).in,$(package_dbg),$$i); \
394 $(call platform_subst,$(package_dbg).$$i.$(DEB_HOST_ARCH_OS).in,$(package_dbg),$$i); \
395 $(call platform_subst,$(package_dbg).$$i.$(DEB_HOST_ARCH_OS)-$(DEB_HOST_ARCH_CPU).in,$(package_dbg),$$i); \
396 [ -s debian/$(package_dbg).$$i ] || rm -f debian/$(package_dbg).$$i; \
397 done
398
399 find debian/tmp-$(package)/usr/lib/grub -name modinfo.sh -print0 | \
400 xargs -0r chmod +x
401 find debian/tmp-$(package)/usr/lib/grub -name gdb_grub -print0 | \
402 xargs -0r chmod -x
403 find debian/tmp-$(package)/usr/lib/grub -name gmodule.pl -print0 | \
404 xargs -0r chmod -x
405
406 mkdir -p debian/$(package_bin)/usr/share/lintian/overrides
407 echo "$(package_bin): unstripped-binary-or-object [*.mod]" \
408 >> debian/$(package_bin)/usr/share/lintian/overrides/$(package_bin)
409 cd debian/tmp-$(package) && find usr/lib/grub -name kernel.img \
410 | sed -e "s%.*%$(package_bin): statically-linked-binary [&]%g" \
411 >> $(CURDIR)/debian/$(package_bin)/usr/share/lintian/overrides/$(package_bin)
412 cd debian/tmp-$(package) && find usr/lib/grub -name kernel.img \
413 | sed -e "s%.*%$(package_bin): unstripped-binary-or-object [&]%g" \
414 >> $(CURDIR)/debian/$(package_bin)/usr/share/lintian/overrides/$(package_bin)
415 if ([ "$@" = "install/grub-efi-amd64" ] && [ "$(DEB_HOST_ARCH_CPU)" = "i386" ]) || \
416 ([ "$@" != "install/grub-emu" ] && [ "$(DEB_HOST_ARCH_CPU):$(DEB_HOST_ARCH_BITS)" = "amd64:32" ]) || \
417 [ "$@" = "install/grub-xen" ]; then \
418 echo "$(package_bin): binary-from-other-architecture [*.mod]" \
419 >> debian/$(package_bin)/usr/share/lintian/overrides/$(package_bin) ; \
420 cd debian/tmp-$(package) && find usr/lib/grub -name kernel.img \
421 | sed -e "s%.*%$(package_bin): binary-from-other-architecture [&]%g" \
422 >> $(CURDIR)/debian/$(package_bin)/usr/share/lintian/overrides/$(package_bin) ; \
423 fi
424 if ([ "$@" = "install/grub-pc" ] || \
425 [ "$@" = "install/grub-ieee1275" ] || \
426 [ "$@" = "install/grub-coreboot" ] || \
427 [ "$@" = "install/grub-xen" ] || \
428 [ "$@" = "install/grub-emu" ]) && \
429 [ "$(DEB_HOST_ARCH_OS)" = "linux" ] && \
430 [ "$(DEB_HOST_ARCH_CPU):$(DEB_HOST_ARCH_BITS)" != "amd64:64" ] ; then \
431 echo "$(package_bin): binary-from-other-architecture [*efiemu64.o]" \
432 >> debian/$(package_bin)/usr/share/lintian/overrides/$(package_bin) ; \
433 fi
434 case $@ in \
435 install/grub-efi*) \
436 (echo "# These aren't Windows executables, and these features wouldn't be very useful." \
437 echo "$(package_bin): portable-executable-missing-security-features [*.efi ASLR DEP/NX") \
438 >> debian/$(package_bin)/usr/share/lintian/overrides/$(package_bin) ;; \
439 esac
440 if [ "$@" = "install/grub-emu" ]; then \
441 (echo "# This seems to be due to a readelf bug: https://bugs.debian.org/929585"; \
442 echo "$(package_bin): binary-or-shlib-defines-rpath [usr/lib/grub/*-emu/macho.mod] 0x0") \
443 >> debian/$(package_bin)/usr/share/lintian/overrides/$(package_bin); \
444 fi
445
446 mkdir -p debian/$(package_dbg)/usr/share/lintian/overrides
447 echo "$(package_dbg): unstripped-binary-or-object [*.module]" \
448 >> debian/$(package_dbg)/usr/share/lintian/overrides/$(package_dbg)
449 echo "$(package_dbg): statically-linked-binary [*.image]" \
450 >> debian/$(package_dbg)/usr/share/lintian/overrides/$(package_dbg)
451 cd debian/tmp-$(package) && find usr/lib/grub -name kernel.exec \
452 | sed -e "s%.*%$(package_dbg): statically-linked-binary [&]%g" \
453 >> $(CURDIR)/debian/$(package_dbg)/usr/share/lintian/overrides/$(package_dbg)
454 if ([ "$@" = "install/grub-efi-amd64" ] && [ "$(DEB_HOST_ARCH_CPU)" = "i386" ]) || \
455 ([ "$@" != "install/grub-emu" ] && [ "$(DEB_HOST_ARCH_CPU):$(DEB_HOST_ARCH_BITS)" = "amd64:32" ]) || \
456 [ "$@" = "install/grub-xen" ] ; then \
457 echo "$(package_dbg): binary-from-other-architecture [*.module]" \
458 >> debian/$(package_dbg)/usr/share/lintian/overrides/$(package_dbg) ; \
459 cd debian/tmp-$(package) && find usr/lib/grub -name kernel.exec \
460 | sed -e "s%.*%$(package_dbg): binary-from-other-architecture [&]%g" \
461 >> $(CURDIR)/debian/$(package_dbg)/usr/share/lintian/overrides/$(package_dbg) ; \
462 fi
463
464 # Avoid failures later if we're building from a tree with no .po
465 # files.
466 mkdir -p debian/tmp-$(package)/usr/share/locale
467
468 common_subst = \
469 if [ -e debian/grub-common.$(1) ]; then \
470 sed 's/@COMMON_PLATFORM@/$(COMMON_PLATFORM)/g' \
471 debian/grub-common.$(1) >> debian/grub-common.$(2).new; \
472 fi
473
474 install/grub-common:
475 set -e ; for i in $(AUTOGEN_DEB_FILES) ; do \
476 > debian/grub-common.$$i.new; \
477 $(call common_subst,$$i.in,$$i); \
478 $(call common_subst,$$i.$(DEB_HOST_ARCH_CPU).in,$$i); \
479 $(call common_subst,$$i.$(DEB_HOST_ARCH_OS).in,$$i); \
480 if [ -s debian/grub-common.$$i.new ] ; then \
481 mv debian/grub-common.$$i.new debian/grub-common.$$i; \
482 else \
483 rm -f debian/grub-common.$$i.new; \
484 fi; \
485 done
486 ifeq (yes,$(shell dpkg-vendor --derives-from Ubuntu && echo yes))
487 install -D -m 0755 debian/grub-common.pm-sleep \
488 $(CURDIR)/debian/$(package)/etc/pm/sleep.d/10_grub-common
489 endif
490
491 NON_PLATFORM_PACKAGES = $(filter grub2 grub-linuxbios grub-efi grub-rescue-pc grub-firmware-qemu grub-xen-host,$(BUILD_PACKAGES))
492 COMMON_PLATFORM_PACKAGES = $(filter grub-common grub2-common grub-theme-starfield grub-mount-udeb,$(BUILD_PACKAGES))
493 PLATFORM_PACKAGES = $(filter grub-pc grub-efi-ia32 grub-efi-amd64 grub-efi-ia64 grub-efi-arm grub-efi-arm64 grub-ieee1275 grub-coreboot grub-uboot grub-xen grub-yeeloong,$(BUILD_PACKAGES))
494
495 override_dh_install:
496 ifneq (,$(NON_PLATFORM_PACKAGES))
497 dh_install $(patsubst %,-p%,$(NON_PLATFORM_PACKAGES))
498 endif
499 dh_install $(patsubst %,-p%,$(COMMON_PLATFORM_PACKAGES)) --sourcedir=debian/tmp-grub-$(COMMON_PLATFORM)
500 rm -f debian/grub2-common/usr/share/info/dir*
501 rm -f debian/grub-theme-starfield/usr/share/grub/themes/starfield/COPYING.CC-BY-SA-3.0
502 ifneq (,$(PLATFORM_PACKAGES))
503 set -e; for package in $(PLATFORM_PACKAGES); do \
504 dh_install -p$$package --sourcedir=debian/tmp-$$package; \
505 dh_install -p$$package-bin --sourcedir=debian/tmp-$$package; \
506 dh_install -p$$package-dbg --sourcedir=debian/tmp-$$package; \
507 done
508 endif
509 ifneq (,$(filter grub-emu,$(BUILD_PACKAGES)))
510 dh_install -pgrub-emu --sourcedir=debian/tmp-grub-emu
511 dh_install -pgrub-emu-dbg --sourcedir=debian/tmp-grub-emu
512 endif
513 ifneq (,$(filter grub2-common,$(BUILD_PACKAGES)))
514 sed -i \
515 -e "s/@DEFAULT_CMDLINE@/$(DEFAULT_CMDLINE)/g" \
516 -e "s/@DEFAULT_TIMEOUT@/$(DEFAULT_TIMEOUT)/g" \
517 debian/grub2-common/usr/share/grub/default/grub
518 ifneq (,$(DEFAULT_HIDDEN_TIMEOUT))
519 perl -pi -e 's/^GRUB_TIMEOUT=.*/GRUB_HIDDEN_TIMEOUT=0\nGRUB_HIDDEN_TIMEOUT_QUIET=true\n$$&/' \
520 debian/grub2-common/usr/share/grub/default/grub
521 endif
522 endif
523 ifeq (yes,$(shell dpkg-vendor --derives-from Ubuntu && echo yes))
524 ifneq (,$(filter grub-pc,$(BUILD_PACKAGES)))
525 patch debian/grub-pc/usr/lib/grub-legacy/update-grub \
526 < debian/legacy/update-grub.ubuntu.patch
527 endif
528 endif
529
530 override_dh_installdocs:
531 dh_installdocs $(patsubst %,-p%,$(filter grub-common grub-rescue-pc grub-firmware-qemu grub-xen-host,$(BUILD_PACKAGES))) -A AUTHORS NEWS README THANKS TODO
532 dh_installdocs $(patsubst %,-p%,$(filter grub-efi-%-signed-template,$(BUILD_PACKAGES)))
533 dh_installdocs --remaining-packages --link-doc=grub-common
534
535 ifeq ($(FLICKER_FREE_BOOT),yes)
536 override_dh_installinit:
537 dh_installinit -- start 99 2 3 4 5 .
538 else
539 override_dh_installinit:
540 :
541 endif
542
543 override_dh_bugfiles:
544 dh_bugfiles $(patsubst %,-N%,$(filter grub-efi-%-signed-template,$(BUILD_PACKAGES))) -A
545
546 override_dh_strip:
547 dh_strip -X/usr/bin/grub-emu -X/usr/lib/grub-xen/grub-x86_64-xen.bin -X/usr/lib/grub-xen/grub-i386-xen_pvh.bin -X/usr/lib/grub-xen/grub-i386-xen.bin
548
549 override_dh_shlibdeps:
550 dh_shlibdeps -X.module
551
552 ifeq (yes,$(shell dpkg-vendor --derives-from Ubuntu && echo yes))
553 LEGACY_DOC_BR := grub-doc (<< 0.97-29ubuntu60), grub-legacy-doc (<< 0.97-29ubuntu60)
554 else
555 LEGACY_DOC_BR := grub-doc (<< 0.97-32), grub-legacy-doc (<< 0.97-59)
556 endif
557
558 override_dh_gencontrol:
559 dh_gencontrol -- -Vlegacy-doc-br="$(LEGACY_DOC_BR)" -V"efi:Vendor=$(SB_EFI_VENDOR)" $(substvars)
560
561 TARNAME := grub2_$(deb_version)_$(DEB_HOST_ARCH).tar.gz
562
563 override_dh_builddeb:
564 dh_builddeb
565 ifneq (,$(SB_PACKAGE))
566 echo $(deb_version) > obj/monolithic/$(SB_PACKAGE)/version
567 tar -c -f ../$(TARNAME) -a -C obj/monolithic/$(SB_PACKAGE) -v .
568 dpkg-distaddfile $(TARNAME) raw-uefi -
569 endif
570
571 override_dh_auto_clean:
572 -rm -rf debian/grub-extras-enabled debian/stamps obj
573 -rm -f contrib grub-core/contrib
574
575 override_dh_clean:
576 dh_clean
577
578 chmod +x debian/{bug-script,grub.d/*,legacy/*,kernel/*}
579
580 for i in $(AUTOGEN_DEB_FILES) ; do \
581 rm -f debian/grub-{pc,efi-*,ieee1275,coreboot,uboot,xen,yeeloong,emu}{,-bin,-dbg}.$$i ; \
582 done
583 rm -f debian/grub-common.bash-completion debian/grub-common.maintscript
584 rm -rf debian/tmp-*/
585
586 # make sure PO files are always up-to-date
587 debconf-updatepo
588
589 .PHONY: $(patsubst %,configure/%,$(BUILD_PACKAGES)) $(patsubst %,build/%,$(BUILD_PACKAGES)) $(patsubst %,install/%,$(BUILD_PACKAGES))