10637d403777697db10b6e3c3dba502045cd67be
[linux-2.6-block.git] / scripts / package / mkdebian
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
7 set -eu
8
9 is_enabled() {
10         grep -q "^$1=y" include/config/auto.conf
11 }
12
13 if_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
21 set_debarch() {
22         if [ "${KBUILD_DEBARCH:+set}" ]; then
23                 debarch="$KBUILD_DEBARCH"
24                 return
25         fi
26
27         # Attempt to find the correct Debian architecture
28         case "$UTS_MACHINE" in
29         i386|alpha|m68k|riscv*)
30                 debarch="$UTS_MACHINE" ;;
31         x86_64)
32                 debarch=amd64 ;;
33         sparc*)
34                 debarch=sparc$(if_enabled_echo CONFIG_64BIT 64) ;;
35         s390*)
36                 debarch=s390x ;;
37         ppc*)
38                 if is_enabled CONFIG_64BIT; then
39                         debarch=ppc64$(if_enabled_echo CONFIG_CPU_LITTLE_ENDIAN el)
40                 else
41                         debarch=powerpc$(if_enabled_echo CONFIG_SPE spe)
42                 fi
43                 ;;
44         parisc*)
45                 debarch=hppa ;;
46         mips*)
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
51                 else
52                         debarch=mips
53                 fi
54                 ;;
55         aarch64|arm64)
56                 debarch=arm64 ;;
57         arm*)
58                 if is_enabled CONFIG_AEABI; then
59                         debarch=arm$(if_enabled_echo CONFIG_VFP hf el)
60                 else
61                         debarch=arm
62                 fi
63                 ;;
64         openrisc)
65                 debarch=or1k ;;
66         sh)
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)
71                 fi
72                 ;;
73         esac
74         if [ -z "$debarch" ]; then
75                 debarch=$(dpkg-architecture -qDEB_HOST_ARCH)
76                 echo "" >&2
77                 echo "** ** **  WARNING  ** ** **" >&2
78                 echo "" >&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
83                 echo "" >&2
84         fi
85 }
86
87 # Create debian/source/ if it is a source package build
88 gen_source ()
89 {
90         mkdir -p debian/source
91
92         echo "3.0 (quilt)" > debian/source/format
93
94         {
95                 echo "diff-ignore"
96                 echo "extend-diff-ignore = .*"
97         } > debian/source/local-options
98
99         # Add .config as a patch
100         mkdir -p debian/patches
101         {
102                 echo "Subject: Add .config"
103                 echo "Author: ${maintainer}"
104                 echo
105                 echo "--- /dev/null"
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
110
111         "${srctree}/scripts/package/gen-diff-patch" debian/patches/diff.patch
112         if [ -s debian/patches/diff.patch ]; then
113                 sed -i "
114                         1iSubject: Add local diff
115                         1iAuthor: ${maintainer}
116                         1i
117                 " debian/patches/diff.patch
118
119                 echo diff.patch >> debian/patches/series
120         else
121                 rm -f debian/patches/diff.patch
122         fi
123 }
124
125 rm -rf debian
126 mkdir debian
127
128 user=${KBUILD_BUILD_USER:-$(id -nu)}
129 name=${DEBFULLNAME:-${user}}
130 if [ "${DEBEMAIL:+set}" ]; then
131         email=${DEBEMAIL}
132 else
133         buildhost=${KBUILD_BUILD_HOST:-$(hostname -f 2>/dev/null || hostname)}
134         email="${user}@${buildhost}"
135 fi
136 maintainer="${name} <${email}>"
137
138 while [ $# -gt 0 ]; do
139         case "$1" in
140         --need-source)
141                 gen_source
142                 shift
143                 ;;
144         *)
145                 break
146                 ;;
147         esac
148 done
149
150 # Some variables and settings used throughout the script
151 version=$KERNELRELEASE
152 if [ "${KDEB_PKGVERSION:+set}" ]; then
153         packageversion=$KDEB_PKGVERSION
154 else
155         packageversion=$(${srctree}/scripts/setlocalversion --no-local ${srctree})-$($srctree/scripts/build-version)
156 fi
157 sourcename=${KDEB_SOURCENAME:-linux-upstream}
158
159 if [ "$ARCH" = "um" ] ; then
160         packagename=user-mode-linux
161 else
162         packagename=linux-image
163 fi
164
165 debarch=
166 set_debarch
167
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
174 else
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"
178 fi
179
180 echo $debarch > debian/arch
181
182 # Generate a simple changelog template
183 cat <<EOF > debian/changelog
184 $sourcename ($packageversion) $distribution; urgency=low
185
186   * Custom built Linux kernel.
187
188  -- $maintainer  $(date -R)
189 EOF
190
191 # Generate a control file
192 cat <<EOF > debian/control
193 Source: $sourcename
194 Section: kernel
195 Priority: optional
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/
201
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.
207 EOF
208
209 if [ "${SRCARCH}" != um ]; then
210 cat <<EOF >> debian/control
211
212 Package: linux-libc-dev
213 Section: devel
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.
219 Multi-Arch: same
220 EOF
221
222 if is_enabled CONFIG_MODULES; then
223 cat <<EOF >> debian/control
224
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
229  .
230  This is useful for people who need to build external modules
231 EOF
232 fi
233 fi
234
235 if is_enabled CONFIG_DEBUG_INFO; then
236 cat <<EOF >> debian/control
237
238 Package: linux-image-$version-dbg
239 Section: debug
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.
244 EOF
245 fi
246
247 cat <<EOF > debian/rules.vars
248 ARCH := ${ARCH}
249 KERNELRELEASE := ${KERNELRELEASE}
250 EOF
251
252 cp "${srctree}/scripts/package/debian/copyright" debian/
253 cp "${srctree}/scripts/package/debian/rules" debian/
254
255 exit 0