Merge tag 'probes-fixes-v6.16-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git...
[linux-block.git] / scripts / package / mkdebian
CommitLineData
b41d920a
RV
1#!/bin/sh
2#
3# Copyright 2003 Wichert Akkerman <wichert@wiggy.net>
4#
5# Simple script to generate a debian/ directory for a Linux kernel.
6
c0414419 7set -eu
b41d920a 8
08d3892c 9is_enabled() {
6fb7ef5a 10 grep -q "^$1=y" include/config/auto.conf
08d3892c
BH
11}
12
13if_enabled_echo() {
14 if is_enabled "$1"; then
15 echo -n "$2"
16 elif [ $# -ge 3 ]; then
17 echo -n "$3"
18 fi
19}
20
b41d920a 21set_debarch() {
c0414419 22 if [ "${KBUILD_DEBARCH:+set}" ]; then
f2abcc13
BH
23 debarch="$KBUILD_DEBARCH"
24 return
25 fi
26
b41d920a
RV
27 # Attempt to find the correct Debian architecture
28 case "$UTS_MACHINE" in
0df8e970 29 i386|alpha|m68k|riscv*)
b41d920a
RV
30 debarch="$UTS_MACHINE" ;;
31 x86_64)
32 debarch=amd64 ;;
33 sparc*)
7e548e9a 34 debarch=sparc$(if_enabled_echo CONFIG_64BIT 64) ;;
b41d920a 35 s390*)
4260ecd0 36 debarch=s390x ;;
b41d920a 37 ppc*)
7e548e9a
MY
38 if is_enabled CONFIG_64BIT; then
39 debarch=ppc64$(if_enabled_echo CONFIG_CPU_LITTLE_ENDIAN el)
50d511ba 40 else
7e548e9a 41 debarch=powerpc$(if_enabled_echo CONFIG_SPE spe)
50d511ba
BH
42 fi
43 ;;
b41d920a
RV
44 parisc*)
45 debarch=hppa ;;
46 mips*)
7e548e9a
MY
47 if is_enabled CONFIG_CPU_LITTLE_ENDIAN; then
48 debarch=mips$(if_enabled_echo CONFIG_64BIT 64)$(if_enabled_echo CONFIG_CPU_MIPSR6 r6)el
49 elif is_enabled CONFIG_CPU_MIPSR6; then
50 debarch=mips$(if_enabled_echo CONFIG_64BIT 64)r6
159b3794
BH
51 else
52 debarch=mips
53 fi
54 ;;
b41d920a
RV
55 aarch64|arm64)
56 debarch=arm64 ;;
57 arm*)
7e548e9a
MY
58 if is_enabled CONFIG_AEABI; then
59 debarch=arm$(if_enabled_echo CONFIG_VFP hf el)
b41d920a 60 else
08d3892c 61 debarch=arm
b41d920a
RV
62 fi
63 ;;
822f44fb
BH
64 openrisc)
65 debarch=or1k ;;
79a85b55 66 sh)
7e548e9a
MY
67 if is_enabled CONFIG_CPU_SH3; then
68 debarch=sh3$(if_enabled_echo CONFIG_CPU_BIG_ENDIAN eb)
69 elif is_enabled CONFIG_CPU_SH4; then
70 debarch=sh4$(if_enabled_echo CONFIG_CPU_BIG_ENDIAN eb)
79a85b55
BH
71 fi
72 ;;
a34e92d2
MY
73 um)
74 if is_enabled CONFIG_64BIT; then
75 debarch=amd64
76 else
77 debarch=i386
78 fi
79 ;;
1195306e
W
80 loongarch64)
81 debarch=loong64 ;;
79a85b55
BH
82 esac
83 if [ -z "$debarch" ]; then
091d30ae 84 debarch=$(dpkg-architecture -qDEB_HOST_ARCH)
b41d920a
RV
85 echo "" >&2
86 echo "** ** ** WARNING ** ** **" >&2
87 echo "" >&2
88 echo "Your architecture doesn't have its equivalent" >&2
89 echo "Debian userspace architecture defined!" >&2
091d30ae 90 echo "Falling back to the current host architecture ($debarch)." >&2
b41d920a
RV
91 echo "Please add support for $UTS_MACHINE to ${0} ..." >&2
92 echo "" >&2
79a85b55 93 fi
b41d920a
RV
94}
95
aa7d233f
MY
96# Create debian/source/ if it is a source package build
97gen_source ()
98{
99 mkdir -p debian/source
100
101 echo "3.0 (quilt)" > debian/source/format
102
103 {
104 echo "diff-ignore"
105 echo "extend-diff-ignore = .*"
106 } > debian/source/local-options
107
108 # Add .config as a patch
109 mkdir -p debian/patches
110 {
111 echo "Subject: Add .config"
112 echo "Author: ${maintainer}"
113 echo
114 echo "--- /dev/null"
115 echo "+++ linux/.config"
116 diff -u /dev/null "${KCONFIG_CONFIG}" | tail -n +3
117 } > debian/patches/config.patch
118 echo config.patch > debian/patches/series
119
120 "${srctree}/scripts/package/gen-diff-patch" debian/patches/diff.patch
121 if [ -s debian/patches/diff.patch ]; then
122 sed -i "
123 1iSubject: Add local diff
124 1iAuthor: ${maintainer}
125 1i
126 " debian/patches/diff.patch
127
128 echo diff.patch >> debian/patches/series
129 else
130 rm -f debian/patches/diff.patch
131 fi
132}
133
7bf4582d 134rm -rf debian
aa7d233f
MY
135mkdir debian
136
d67015ee
MY
137user=${KBUILD_BUILD_USER:-$(id -nu)}
138name=${DEBFULLNAME:-${user}}
c5209080
MY
139if [ "${DEBEMAIL:+set}" ]; then
140 email=${DEBEMAIL}
aa7d233f 141else
d67015ee 142 buildhost=${KBUILD_BUILD_HOST:-$(hostname -f 2>/dev/null || hostname)}
c5209080 143 email="${user}@${buildhost}"
aa7d233f 144fi
c5209080 145maintainer="${name} <${email}>"
aa7d233f 146
c0414419
MY
147while [ $# -gt 0 ]; do
148 case "$1" in
149 --need-source)
150 gen_source
151 shift
152 ;;
153 *)
154 break
155 ;;
156 esac
157done
7bf4582d 158
b41d920a 159# Some variables and settings used throughout the script
c0414419 160if [ "${KDEB_PKGVERSION:+set}" ]; then
b41d920a
RV
161 packageversion=$KDEB_PKGVERSION
162else
7e752910
MY
163 upstream_version=$("${srctree}/scripts/setlocalversion" --no-local "${srctree}" | sed 's/-\(rc[1-9]\)/~\1/')
164 debian_revision=$("${srctree}/scripts/build-version")
165 packageversion=${upstream_version}-${debian_revision}
b41d920a 166fi
6eabebb1 167sourcename=${KDEB_SOURCENAME:-linux-upstream}
b41d920a
RV
168
169if [ "$ARCH" = "um" ] ; then
0fa21cf4
MY
170 packagename=user-mode-linux
171else
172 packagename=linux-image
b41d920a
RV
173fi
174
0fa21cf4
MY
175debarch=
176set_debarch
177
b41d920a 178# Try to determine distribution
c0414419 179if [ "${KDEB_CHANGELOG_DIST:+set}" ]; then
b41d920a
RV
180 distribution=$KDEB_CHANGELOG_DIST
181# In some cases lsb_release returns the codename as n/a, which breaks dpkg-parsechangelog
182elif distribution=$(lsb_release -cs 2>/dev/null) && [ -n "$distribution" ] && [ "$distribution" != "n/a" ]; then
183 : # nothing to do in this case
184else
185 distribution="unstable"
186 echo >&2 "Using default distribution of 'unstable' in the changelog"
187 echo >&2 "Install lsb-release or set \$KDEB_CHANGELOG_DIST explicitly"
188fi
189
b41d920a
RV
190echo $debarch > debian/arch
191
e2c31822
MY
192host_gnu=$(dpkg-architecture -a "${debarch}" -q DEB_HOST_GNU_TYPE | sed 's/_/-/g')
193
b41d920a
RV
194# Generate a simple changelog template
195cat <<EOF > debian/changelog
196$sourcename ($packageversion) $distribution; urgency=low
197
198 * Custom built Linux kernel.
199
200 -- $maintainer $(date -R)
201EOF
202
b41d920a
RV
203# Generate a control file
204cat <<EOF > debian/control
205Source: $sourcename
206Section: kernel
207Priority: optional
208Maintainer: $maintainer
3e854180 209Rules-Requires-Root: no
5e73758b 210Build-Depends: debhelper-compat (= 12)
82a1978d 211Build-Depends-Arch: bc, bison, flex,
e2c31822 212 gcc-${host_gnu} <!pkg.${sourcename}.nokernelheaders>,
657f96cb 213 kmod, libdw-dev:native, libelf-dev:native,
e2c31822 214 libssl-dev:native, libssl-dev <!pkg.${sourcename}.nokernelheaders>,
6b1fabce 215 python3:native, rsync
16a122c7 216Homepage: https://www.kernel.org/
b41d920a 217
1c3107ec 218Package: $packagename-${KERNELRELEASE}
b41d920a 219Architecture: $debarch
1c3107ec 220Description: Linux kernel, version ${KERNELRELEASE}
b41d920a 221 This package contains the Linux kernel, modules and corresponding other
1c3107ec 222 files, version: ${KERNELRELEASE}.
36862e14
MY
223EOF
224
225if [ "${SRCARCH}" != um ]; then
226cat <<EOF >> debian/control
b41d920a 227
b41d920a
RV
228Package: linux-libc-dev
229Section: devel
230Provides: linux-kernel-headers
231Architecture: $debarch
232Description: Linux support headers for userspace development
233 This package provides userspaces headers from the Linux kernel. These headers
234 are used by the installed headers for GNU glibc and other system libraries.
5a464217 235Multi-Arch: same
d9dac147
RK
236EOF
237
bac977cb
MY
238if is_enabled CONFIG_MODULES; then
239cat <<EOF >> debian/control
240
1c3107ec 241Package: linux-headers-${KERNELRELEASE}
bac977cb 242Architecture: $debarch
e2c31822 243Build-Profiles: <!pkg.${sourcename}.nokernelheaders>
1c3107ec
MY
244Description: Linux kernel headers for ${KERNELRELEASE} on $debarch
245 This package provides kernel header files for ${KERNELRELEASE} on $debarch
bac977cb
MY
246 .
247 This is useful for people who need to build external modules
248EOF
249fi
36862e14 250fi
bac977cb 251
d9dac147
RK
252if is_enabled CONFIG_DEBUG_INFO; then
253cat <<EOF >> debian/control
b41d920a 254
1c3107ec 255Package: linux-image-${KERNELRELEASE}-dbg
b41d920a
RV
256Section: debug
257Architecture: $debarch
2ad7126c 258Build-Profiles: <!pkg.${sourcename}.nokerneldbg>
1c3107ec 259Description: Linux kernel debugging symbols for ${KERNELRELEASE}
b41d920a
RV
260 This package will come in handy if you need to debug the kernel. It provides
261 all the necessary debug symbols for the kernel and its modules.
262EOF
d9dac147 263fi
b41d920a 264
d9287ea8
MY
265cat <<EOF > debian/rules.vars
266ARCH := ${ARCH}
267KERNELRELEASE := ${KERNELRELEASE}
b41d920a 268EOF
d9287ea8 269
9c65810c 270cp "${srctree}/scripts/package/debian/copyright" debian/
d9287ea8 271cp "${srctree}/scripts/package/debian/rules" debian/
b41d920a
RV
272
273exit 0