3 # Copyright 2003 Wichert Akkerman <wichert@wiggy.net>
5 # Simple script to generate a debian/ directory for a Linux kernel.
10 grep -q "^$1=y" include/config/auto.conf
14 if is_enabled "$1"; then
16 elif [ $# -ge 3 ]; then
22 if [ "${KBUILD_DEBARCH:+set}" ]; then
23 debarch="$KBUILD_DEBARCH"
27 # Attempt to find the correct Debian architecture
28 case "$UTS_MACHINE" in
29 i386|alpha|m68k|riscv*)
30 debarch="$UTS_MACHINE" ;;
34 debarch=sparc$(if_enabled_echo CONFIG_64BIT 64) ;;
38 if is_enabled CONFIG_64BIT; then
39 debarch=ppc64$(if_enabled_echo CONFIG_CPU_LITTLE_ENDIAN el)
41 debarch=powerpc$(if_enabled_echo CONFIG_SPE spe)
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
58 if is_enabled CONFIG_AEABI; then
59 debarch=arm$(if_enabled_echo CONFIG_VFP hf el)
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)
74 if [ -z "$debarch" ]; then
75 debarch=$(dpkg-architecture -qDEB_HOST_ARCH)
77 echo "** ** ** WARNING ** ** **" >&2
79 echo "Your architecture doesn't have its equivalent" >&2
80 echo "Debian userspace architecture defined!" >&2
81 echo "Falling back to the current host architecture ($debarch)." >&2
82 echo "Please add support for $UTS_MACHINE to ${0} ..." >&2
87 # Create debian/source/ if it is a source package build
90 mkdir -p debian/source
92 echo "3.0 (quilt)" > debian/source/format
96 echo "extend-diff-ignore = .*"
97 } > debian/source/local-options
99 # Add .config as a patch
100 mkdir -p debian/patches
102 echo "Subject: Add .config"
103 echo "Author: ${maintainer}"
106 echo "+++ linux/.config"
107 diff -u /dev/null "${KCONFIG_CONFIG}" | tail -n +3
108 } > debian/patches/config.patch
109 echo config.patch > debian/patches/series
111 "${srctree}/scripts/package/gen-diff-patch" debian/patches/diff.patch
112 if [ -s debian/patches/diff.patch ]; then
114 1iSubject: Add local diff
115 1iAuthor: ${maintainer}
117 " debian/patches/diff.patch
119 echo diff.patch >> debian/patches/series
121 rm -f debian/patches/diff.patch
128 user=${KBUILD_BUILD_USER:-$(id -nu)}
129 name=${DEBFULLNAME:-${user}}
130 if [ "${DEBEMAIL:+set}" ]; then
133 buildhost=${KBUILD_BUILD_HOST:-$(hostname -f 2>/dev/null || hostname)}
134 email="${user}@${buildhost}"
136 maintainer="${name} <${email}>"
138 while [ $# -gt 0 ]; do
150 # Some variables and settings used throughout the script
151 version=$KERNELRELEASE
152 if [ "${KDEB_PKGVERSION:+set}" ]; then
153 packageversion=$KDEB_PKGVERSION
155 packageversion=$(${srctree}/scripts/setlocalversion --no-local ${srctree})-$($srctree/scripts/build-version)
157 sourcename=${KDEB_SOURCENAME:-linux-upstream}
159 if [ "$ARCH" = "um" ] ; then
160 packagename=user-mode-linux
162 packagename=linux-image
168 # Try to determine distribution
169 if [ "${KDEB_CHANGELOG_DIST:+set}" ]; then
170 distribution=$KDEB_CHANGELOG_DIST
171 # In some cases lsb_release returns the codename as n/a, which breaks dpkg-parsechangelog
172 elif distribution=$(lsb_release -cs 2>/dev/null) && [ -n "$distribution" ] && [ "$distribution" != "n/a" ]; then
173 : # nothing to do in this case
175 distribution="unstable"
176 echo >&2 "Using default distribution of 'unstable' in the changelog"
177 echo >&2 "Install lsb-release or set \$KDEB_CHANGELOG_DIST explicitly"
180 echo $debarch > debian/arch
182 # Generate a simple changelog template
183 cat <<EOF > debian/changelog
184 $sourcename ($packageversion) $distribution; urgency=low
186 * Custom built Linux kernel.
188 -- $maintainer $(date -R)
191 # Generate a control file
192 cat <<EOF > debian/control
196 Maintainer: $maintainer
197 Rules-Requires-Root: no
198 Build-Depends: debhelper-compat (= 12)
199 Build-Depends-Arch: bc, bison, cpio, flex, kmod, libelf-dev:native, libssl-dev:native, rsync
200 Homepage: https://www.kernel.org/
202 Package: $packagename-$version
203 Architecture: $debarch
204 Description: Linux kernel, version $version
205 This package contains the Linux kernel, modules and corresponding other
206 files, version: $version.
209 if [ "${SRCARCH}" != um ]; then
210 cat <<EOF >> debian/control
212 Package: linux-libc-dev
214 Provides: linux-kernel-headers
215 Architecture: $debarch
216 Description: Linux support headers for userspace development
217 This package provides userspaces headers from the Linux kernel. These headers
218 are used by the installed headers for GNU glibc and other system libraries.
222 if is_enabled CONFIG_MODULES; then
223 cat <<EOF >> debian/control
225 Package: linux-headers-$version
226 Architecture: $debarch
227 Description: Linux kernel headers for $version on $debarch
228 This package provides kernel header files for $version on $debarch
230 This is useful for people who need to build external modules
235 if is_enabled CONFIG_DEBUG_INFO; then
236 cat <<EOF >> debian/control
238 Package: linux-image-$version-dbg
240 Architecture: $debarch
241 Description: Linux kernel debugging symbols for $version
242 This package will come in handy if you need to debug the kernel. It provides
243 all the necessary debug symbols for the kernel and its modules.
247 cat <<EOF > debian/rules.vars
249 KERNELRELEASE := ${KERNELRELEASE}
252 cp "${srctree}/scripts/package/debian/copyright" debian/
253 cp "${srctree}/scripts/package/debian/rules" debian/