blob: 595482923844d1617e6af975a5c444bdbead0011 [file] [log] [blame]
Riku Voipiob41d9202018-04-05 14:22:29 +03001#!/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
7set -e
8
Ben Hutchings08d38922018-07-26 11:21:01 +01009is_enabled() {
10 grep -q "^CONFIG_$1=y" $KCONFIG_CONFIG
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
Riku Voipiob41d9202018-04-05 14:22:29 +030021set_debarch() {
Ben Hutchingsf2abcc12018-07-26 11:20:28 +010022 if [ -n "$KBUILD_DEBARCH" ] ; then
23 debarch="$KBUILD_DEBARCH"
24 return
25 fi
26
Riku Voipiob41d9202018-04-05 14:22:29 +030027 # Attempt to find the correct Debian architecture
28 case "$UTS_MACHINE" in
29 i386|ia64|alpha)
30 debarch="$UTS_MACHINE" ;;
31 x86_64)
32 debarch=amd64 ;;
33 sparc*)
34 debarch=sparc ;;
35 s390*)
Ben Hutchings4260ecd2018-07-26 11:20:54 +010036 debarch=s390x ;;
Riku Voipiob41d9202018-04-05 14:22:29 +030037 ppc*)
Ben Hutchings50d511b2018-07-26 11:21:09 +010038 if is_enabled 64BIT; then
39 debarch=ppc64$(if_enabled_echo CPU_LITTLE_ENDIAN el)
40 else
41 debarch=powerpc$(if_enabled_echo SPE spe)
42 fi
43 ;;
Riku Voipiob41d9202018-04-05 14:22:29 +030044 parisc*)
45 debarch=hppa ;;
46 mips*)
Ben Hutchings159b3792018-07-26 11:21:16 +010047 if is_enabled CPU_LITTLE_ENDIAN; then
Ben Hutchings679caaf2018-07-26 11:22:20 +010048 debarch=mips$(if_enabled_echo 64BIT 64)$(if_enabled_echo CPU_MIPSR6 r6)el
49 elif is_enabled CPU_MIPSR6; then
50 debarch=mips$(if_enabled_echo 64BIT 64)r6
Ben Hutchings159b3792018-07-26 11:21:16 +010051 else
52 debarch=mips
53 fi
54 ;;
Riku Voipiob41d9202018-04-05 14:22:29 +030055 aarch64|arm64)
56 debarch=arm64 ;;
57 arm*)
Ben Hutchings08d38922018-07-26 11:21:01 +010058 if is_enabled AEABI; then
59 debarch=arm$(if_enabled_echo VFP hf el)
Riku Voipiob41d9202018-04-05 14:22:29 +030060 else
Ben Hutchings08d38922018-07-26 11:21:01 +010061 debarch=arm
Riku Voipiob41d9202018-04-05 14:22:29 +030062 fi
63 ;;
64 *)
Ben Hutchings091d30a2018-07-26 11:20:45 +010065 debarch=$(dpkg-architecture -qDEB_HOST_ARCH)
Riku Voipiob41d9202018-04-05 14:22:29 +030066 echo "" >&2
67 echo "** ** ** WARNING ** ** **" >&2
68 echo "" >&2
69 echo "Your architecture doesn't have its equivalent" >&2
70 echo "Debian userspace architecture defined!" >&2
Ben Hutchings091d30a2018-07-26 11:20:45 +010071 echo "Falling back to the current host architecture ($debarch)." >&2
Riku Voipiob41d9202018-04-05 14:22:29 +030072 echo "Please add support for $UTS_MACHINE to ${0} ..." >&2
73 echo "" >&2
Ben Hutchingsf2abcc12018-07-26 11:20:28 +010074 ;;
Riku Voipiob41d9202018-04-05 14:22:29 +030075 esac
Riku Voipiob41d9202018-04-05 14:22:29 +030076}
77
78# Some variables and settings used throughout the script
79version=$KERNELRELEASE
80if [ -n "$KDEB_PKGVERSION" ]; then
81 packageversion=$KDEB_PKGVERSION
82else
83 revision=$(cat .version 2>/dev/null||echo 1)
84 packageversion=$version-$revision
85fi
86sourcename=$KDEB_SOURCENAME
87packagename=linux-image-$version
88kernel_headers_packagename=linux-headers-$version
89dbg_packagename=$packagename-dbg
90debarch=
91set_debarch
92
93if [ "$ARCH" = "um" ] ; then
94 packagename=user-mode-linux-$version
95fi
96
Riku Voipiod5940c602018-05-07 10:11:34 +030097email=${DEBEMAIL-$EMAIL}
98
99# use email string directly if it contains <email>
100if echo $email | grep -q '<.*>'; then
101 maintainer=$email
Riku Voipiob41d9202018-04-05 14:22:29 +0300102else
Riku Voipiod5940c602018-05-07 10:11:34 +0300103 # or construct the maintainer string
104 user=${KBUILD_BUILD_USER-$(id -nu)}
105 name=${DEBFULLNAME-$user}
106 if [ -z "$email" ]; then
107 buildhost=${KBUILD_BUILD_HOST-$(hostname -f 2>/dev/null || hostname)}
108 email="$user@$buildhost"
109 fi
110 maintainer="$name <$email>"
Riku Voipiob41d9202018-04-05 14:22:29 +0300111fi
Riku Voipiob41d9202018-04-05 14:22:29 +0300112
113# Try to determine distribution
114if [ -n "$KDEB_CHANGELOG_DIST" ]; then
115 distribution=$KDEB_CHANGELOG_DIST
116# In some cases lsb_release returns the codename as n/a, which breaks dpkg-parsechangelog
117elif distribution=$(lsb_release -cs 2>/dev/null) && [ -n "$distribution" ] && [ "$distribution" != "n/a" ]; then
118 : # nothing to do in this case
119else
120 distribution="unstable"
121 echo >&2 "Using default distribution of 'unstable' in the changelog"
122 echo >&2 "Install lsb-release or set \$KDEB_CHANGELOG_DIST explicitly"
123fi
124
125mkdir -p debian/
126echo $debarch > debian/arch
127
128# Generate a simple changelog template
129cat <<EOF > debian/changelog
130$sourcename ($packageversion) $distribution; urgency=low
131
132 * Custom built Linux kernel.
133
134 -- $maintainer $(date -R)
135EOF
136
137# Generate copyright file
138cat <<EOF > debian/copyright
139This is a packacked upstream version of the Linux kernel.
140
141The sources may be found at most Linux archive sites, including:
142https://www.kernel.org/pub/linux/kernel
143
144Copyright: 1991 - 2018 Linus Torvalds and others.
145
146The git repository for mainline kernel development is at:
147git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
148
149 This program is free software; you can redistribute it and/or modify
150 it under the terms of the GNU General Public License as published by
151 the Free Software Foundation; version 2 dated June, 1991.
152
153On Debian GNU/Linux systems, the complete text of the GNU General Public
154License version 2 can be found in \`/usr/share/common-licenses/GPL-2'.
155EOF
156
157# Generate a control file
158cat <<EOF > debian/control
159Source: $sourcename
160Section: kernel
161Priority: optional
162Maintainer: $maintainer
163Build-Depends: bc, kmod, cpio
164Homepage: http://www.kernel.org/
165
166Package: $packagename
167Architecture: $debarch
168Description: Linux kernel, version $version
169 This package contains the Linux kernel, modules and corresponding other
170 files, version: $version.
171
172Package: $kernel_headers_packagename
173Architecture: $debarch
174Description: Linux kernel headers for $version on $debarch
175 This package provides kernel header files for $version on $debarch
176 .
177 This is useful for people who need to build external modules
178
179Package: linux-libc-dev
180Section: devel
181Provides: linux-kernel-headers
182Architecture: $debarch
183Description: Linux support headers for userspace development
184 This package provides userspaces headers from the Linux kernel. These headers
185 are used by the installed headers for GNU glibc and other system libraries.
186
187Package: $dbg_packagename
188Section: debug
189Architecture: $debarch
190Description: Linux kernel debugging symbols for $version
191 This package will come in handy if you need to debug the kernel. It provides
192 all the necessary debug symbols for the kernel and its modules.
193EOF
194
195cat <<EOF > debian/rules
196#!$(command -v $MAKE) -f
197
198build:
199 \$(MAKE) KERNELRELEASE=${version} ARCH=${ARCH} KBUILD_SRC=
200
201binary-arch:
202 \$(MAKE) KERNELRELEASE=${version} ARCH=${ARCH} KBUILD_SRC= intdeb-pkg
203
204clean:
205 rm -rf debian/*tmp debian/files
206 \$(MAKE) clean
207
208binary: binary-arch
209EOF
210
211exit 0