162306a36Sopenharmony_ci#!/bin/sh
262306a36Sopenharmony_ci#
362306a36Sopenharmony_ci# Copyright 2003 Wichert Akkerman <wichert@wiggy.net>
462306a36Sopenharmony_ci#
562306a36Sopenharmony_ci# Simple script to generate a debian/ directory for a Linux kernel.
662306a36Sopenharmony_ci
762306a36Sopenharmony_ciset -e
862306a36Sopenharmony_ci
962306a36Sopenharmony_ciis_enabled() {
1062306a36Sopenharmony_ci	grep -q "^$1=y" include/config/auto.conf
1162306a36Sopenharmony_ci}
1262306a36Sopenharmony_ci
1362306a36Sopenharmony_ciif_enabled_echo() {
1462306a36Sopenharmony_ci	if is_enabled "$1"; then
1562306a36Sopenharmony_ci		echo -n "$2"
1662306a36Sopenharmony_ci	elif [ $# -ge 3 ]; then
1762306a36Sopenharmony_ci		echo -n "$3"
1862306a36Sopenharmony_ci	fi
1962306a36Sopenharmony_ci}
2062306a36Sopenharmony_ci
2162306a36Sopenharmony_ciset_debarch() {
2262306a36Sopenharmony_ci	if [ -n "$KBUILD_DEBARCH" ] ; then
2362306a36Sopenharmony_ci		debarch="$KBUILD_DEBARCH"
2462306a36Sopenharmony_ci		return
2562306a36Sopenharmony_ci	fi
2662306a36Sopenharmony_ci
2762306a36Sopenharmony_ci	# Attempt to find the correct Debian architecture
2862306a36Sopenharmony_ci	case "$UTS_MACHINE" in
2962306a36Sopenharmony_ci	i386|ia64|alpha|m68k|riscv*)
3062306a36Sopenharmony_ci		debarch="$UTS_MACHINE" ;;
3162306a36Sopenharmony_ci	x86_64)
3262306a36Sopenharmony_ci		debarch=amd64 ;;
3362306a36Sopenharmony_ci	sparc*)
3462306a36Sopenharmony_ci		debarch=sparc$(if_enabled_echo CONFIG_64BIT 64) ;;
3562306a36Sopenharmony_ci	s390*)
3662306a36Sopenharmony_ci		debarch=s390x ;;
3762306a36Sopenharmony_ci	ppc*)
3862306a36Sopenharmony_ci		if is_enabled CONFIG_64BIT; then
3962306a36Sopenharmony_ci			debarch=ppc64$(if_enabled_echo CONFIG_CPU_LITTLE_ENDIAN el)
4062306a36Sopenharmony_ci		else
4162306a36Sopenharmony_ci			debarch=powerpc$(if_enabled_echo CONFIG_SPE spe)
4262306a36Sopenharmony_ci		fi
4362306a36Sopenharmony_ci		;;
4462306a36Sopenharmony_ci	parisc*)
4562306a36Sopenharmony_ci		debarch=hppa ;;
4662306a36Sopenharmony_ci	mips*)
4762306a36Sopenharmony_ci		if is_enabled CONFIG_CPU_LITTLE_ENDIAN; then
4862306a36Sopenharmony_ci			debarch=mips$(if_enabled_echo CONFIG_64BIT 64)$(if_enabled_echo CONFIG_CPU_MIPSR6 r6)el
4962306a36Sopenharmony_ci		elif is_enabled CONFIG_CPU_MIPSR6; then
5062306a36Sopenharmony_ci			debarch=mips$(if_enabled_echo CONFIG_64BIT 64)r6
5162306a36Sopenharmony_ci		else
5262306a36Sopenharmony_ci			debarch=mips
5362306a36Sopenharmony_ci		fi
5462306a36Sopenharmony_ci		;;
5562306a36Sopenharmony_ci	aarch64|arm64)
5662306a36Sopenharmony_ci		debarch=arm64 ;;
5762306a36Sopenharmony_ci	arm*)
5862306a36Sopenharmony_ci		if is_enabled CONFIG_AEABI; then
5962306a36Sopenharmony_ci			debarch=arm$(if_enabled_echo CONFIG_VFP hf el)
6062306a36Sopenharmony_ci		else
6162306a36Sopenharmony_ci			debarch=arm
6262306a36Sopenharmony_ci		fi
6362306a36Sopenharmony_ci		;;
6462306a36Sopenharmony_ci	openrisc)
6562306a36Sopenharmony_ci		debarch=or1k ;;
6662306a36Sopenharmony_ci	sh)
6762306a36Sopenharmony_ci		if is_enabled CONFIG_CPU_SH3; then
6862306a36Sopenharmony_ci			debarch=sh3$(if_enabled_echo CONFIG_CPU_BIG_ENDIAN eb)
6962306a36Sopenharmony_ci		elif is_enabled CONFIG_CPU_SH4; then
7062306a36Sopenharmony_ci			debarch=sh4$(if_enabled_echo CONFIG_CPU_BIG_ENDIAN eb)
7162306a36Sopenharmony_ci		fi
7262306a36Sopenharmony_ci		;;
7362306a36Sopenharmony_ci	esac
7462306a36Sopenharmony_ci	if [ -z "$debarch" ]; then
7562306a36Sopenharmony_ci		debarch=$(dpkg-architecture -qDEB_HOST_ARCH)
7662306a36Sopenharmony_ci		echo "" >&2
7762306a36Sopenharmony_ci		echo "** ** **  WARNING  ** ** **" >&2
7862306a36Sopenharmony_ci		echo "" >&2
7962306a36Sopenharmony_ci		echo "Your architecture doesn't have its equivalent" >&2
8062306a36Sopenharmony_ci		echo "Debian userspace architecture defined!" >&2
8162306a36Sopenharmony_ci		echo "Falling back to the current host architecture ($debarch)." >&2
8262306a36Sopenharmony_ci		echo "Please add support for $UTS_MACHINE to ${0} ..." >&2
8362306a36Sopenharmony_ci		echo "" >&2
8462306a36Sopenharmony_ci	fi
8562306a36Sopenharmony_ci}
8662306a36Sopenharmony_ci
8762306a36Sopenharmony_ci# Create debian/source/ if it is a source package build
8862306a36Sopenharmony_cigen_source ()
8962306a36Sopenharmony_ci{
9062306a36Sopenharmony_ci	mkdir -p debian/source
9162306a36Sopenharmony_ci
9262306a36Sopenharmony_ci	echo "3.0 (quilt)" > debian/source/format
9362306a36Sopenharmony_ci
9462306a36Sopenharmony_ci	{
9562306a36Sopenharmony_ci		echo "diff-ignore"
9662306a36Sopenharmony_ci		echo "extend-diff-ignore = .*"
9762306a36Sopenharmony_ci	} > debian/source/local-options
9862306a36Sopenharmony_ci
9962306a36Sopenharmony_ci	# Add .config as a patch
10062306a36Sopenharmony_ci	mkdir -p debian/patches
10162306a36Sopenharmony_ci	{
10262306a36Sopenharmony_ci		echo "Subject: Add .config"
10362306a36Sopenharmony_ci		echo "Author: ${maintainer}"
10462306a36Sopenharmony_ci		echo
10562306a36Sopenharmony_ci		echo "--- /dev/null"
10662306a36Sopenharmony_ci		echo "+++ linux/.config"
10762306a36Sopenharmony_ci		diff -u /dev/null "${KCONFIG_CONFIG}" | tail -n +3
10862306a36Sopenharmony_ci	} > debian/patches/config.patch
10962306a36Sopenharmony_ci	echo config.patch > debian/patches/series
11062306a36Sopenharmony_ci
11162306a36Sopenharmony_ci	"${srctree}/scripts/package/gen-diff-patch" debian/patches/diff.patch
11262306a36Sopenharmony_ci	if [ -s debian/patches/diff.patch ]; then
11362306a36Sopenharmony_ci		sed -i "
11462306a36Sopenharmony_ci			1iSubject: Add local diff
11562306a36Sopenharmony_ci			1iAuthor: ${maintainer}
11662306a36Sopenharmony_ci			1i
11762306a36Sopenharmony_ci		" debian/patches/diff.patch
11862306a36Sopenharmony_ci
11962306a36Sopenharmony_ci		echo diff.patch >> debian/patches/series
12062306a36Sopenharmony_ci	else
12162306a36Sopenharmony_ci		rm -f debian/patches/diff.patch
12262306a36Sopenharmony_ci	fi
12362306a36Sopenharmony_ci}
12462306a36Sopenharmony_ci
12562306a36Sopenharmony_cirm -rf debian
12662306a36Sopenharmony_cimkdir debian
12762306a36Sopenharmony_ci
12862306a36Sopenharmony_ciemail=${DEBEMAIL-$EMAIL}
12962306a36Sopenharmony_ci
13062306a36Sopenharmony_ci# use email string directly if it contains <email>
13162306a36Sopenharmony_ciif echo "${email}" | grep -q '<.*>'; then
13262306a36Sopenharmony_ci	maintainer=${email}
13362306a36Sopenharmony_cielse
13462306a36Sopenharmony_ci	# or construct the maintainer string
13562306a36Sopenharmony_ci	user=${KBUILD_BUILD_USER-$(id -nu)}
13662306a36Sopenharmony_ci	name=${DEBFULLNAME-${user}}
13762306a36Sopenharmony_ci	if [ -z "${email}" ]; then
13862306a36Sopenharmony_ci		buildhost=${KBUILD_BUILD_HOST-$(hostname -f 2>/dev/null || hostname)}
13962306a36Sopenharmony_ci		email="${user}@${buildhost}"
14062306a36Sopenharmony_ci	fi
14162306a36Sopenharmony_ci	maintainer="${name} <${email}>"
14262306a36Sopenharmony_cifi
14362306a36Sopenharmony_ci
14462306a36Sopenharmony_ciif [ "$1" = --need-source ]; then
14562306a36Sopenharmony_ci	gen_source
14662306a36Sopenharmony_cifi
14762306a36Sopenharmony_ci
14862306a36Sopenharmony_ci# Some variables and settings used throughout the script
14962306a36Sopenharmony_civersion=$KERNELRELEASE
15062306a36Sopenharmony_ciif [ -n "$KDEB_PKGVERSION" ]; then
15162306a36Sopenharmony_ci	packageversion=$KDEB_PKGVERSION
15262306a36Sopenharmony_cielse
15362306a36Sopenharmony_ci	packageversion=$(${srctree}/scripts/setlocalversion --no-local ${srctree})-$($srctree/init/build-version)
15462306a36Sopenharmony_cifi
15562306a36Sopenharmony_cisourcename=${KDEB_SOURCENAME:-linux-upstream}
15662306a36Sopenharmony_ci
15762306a36Sopenharmony_ciif [ "$ARCH" = "um" ] ; then
15862306a36Sopenharmony_ci	packagename=user-mode-linux
15962306a36Sopenharmony_cielse
16062306a36Sopenharmony_ci	packagename=linux-image
16162306a36Sopenharmony_cifi
16262306a36Sopenharmony_ci
16362306a36Sopenharmony_cidebarch=
16462306a36Sopenharmony_ciset_debarch
16562306a36Sopenharmony_ci
16662306a36Sopenharmony_ci# Try to determine distribution
16762306a36Sopenharmony_ciif [ -n "$KDEB_CHANGELOG_DIST" ]; then
16862306a36Sopenharmony_ci        distribution=$KDEB_CHANGELOG_DIST
16962306a36Sopenharmony_ci# In some cases lsb_release returns the codename as n/a, which breaks dpkg-parsechangelog
17062306a36Sopenharmony_cielif distribution=$(lsb_release -cs 2>/dev/null) && [ -n "$distribution" ] && [ "$distribution" != "n/a" ]; then
17162306a36Sopenharmony_ci        : # nothing to do in this case
17262306a36Sopenharmony_cielse
17362306a36Sopenharmony_ci        distribution="unstable"
17462306a36Sopenharmony_ci        echo >&2 "Using default distribution of 'unstable' in the changelog"
17562306a36Sopenharmony_ci        echo >&2 "Install lsb-release or set \$KDEB_CHANGELOG_DIST explicitly"
17662306a36Sopenharmony_cifi
17762306a36Sopenharmony_ci
17862306a36Sopenharmony_ciecho $debarch > debian/arch
17962306a36Sopenharmony_ciextra_build_depends=", $(if_enabled_echo CONFIG_UNWINDER_ORC libelf-dev:native)"
18062306a36Sopenharmony_ciextra_build_depends="$extra_build_depends, $(if_enabled_echo CONFIG_SYSTEM_TRUSTED_KEYRING libssl-dev:native)"
18162306a36Sopenharmony_ci
18262306a36Sopenharmony_ci# Generate a simple changelog template
18362306a36Sopenharmony_cicat <<EOF > debian/changelog
18462306a36Sopenharmony_ci$sourcename ($packageversion) $distribution; urgency=low
18562306a36Sopenharmony_ci
18662306a36Sopenharmony_ci  * Custom built Linux kernel.
18762306a36Sopenharmony_ci
18862306a36Sopenharmony_ci -- $maintainer  $(date -R)
18962306a36Sopenharmony_ciEOF
19062306a36Sopenharmony_ci
19162306a36Sopenharmony_ci# Generate copyright file
19262306a36Sopenharmony_cicat <<EOF > debian/copyright
19362306a36Sopenharmony_ciThis is a packaged upstream version of the Linux kernel.
19462306a36Sopenharmony_ci
19562306a36Sopenharmony_ciThe sources may be found at most Linux archive sites, including:
19662306a36Sopenharmony_cihttps://www.kernel.org/pub/linux/kernel
19762306a36Sopenharmony_ci
19862306a36Sopenharmony_ciCopyright: 1991 - 2018 Linus Torvalds and others.
19962306a36Sopenharmony_ci
20062306a36Sopenharmony_ciThe git repository for mainline kernel development is at:
20162306a36Sopenharmony_cigit://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
20262306a36Sopenharmony_ci
20362306a36Sopenharmony_ci    This program is free software; you can redistribute it and/or modify
20462306a36Sopenharmony_ci    it under the terms of the GNU General Public License as published by
20562306a36Sopenharmony_ci    the Free Software Foundation; version 2 dated June, 1991.
20662306a36Sopenharmony_ci
20762306a36Sopenharmony_ciOn Debian GNU/Linux systems, the complete text of the GNU General Public
20862306a36Sopenharmony_ciLicense version 2 can be found in \`/usr/share/common-licenses/GPL-2'.
20962306a36Sopenharmony_ciEOF
21062306a36Sopenharmony_ci
21162306a36Sopenharmony_ci# Generate a control file
21262306a36Sopenharmony_cicat <<EOF > debian/control
21362306a36Sopenharmony_ciSource: $sourcename
21462306a36Sopenharmony_ciSection: kernel
21562306a36Sopenharmony_ciPriority: optional
21662306a36Sopenharmony_ciMaintainer: $maintainer
21762306a36Sopenharmony_ciRules-Requires-Root: no
21862306a36Sopenharmony_ciBuild-Depends: bc, debhelper, rsync, kmod, cpio, bison, flex $extra_build_depends
21962306a36Sopenharmony_ciHomepage: https://www.kernel.org/
22062306a36Sopenharmony_ci
22162306a36Sopenharmony_ciPackage: $packagename-$version
22262306a36Sopenharmony_ciArchitecture: $debarch
22362306a36Sopenharmony_ciDescription: Linux kernel, version $version
22462306a36Sopenharmony_ci This package contains the Linux kernel, modules and corresponding other
22562306a36Sopenharmony_ci files, version: $version.
22662306a36Sopenharmony_ciEOF
22762306a36Sopenharmony_ci
22862306a36Sopenharmony_ciif [ "${SRCARCH}" != um ]; then
22962306a36Sopenharmony_cicat <<EOF >> debian/control
23062306a36Sopenharmony_ci
23162306a36Sopenharmony_ciPackage: linux-libc-dev
23262306a36Sopenharmony_ciSection: devel
23362306a36Sopenharmony_ciProvides: linux-kernel-headers
23462306a36Sopenharmony_ciArchitecture: $debarch
23562306a36Sopenharmony_ciDescription: Linux support headers for userspace development
23662306a36Sopenharmony_ci This package provides userspaces headers from the Linux kernel.  These headers
23762306a36Sopenharmony_ci are used by the installed headers for GNU glibc and other system libraries.
23862306a36Sopenharmony_ciMulti-Arch: same
23962306a36Sopenharmony_ciEOF
24062306a36Sopenharmony_ci
24162306a36Sopenharmony_ciif is_enabled CONFIG_MODULES; then
24262306a36Sopenharmony_cicat <<EOF >> debian/control
24362306a36Sopenharmony_ci
24462306a36Sopenharmony_ciPackage: linux-headers-$version
24562306a36Sopenharmony_ciArchitecture: $debarch
24662306a36Sopenharmony_ciDescription: Linux kernel headers for $version on $debarch
24762306a36Sopenharmony_ci This package provides kernel header files for $version on $debarch
24862306a36Sopenharmony_ci .
24962306a36Sopenharmony_ci This is useful for people who need to build external modules
25062306a36Sopenharmony_ciEOF
25162306a36Sopenharmony_cifi
25262306a36Sopenharmony_cifi
25362306a36Sopenharmony_ci
25462306a36Sopenharmony_ciif is_enabled CONFIG_DEBUG_INFO; then
25562306a36Sopenharmony_cicat <<EOF >> debian/control
25662306a36Sopenharmony_ci
25762306a36Sopenharmony_ciPackage: linux-image-$version-dbg
25862306a36Sopenharmony_ciSection: debug
25962306a36Sopenharmony_ciArchitecture: $debarch
26062306a36Sopenharmony_ciDescription: Linux kernel debugging symbols for $version
26162306a36Sopenharmony_ci This package will come in handy if you need to debug the kernel. It provides
26262306a36Sopenharmony_ci all the necessary debug symbols for the kernel and its modules.
26362306a36Sopenharmony_ciEOF
26462306a36Sopenharmony_cifi
26562306a36Sopenharmony_ci
26662306a36Sopenharmony_cicat <<EOF > debian/rules.vars
26762306a36Sopenharmony_ciARCH := ${ARCH}
26862306a36Sopenharmony_ciKERNELRELEASE := ${KERNELRELEASE}
26962306a36Sopenharmony_ciEOF
27062306a36Sopenharmony_ci
27162306a36Sopenharmony_cicp "${srctree}/scripts/package/debian/rules" debian/
27262306a36Sopenharmony_ci
27362306a36Sopenharmony_ciexit 0
274