From: Luca Boccassi Date: Thu, 3 Aug 2017 15:52:37 +0000 (+0100) Subject: Copy full headers directory into SDK X-Git-Url: https://gerrit.fd.io/r/gitweb?p=deb_dpdk.git;a=commitdiff_plain;h=d576b9dbe68f9f2aa1348926d5b34a35e567c8db Copy full headers directory into SDK The dpdk-dev SDK package is arch-dependent, as it ships a number of binary executables. Also using RTE_SDK does not support the multiple level of headers, so instead of symlinking into /usr/include/dpdk copy the full set of headers into /usr/share/dpdk/TARGET/include Given dpkg cannot replace a symlink with a directory automatically also generate a preinst file to handle it manually on upgrade. Change-Id: I1fb8fbe424b8ef015c04062f2cffe9f2b9ffe02f Signed-off-by: Luca Boccassi --- diff --git a/debian/dpdk-dev.preinst.in b/debian/dpdk-dev.preinst.in new file mode 100644 index 00000000..027e2cf0 --- /dev/null +++ b/debian/dpdk-dev.preinst.in @@ -0,0 +1,41 @@ +#!/bin/sh +# preinst script for dpdk-dev +# +# see: dh_installdeb(1) + +set -e + +# summary of how this script can be called: +# * `install' +# * `install' +# * `upgrade' +# * `abort-upgrade' +# for details, see http://www.debian.org/doc/debian-policy/ or +# the debian-policy package + + +case "$1" in + upgrade) + # include used to be a symlink to /usr/include/dpdk but to support + # multiarch it was changed to a full copy, but dpkg will not + # substitute a symlink with a directory by itself, see #626203 + if [ -L /usr/share/dpdk/@@RTE_TARGET@@/include ] ; then + rm /usr/share/dpdk/@@RTE_TARGET@@/include + fi + ;; + + install|abort-upgrade) + ;; + + *) + echo "preinst called with unknown argument \`$1'" >&2 + exit 1 + ;; +esac + +# dh_installdeb will replace this with shell code automatically +# generated by other debhelper scripts. + +#DEBHELPER# + +exit 0 diff --git a/debian/rules b/debian/rules index b1357b24..2493f536 100755 --- a/debian/rules +++ b/debian/rules @@ -167,6 +167,7 @@ override_dh_auto_clean: sed -i '/Package: dpdk-modules-/,/`tail -n1 debian/control.modules.in`/d' debian/control test -L config/defconfig_$(DPDK_CONFIG) && rm -f config/defconfig_$(DPDK_CONFIG) || true rm -f debian/dpdk-igb-uio-dkms.dkms debian/dpdk-rte-kni-dkms.dkms + rm -f debian/dpdk-dev.preinst override_dh_auto_configure: # Add support for a custom defconfig file in the debian directory. @@ -272,11 +273,20 @@ endif # system installs them in the same directory, breaking multiarch. # Move them in /usr/include//dpdk instead. mkdir -p debian/libdpdk-dev/usr/include/$(DEB_HOST_MULTIARCH)/dpdk + # Before moving the files, remove the symlink in usr/share/dpdk and copy them over, + # as the SDK subdir is architecture specific and requires the arch-specific headers + # in the top level + rm -f debian/dpdk-dev/usr/share/dpdk/$(RTE_TARGET)/include + mkdir -p debian/dpdk-dev/usr/share/dpdk/$(RTE_TARGET)/include + cp -r debian/dpdk-dev/usr/include/dpdk/* debian/dpdk-dev/usr/share/dpdk/$(RTE_TARGET)/include + # genereate the preinst to deal with the symlink -> directory transition smoothly + sed "s/@@RTE_TARGET@@/$(RTE_TARGET)/g" debian/dpdk-dev.preinst.in > debian/dpdk-dev.preinst mv $(addprefix debian/dpdk-dev/usr/include/dpdk/,$(notdir $(wildcard lib/librte_eal/common/include/arch/$(INCLUDE_ARCH)/*.h))) \ debian/libdpdk-dev/usr/include/$(DEB_HOST_MULTIARCH)/dpdk/ mv debian/dpdk-dev/usr/include/dpdk/rte_config.h \ debian/libdpdk-dev/usr/include/$(DEB_HOST_MULTIARCH)/dpdk/ mv debian/dpdk-dev/usr/include/dpdk debian/libdpdk-dev/usr/include/ + rmdir debian/dpdk-dev/usr/include # backward compatibility: to ease things for the majority of users, # which are on x86_64, symlink the x86 headers into the global # directory.