diff options
author | Riku Voipio <riku.voipio@linaro.org> | 2016-08-01 15:32:34 +0300 |
---|---|---|
committer | Riku Voipio <riku.voipio@linaro.org> | 2016-08-01 15:47:49 +0300 |
commit | f295b7079f39458cc37b59e2ab8ee9a92db6bf6a (patch) | |
tree | 8eb2cfb15625313a88b2790d2c3067e9051e1f4a /debian/rules | |
parent | 3888cb3def8b6cc20482f7c3996ca9175acb1f8f (diff) |
packaging: sync with debian
Signed-off-by: Riku Voipio <riku.voipio@linaro.org>
Diffstat (limited to 'debian/rules')
-rwxr-xr-x | debian/rules | 454 |
1 files changed, 279 insertions, 175 deletions
diff --git a/debian/rules b/debian/rules index 9d001b1..27df782 100755 --- a/debian/rules +++ b/debian/rules @@ -1,211 +1,315 @@ #!/usr/bin/make -f +SHELL = /bin/sh -e -deb_source := $(shell dpkg-parsechangelog | sed -n 's/^Source: //p') -deb_version := $(shell dpkg-parsechangelog | sed -n 's/^Version: //p') -upstream_version := $(shell echo '$(deb_version)' | sed 's/.*://; s/-[^-]*$$//') -git_rev := $(shell echo '$(upstream_version)' | sed 's/.*+//') - -DEB_HOST_ARCH = $(shell dpkg-architecture -qDEB_HOST_ARCH) -DEB_HOST_ARCH_OS = $(shell dpkg-architecture -qDEB_HOST_ARCH_OS) -DEB_HOST_ARCH_CPU = $(shell dpkg-architecture -qDEB_HOST_ARCH_CPU) -DEB_HOST_GNU_CPU = $(shell dpkg-architecture -qDEB_HOST_GNU_CPU) -DEB_HOST_GNU_TYPE = $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE) -DEB_BUILD_GNU_TYPE = $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE) -DEB_BUILD_ARCH = $(shell dpkg-architecture -qDEB_BUILD_ARCH) - -QEMU_CPU = $(shell dpkg-architecture -qDEB_HOST_GNU_CPU) -ifeq ($(QEMU_CPU),powerpc) - QEMU_CPU = ppc +# get DEB_VERSION +include /usr/share/dpkg/pkg-info.mk +# get DEB_HOST_ARCH DEB_HOST_ARCH_OS DEB_HOST_GNU_TYPE DEB_HOST_MULTIARCH DEB_BUILD_GNU_TYPE +include /usr/share/dpkg/architecture.mk +# get CFLAGS LDFLAGS etc +include /usr/share/dpkg/buildflags.mk + +ifeq ($(shell dpkg-vendor --derives-from Ubuntu && echo yes),yes) +VENDOR := UBUNTU +DEB_BUILD_PARALLEL = yes +else +VENDOR := DEBIAN endif -ifneq (,$(filter $(DEB_HOST_ARCH),armel armhf)) - QEMU_CPU = armv7l + +# support parallel build using DEB_BUILD_OPTIONS=parallel=N +ifneq (,$(filter parallel=%,$(DEB_BUILD_OPTIONS))) + MAKEFLAGS += -j$(patsubst parallel=%,%,$(filter parallel=%,$(DEB_BUILD_OPTIONS))) endif +# verbose build +V ?= 1 + +# list of packages we're supposed to build +BUILD_PACKAGES = $(call dpkg_late_eval,BUILD_PACKAGES,dh_listpackages) + +enable_system = $(if $(filter qemu-system,${BUILD_PACKAGES}),enable,disable) +enable_linux_user = $(if $(filter qemu-user,${BUILD_PACKAGES}),enable,disable) + +DATAPATH = /usr/share/qemu:/usr/share/seabios:/usr/lib/ipxe/qemu + +# we add another set of configure options from debian/control +common_configure_opts = \ + --with-pkgversion="Debian $(DEB_VERSION)" \ + --extra-cflags="$(CFLAGS) $(CPPFLAGS) -DCONFIG_QEMU_DATAPATH='\"${DATAPATH}\"' -DVENDOR_$(VENDOR)" \ + --extra-ldflags="$(LDFLAGS) -Wl,--as-needed" \ + --prefix=/usr \ + --sysconfdir=/etc \ + --libdir=/usr/lib/$(DEB_HOST_MULTIARCH) \ + --libexecdir=/usr/lib/qemu \ + --localstatedir=/var \ + --disable-blobs \ + --disable-strip \ + --with-system-pixman \ + --interp-prefix=/etc/qemu-binfmt/%M \ + --localstatedir=/var \ + +# Cross compiling support ifneq ($(DEB_BUILD_GNU_TYPE), $(DEB_HOST_GNU_TYPE)) - conf_arch += --cross-prefix=$(DEB_HOST_GNU_TYPE)- --cpu=$(QEMU_CPU) +common_configure_opts += --cross-prefix=$(DEB_HOST_GNU_TYPE)- endif -ifeq ($(DEB_HOST_ARCH_OS),linux) -# Note: We differ from Debian here by favoring the pulseaudio driver, since that's default in Ubuntu. -# Users override this when calling qemu by exporting the environment variable QEMU_AUDIO_DRV. - conf_audio_drv += --audio-drv-list=pa,alsa,sdl,oss -endif -ifeq ($(DEB_HOST_ARCH_OS),kfreebsd) - conf_audio_drv += --audio-drv-list=oss,sdl,pa -endif -# KVM on PowerPC needs at least 2.6.33 kernel headers -ifeq ($(DEB_HOST_ARCH_CPU),powerpc) - conf_arch += --disable-kvm +ifeq (${enable_system},enable) + +# list of system (softmmu) targets, from ./configure +system_targets = \ + i386 x86_64 alpha aarch64 arm cris lm32 m68k microblaze microblazeel \ + mips mipsel mips64 mips64el moxie or32 ppc ppcemb ppc64 sh4 sh4eb \ + sparc sparc64 s390x tricore xtensa xtensaeb unicore32 + +# qemu-system subpackages, from d/control +sys_systems = arm mips ppc sparc x86 +systems = ${sys_systems} misc +sysarch_arm = $(filter aarch64 arm,${system_targets}) +sysarch_mips = $(filter mips mipsel mips64 mips64el,${system_targets}) +sysarch_ppc = $(filter ppc ppc64 ppcemb,${system_targets}) +sysarch_sparc = $(filter sparc sparc64,${system_targets}) +sysarch_x86 = $(filter i386 x86_64,${system_targets}) +sysarch_misc = $(filter-out $(foreach s,${sys_systems},${sysarch_$s}),${system_targets}) + +else + +systems = + +endif # enable_system + +ifeq (${enable_linux_user},enable) + +# list of linux-user targets, from ./configure +user_targets = \ + i386 x86_64 alpha aarch64 arm armeb cris m68k microblaze microblazeel \ + mips mipsel mips64 mips64el mipsn32 mipsn32el or32 \ + ppc ppc64 ppc64abi32 ppc64le sh4 sh4eb sparc sparc64 sparc32plus \ + s390x tilegx unicore32 + +endif # enable_linux_user + +configure-stamp: configure + dh_testdir + + # system build + rm -rf qemu-build; mkdir qemu-build + cd qemu-build && \ + ../configure ${common_configure_opts} --disable-user \ + --${enable_system}-system \ + --${enable_linux_user}-linux-user \ + --enable-modules \ + $(shell sh debian/extract-config-opts \ + $(DEB_HOST_ARCH_OS)-$(DEB_HOST_ARCH) debian/control) \ + $(QEMU_CONFIGURE_OPTIONS) || \ + { echo ===== CONFIGURE FAILED ===; tail -n 50 config.log; exit 1; } + +ifeq ($(enable_linux_user),enable) +# do not use debian/configure-opts here, all optional stuff will be enabled +# automatically, dependencies are already verified in the main build + rm -rf user-static-build; mkdir user-static-build + cd user-static-build && \ + ../configure ${common_configure_opts} \ + --static --disable-system \ + --target-list="$(addsuffix -linux-user,${user_targets})" endif + touch $@ + +build: build-arch build-indep +build-arch: build-stamp +build-indep: build-stamp +build-stamp: configure-stamp + dh_testdir -ifeq ($(DEB_HOST_ARCH_CPU),arm) - conf_arch += --enable-kvm + # system and utils build + $(MAKE) -C qemu-build V=${V} +ifeq (${enable_system},enable) + dtc -o qemu-build/pc-bios/bamboo.dtb pc-bios/bamboo.dts endif -ifeq ($(DEB_HOST_ARCH_CPU),arm64) - conf_arch += --enable-kvm + +ifeq ($(enable_linux_user),enable) + # user-static build + # we use this invocation to build just the binaries + $(MAKE) -C user-static-build V=${V} $(foreach t,${user_targets},subdir-${t}-linux-user) endif + touch $@ -# namespace to use for data files -NAMESPACE := linaro +clean: debian/control + dh_testdir + rm -rf qemu-build user-static-build + rm -f configure-stamp build-stamp + find scripts/ -name '*.pyc' -delete || : + dh_clean -# basedir in which to install BIOSes and keymaps below prefix -DATASUBDIR := share/qemu-$(NAMESPACE) -DATADIR := /usr/$(DATASUBDIR) -# XXX doesn't work because it's #defined in the source should send an upstream -# patch to allow ./configuring that -#CFLAGS += -DSHARE_SUFFIX="$(DATASUBDIR)" +# define ${ai} variable to be one of -i (indep), -a (arch) or nothing (both) +ai := +binary-indep: ai := -i +binary-indep: install +binary-arch: ai := -a +binary-arch: install +binary: install -# Workaround for var tracking blowing up the memory requirements more than -# tenfold on armel; we'll keep -g enabled but disable this particular feature -ifneq (,$(findstring $(DEB_HOST_ARCH), armel armhf)) -CFLAGS += -fno-var-tracking -endif +define inst-system + mkdir -p debian/qemu-system-$1/usr/share/man/man1 debian/qemu-system-$1/usr/bin + for t in ${sysarch_$1}; do \ + mv debian/tmp/usr/bin/qemu-system-$$t debian/qemu-system-$1/usr/bin/; \ + echo ".so man1/qemu-system.1" > debian/qemu-system-$1/usr/share/man/man1/qemu-system-$$t.1; \ + done + echo sysarch:$1=\ +$(if $(wordlist 10,20,${sysarch_$1}),\ +$(wordlist 1,8,${sysarch_$1})\$${Newline} $(wordlist 9,20,${sysarch_$1}),\ +${sysarch_$1}) \ +> debian/qemu-system-$1.substvars + echo sysprovides:$1=${addprefix qemu-system-,${filter-out $1,${sysarch_$1}}} | \ + sed -e 's/ /, /g' -e 'y/_/-/' >> debian/qemu-system-$1.substvars + dh_link -pqemu-system-$1 usr/share/doc/qemu-system-common usr/share/doc/qemu-system-$1/common -# XXX for some reason, --remote doesn't work with gitorious so this needs to be -# run from a local checkout -# --remote=git://gitorious.org/qemu-maemo/qemu-maemo.git -get-orig-source: - git archive \ - --format=tar \ - --prefix=$(deb_source)-$(upstream_version)/ \ - $(git_rev) \ - | gzip >$(deb_source)_$(upstream_version).orig.tar.gz +endef -override_dh_auto_configure: - # system build - mkdir -p $(CURDIR)/system-build - cd $(CURDIR)/system-build && \ - ../configure \ - --with-pkgversion="Debian $(deb_version)" \ - --extra-cflags="$(CFLAGS)" \ - --extra-ldflags="$(LDFLAGS)" \ - --prefix=/usr \ - --datadir=$(DATADIR) \ - --interp-prefix=/etc/qemu-binfmt/%M \ - --disable-blobs \ - --disable-strip \ - --disable-linux-user \ - --disable-bsd-user \ - --disable-spice \ - --enable-fdt \ - $(conf_arch) $(conf_audio_drv) +install: build-stamp + dh_testdir + dh_testroot + dh_prep + dh_installdirs -a -ifeq ($(DEB_HOST_ARCH_OS),linux) - # user build - mkdir -p $(CURDIR)/user-build - cd $(CURDIR)/user-build && \ - ../configure \ - --with-pkgversion="Debian $(deb_version)" \ - --extra-cflags="$(CFLAGS)" \ - --extra-ldflags="$(LDFLAGS)" \ - --prefix=/usr \ - --datadir=$(DATADIR) \ - --interp-prefix=/etc/qemu-binfmt/%M \ - --disable-blobs \ - --disable-strip \ - --disable-tools \ - --disable-docs \ - --disable-system \ - --with-system-pixman --disable-guest-agent \ - --target-list="arm-linux-user" \ - $(conf_arch) - - # static user build - mkdir -p $(CURDIR)/user-static-build - cd $(CURDIR)/user-static-build && \ - ../configure \ - --with-pkgversion="Debian $(deb_version)" \ - --extra-cflags="$(CFLAGS)" \ - --extra-ldflags="$(LDFLAGS) -Wl,--no-export-dynamic " \ - --prefix=/usr \ - --datadir=$(DATADIR) \ - --interp-prefix=/etc/qemu-binfmt/%M \ - --disable-blobs \ - --disable-strip \ - --disable-system \ - --disable-docs \ - --disable-tools \ - --with-system-pixman --disable-guest-agent \ - --static \ - $(conf_arch) - -ifeq ($(DEB_HOST_ARCH),disabled) - # spice build - mkdir -p $(CURDIR)/spice-build - cd $(CURDIR)/spice-build && \ - ../configure \ - --with-pkgversion="Debian $(deb_version)" \ - --extra-cflags="$(CFLAGS)" \ - --extra-ldflags="$(LDFLAGS)" \ - --prefix=/usr \ - --interp-prefix=/etc/qemu-binfmt/%M \ - --disable-blobs \ - --disable-strip \ - --disable-system \ - --target-list="x86_64-softmmu i386-softmmu x86_64-linux-user i386-linux-user" \ - --enable-spice \ - $(conf_arch) -endif + # system and utils install + $(MAKE) -C qemu-build DESTDIR=$(CURDIR)/debian/tmp install + +ifeq (${enable_system},enable) + + # qemu-system subpackages + mv debian/tmp/usr/share/man/man1/qemu.1 debian/tmp/usr/share/man/man1/qemu-system.1 + $(foreach s,${systems},$(call inst-system,$s)) + +ifneq ($(filter $(DEB_HOST_ARCH),amd64 i386),) +# We used to load kvm module on x86 using an initscript, +# but modern kernels do that automatically. Remove the initscript. +# Remove this fragment for stretch+1. + for x in preinst postinst postrm; do \ + echo 'dpkg-maintscript-helper rm_conffile /etc/init.d/qemu-system-x86 1:2.2+dfsg-3~ -- "$$@"' \ + >> debian/qemu-system-x86.$$x.debhelper ; \ + done +# there's no need to restore the links b/c kernel autoloads our modules + echo 'if [ configure = "$$1" ] && dpkg --compare-versions "$$2" le-nl 1:2.2+dfsg-3~; then update-rc.d qemu-system-x86 remove >/dev/null; fi' \ + >> debian/qemu-system-x86.postinst.debhelper endif -override_dh_auto_build: - # system build - dh_auto_build -B system-build --parallel -ifeq ($(DEB_HOST_ARCH_OS),linux) - # user build - dh_auto_build -B user-build --parallel +# remove now-unused target-x86_64.conf (and /etc/qemu dir too, see #797608) + for x in preinst postinst postrm; do \ + echo 'dpkg-maintscript-helper rm_conffile /etc/qemu/target-x86_64.conf 1:2.4+dfsg-1~ -- "$$@"' \ + >> debian/qemu-system-x86.$$x.debhelper ; \ + echo '[ -d /etc/qemu ] && rmdir /etc/qemu 2>/dev/null || :' \ + >> debian/qemu-system-x86.$$x.debhelper; \ + done - # static user build - dh_auto_build -B user-static-build --parallel +ifeq ($(DEB_HOST_ARCH_OS),linux) -ifeq ($(DEB_HOST_ARCH),disabled) - # spice build - dh_auto_build -B spice-build --parallel +# /usr/bin/kvm compat script. This needs some more work for other arches +# How about a manpage for it? +ifneq ($(filter $(DEB_HOST_ARCH),amd64 i386),) + dh_install -pqemu-kvm debian/kvm /usr/bin/ + dh_install -pqemu-kvm debian/kvm.1 /usr/share/man/man1/ +ifeq ($(VENDOR),UBUNTU) +# on ubuntu there was kvm-spice package/binary which was used in libvirt xml + dh_link -pqemu-kvm usr/bin/kvm usr/bin/kvm-spice \ + usr/bin/qemu-system-x86_64 usr/bin/qemu-system-x86_64-spice +endif endif +ifeq ($(VENDOR),UBUNTU) +# apport hook is ubuntu-specific + dh_install -pqemu-system-common debian/source_qemu.py \ + usr/share/apport/package-hooks/ endif -override_dh_auto_install: -ifeq ($(DEB_HOST_ARCH_OS),linux) - dh_auto_install -B user-static-build --destdir=$(CURDIR)/debian/tmp - # binfmt support - for x in postinst prerm; do \ - sed -e s/@SUFFIX@/-static/ -e s/@PACKAGE@/qemu-user-static/ \ - debian/binfmt-update-in >> debian/qemu-user-static.$$x.debhelper ; \ +# virtfs-proxy-helper and qemu-bridge-helper are linux-specific + for f in usr/bin/virtfs-proxy-helper \ + usr/share/man/man1/virtfs-proxy-helper.1 \ + usr/lib/qemu/qemu-bridge-helper \ + ; do \ + mkdir -p debian/qemu-system-common/$${f%/*} ; \ + mv debian/tmp/$$f debian/qemu-system-common/$$f ; \ done - for target in $(CURDIR)/debian/tmp/usr/bin/qemu-*; do \ - install -m 755 $$target $(CURDIR)/debian/tmp/usr/bin/$$(basename $$target)-static; \ +endif # linux + +endif # enable_system + +ifeq ($(enable_linux_user),enable) + # qemu-user + mkdir -p debian/qemu-user/usr/bin debian/qemu-user/usr/share/man/man1 + for t in ${user_targets}; do \ + mv debian/tmp/usr/bin/qemu-$$t \ + debian/qemu-user/usr/bin ; \ + ln -s qemu-user.1 \ + debian/qemu-user/usr/share/man/man1/qemu-$$t.1 ; \ done - dh_auto_install -B user-build --destdir=$(CURDIR)/debian/tmp -ifeq ($(DEB_HOST_ARCH),disabled) - dh_auto_install -B spice-build --destdir=$(CURDIR)/debian/spice-tmp - for target in qemu-i386 qemu-x86_64 qemu-system-x86_64; do \ - mv $(CURDIR)/debian/spice-tmp/usr/bin/$$target \ - $(CURDIR)/debian/spice-tmp/usr/bin/$$target-spice; \ + + # qemu-user-static + mkdir -p debian/qemu-user-static/usr/bin debian/qemu-user-static/usr/share/man/man1 + for t in ${user_targets}; do \ + cp -p user-static-build/$$t-linux-user/qemu-$$t \ + debian/qemu-user-static/usr/bin/qemu-$$t-static ; \ + ln -s qemu-user-static.1 \ + debian/qemu-user-static/usr/share/man/man1/qemu-$$t-static.1 ; \ done - mv $(CURDIR)/debian/spice-tmp/usr/bin/qemu-system-i386 \ - $(CURDIR)/debian/spice-tmp/usr/bin/qemu-spice + + # binfmt support + for x in postinst prerm; do \ + sed -e s/@SUFFIX@/-static/ -e s/@PACKAGE@/qemu-user-static/ \ + debian/binfmt-update-in >> debian/qemu-user-static.$$x.debhelper ; \ + sed -e s/@SUFFIX@// -e s/@PACKAGE@/qemu-user-binfmt/ \ + debian/binfmt-update-in >> debian/qemu-user-binfmt.$$x.debhelper ; \ + done + +endif # enable_linux_user + +# install whole thing so --list-missing works right + dh_install --list-missing +# install the rest for arch/indep as needed + dh_installdocs ${ai} -Nqemu-user-binfmt + dh_installchangelogs ${ai} -Nqemu-user-binfmt + dh_installdocs ${ai} -pqemu-user-binfmt --link-doc=qemu-user + dh_installman ${ai} + dh_installudev ${ai} +ifneq (${ai},-i) # do not run this for binary-indep +ifeq (${enable_system},enable) +# qemu-ifup is arch-specific + install -D debian/qemu-ifup.$(DEB_HOST_ARCH_OS) \ + debian/qemu-system-common/etc/qemu-ifup endif + dh_installinit -pqemu-guest-agent endif - dh_auto_install -B system-build --destdir=$(CURDIR)/debian/tmp - mkdir -p $(CURDIR)/debian/qemu-system/usr/share/qemu-linaro/qemu - cp /usr/lib/ipxe/qemu/* $(CURDIR)/debian/qemu-system/usr/share/qemu-linaro/qemu/ - mv $(CURDIR)/debian/tmp/usr/share/man/man1/qemu.1 \ - $(CURDIR)/debian/tmp/usr/share/man/man1/qemu-system.1 - -override_dh_install: -ifeq ($(DEB_HOST_ARCH),disabled) - dh_install -pqemu-kvm-spice --sourcedir=$(CURDIR)/debian/spice-tmp + dh_link ${ai} + dh_strip ${ai} + dh_compress ${ai} + dh_fixperms ${ai} + dh_makeshlibs ${ai} + dh_shlibdeps ${ai} + dh_installdeb ${ai} +ifeq ($(enable_linux_user),enable) +# after shlibdeps finished, grab ${shlibs:Depends} from -user package +# and transform it into Built-Using field for -user-static. +# See also dpkg-query bug #588505 + if [ -f debian/qemu-user.substvars ]; then \ + pkgs=$$(sed -n -e's/([^)]*)//g' -e's/,//g' -e's/^shlibs:Depends=//p' debian/qemu-user.substvars); \ + srcs=; for p in $$pkgs; do \ + srcs="$$srcs $$(dpkg-query -f '$${source:Package} (= $${source:Version}),' -W $$p)"; \ + done ; \ + echo "built-using=$$srcs" >> debian/qemu-user-static.substvars ; \ + fi endif - dh_install -Nqemu-kvm-spice + dh_gencontrol ${ai} + dh_md5sums ${ai} + dh_builddeb ${ai} -override_dh_auto_clean: - rm -rf user-static-build user-build system-build spice-build +ifneq (,$(wildcard debian/control-in)) +# only include rules for debian/control if debian/control-in is present +debian/control: debian/control-in debian/rules + sed -e 's/^:$(shell echo ${VENDOR} | tr '[A-Z]' '[a-z]')://' \ + -e '/^:[a-z]*:/D' $< > $@.tmp + mv -f $@.tmp $@ +endif -override_dh_auto_test: - # tests are broken ATM +get-orig-source: + ./debian/get-orig-source.sh ${DEB_VERSION} -%: - dh $@ +.PHONY: build clean binary-indep binary-arch binary install get-orig-source -.PHONY: get-orig-source |