Copy full headers directory into SDK 09/7909/1
authorLuca Boccassi <luca.boccassi@gmail.com>
Thu, 3 Aug 2017 15:52:37 +0000 (16:52 +0100)
committerLuca Boccassi <luca.boccassi@gmail.com>
Thu, 3 Aug 2017 16:18:33 +0000 (17:18 +0100)
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 <luca.boccassi@gmail.com>
debian/dpdk-dev.preinst.in [new file with mode: 0644]
debian/rules

diff --git a/debian/dpdk-dev.preinst.in b/debian/dpdk-dev.preinst.in
new file mode 100644 (file)
index 0000000..027e2cf
--- /dev/null
@@ -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:
+#        * <new-preinst> `install'
+#        * <new-preinst> `install' <old-version>
+#        * <new-preinst> `upgrade' <old-version>
+#        * <old-preinst> `abort-upgrade' <new-version>
+# 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
index b1357b2..2493f53 100755 (executable)
@@ -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/<arch>/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.