summaryrefslogtreecommitdiffstats
path: root/debian/prep-modules
blob: 3e1f9f880c7b51cdb1db88fb248fccc2ffceaaed (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
#! /bin/sh
#
# Copyright (c)  2009-2016 Andreas Beckmann <anbe@debian.org>
#                2010-2016 Russ Allbery <rra@debian.org>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this script.  If not, see <http://www.gnu.org/licenses/>.
#
# This script originally comes from:
# https://anonscm.debian.org/viewvc/pkg-nvidia/packages/nvidia-graphics-drivers/trunk/debian/module/debian/prep-modules?view=markup
# The original copyright and license (GPL2+) can be found at:
# https://anonscm.debian.org/viewvc/pkg-nvidia/packages/nvidia-graphics-drivers/trunk/debian/copyright?view=markup
#
# Prepares to build kernel modules.  This script figures out and munges
# version strings.  The goal is:
#
#  * Set the package name to dpdk-modules-$(KVERS) where $(KVERS) is the
#    major kernel revision plus the debian subrevision and whatever
#    architecture string is appropriate if building against the stock Debian
#    kernels.  $(KVERS) should be identical to the version component contained
#    in the Debian kernel package names (in other words, the ABI version, not
#    the package version).
#
#  * Make the package recommend linux-image-$(KVERS) as appropriate for the
#    kernel version that we're building against.  Use recommend rather than
#    depends since the user may have built their own kernel outside of the
#    Debian package infrastructure.
#
#  * Save the version number of the binary package in debian/VERSION for later
#    use by dh_gencontrol.  This will be the version number of the source
#    package followed by a + and the version number of the kernel package that
#    we're building against.  If the kernel package version contains an epoch,
#    try to hack our way into doing the right thing by using that epoch number
#    as our own.  This isn't quite the right thing, but seems reasonably good.
#
# This script generates debian/control from debian/control.template using sed.
# Unfortunately, substvars cannot be used since the name of the package is
# modified and substvars happens too late.  It also outputs debian/VERSION,
# containing the version of the binary package.

set -e

if [ "$#" -ne 1 ]; then
    echo "Usage: $0 <kernel-source-location>"
    exit 1
fi

# We can get the kernel version from one of three places.  If KVERS and KDREV
# are both already set in the environment (which will be the case when invoked
# by make-kpkg or module-assistant), use them.  Otherwise, if we have a kernel
# source directory that contains debian/changelog (generated by make-kpkg),
# parse that file to find the version information.  Finally, if neither works,
# extract the kernel version from the kernel headers, append INT_SUBARCH to
# that version if it's available, and assume a kernel package revision of -1
# if none is provided.
#
# Set the variables $dpdk_kvers, which will hold the revision of the kernel,
# and $dpdk_kdrev, which will hold the version of the kernel package that
# we're building against.

changelog="$1/debian/changelog"
if [ -n "$KVERS" ] && [ -n "$KDREV" ]; then
    dpdk_kvers="${KVERS}${INT_SUBARCH}"
    dpdk_kdrev="${KDREV}"
elif [ ! -f "$changelog" ] ; then
    if [ -n "$KVERS" ] ; then
        dpdk_kvers="$KVERS"
    else
        dpdk_kvers=`perl debian/kernel-version "$1"`
    fi
    if [ -z "$KDREV" ] ; then
        dpdk_kdrev="${dpdk_kvers}-1"
    else
        dpdk_kvers="${dpdk_kvers}${INT_SUBARCH}"
        dpdk_kdrev="${KDREV}"
    fi
else
    if [ -n "$KVERS" ] ; then
        dpdk_kvers="$KVERS"
    else
        dpdk_kvers=`head -1 "$changelog" \
            | sed -e 's/.*source-\([^ ]*\) (\([^)]*\)).*/\1/'`
    fi
    dpdk_kdrev=`head -1 "$changelog" \
        | sed -e 's/.*source-\([^ ]*\) (\([^)]*\)).*/\2/'`
fi

# Sanitize.
dpdk_kvers="$(echo "$dpdk_kvers" | tr _ -)"
dpdk_kdrev="$(echo "$dpdk_kdrev" | tr _ -)"

# Generate the control file from the template.

sed "s/#KVERS#/${dpdk_kvers}/g" debian/control.modules.in > debian/control.modules

# Now, calcuate the binary package version.  Extract the epoch from the kernel
# package revision and add it to the beginning of the binary package version
# if present.  Then, concatenate the source version, '+', and the kernel
# package revision without the epoch.

dpdk_version=`head -1 debian/changelog | sed -e 's/.*(\([^)]*\)).*/\1/'`
dpdk_epoch=`echo ${dpdk_kdrev} | sed -n -e 's/^\([0-9]*\):.*/\1/p'`
dpdk_version="${dpdk_version}+`echo ${dpdk_kdrev} | sed 's/^[0-9]*://'`"
if [ -n "$dpdk_epoch" ] ; then
    dpdk_version="${dpdk_epoch}:${dpdk_version}"
fi

echo "$dpdk_version" > debian/VERSION