xref: /OK3568_Linux_fs/kernel/scripts/package/mkdebian (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun#!/bin/sh
2*4882a593Smuzhiyun#
3*4882a593Smuzhiyun# Copyright 2003 Wichert Akkerman <wichert@wiggy.net>
4*4882a593Smuzhiyun#
5*4882a593Smuzhiyun# Simple script to generate a debian/ directory for a Linux kernel.
6*4882a593Smuzhiyun
7*4882a593Smuzhiyunset -e
8*4882a593Smuzhiyun
9*4882a593Smuzhiyunis_enabled() {
10*4882a593Smuzhiyun	grep -q "^$1=y" include/config/auto.conf
11*4882a593Smuzhiyun}
12*4882a593Smuzhiyun
13*4882a593Smuzhiyunif_enabled_echo() {
14*4882a593Smuzhiyun	if is_enabled "$1"; then
15*4882a593Smuzhiyun		echo -n "$2"
16*4882a593Smuzhiyun	elif [ $# -ge 3 ]; then
17*4882a593Smuzhiyun		echo -n "$3"
18*4882a593Smuzhiyun	fi
19*4882a593Smuzhiyun}
20*4882a593Smuzhiyun
21*4882a593Smuzhiyunset_debarch() {
22*4882a593Smuzhiyun	if [ -n "$KBUILD_DEBARCH" ] ; then
23*4882a593Smuzhiyun		debarch="$KBUILD_DEBARCH"
24*4882a593Smuzhiyun		return
25*4882a593Smuzhiyun	fi
26*4882a593Smuzhiyun
27*4882a593Smuzhiyun	# Attempt to find the correct Debian architecture
28*4882a593Smuzhiyun	case "$UTS_MACHINE" in
29*4882a593Smuzhiyun	i386|ia64|alpha|m68k|riscv*)
30*4882a593Smuzhiyun		debarch="$UTS_MACHINE" ;;
31*4882a593Smuzhiyun	x86_64)
32*4882a593Smuzhiyun		debarch=amd64 ;;
33*4882a593Smuzhiyun	sparc*)
34*4882a593Smuzhiyun		debarch=sparc$(if_enabled_echo CONFIG_64BIT 64) ;;
35*4882a593Smuzhiyun	s390*)
36*4882a593Smuzhiyun		debarch=s390x ;;
37*4882a593Smuzhiyun	ppc*)
38*4882a593Smuzhiyun		if is_enabled CONFIG_64BIT; then
39*4882a593Smuzhiyun			debarch=ppc64$(if_enabled_echo CONFIG_CPU_LITTLE_ENDIAN el)
40*4882a593Smuzhiyun		else
41*4882a593Smuzhiyun			debarch=powerpc$(if_enabled_echo CONFIG_SPE spe)
42*4882a593Smuzhiyun		fi
43*4882a593Smuzhiyun		;;
44*4882a593Smuzhiyun	parisc*)
45*4882a593Smuzhiyun		debarch=hppa ;;
46*4882a593Smuzhiyun	mips*)
47*4882a593Smuzhiyun		if is_enabled CONFIG_CPU_LITTLE_ENDIAN; then
48*4882a593Smuzhiyun			debarch=mips$(if_enabled_echo CONFIG_64BIT 64)$(if_enabled_echo CONFIG_CPU_MIPSR6 r6)el
49*4882a593Smuzhiyun		elif is_enabled CONFIG_CPU_MIPSR6; then
50*4882a593Smuzhiyun			debarch=mips$(if_enabled_echo CONFIG_64BIT 64)r6
51*4882a593Smuzhiyun		else
52*4882a593Smuzhiyun			debarch=mips
53*4882a593Smuzhiyun		fi
54*4882a593Smuzhiyun		;;
55*4882a593Smuzhiyun	aarch64|arm64)
56*4882a593Smuzhiyun		debarch=arm64 ;;
57*4882a593Smuzhiyun	arm*)
58*4882a593Smuzhiyun		if is_enabled CONFIG_AEABI; then
59*4882a593Smuzhiyun			debarch=arm$(if_enabled_echo CONFIG_VFP hf el)
60*4882a593Smuzhiyun		else
61*4882a593Smuzhiyun			debarch=arm
62*4882a593Smuzhiyun		fi
63*4882a593Smuzhiyun		;;
64*4882a593Smuzhiyun	openrisc)
65*4882a593Smuzhiyun		debarch=or1k ;;
66*4882a593Smuzhiyun	sh)
67*4882a593Smuzhiyun		if is_enabled CONFIG_CPU_SH3; then
68*4882a593Smuzhiyun			debarch=sh3$(if_enabled_echo CONFIG_CPU_BIG_ENDIAN eb)
69*4882a593Smuzhiyun		elif is_enabled CONFIG_CPU_SH4; then
70*4882a593Smuzhiyun			debarch=sh4$(if_enabled_echo CONFIG_CPU_BIG_ENDIAN eb)
71*4882a593Smuzhiyun		fi
72*4882a593Smuzhiyun		;;
73*4882a593Smuzhiyun	esac
74*4882a593Smuzhiyun	if [ -z "$debarch" ]; then
75*4882a593Smuzhiyun		debarch=$(dpkg-architecture -qDEB_HOST_ARCH)
76*4882a593Smuzhiyun		echo "" >&2
77*4882a593Smuzhiyun		echo "** ** **  WARNING  ** ** **" >&2
78*4882a593Smuzhiyun		echo "" >&2
79*4882a593Smuzhiyun		echo "Your architecture doesn't have its equivalent" >&2
80*4882a593Smuzhiyun		echo "Debian userspace architecture defined!" >&2
81*4882a593Smuzhiyun		echo "Falling back to the current host architecture ($debarch)." >&2
82*4882a593Smuzhiyun		echo "Please add support for $UTS_MACHINE to ${0} ..." >&2
83*4882a593Smuzhiyun		echo "" >&2
84*4882a593Smuzhiyun	fi
85*4882a593Smuzhiyun}
86*4882a593Smuzhiyun
87*4882a593Smuzhiyun# Some variables and settings used throughout the script
88*4882a593Smuzhiyunversion=$KERNELRELEASE
89*4882a593Smuzhiyunif [ -n "$KDEB_PKGVERSION" ]; then
90*4882a593Smuzhiyun	packageversion=$KDEB_PKGVERSION
91*4882a593Smuzhiyun	revision=${packageversion##*-}
92*4882a593Smuzhiyunelse
93*4882a593Smuzhiyun	revision=$(cat .version 2>/dev/null||echo 1)
94*4882a593Smuzhiyun	packageversion=$version-$revision
95*4882a593Smuzhiyunfi
96*4882a593Smuzhiyunsourcename=$KDEB_SOURCENAME
97*4882a593Smuzhiyun
98*4882a593Smuzhiyunif [ "$ARCH" = "um" ] ; then
99*4882a593Smuzhiyun	packagename=user-mode-linux
100*4882a593Smuzhiyunelse
101*4882a593Smuzhiyun	packagename=linux-image
102*4882a593Smuzhiyunfi
103*4882a593Smuzhiyun
104*4882a593Smuzhiyundebarch=
105*4882a593Smuzhiyunset_debarch
106*4882a593Smuzhiyun
107*4882a593Smuzhiyunemail=${DEBEMAIL-$EMAIL}
108*4882a593Smuzhiyun
109*4882a593Smuzhiyun# use email string directly if it contains <email>
110*4882a593Smuzhiyunif echo $email | grep -q '<.*>'; then
111*4882a593Smuzhiyun	maintainer=$email
112*4882a593Smuzhiyunelse
113*4882a593Smuzhiyun	# or construct the maintainer string
114*4882a593Smuzhiyun	user=${KBUILD_BUILD_USER-$(id -nu)}
115*4882a593Smuzhiyun	name=${DEBFULLNAME-$user}
116*4882a593Smuzhiyun	if [ -z "$email" ]; then
117*4882a593Smuzhiyun		buildhost=${KBUILD_BUILD_HOST-$(hostname -f 2>/dev/null || hostname)}
118*4882a593Smuzhiyun		email="$user@$buildhost"
119*4882a593Smuzhiyun	fi
120*4882a593Smuzhiyun	maintainer="$name <$email>"
121*4882a593Smuzhiyunfi
122*4882a593Smuzhiyun
123*4882a593Smuzhiyun# Try to determine distribution
124*4882a593Smuzhiyunif [ -n "$KDEB_CHANGELOG_DIST" ]; then
125*4882a593Smuzhiyun        distribution=$KDEB_CHANGELOG_DIST
126*4882a593Smuzhiyun# In some cases lsb_release returns the codename as n/a, which breaks dpkg-parsechangelog
127*4882a593Smuzhiyunelif distribution=$(lsb_release -cs 2>/dev/null) && [ -n "$distribution" ] && [ "$distribution" != "n/a" ]; then
128*4882a593Smuzhiyun        : # nothing to do in this case
129*4882a593Smuzhiyunelse
130*4882a593Smuzhiyun        distribution="unstable"
131*4882a593Smuzhiyun        echo >&2 "Using default distribution of 'unstable' in the changelog"
132*4882a593Smuzhiyun        echo >&2 "Install lsb-release or set \$KDEB_CHANGELOG_DIST explicitly"
133*4882a593Smuzhiyunfi
134*4882a593Smuzhiyun
135*4882a593Smuzhiyunmkdir -p debian/source/
136*4882a593Smuzhiyunecho "1.0" > debian/source/format
137*4882a593Smuzhiyun
138*4882a593Smuzhiyunecho $debarch > debian/arch
139*4882a593Smuzhiyunextra_build_depends=", $(if_enabled_echo CONFIG_UNWINDER_ORC libelf-dev:native)"
140*4882a593Smuzhiyunextra_build_depends="$extra_build_depends, $(if_enabled_echo CONFIG_SYSTEM_TRUSTED_KEYRING libssl-dev:native)"
141*4882a593Smuzhiyun
142*4882a593Smuzhiyun# Generate a simple changelog template
143*4882a593Smuzhiyuncat <<EOF > debian/changelog
144*4882a593Smuzhiyun$sourcename ($packageversion) $distribution; urgency=low
145*4882a593Smuzhiyun
146*4882a593Smuzhiyun  * Custom built Linux kernel.
147*4882a593Smuzhiyun
148*4882a593Smuzhiyun -- $maintainer  $(date -R)
149*4882a593SmuzhiyunEOF
150*4882a593Smuzhiyun
151*4882a593Smuzhiyun# Generate copyright file
152*4882a593Smuzhiyuncat <<EOF > debian/copyright
153*4882a593SmuzhiyunThis is a packacked upstream version of the Linux kernel.
154*4882a593Smuzhiyun
155*4882a593SmuzhiyunThe sources may be found at most Linux archive sites, including:
156*4882a593Smuzhiyunhttps://www.kernel.org/pub/linux/kernel
157*4882a593Smuzhiyun
158*4882a593SmuzhiyunCopyright: 1991 - 2018 Linus Torvalds and others.
159*4882a593Smuzhiyun
160*4882a593SmuzhiyunThe git repository for mainline kernel development is at:
161*4882a593Smuzhiyungit://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
162*4882a593Smuzhiyun
163*4882a593Smuzhiyun    This program is free software; you can redistribute it and/or modify
164*4882a593Smuzhiyun    it under the terms of the GNU General Public License as published by
165*4882a593Smuzhiyun    the Free Software Foundation; version 2 dated June, 1991.
166*4882a593Smuzhiyun
167*4882a593SmuzhiyunOn Debian GNU/Linux systems, the complete text of the GNU General Public
168*4882a593SmuzhiyunLicense version 2 can be found in \`/usr/share/common-licenses/GPL-2'.
169*4882a593SmuzhiyunEOF
170*4882a593Smuzhiyun
171*4882a593Smuzhiyun# Generate a control file
172*4882a593Smuzhiyuncat <<EOF > debian/control
173*4882a593SmuzhiyunSource: $sourcename
174*4882a593SmuzhiyunSection: kernel
175*4882a593SmuzhiyunPriority: optional
176*4882a593SmuzhiyunMaintainer: $maintainer
177*4882a593SmuzhiyunRules-Requires-Root: no
178*4882a593SmuzhiyunBuild-Depends: bc, rsync, kmod, cpio, bison, flex | flex:native $extra_build_depends
179*4882a593SmuzhiyunHomepage: https://www.kernel.org/
180*4882a593Smuzhiyun
181*4882a593SmuzhiyunPackage: $packagename-$version
182*4882a593SmuzhiyunArchitecture: $debarch
183*4882a593SmuzhiyunDescription: Linux kernel, version $version
184*4882a593Smuzhiyun This package contains the Linux kernel, modules and corresponding other
185*4882a593Smuzhiyun files, version: $version.
186*4882a593Smuzhiyun
187*4882a593SmuzhiyunPackage: linux-libc-dev
188*4882a593SmuzhiyunSection: devel
189*4882a593SmuzhiyunProvides: linux-kernel-headers
190*4882a593SmuzhiyunArchitecture: $debarch
191*4882a593SmuzhiyunDescription: Linux support headers for userspace development
192*4882a593Smuzhiyun This package provides userspaces headers from the Linux kernel.  These headers
193*4882a593Smuzhiyun are used by the installed headers for GNU glibc and other system libraries.
194*4882a593SmuzhiyunMulti-Arch: same
195*4882a593SmuzhiyunEOF
196*4882a593Smuzhiyun
197*4882a593Smuzhiyunif is_enabled CONFIG_MODULES; then
198*4882a593Smuzhiyuncat <<EOF >> debian/control
199*4882a593Smuzhiyun
200*4882a593SmuzhiyunPackage: linux-headers-$version
201*4882a593SmuzhiyunArchitecture: $debarch
202*4882a593SmuzhiyunDescription: Linux kernel headers for $version on $debarch
203*4882a593Smuzhiyun This package provides kernel header files for $version on $debarch
204*4882a593Smuzhiyun .
205*4882a593Smuzhiyun This is useful for people who need to build external modules
206*4882a593SmuzhiyunEOF
207*4882a593Smuzhiyunfi
208*4882a593Smuzhiyun
209*4882a593Smuzhiyunif is_enabled CONFIG_DEBUG_INFO; then
210*4882a593Smuzhiyuncat <<EOF >> debian/control
211*4882a593Smuzhiyun
212*4882a593SmuzhiyunPackage: linux-image-$version-dbg
213*4882a593SmuzhiyunSection: debug
214*4882a593SmuzhiyunArchitecture: $debarch
215*4882a593SmuzhiyunDescription: Linux kernel debugging symbols for $version
216*4882a593Smuzhiyun This package will come in handy if you need to debug the kernel. It provides
217*4882a593Smuzhiyun all the necessary debug symbols for the kernel and its modules.
218*4882a593SmuzhiyunEOF
219*4882a593Smuzhiyunfi
220*4882a593Smuzhiyun
221*4882a593Smuzhiyuncat <<EOF > debian/rules
222*4882a593Smuzhiyun#!$(command -v $MAKE) -f
223*4882a593Smuzhiyun
224*4882a593Smuzhiyunsrctree ?= .
225*4882a593Smuzhiyun
226*4882a593Smuzhiyunbuild-indep:
227*4882a593Smuzhiyunbuild-arch:
228*4882a593Smuzhiyun	\$(MAKE) KERNELRELEASE=${version} ARCH=${ARCH} \
229*4882a593Smuzhiyun	KBUILD_BUILD_VERSION=${revision} -f \$(srctree)/Makefile
230*4882a593Smuzhiyun
231*4882a593Smuzhiyunbuild: build-arch
232*4882a593Smuzhiyun
233*4882a593Smuzhiyunbinary-indep:
234*4882a593Smuzhiyunbinary-arch: build-arch
235*4882a593Smuzhiyun	\$(MAKE) KERNELRELEASE=${version} ARCH=${ARCH} \
236*4882a593Smuzhiyun	KBUILD_BUILD_VERSION=${revision} -f \$(srctree)/Makefile intdeb-pkg
237*4882a593Smuzhiyun
238*4882a593Smuzhiyunclean:
239*4882a593Smuzhiyun	rm -rf debian/*tmp debian/files
240*4882a593Smuzhiyun	\$(MAKE) clean
241*4882a593Smuzhiyun
242*4882a593Smuzhiyunbinary: binary-arch
243*4882a593SmuzhiyunEOF
244*4882a593Smuzhiyunchmod +x debian/rules
245*4882a593Smuzhiyun
246*4882a593Smuzhiyunexit 0
247