Merge tag 'm68knommu-for-v6.4' of git://git.kernel.org/pub/scm/linux/kernel/git/gerg...
[linux-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 -e
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 [ -n "$KBUILD_DEBARCH" ] ; 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|ia64|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 email=${DEBEMAIL-$EMAIL}
129
130 # use email string directly if it contains <email>
131 if echo "${email}" | grep -q '<.*>'; then
132         maintainer=${email}
133 else
134         # or construct the maintainer string
135         user=${KBUILD_BUILD_USER-$(id -nu)}
136         name=${DEBFULLNAME-${user}}
137         if [ -z "${email}" ]; then
138                 buildhost=${KBUILD_BUILD_HOST-$(hostname -f 2>/dev/null || hostname)}
139                 email="${user}@${buildhost}"
140         fi
141         maintainer="${name} <${email}>"
142 fi
143
144 if [ "$1" = --need-source ]; then
145         gen_source
146 fi
147
148 # Some variables and settings used throughout the script
149 version=$KERNELRELEASE
150 if [ -n "$KDEB_PKGVERSION" ]; then
151         packageversion=$KDEB_PKGVERSION
152 else
153         packageversion=$(${srctree}/scripts/setlocalversion --no-local ${srctree})-$($srctree/init/build-version)
154 fi
155 sourcename=${KDEB_SOURCENAME:-linux-upstream}
156
157 if [ "$ARCH" = "um" ] ; then
158         packagename=user-mode-linux
159 else
160         packagename=linux-image
161 fi
162
163 debarch=
164 set_debarch
165
166 # Try to determine distribution
167 if [ -n "$KDEB_CHANGELOG_DIST" ]; then
168         distribution=$KDEB_CHANGELOG_DIST
169 # In some cases lsb_release returns the codename as n/a, which breaks dpkg-parsechangelog
170 elif distribution=$(lsb_release -cs 2>/dev/null) && [ -n "$distribution" ] && [ "$distribution" != "n/a" ]; then
171         : # nothing to do in this case
172 else
173         distribution="unstable"
174         echo >&2 "Using default distribution of 'unstable' in the changelog"
175         echo >&2 "Install lsb-release or set \$KDEB_CHANGELOG_DIST explicitly"
176 fi
177
178 echo $debarch > debian/arch
179 extra_build_depends=", $(if_enabled_echo CONFIG_UNWINDER_ORC libelf-dev:native)"
180 extra_build_depends="$extra_build_depends, $(if_enabled_echo CONFIG_SYSTEM_TRUSTED_KEYRING libssl-dev:native)"
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 copyright file
192 cat <<EOF > debian/copyright
193 This is a packaged upstream version of the Linux kernel.
194
195 The sources may be found at most Linux archive sites, including:
196 https://www.kernel.org/pub/linux/kernel
197
198 Copyright: 1991 - 2018 Linus Torvalds and others.
199
200 The git repository for mainline kernel development is at:
201 git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
202
203     This program is free software; you can redistribute it and/or modify
204     it under the terms of the GNU General Public License as published by
205     the Free Software Foundation; version 2 dated June, 1991.
206
207 On Debian GNU/Linux systems, the complete text of the GNU General Public
208 License version 2 can be found in \`/usr/share/common-licenses/GPL-2'.
209 EOF
210
211 # Generate a control file
212 cat <<EOF > debian/control
213 Source: $sourcename
214 Section: kernel
215 Priority: optional
216 Maintainer: $maintainer
217 Rules-Requires-Root: no
218 Build-Depends: bc, debhelper, rsync, kmod, cpio, bison, flex $extra_build_depends
219 Homepage: https://www.kernel.org/
220
221 Package: $packagename-$version
222 Architecture: $debarch
223 Description: Linux kernel, version $version
224  This package contains the Linux kernel, modules and corresponding other
225  files, version: $version.
226 EOF
227
228 if [ "${SRCARCH}" != um ]; then
229 cat <<EOF >> debian/control
230
231 Package: linux-libc-dev
232 Section: devel
233 Provides: linux-kernel-headers
234 Architecture: $debarch
235 Description: Linux support headers for userspace development
236  This package provides userspaces headers from the Linux kernel.  These headers
237  are used by the installed headers for GNU glibc and other system libraries.
238 Multi-Arch: same
239 EOF
240
241 if is_enabled CONFIG_MODULES; then
242 cat <<EOF >> debian/control
243
244 Package: linux-headers-$version
245 Architecture: $debarch
246 Description: Linux kernel headers for $version on $debarch
247  This package provides kernel header files for $version on $debarch
248  .
249  This is useful for people who need to build external modules
250 EOF
251 fi
252 fi
253
254 if is_enabled CONFIG_DEBUG_INFO; then
255 cat <<EOF >> debian/control
256
257 Package: linux-image-$version-dbg
258 Section: debug
259 Architecture: $debarch
260 Description: Linux kernel debugging symbols for $version
261  This package will come in handy if you need to debug the kernel. It provides
262  all the necessary debug symbols for the kernel and its modules.
263 EOF
264 fi
265
266 cat <<EOF > debian/rules
267 #!$(command -v $MAKE) -f
268
269 srctree ?= .
270 KERNELRELEASE = ${KERNELRELEASE}
271
272 build-indep:
273 build-arch:
274         \$(MAKE) -f \$(srctree)/Makefile ARCH=${ARCH} \
275         KERNELRELEASE=\$(KERNELRELEASE) \
276         \$(shell \$(srctree)/scripts/package/deb-build-option) \
277         olddefconfig all
278
279 build: build-arch
280
281 binary-indep:
282 binary-arch: build-arch
283         \$(MAKE) -f \$(srctree)/Makefile ARCH=${ARCH} \
284         KERNELRELEASE=\$(KERNELRELEASE) intdeb-pkg
285
286 clean:
287         rm -rf debian/files debian/linux-*
288         \$(MAKE) -f \$(srctree)/Makefile ARCH=${ARCH} clean
289
290 binary: binary-arch
291 EOF
292 chmod +x debian/rules
293
294 exit 0