ARM: shmobile: r8a7791: Use SoC specific binding for rcar-dmac nodes
[deliverable/linux.git] / scripts / package / builddeb
CommitLineData
1da177e4
LT
1#!/bin/sh
2#
4964451a 3# builddeb 1.3
1da177e4
LT
4# Copyright 2003 Wichert Akkerman <wichert@wiggy.net>
5#
6# Simple script to generate a deb package for a Linux kernel. All the
4f66199b 7# complexity of what to do with a kernel after it is installed or removed
1da177e4 8# is left to other scripts and packages: they can install scripts in the
fe233cb6
FP
9# /etc/kernel/{pre,post}{inst,rm}.d/ directories (or an alternative location
10# specified in KDEB_HOOKDIR) that will be called on package install and
11# removal.
1da177e4
LT
12
13set -e
14
3e2ab256
FP
15create_package() {
16 local pname="$1" pdir="$2"
17
bf7b0055
RV
18 mkdir -m 755 -p "$pdir/DEBIAN"
19 mkdir -p "$pdir/usr/share/doc/$pname"
9461f666 20 cp debian/copyright "$pdir/usr/share/doc/$pname/"
1ab18486 21 cp debian/changelog "$pdir/usr/share/doc/$pname/changelog.Debian"
22 gzip -9 "$pdir/usr/share/doc/$pname/changelog.Debian"
b59a1225
FJ
23 sh -c "cd '$pdir'; find . -type f ! -path './DEBIAN/*' -printf '%P\0' \
24 | xargs -r0 md5sum > DEBIAN/md5sums"
9461f666 25
3e2ab256
FP
26 # Fix ownership and permissions
27 chown -R root:root "$pdir"
28 chmod -R go-w "$pdir"
29
dca0c024
RV
30 # Create the package
31 dpkg-gencontrol $forcearch -Vkernel:debarch="${debarch}" -p$pname -P"$pdir"
32 dpkg --build "$pdir" ..
33}
34
35set_debarch() {
10f26fa6 36 # Attempt to find the correct Debian architecture
10f26fa6
AST
37 case "$UTS_MACHINE" in
38 i386|ia64|alpha)
39 debarch="$UTS_MACHINE" ;;
40 x86_64)
41 debarch=amd64 ;;
42 sparc*)
43 debarch=sparc ;;
44 s390*)
a1323fd1 45 debarch=s390$(grep -q CONFIG_64BIT=y $KCONFIG_CONFIG && echo x || true) ;;
10f26fa6 46 ppc*)
22739edf 47 debarch=$(grep -q CPU_LITTLE_ENDIAN=y $KCONFIG_CONFIG && echo ppc64el || echo powerpc) ;;
10f26fa6
AST
48 parisc*)
49 debarch=hppa ;;
50 mips*)
c5e318f6 51 debarch=mips$(grep -q CPU_LITTLE_ENDIAN=y $KCONFIG_CONFIG && echo el || true) ;;
a8d9c9f1
FB
52 arm64)
53 debarch=arm64 ;;
10f26fa6 54 arm*)
c5e318f6 55 debarch=arm$(grep -q CONFIG_AEABI=y $KCONFIG_CONFIG && echo el || true) ;;
10f26fa6 56 *)
dca0c024 57 debarch=$(dpkg --print-architecture)
10f26fa6
AST
58 echo "" >&2
59 echo "** ** ** WARNING ** ** **" >&2
60 echo "" >&2
61 echo "Your architecture doesn't have it's equivalent" >&2
62 echo "Debian userspace architecture defined!" >&2
63 echo "Falling back to using your current userspace instead!" >&2
64 echo "Please add support for $UTS_MACHINE to ${0} ..." >&2
65 echo "" >&2
66 esac
55f88ecc
AST
67 if [ -n "$KBUILD_DEBARCH" ] ; then
68 debarch="$KBUILD_DEBARCH"
69 fi
dca0c024 70 forcearch="-DArchitecture=$debarch"
10f26fa6 71
3e2ab256
FP
72}
73
1da177e4
LT
74# Some variables and settings used throughout the script
75version=$KERNELRELEASE
4f66199b 76revision=$(cat .version)
c72c75db
FP
77if [ -n "$KDEB_PKGVERSION" ]; then
78 packageversion=$KDEB_PKGVERSION
79else
80 packageversion=$version-$revision
81fi
3716001b 82sourcename=$KDEB_SOURCENAME
1da177e4 83tmpdir="$objtree/debian/tmp"
bf1b3644 84fwdir="$objtree/debian/fwtmp"
ee81b786 85kernel_headers_dir="$objtree/debian/hdrtmp"
86libc_headers_dir="$objtree/debian/headertmp"
810e8437 87dbg_dir="$objtree/debian/dbgtmp"
f7a2c31f 88packagename=linux-image-$version
95e2a7d8 89fwpackagename=linux-firmware-image-$version
ee81b786 90kernel_headers_packagename=linux-headers-$version
91libc_headers_packagename=linux-libc-dev
810e8437 92dbg_packagename=$packagename-dbg
dca0c024
RV
93debarch=
94forcearch=
95set_debarch
687c3dac 96
4f66199b 97if [ "$ARCH" = "um" ] ; then
687c3dac
SR
98 packagename=user-mode-linux-$version
99fi
1da177e4 100
9de70176
AA
101# Not all arches have the same installed path in debian
102# XXX: have each arch Makefile export a variable of the canonical image install
103# path instead
104case $ARCH in
105um)
106 installed_image_path="usr/bin/linux-$version"
107 ;;
108parisc|mips|powerpc)
109 installed_image_path="boot/vmlinux-$version"
110 ;;
111*)
112 installed_image_path="boot/vmlinuz-$version"
113esac
114
810e8437
AA
115BUILD_DEBUG="$(grep -s '^CONFIG_DEBUG_INFO=y' $KCONFIG_CONFIG || true)"
116
1da177e4 117# Setup the directory structure
810e8437 118rm -rf "$tmpdir" "$fwdir" "$kernel_headers_dir" "$libc_headers_dir" "$dbg_dir"
e86c2412 119mkdir -m 755 -p "$tmpdir/DEBIAN"
bf7b0055
RV
120mkdir -p "$tmpdir/lib" "$tmpdir/boot"
121mkdir -p "$fwdir/lib/firmware/$version/"
a47b6c61 122mkdir -p "$kernel_headers_dir/lib/modules/$version/"
1da177e4
LT
123
124# Build and install the kernel
4f66199b 125if [ "$ARCH" = "um" ] ; then
bf7b0055 126 mkdir -p "$tmpdir/usr/lib/uml/modules/$version" "$tmpdir/usr/bin" "$tmpdir/usr/share/doc/$packagename"
687c3dac
SR
127 $MAKE linux
128 cp System.map "$tmpdir/usr/lib/uml/modules/$version/System.map"
d2091767 129 cp $KCONFIG_CONFIG "$tmpdir/usr/share/doc/$packagename/config"
687c3dac 130 gzip "$tmpdir/usr/share/doc/$packagename/config"
38385f8f 131else
687c3dac 132 cp System.map "$tmpdir/boot/System.map-$version"
d2091767 133 cp $KCONFIG_CONFIG "$tmpdir/boot/config-$version"
9de70176
AA
134fi
135# Not all arches include the boot path in KBUILD_IMAGE
136if [ -e $KBUILD_IMAGE ]; then
137 cp $KBUILD_IMAGE "$tmpdir/$installed_image_path"
138else
139 cp arch/$ARCH/boot/$KBUILD_IMAGE "$tmpdir/$installed_image_path"
687c3dac 140fi
1da177e4 141
ca2a9d2c
APR
142if grep -q "^CONFIG_OF=y" $KCONFIG_CONFIG ; then
143 # Only some architectures with OF support have this target
144 if grep -q dtbs_install "${srctree}/arch/$SRCARCH/Makefile"; then
145 $MAKE KBUILD_SRC= INSTALL_DTBS_PATH="$tmpdir/usr/lib/$packagename" dtbs_install
146 fi
147fi
148
d2091767 149if grep -q '^CONFIG_MODULES=y' $KCONFIG_CONFIG ; then
dddcbb7c 150 INSTALL_MOD_PATH="$tmpdir" $MAKE KBUILD_SRC= modules_install
a47b6c61
JR
151 rm -f "$tmpdir/lib/modules/$version/build"
152 rm -f "$tmpdir/lib/modules/$version/source"
4f66199b 153 if [ "$ARCH" = "um" ] ; then
687c3dac
SR
154 mv "$tmpdir/lib/modules/$version"/* "$tmpdir/usr/lib/uml/modules/$version/"
155 rmdir "$tmpdir/lib/modules/$version"
156 fi
810e8437 157 if [ -n "$BUILD_DEBUG" ] ; then
2d087139
MM
158 for module in $(find $tmpdir/lib/modules/ -name *.ko -printf '%P\n'); do
159 module=lib/modules/$module
160 mkdir -p $(dirname $dbg_dir/usr/lib/debug/$module)
161 # only keep debug symbols in the debug file
162 $OBJCOPY --only-keep-debug $tmpdir/$module $dbg_dir/usr/lib/debug/$module
163 # strip original module from debug symbols
164 $OBJCOPY --strip-debug $tmpdir/$module
165 # then add a link to those
166 $OBJCOPY --add-gnu-debuglink=$dbg_dir/usr/lib/debug/$module $tmpdir/$module
167 done
64178cb6
AS
168
169 # resign stripped modules
170 MODULE_SIG_ALL="$(grep -s '^CONFIG_MODULE_SIG_ALL=y' $KCONFIG_CONFIG || true)"
171 if [ -n "$MODULE_SIG_ALL" ]; then
172 INSTALL_MOD_PATH="$tmpdir" $MAKE KBUILD_SRC= modules_sign
173 fi
810e8437 174 fi
1da177e4
LT
175fi
176
d7d357bc 177if [ "$ARCH" != "um" ]; then
dddcbb7c
JR
178 $MAKE headers_check KBUILD_SRC=
179 $MAKE headers_install KBUILD_SRC= INSTALL_HDR_PATH="$libc_headers_dir/usr"
d7d357bc 180fi
e6807785 181
1da177e4 182# Install the maintainer scripts
fe233cb6 183# Note: hook scripts under /etc/kernel are also executed by official Debian
1c8ddae0
BH
184# kernel packages, as well as kernel packages built using make-kpkg.
185# make-kpkg sets $INITRD to indicate whether an initramfs is wanted, and
186# so do we; recent versions of dracut and initramfs-tools will obey this.
fe233cb6 187debhookdir=${KDEB_HOOKDIR:-/etc/kernel}
1c8ddae0
BH
188if grep -q '^CONFIG_BLK_DEV_INITRD=y' $KCONFIG_CONFIG; then
189 want_initrd=Yes
190else
191 want_initrd=No
192fi
1da177e4 193for script in postinst postrm preinst prerm ; do
fe233cb6 194 mkdir -p "$tmpdir$debhookdir/$script.d"
1da177e4
LT
195 cat <<EOF > "$tmpdir/DEBIAN/$script"
196#!/bin/sh
197
198set -e
199
4964451a 200# Pass maintainer script parameters to hook scripts
241ad11f 201export DEB_MAINT_PARAMS="\$*"
4964451a 202
1c8ddae0
BH
203# Tell initramfs builder whether it's wanted
204export INITRD=$want_initrd
205
c95182bf 206test -d $debhookdir/$script.d && run-parts --arg="$version" --arg="/$installed_image_path" $debhookdir/$script.d
1da177e4
LT
207exit 0
208EOF
209 chmod 755 "$tmpdir/DEBIAN/$script"
210done
211
edec611d 212# Try to determine maintainer and email values
213if [ -n "$DEBEMAIL" ]; then
214 email=$DEBEMAIL
215elif [ -n "$EMAIL" ]; then
216 email=$EMAIL
217else
bea107b1 218 email=$(id -nu)@$(hostname -f 2>/dev/null || hostname)
edec611d 219fi
220if [ -n "$DEBFULLNAME" ]; then
221 name=$DEBFULLNAME
222elif [ -n "$NAME" ]; then
223 name=$NAME
224else
225 name="Anonymous"
226fi
227maintainer="$name <$email>"
228
d9f711db
SD
229# Try to determine distribution
230if [ -n "$KDEB_CHANGELOG_DIST" ]; then
231 distribution=$KDEB_CHANGELOG_DIST
232elif distribution=$(lsb_release -cs 2>/dev/null) && [ -n "$distribution" ]; then
233 : # nothing to do in this case
234else
235 distribution="unstable"
236 echo >&2 "Using default distribution of 'unstable' in the changelog"
237 echo >&2 "Install lsb-release or set \$KDEB_CHANGELOG_DIST explicitly"
238fi
239
1da177e4
LT
240# Generate a simple changelog template
241cat <<EOF > debian/changelog
3716001b 242$sourcename ($packageversion) $distribution; urgency=low
1da177e4 243
a83ca277 244 * Custom built Linux kernel.
1da177e4 245
edec611d 246 -- $maintainer $(date -R)
1da177e4
LT
247EOF
248
9461f666
FP
249# Generate copyright file
250cat <<EOF > debian/copyright
251This is a packacked upstream version of the Linux kernel.
252
253The sources may be found at most Linux ftp sites, including:
254ftp://ftp.kernel.org/pub/linux/kernel
255
701ca30c 256Copyright: 1991 - 2015 Linus Torvalds and others.
9461f666
FP
257
258The git repository for mainline kernel development is at:
701ca30c 259git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
9461f666
FP
260
261 This program is free software; you can redistribute it and/or modify
262 it under the terms of the GNU General Public License as published by
263 the Free Software Foundation; version 2 dated June, 1991.
264
265On Debian GNU/Linux systems, the complete text of the GNU General Public
266License version 2 can be found in \`/usr/share/common-licenses/GPL-2'.
267EOF
268
3716001b
RV
269
270build_depends="bc, kmod, cpio "
271
1da177e4 272# Generate a control file
3e2ab256 273cat <<EOF > debian/control
3716001b 274Source: $sourcename
aa42abed 275Section: kernel
dc5962fd 276Priority: optional
edec611d 277Maintainer: $maintainer
3716001b 278Build-Depends: $build_depends
2d7204ac 279Standards-Version: 3.8.4
ee6eed80 280Homepage: http://www.kernel.org/
3e2ab256
FP
281EOF
282
283if [ "$ARCH" = "um" ]; then
284 cat <<EOF >> debian/control
dc5962fd
SR
285
286Package: $packagename
8ebc2fe9 287Provides: linux-image, linux-image-2.6, linux-modules-$version
dc5962fd
SR
288Architecture: any
289Description: User Mode Linux kernel, version $version
290 User-mode Linux is a port of the Linux kernel to its own system call
291 interface. It provides a kind of virtual machine, which runs Linux
292 as a user process under another Linux kernel. This is useful for
293 kernel development, sandboxes, jails, experimentation, and
294 many other things.
295 .
296 This package contains the Linux kernel, modules and corresponding other
a83ca277 297 files, version: $version.
dc5962fd
SR
298EOF
299
300else
3e2ab256 301 cat <<EOF >> debian/control
1da177e4 302
687c3dac 303Package: $packagename
8ebc2fe9 304Provides: linux-image, linux-image-2.6, linux-modules-$version
bf1b3644 305Suggests: $fwpackagename
1da177e4 306Architecture: any
dc5962fd 307Description: Linux kernel, version $version
1da177e4 308 This package contains the Linux kernel, modules and corresponding other
a83ca277 309 files, version: $version.
1da177e4 310EOF
4f66199b 311
dc5962fd 312fi
1da177e4 313
8bf13561 314# Build kernel header package
a765a7ce
MM
315(cd $srctree; find . -name Makefile\* -o -name Kconfig\* -o -name \*.pl) > "$objtree/debian/hdrsrcfiles"
316(cd $srctree; find arch/$SRCARCH/include include scripts -type f) >> "$objtree/debian/hdrsrcfiles"
8bf13561
FB
317(cd $srctree; find arch/$SRCARCH -name module.lds -o -name Kbuild.platforms -o -name Platform) >> "$objtree/debian/hdrsrcfiles"
318(cd $srctree; find $(find arch/$SRCARCH -name include -o -name scripts -type d) -type f) >> "$objtree/debian/hdrsrcfiles"
a765a7ce 319(cd $objtree; find arch/$SRCARCH/include Module.symvers include scripts -type f) >> "$objtree/debian/hdrobjfiles"
ee81b786 320destdir=$kernel_headers_dir/usr/src/linux-headers-$version
321mkdir -p "$destdir"
a765a7ce
MM
322(cd $srctree; tar -c -f - -T -) < "$objtree/debian/hdrsrcfiles" | (cd $destdir; tar -xf -)
323(cd $objtree; tar -c -f - -T -) < "$objtree/debian/hdrobjfiles" | (cd $destdir; tar -xf -)
d2091767 324(cd $objtree; cp $KCONFIG_CONFIG $destdir/.config) # copy .config manually to be where it's expected to be
a47b6c61 325ln -sf "/usr/src/linux-headers-$version" "$kernel_headers_dir/lib/modules/$version/build"
6c635224 326rm -f "$objtree/debian/hdrsrcfiles" "$objtree/debian/hdrobjfiles"
cd8d60a2
TT
327
328cat <<EOF >> debian/control
329
ee81b786 330Package: $kernel_headers_packagename
cd8d60a2 331Provides: linux-headers, linux-headers-2.6
f8ce239d
BH
332Architecture: any
333Description: Linux kernel headers for $KERNELRELEASE on \${kernel:debarch}
334 This package provides kernel header files for $KERNELRELEASE on \${kernel:debarch}
cd8d60a2
TT
335 .
336 This is useful for people who need to build external modules
337EOF
338
bf1b3644
JM
339# Do we have firmware? Move it out of the way and build it into a package.
340if [ -e "$tmpdir/lib/firmware" ]; then
6607ddad 341 mv "$tmpdir/lib/firmware"/* "$fwdir/lib/firmware/$version/"
342 rmdir "$tmpdir/lib/firmware"
bf1b3644
JM
343
344 cat <<EOF >> debian/control
345
346Package: $fwpackagename
347Architecture: all
348Description: Linux kernel firmware, version $version
a83ca277 349 This package contains firmware from the Linux kernel, version $version.
bf1b3644
JM
350EOF
351
3e2ab256 352 create_package "$fwpackagename" "$fwdir"
bf1b3644
JM
353fi
354
e6807785 355cat <<EOF >> debian/control
356
ee81b786 357Package: $libc_headers_packagename
e6807785 358Section: devel
359Provides: linux-kernel-headers
360Architecture: any
361Description: Linux support headers for userspace development
362 This package provides userspaces headers from the Linux kernel. These headers
363 are used by the installed headers for GNU glibc and other system libraries.
364EOF
365
d7d357bc
JR
366if [ "$ARCH" != "um" ]; then
367 create_package "$kernel_headers_packagename" "$kernel_headers_dir"
368 create_package "$libc_headers_packagename" "$libc_headers_dir"
369fi
370
3e2ab256 371create_package "$packagename" "$tmpdir"
1da177e4 372
810e8437
AA
373if [ -n "$BUILD_DEBUG" ] ; then
374 # Build debug package
375 # Different tools want the image in different locations
376 # perf
377 mkdir -p $dbg_dir/usr/lib/debug/lib/modules/$version/
378 cp vmlinux $dbg_dir/usr/lib/debug/lib/modules/$version/
379 # systemtap
380 mkdir -p $dbg_dir/usr/lib/debug/boot/
381 ln -s ../lib/modules/$version/vmlinux $dbg_dir/usr/lib/debug/boot/vmlinux-$version
382 # kdump-tools
383 ln -s lib/modules/$version/vmlinux $dbg_dir/usr/lib/debug/vmlinux-$version
384
385 cat <<EOF >> debian/control
386
387Package: $dbg_packagename
388Section: debug
389Provides: linux-debug, linux-debug-$version
390Architecture: any
391Description: Linux kernel debugging symbols for $version
392 This package will come in handy if you need to debug the kernel. It provides
393 all the necessary debug symbols for the kernel and its modules.
394EOF
395
396 create_package "$dbg_packagename" "$dbg_dir"
397fi
398
3716001b
RV
399if [ "x$1" = "xdeb-pkg" ]
400then
401 cat <<EOF > debian/rules
402#!/usr/bin/make -f
403
404build:
405 \$(MAKE)
406
407binary-arch:
408 \$(MAKE) KDEB_SOURCENAME=${sourcename} KDEB_PKGVERSION=${packageversion} bindeb-pkg
409
410clean:
411 rm -rf debian/*tmp
412 mv debian/ debian.backup # debian/ might be cleaned away
413 \$(MAKE) clean
414 mv debian.backup debian
415
416binary: binary-arch
417EOF
418 mv ${sourcename}.tar.gz ../${sourcename}_${version}.orig.tar.gz
419 tar caf ../${sourcename}_${packageversion}.debian.tar.gz debian/{copyright,rules,changelog,control}
420 dpkg-source -cdebian/control -ldebian/changelog --format="3.0 (custom)" --target-format="3.0 (quilt)" \
421 -b / ../${sourcename}_${version}.orig.tar.gz ../${sourcename}_${packageversion}.debian.tar.gz
422 mv ${sourcename}_${packageversion}*dsc ..
423 dpkg-genchanges > ../${sourcename}_${packageversion}_${debarch}.changes
424else
425 dpkg-genchanges -b > ../${sourcename}_${packageversion}_${debarch}.changes
426fi
427
1da177e4 428exit 0
This page took 0.569713 seconds and 5 git commands to generate.