summaryrefslogtreecommitdiff
path: root/debian/rules
diff options
context:
space:
mode:
authorRiku Voipio <riku.voipio@linaro.org>2016-08-01 15:32:34 +0300
committerRiku Voipio <riku.voipio@linaro.org>2016-08-01 15:47:49 +0300
commitf295b7079f39458cc37b59e2ab8ee9a92db6bf6a (patch)
tree8eb2cfb15625313a88b2790d2c3067e9051e1f4a /debian/rules
parent3888cb3def8b6cc20482f7c3996ca9175acb1f8f (diff)
packaging: sync with debian
Signed-off-by: Riku Voipio <riku.voipio@linaro.org>
Diffstat (limited to 'debian/rules')
-rwxr-xr-xdebian/rules454
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