xref: /openbmc/linux/scripts/package/builddeb (revision cc18abbe)
11da177e4SLinus Torvalds#!/bin/sh
21da177e4SLinus Torvalds#
34964451aSFrans Pop# builddeb 1.3
41da177e4SLinus Torvalds# Copyright 2003 Wichert Akkerman <wichert@wiggy.net>
51da177e4SLinus Torvalds#
61da177e4SLinus Torvalds# Simple script to generate a deb package for a Linux kernel. All the
74f66199bSFrans Pop# complexity of what to do with a kernel after it is installed or removed
81da177e4SLinus Torvalds# is left to other scripts and packages: they can install scripts in the
9fe233cb6SFrans Pop# /etc/kernel/{pre,post}{inst,rm}.d/ directories (or an alternative location
10fe233cb6SFrans Pop# specified in KDEB_HOOKDIR) that will be called on package install and
11fe233cb6SFrans Pop# removal.
121da177e4SLinus Torvalds
131da177e4SLinus Torvaldsset -e
141da177e4SLinus Torvalds
153e2ab256SFrans Popcreate_package() {
163e2ab256SFrans Pop	local pname="$1" pdir="$2"
173e2ab256SFrans Pop
18bf7b0055SRiku Voipio	mkdir -m 755 -p "$pdir/DEBIAN"
19bf7b0055SRiku Voipio	mkdir -p "$pdir/usr/share/doc/$pname"
209461f666SFrans Pop	cp debian/copyright "$pdir/usr/share/doc/$pname/"
211ab18486Smaximilian attems	cp debian/changelog "$pdir/usr/share/doc/$pname/changelog.Debian"
221ab18486Smaximilian attems	gzip -9 "$pdir/usr/share/doc/$pname/changelog.Debian"
23b59a1225SFEJES Jozsef	sh -c "cd '$pdir'; find . -type f ! -path './DEBIAN/*' -printf '%P\0' \
24b59a1225SFEJES Jozsef		| xargs -r0 md5sum > DEBIAN/md5sums"
259461f666SFrans Pop
263e2ab256SFrans Pop	# Fix ownership and permissions
273e2ab256SFrans Pop	chown -R root:root "$pdir"
283e2ab256SFrans Pop	chmod -R go-w "$pdir"
29ca617dc6SHenning Schild	# in case we are in a restrictive umask environment like 0077
30ca617dc6SHenning Schild	chmod -R a+rX "$pdir"
313e2ab256SFrans Pop
32dca0c024SRiku Voipio	# Create the package
33dca0c024SRiku Voipio	dpkg-gencontrol $forcearch -Vkernel:debarch="${debarch}" -p$pname -P"$pdir"
34dca0c024SRiku Voipio	dpkg --build "$pdir" ..
35dca0c024SRiku Voipio}
36dca0c024SRiku Voipio
37dca0c024SRiku Voipioset_debarch() {
3810f26fa6SAsbjoern Sloth Toennesen	# Attempt to find the correct Debian architecture
3910f26fa6SAsbjoern Sloth Toennesen	case "$UTS_MACHINE" in
4010f26fa6SAsbjoern Sloth Toennesen	i386|ia64|alpha)
4110f26fa6SAsbjoern Sloth Toennesen		debarch="$UTS_MACHINE" ;;
4210f26fa6SAsbjoern Sloth Toennesen	x86_64)
4310f26fa6SAsbjoern Sloth Toennesen		debarch=amd64 ;;
4410f26fa6SAsbjoern Sloth Toennesen	sparc*)
4510f26fa6SAsbjoern Sloth Toennesen		debarch=sparc ;;
4610f26fa6SAsbjoern Sloth Toennesen	s390*)
47a1323fd1SBen Hutchings		debarch=s390$(grep -q CONFIG_64BIT=y $KCONFIG_CONFIG && echo x || true) ;;
4810f26fa6SAsbjoern Sloth Toennesen	ppc*)
4922739edfSMichael Neuling		debarch=$(grep -q CPU_LITTLE_ENDIAN=y $KCONFIG_CONFIG && echo ppc64el || echo powerpc) ;;
5010f26fa6SAsbjoern Sloth Toennesen	parisc*)
5110f26fa6SAsbjoern Sloth Toennesen		debarch=hppa ;;
5210f26fa6SAsbjoern Sloth Toennesen	mips*)
53c5e318f6SBen Hutchings		debarch=mips$(grep -q CPU_LITTLE_ENDIAN=y $KCONFIG_CONFIG && echo el || true) ;;
54152b695dSAdam Borowski	aarch64|arm64)
55a8d9c9f1SFathi Boudra		debarch=arm64 ;;
5610f26fa6SAsbjoern Sloth Toennesen	arm*)
5763a478fbSBen Hutchings		if grep -q CONFIG_AEABI=y $KCONFIG_CONFIG; then
5863a478fbSBen Hutchings		    if grep -q CONFIG_VFP=y $KCONFIG_CONFIG; then
5963a478fbSBen Hutchings			debarch=armhf
6063a478fbSBen Hutchings		    else
6163a478fbSBen Hutchings			debarch=armel
6263a478fbSBen Hutchings		    fi
6363a478fbSBen Hutchings		else
6463a478fbSBen Hutchings		    debarch=arm
6563a478fbSBen Hutchings		fi
6663a478fbSBen Hutchings		;;
6710f26fa6SAsbjoern Sloth Toennesen	*)
68dca0c024SRiku Voipio		debarch=$(dpkg --print-architecture)
6910f26fa6SAsbjoern Sloth Toennesen		echo "" >&2
7010f26fa6SAsbjoern Sloth Toennesen		echo "** ** **  WARNING  ** ** **" >&2
7110f26fa6SAsbjoern Sloth Toennesen		echo "" >&2
729eb3c958SAndrew Donnellan		echo "Your architecture doesn't have its equivalent" >&2
7310f26fa6SAsbjoern Sloth Toennesen		echo "Debian userspace architecture defined!" >&2
7410f26fa6SAsbjoern Sloth Toennesen		echo "Falling back to using your current userspace instead!" >&2
7510f26fa6SAsbjoern Sloth Toennesen		echo "Please add support for $UTS_MACHINE to ${0} ..." >&2
7610f26fa6SAsbjoern Sloth Toennesen		echo "" >&2
7710f26fa6SAsbjoern Sloth Toennesen	esac
7855f88eccSAsbjoern Sloth Toennesen	if [ -n "$KBUILD_DEBARCH" ] ; then
7955f88eccSAsbjoern Sloth Toennesen		debarch="$KBUILD_DEBARCH"
8055f88eccSAsbjoern Sloth Toennesen	fi
8110f26fa6SAsbjoern Sloth Toennesen	forcearch="-DArchitecture=$debarch"
8210f26fa6SAsbjoern Sloth Toennesen
833e2ab256SFrans Pop}
843e2ab256SFrans Pop
851da177e4SLinus Torvalds# Some variables and settings used throughout the script
861da177e4SLinus Torvaldsversion=$KERNELRELEASE
874f66199bSFrans Poprevision=$(cat .version)
88c72c75dbSFrans Popif [ -n "$KDEB_PKGVERSION" ]; then
89c72c75dbSFrans Pop	packageversion=$KDEB_PKGVERSION
90c72c75dbSFrans Popelse
91c72c75dbSFrans Pop	packageversion=$version-$revision
92c72c75dbSFrans Popfi
933716001bSRiku Voipiosourcename=$KDEB_SOURCENAME
941da177e4SLinus Torvaldstmpdir="$objtree/debian/tmp"
95ee81b786Smaximilian attemskernel_headers_dir="$objtree/debian/hdrtmp"
96ee81b786Smaximilian attemslibc_headers_dir="$objtree/debian/headertmp"
97810e8437SAnisse Astierdbg_dir="$objtree/debian/dbgtmp"
98f7a2c31fSmaximilian attemspackagename=linux-image-$version
99ee81b786Smaximilian attemskernel_headers_packagename=linux-headers-$version
100ee81b786Smaximilian attemslibc_headers_packagename=linux-libc-dev
101810e8437SAnisse Astierdbg_packagename=$packagename-dbg
102dca0c024SRiku Voipiodebarch=
103dca0c024SRiku Voipioforcearch=
104dca0c024SRiku Voipioset_debarch
105687c3dacSSam Ravnborg
1064f66199bSFrans Popif [ "$ARCH" = "um" ] ; then
107687c3dacSSam Ravnborg	packagename=user-mode-linux-$version
108687c3dacSSam Ravnborgfi
1091da177e4SLinus Torvalds
1109de70176SAnisse Astier# Not all arches have the same installed path in debian
1119de70176SAnisse Astier# XXX: have each arch Makefile export a variable of the canonical image install
1129de70176SAnisse Astier# path instead
1139de70176SAnisse Astiercase $ARCH in
1149de70176SAnisse Astierum)
1159de70176SAnisse Astier	installed_image_path="usr/bin/linux-$version"
1169de70176SAnisse Astier	;;
1179de70176SAnisse Astierparisc|mips|powerpc)
1189de70176SAnisse Astier	installed_image_path="boot/vmlinux-$version"
1199de70176SAnisse Astier	;;
1209de70176SAnisse Astier*)
1219de70176SAnisse Astier	installed_image_path="boot/vmlinuz-$version"
1229de70176SAnisse Astieresac
1239de70176SAnisse Astier
124810e8437SAnisse AstierBUILD_DEBUG="$(grep -s '^CONFIG_DEBUG_INFO=y' $KCONFIG_CONFIG || true)"
125810e8437SAnisse Astier
1261da177e4SLinus Torvalds# Setup the directory structure
127cc18abbeSMasahiro Yamadarm -rf "$tmpdir" "$kernel_headers_dir" "$libc_headers_dir" "$dbg_dir" $objtree/debian/files
128e86c2412Smaximilian attemsmkdir -m 755 -p "$tmpdir/DEBIAN"
129bf7b0055SRiku Voipiomkdir -p "$tmpdir/lib" "$tmpdir/boot"
130a47b6c61SJoerg Roedelmkdir -p "$kernel_headers_dir/lib/modules/$version/"
1311da177e4SLinus Torvalds
1321da177e4SLinus Torvalds# Build and install the kernel
1334f66199bSFrans Popif [ "$ARCH" = "um" ] ; then
134bf7b0055SRiku Voipio	mkdir -p "$tmpdir/usr/lib/uml/modules/$version" "$tmpdir/usr/bin" "$tmpdir/usr/share/doc/$packagename"
135687c3dacSSam Ravnborg	$MAKE linux
136687c3dacSSam Ravnborg	cp System.map "$tmpdir/usr/lib/uml/modules/$version/System.map"
137d2091767SAnisse Astier	cp $KCONFIG_CONFIG "$tmpdir/usr/share/doc/$packagename/config"
138687c3dacSSam Ravnborg	gzip "$tmpdir/usr/share/doc/$packagename/config"
139687c3dacSSam Ravnborgelse
1401da177e4SLinus Torvalds	cp System.map "$tmpdir/boot/System.map-$version"
141d2091767SAnisse Astier	cp $KCONFIG_CONFIG "$tmpdir/boot/config-$version"
1429de70176SAnisse Astierfi
14309549aa1SMichal Marekcp "$($MAKE -s image_name)" "$tmpdir/$installed_image_path"
1441da177e4SLinus Torvalds
145ca2a9d2cSArnaud Patard (Rtp)if grep -q "^CONFIG_OF=y" $KCONFIG_CONFIG ; then
146ca2a9d2cSArnaud Patard (Rtp)	# Only some architectures with OF support have this target
147ca2a9d2cSArnaud Patard (Rtp)	if grep -q dtbs_install "${srctree}/arch/$SRCARCH/Makefile"; then
148ca2a9d2cSArnaud Patard (Rtp)		$MAKE KBUILD_SRC= INSTALL_DTBS_PATH="$tmpdir/usr/lib/$packagename" dtbs_install
149ca2a9d2cSArnaud Patard (Rtp)	fi
150ca2a9d2cSArnaud Patard (Rtp)fi
151ca2a9d2cSArnaud Patard (Rtp)
152d2091767SAnisse Astierif grep -q '^CONFIG_MODULES=y' $KCONFIG_CONFIG ; then
153dddcbb7cSJoerg Roedel	INSTALL_MOD_PATH="$tmpdir" $MAKE KBUILD_SRC= modules_install
154a47b6c61SJoerg Roedel	rm -f "$tmpdir/lib/modules/$version/build"
155a47b6c61SJoerg Roedel	rm -f "$tmpdir/lib/modules/$version/source"
1564f66199bSFrans Pop	if [ "$ARCH" = "um" ] ; then
157687c3dacSSam Ravnborg		mv "$tmpdir/lib/modules/$version"/* "$tmpdir/usr/lib/uml/modules/$version/"
158687c3dacSSam Ravnborg		rmdir "$tmpdir/lib/modules/$version"
159687c3dacSSam Ravnborg	fi
160810e8437SAnisse Astier	if [ -n "$BUILD_DEBUG" ] ; then
1612d087139SMichal Marek		for module in $(find $tmpdir/lib/modules/ -name *.ko -printf '%P\n'); do
1622d087139SMichal Marek			module=lib/modules/$module
163810e8437SAnisse Astier			mkdir -p $(dirname $dbg_dir/usr/lib/debug/$module)
164810e8437SAnisse Astier			# only keep debug symbols in the debug file
1652d087139SMichal Marek			$OBJCOPY --only-keep-debug $tmpdir/$module $dbg_dir/usr/lib/debug/$module
166810e8437SAnisse Astier			# strip original module from debug symbols
1672d087139SMichal Marek			$OBJCOPY --strip-debug $tmpdir/$module
168810e8437SAnisse Astier			# then add a link to those
1692d087139SMichal Marek			$OBJCOPY --add-gnu-debuglink=$dbg_dir/usr/lib/debug/$module $tmpdir/$module
170810e8437SAnisse Astier		done
17164178cb6SAndrey Skvortsov
17264178cb6SAndrey Skvortsov		# resign stripped modules
17364178cb6SAndrey Skvortsov		MODULE_SIG_ALL="$(grep -s '^CONFIG_MODULE_SIG_ALL=y' $KCONFIG_CONFIG || true)"
17464178cb6SAndrey Skvortsov		if [ -n "$MODULE_SIG_ALL" ]; then
17564178cb6SAndrey Skvortsov			INSTALL_MOD_PATH="$tmpdir" $MAKE KBUILD_SRC= modules_sign
17664178cb6SAndrey Skvortsov		fi
177810e8437SAnisse Astier	fi
1781da177e4SLinus Torvaldsfi
1791da177e4SLinus Torvalds
180d7d357bcSJoerg Roedelif [ "$ARCH" != "um" ]; then
181dddcbb7cSJoerg Roedel	$MAKE headers_check KBUILD_SRC=
182dddcbb7cSJoerg Roedel	$MAKE headers_install KBUILD_SRC= INSTALL_HDR_PATH="$libc_headers_dir/usr"
183d7d357bcSJoerg Roedelfi
184e6807785Smaximilian attems
1851da177e4SLinus Torvalds# Install the maintainer scripts
186fe233cb6SFrans Pop# Note: hook scripts under /etc/kernel are also executed by official Debian
1871c8ddae0SBen Hutchings# kernel packages, as well as kernel packages built using make-kpkg.
1881c8ddae0SBen Hutchings# make-kpkg sets $INITRD to indicate whether an initramfs is wanted, and
1891c8ddae0SBen Hutchings# so do we; recent versions of dracut and initramfs-tools will obey this.
190fe233cb6SFrans Popdebhookdir=${KDEB_HOOKDIR:-/etc/kernel}
1911c8ddae0SBen Hutchingsif grep -q '^CONFIG_BLK_DEV_INITRD=y' $KCONFIG_CONFIG; then
1921c8ddae0SBen Hutchings	want_initrd=Yes
1931c8ddae0SBen Hutchingselse
1941c8ddae0SBen Hutchings	want_initrd=No
1951c8ddae0SBen Hutchingsfi
1961da177e4SLinus Torvaldsfor script in postinst postrm preinst prerm ; do
197fe233cb6SFrans Pop	mkdir -p "$tmpdir$debhookdir/$script.d"
1981da177e4SLinus Torvalds	cat <<EOF > "$tmpdir/DEBIAN/$script"
1991da177e4SLinus Torvalds#!/bin/sh
2001da177e4SLinus Torvalds
2011da177e4SLinus Torvaldsset -e
2021da177e4SLinus Torvalds
2034964451aSFrans Pop# Pass maintainer script parameters to hook scripts
204241ad11fSmaximilian attemsexport DEB_MAINT_PARAMS="\$*"
2054964451aSFrans Pop
2061c8ddae0SBen Hutchings# Tell initramfs builder whether it's wanted
2071c8ddae0SBen Hutchingsexport INITRD=$want_initrd
2081c8ddae0SBen Hutchings
209c95182bfSAnisse Astiertest -d $debhookdir/$script.d && run-parts --arg="$version" --arg="/$installed_image_path" $debhookdir/$script.d
2101da177e4SLinus Torvaldsexit 0
2111da177e4SLinus TorvaldsEOF
2121da177e4SLinus Torvalds	chmod 755 "$tmpdir/DEBIAN/$script"
2131da177e4SLinus Torvaldsdone
2141da177e4SLinus Torvalds
215edec611dSmaximilian attems# Try to determine maintainer and email values
216edec611dSmaximilian attemsif [ -n "$DEBEMAIL" ]; then
217edec611dSmaximilian attems       email=$DEBEMAIL
218edec611dSmaximilian attemselif [ -n "$EMAIL" ]; then
219edec611dSmaximilian attems       email=$EMAIL
220edec611dSmaximilian attemselse
221bea107b1SChristian Kujau       email=$(id -nu)@$(hostname -f 2>/dev/null || hostname)
222edec611dSmaximilian attemsfi
223edec611dSmaximilian attemsif [ -n "$DEBFULLNAME" ]; then
224edec611dSmaximilian attems       name=$DEBFULLNAME
225edec611dSmaximilian attemselif [ -n "$NAME" ]; then
226edec611dSmaximilian attems       name=$NAME
227edec611dSmaximilian attemselse
228edec611dSmaximilian attems       name="Anonymous"
229edec611dSmaximilian attemsfi
230edec611dSmaximilian attemsmaintainer="$name <$email>"
231edec611dSmaximilian attems
232d9f711dbSSedat Dilek# Try to determine distribution
233d9f711dbSSedat Dilekif [ -n "$KDEB_CHANGELOG_DIST" ]; then
234d9f711dbSSedat Dilek        distribution=$KDEB_CHANGELOG_DIST
2354c586062SMarcin Mielniczuk# In some cases lsb_release returns the codename as n/a, which breaks dpkg-parsechangelog
2364c586062SMarcin Mielniczukelif distribution=$(lsb_release -cs 2>/dev/null) && [ -n "$distribution" ] && [ "$distribution" != "n/a" ]; then
237d9f711dbSSedat Dilek        : # nothing to do in this case
238d9f711dbSSedat Dilekelse
239d9f711dbSSedat Dilek        distribution="unstable"
240d9f711dbSSedat Dilek        echo >&2 "Using default distribution of 'unstable' in the changelog"
241d9f711dbSSedat Dilek        echo >&2 "Install lsb-release or set \$KDEB_CHANGELOG_DIST explicitly"
242d9f711dbSSedat Dilekfi
243d9f711dbSSedat Dilek
2441da177e4SLinus Torvalds# Generate a simple changelog template
2451da177e4SLinus Torvaldscat <<EOF > debian/changelog
2463716001bSRiku Voipio$sourcename ($packageversion) $distribution; urgency=low
2471da177e4SLinus Torvalds
248a83ca277SFrans Pop  * Custom built Linux kernel.
2491da177e4SLinus Torvalds
250edec611dSmaximilian attems -- $maintainer  $(date -R)
2511da177e4SLinus TorvaldsEOF
2521da177e4SLinus Torvalds
2539461f666SFrans Pop# Generate copyright file
2549461f666SFrans Popcat <<EOF > debian/copyright
2559461f666SFrans PopThis is a packacked upstream version of the Linux kernel.
2569461f666SFrans Pop
2574f6cce39SSeongJae ParkThe sources may be found at most Linux archive sites, including:
2584f6cce39SSeongJae Parkhttps://www.kernel.org/pub/linux/kernel
2599461f666SFrans Pop
2601d349923SRiku VoipioCopyright: 1991 - 2017 Linus Torvalds and others.
2619461f666SFrans Pop
2629461f666SFrans PopThe git repository for mainline kernel development is at:
263701ca30cSSedat Dilekgit://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
2649461f666SFrans Pop
2659461f666SFrans Pop    This program is free software; you can redistribute it and/or modify
2669461f666SFrans Pop    it under the terms of the GNU General Public License as published by
2679461f666SFrans Pop    the Free Software Foundation; version 2 dated June, 1991.
2689461f666SFrans Pop
2699461f666SFrans PopOn Debian GNU/Linux systems, the complete text of the GNU General Public
2709461f666SFrans PopLicense version 2 can be found in \`/usr/share/common-licenses/GPL-2'.
2719461f666SFrans PopEOF
2729461f666SFrans Pop
2733716001bSRiku Voipio
2743716001bSRiku Voipiobuild_depends="bc, kmod, cpio "
2753716001bSRiku Voipio
2761da177e4SLinus Torvalds# Generate a control file
2771da177e4SLinus Torvaldscat <<EOF > debian/control
2783716001bSRiku VoipioSource: $sourcename
279aa42abedSRogério BritoSection: kernel
2801da177e4SLinus TorvaldsPriority: optional
281edec611dSmaximilian attemsMaintainer: $maintainer
2823716001bSRiku VoipioBuild-Depends: $build_depends
283ee6eed80SRogério BritoHomepage: http://www.kernel.org/
2843e2ab256SFrans PopEOF
2853e2ab256SFrans Pop
2863e2ab256SFrans Popif [ "$ARCH" = "um" ]; then
2873e2ab256SFrans Pop	cat <<EOF >> debian/control
2881da177e4SLinus Torvalds
289687c3dacSSam RavnborgPackage: $packagename
2901da177e4SLinus TorvaldsArchitecture: any
291dc5962fdSSam RavnborgDescription: User Mode Linux kernel, version $version
292dc5962fdSSam Ravnborg User-mode Linux is a port of the Linux kernel to its own system call
293dc5962fdSSam Ravnborg interface.  It provides a kind of virtual machine, which runs Linux
294dc5962fdSSam Ravnborg as a user process under another Linux kernel.  This is useful for
295dc5962fdSSam Ravnborg kernel development, sandboxes, jails, experimentation, and
296dc5962fdSSam Ravnborg many other things.
297dc5962fdSSam Ravnborg .
2981da177e4SLinus Torvalds This package contains the Linux kernel, modules and corresponding other
299a83ca277SFrans Pop files, version: $version.
3001da177e4SLinus TorvaldsEOF
3011da177e4SLinus Torvalds
302dc5962fdSSam Ravnborgelse
3033e2ab256SFrans Pop	cat <<EOF >> debian/control
304dc5962fdSSam Ravnborg
305dc5962fdSSam RavnborgPackage: $packagename
306dc5962fdSSam RavnborgArchitecture: any
307dc5962fdSSam RavnborgDescription: Linux kernel, version $version
308dc5962fdSSam Ravnborg This package contains the Linux kernel, modules and corresponding other
309a83ca277SFrans Pop files, version: $version.
310dc5962fdSSam RavnborgEOF
3114f66199bSFrans Pop
312dc5962fdSSam Ravnborgfi
313dc5962fdSSam Ravnborg
3148bf13561SFathi Boudra# Build kernel header package
315a765a7ceSMichal Marek(cd $srctree; find . -name Makefile\* -o -name Kconfig\* -o -name \*.pl) > "$objtree/debian/hdrsrcfiles"
316962475acSAzriel Samson(cd $srctree; find arch/*/include include scripts -type f) >> "$objtree/debian/hdrsrcfiles"
3178bf13561SFathi Boudra(cd $srctree; find arch/$SRCARCH -name module.lds -o -name Kbuild.platforms -o -name Platform) >> "$objtree/debian/hdrsrcfiles"
3188bf13561SFathi Boudra(cd $srctree; find $(find arch/$SRCARCH -name include -o -name scripts -type d) -type f) >> "$objtree/debian/hdrsrcfiles"
31915f6d337SWilfried Klaebeif grep -q '^CONFIG_STACK_VALIDATION=y' $KCONFIG_CONFIG ; then
32015f6d337SWilfried Klaebe	(cd $objtree; find tools/objtool -type f -executable) >> "$objtree/debian/hdrobjfiles"
32115f6d337SWilfried Klaebefi
322a765a7ceSMichal Marek(cd $objtree; find arch/$SRCARCH/include Module.symvers include scripts -type f) >> "$objtree/debian/hdrobjfiles"
323d3e2773cSKees Cookif grep -q '^CONFIG_GCC_PLUGINS=y' $KCONFIG_CONFIG ; then
3246b90bd4bSEmese Revfy	(cd $objtree; find scripts/gcc-plugins -name \*.so -o -name gcc-common.h) >> "$objtree/debian/hdrobjfiles"
325d3e2773cSKees Cookfi
326ee81b786Smaximilian attemsdestdir=$kernel_headers_dir/usr/src/linux-headers-$version
327ee81b786Smaximilian attemsmkdir -p "$destdir"
328a765a7ceSMichal Marek(cd $srctree; tar -c -f - -T -) < "$objtree/debian/hdrsrcfiles" | (cd $destdir; tar -xf -)
329a765a7ceSMichal Marek(cd $objtree; tar -c -f - -T -) < "$objtree/debian/hdrobjfiles" | (cd $destdir; tar -xf -)
330d2091767SAnisse Astier(cd $objtree; cp $KCONFIG_CONFIG $destdir/.config) # copy .config manually to be where it's expected to be
331a47b6c61SJoerg Roedelln -sf "/usr/src/linux-headers-$version" "$kernel_headers_dir/lib/modules/$version/build"
3326c635224SBen Hutchingsrm -f "$objtree/debian/hdrsrcfiles" "$objtree/debian/hdrobjfiles"
333cd8d60a2STheodore Ts'o
334cd8d60a2STheodore Ts'ocat <<EOF >> debian/control
335cd8d60a2STheodore Ts'o
336ee81b786Smaximilian attemsPackage: $kernel_headers_packagename
337f8ce239dSBen HutchingsArchitecture: any
338f8ce239dSBen HutchingsDescription: Linux kernel headers for $KERNELRELEASE on \${kernel:debarch}
339f8ce239dSBen Hutchings This package provides kernel header files for $KERNELRELEASE on \${kernel:debarch}
340cd8d60a2STheodore Ts'o .
341cd8d60a2STheodore Ts'o This is useful for people who need to build external modules
342cd8d60a2STheodore Ts'oEOF
343cd8d60a2STheodore Ts'o
344e6807785Smaximilian attemscat <<EOF >> debian/control
345e6807785Smaximilian attems
346ee81b786Smaximilian attemsPackage: $libc_headers_packagename
347e6807785Smaximilian attemsSection: devel
348e6807785Smaximilian attemsProvides: linux-kernel-headers
349e6807785Smaximilian attemsArchitecture: any
350e6807785Smaximilian attemsDescription: Linux support headers for userspace development
351e6807785Smaximilian attems This package provides userspaces headers from the Linux kernel.  These headers
352e6807785Smaximilian attems are used by the installed headers for GNU glibc and other system libraries.
353e6807785Smaximilian attemsEOF
354e6807785Smaximilian attems
355d7d357bcSJoerg Roedelif [ "$ARCH" != "um" ]; then
356d7d357bcSJoerg Roedel	create_package "$kernel_headers_packagename" "$kernel_headers_dir"
357ee81b786Smaximilian attems	create_package "$libc_headers_packagename" "$libc_headers_dir"
358d7d357bcSJoerg Roedelfi
359d7d357bcSJoerg Roedel
3603e2ab256SFrans Popcreate_package "$packagename" "$tmpdir"
3611da177e4SLinus Torvalds
362810e8437SAnisse Astierif [ -n "$BUILD_DEBUG" ] ; then
363810e8437SAnisse Astier	# Build debug package
364810e8437SAnisse Astier	# Different tools want the image in different locations
365810e8437SAnisse Astier	# perf
366810e8437SAnisse Astier	mkdir -p $dbg_dir/usr/lib/debug/lib/modules/$version/
367810e8437SAnisse Astier	cp vmlinux $dbg_dir/usr/lib/debug/lib/modules/$version/
368810e8437SAnisse Astier	# systemtap
369810e8437SAnisse Astier	mkdir -p $dbg_dir/usr/lib/debug/boot/
370810e8437SAnisse Astier	ln -s ../lib/modules/$version/vmlinux $dbg_dir/usr/lib/debug/boot/vmlinux-$version
371810e8437SAnisse Astier	# kdump-tools
372810e8437SAnisse Astier	ln -s lib/modules/$version/vmlinux $dbg_dir/usr/lib/debug/vmlinux-$version
373810e8437SAnisse Astier
374810e8437SAnisse Astier	cat <<EOF >> debian/control
375810e8437SAnisse Astier
376810e8437SAnisse AstierPackage: $dbg_packagename
377810e8437SAnisse AstierSection: debug
378810e8437SAnisse AstierArchitecture: any
379810e8437SAnisse AstierDescription: Linux kernel debugging symbols for $version
380810e8437SAnisse Astier This package will come in handy if you need to debug the kernel. It provides
381810e8437SAnisse Astier all the necessary debug symbols for the kernel and its modules.
382810e8437SAnisse AstierEOF
383810e8437SAnisse Astier
384810e8437SAnisse Astier	create_package "$dbg_packagename" "$dbg_dir"
385810e8437SAnisse Astierfi
386810e8437SAnisse Astier
3873716001bSRiku Voipioif [ "x$1" = "xdeb-pkg" ]
3883716001bSRiku Voipiothen
3893716001bSRiku Voipio    cat <<EOF > debian/rules
3903716001bSRiku Voipio#!/usr/bin/make -f
3913716001bSRiku Voipio
3923716001bSRiku Voipiobuild:
3933716001bSRiku Voipio	\$(MAKE)
3943716001bSRiku Voipio
3953716001bSRiku Voipiobinary-arch:
3963716001bSRiku Voipio	\$(MAKE) KDEB_SOURCENAME=${sourcename} KDEB_PKGVERSION=${packageversion} bindeb-pkg
3973716001bSRiku Voipio
3983716001bSRiku Voipioclean:
3998d740a37SRiku Voipio	rm -rf debian/*tmp debian/files
4003716001bSRiku Voipio	mv debian/ debian.backup # debian/ might be cleaned away
4013716001bSRiku Voipio	\$(MAKE) clean
4023716001bSRiku Voipio	mv debian.backup debian
4033716001bSRiku Voipio
4043716001bSRiku Voipiobinary: binary-arch
4053716001bSRiku VoipioEOF
4063716001bSRiku Voipio	mv ${sourcename}.tar.gz ../${sourcename}_${version}.orig.tar.gz
4073716001bSRiku Voipio	tar caf ../${sourcename}_${packageversion}.debian.tar.gz debian/{copyright,rules,changelog,control}
4083716001bSRiku Voipio	dpkg-source -cdebian/control -ldebian/changelog --format="3.0 (custom)" --target-format="3.0 (quilt)" \
4093716001bSRiku Voipio		-b / ../${sourcename}_${version}.orig.tar.gz  ../${sourcename}_${packageversion}.debian.tar.gz
4103716001bSRiku Voipio	mv ${sourcename}_${packageversion}*dsc ..
4113716001bSRiku Voipio	dpkg-genchanges > ../${sourcename}_${packageversion}_${debarch}.changes
4123716001bSRiku Voipioelse
4133716001bSRiku Voipio	dpkg-genchanges -b > ../${sourcename}_${packageversion}_${debarch}.changes
4143716001bSRiku Voipiofi
4153716001bSRiku Voipio
4161da177e4SLinus Torvaldsexit 0
417