| #!/bin/sh | 
 | # | 
 | # Copyright 2003 Wichert Akkerman <wichert@wiggy.net> | 
 | # | 
 | # Simple script to generate a debian/ directory for a Linux kernel. | 
 |  | 
 | set -e | 
 |  | 
 | is_enabled() { | 
 | 	grep -q "^$1=y" include/config/auto.conf | 
 | } | 
 |  | 
 | if_enabled_echo() { | 
 | 	if is_enabled "$1"; then | 
 | 		echo -n "$2" | 
 | 	elif [ $# -ge 3 ]; then | 
 | 		echo -n "$3" | 
 | 	fi | 
 | } | 
 |  | 
 | set_debarch() { | 
 | 	if [ -n "$KBUILD_DEBARCH" ] ; then | 
 | 		debarch="$KBUILD_DEBARCH" | 
 | 		return | 
 | 	fi | 
 |  | 
 | 	# Attempt to find the correct Debian architecture | 
 | 	case "$UTS_MACHINE" in | 
 | 	i386|ia64|alpha|m68k|riscv*) | 
 | 		debarch="$UTS_MACHINE" ;; | 
 | 	x86_64) | 
 | 		debarch=amd64 ;; | 
 | 	sparc*) | 
 | 		debarch=sparc$(if_enabled_echo CONFIG_64BIT 64) ;; | 
 | 	s390*) | 
 | 		debarch=s390x ;; | 
 | 	ppc*) | 
 | 		if is_enabled CONFIG_64BIT; then | 
 | 			debarch=ppc64$(if_enabled_echo CONFIG_CPU_LITTLE_ENDIAN el) | 
 | 		else | 
 | 			debarch=powerpc$(if_enabled_echo CONFIG_SPE spe) | 
 | 		fi | 
 | 		;; | 
 | 	parisc*) | 
 | 		debarch=hppa ;; | 
 | 	mips*) | 
 | 		if is_enabled CONFIG_CPU_LITTLE_ENDIAN; then | 
 | 			debarch=mips$(if_enabled_echo CONFIG_64BIT 64)$(if_enabled_echo CONFIG_CPU_MIPSR6 r6)el | 
 | 		elif is_enabled CONFIG_CPU_MIPSR6; then | 
 | 			debarch=mips$(if_enabled_echo CONFIG_64BIT 64)r6 | 
 | 		else | 
 | 			debarch=mips | 
 | 		fi | 
 | 		;; | 
 | 	aarch64|arm64) | 
 | 		debarch=arm64 ;; | 
 | 	arm*) | 
 | 		if is_enabled CONFIG_AEABI; then | 
 | 			debarch=arm$(if_enabled_echo CONFIG_VFP hf el) | 
 | 		else | 
 | 			debarch=arm | 
 | 		fi | 
 | 		;; | 
 | 	openrisc) | 
 | 		debarch=or1k ;; | 
 | 	sh) | 
 | 		if is_enabled CONFIG_CPU_SH3; then | 
 | 			debarch=sh3$(if_enabled_echo CONFIG_CPU_BIG_ENDIAN eb) | 
 | 		elif is_enabled CONFIG_CPU_SH4; then | 
 | 			debarch=sh4$(if_enabled_echo CONFIG_CPU_BIG_ENDIAN eb) | 
 | 		fi | 
 | 		;; | 
 | 	esac | 
 | 	if [ -z "$debarch" ]; then | 
 | 		debarch=$(dpkg-architecture -qDEB_HOST_ARCH) | 
 | 		echo "" >&2 | 
 | 		echo "** ** **  WARNING  ** ** **" >&2 | 
 | 		echo "" >&2 | 
 | 		echo "Your architecture doesn't have its equivalent" >&2 | 
 | 		echo "Debian userspace architecture defined!" >&2 | 
 | 		echo "Falling back to the current host architecture ($debarch)." >&2 | 
 | 		echo "Please add support for $UTS_MACHINE to ${0} ..." >&2 | 
 | 		echo "" >&2 | 
 | 	fi | 
 | } | 
 |  | 
 | # Some variables and settings used throughout the script | 
 | version=$KERNELRELEASE | 
 | if [ -n "$KDEB_PKGVERSION" ]; then | 
 | 	packageversion=$KDEB_PKGVERSION | 
 | 	revision=${packageversion##*-} | 
 | else | 
 | 	revision=$(cat .version 2>/dev/null||echo 1) | 
 | 	packageversion=$version-$revision | 
 | fi | 
 | sourcename=$KDEB_SOURCENAME | 
 |  | 
 | if [ "$ARCH" = "um" ] ; then | 
 | 	packagename=user-mode-linux | 
 | else | 
 | 	packagename=linux-image | 
 | fi | 
 |  | 
 | debarch= | 
 | set_debarch | 
 |  | 
 | email=${DEBEMAIL-$EMAIL} | 
 |  | 
 | # use email string directly if it contains <email> | 
 | if echo $email | grep -q '<.*>'; then | 
 | 	maintainer=$email | 
 | else | 
 | 	# or construct the maintainer string | 
 | 	user=${KBUILD_BUILD_USER-$(id -nu)} | 
 | 	name=${DEBFULLNAME-$user} | 
 | 	if [ -z "$email" ]; then | 
 | 		buildhost=${KBUILD_BUILD_HOST-$(hostname -f 2>/dev/null || hostname)} | 
 | 		email="$user@$buildhost" | 
 | 	fi | 
 | 	maintainer="$name <$email>" | 
 | fi | 
 |  | 
 | # Try to determine distribution | 
 | if [ -n "$KDEB_CHANGELOG_DIST" ]; then | 
 |         distribution=$KDEB_CHANGELOG_DIST | 
 | # In some cases lsb_release returns the codename as n/a, which breaks dpkg-parsechangelog | 
 | elif distribution=$(lsb_release -cs 2>/dev/null) && [ -n "$distribution" ] && [ "$distribution" != "n/a" ]; then | 
 |         : # nothing to do in this case | 
 | else | 
 |         distribution="unstable" | 
 |         echo >&2 "Using default distribution of 'unstable' in the changelog" | 
 |         echo >&2 "Install lsb-release or set \$KDEB_CHANGELOG_DIST explicitly" | 
 | fi | 
 |  | 
 | mkdir -p debian/source/ | 
 | echo "1.0" > debian/source/format | 
 |  | 
 | echo $debarch > debian/arch | 
 | extra_build_depends=", $(if_enabled_echo CONFIG_UNWINDER_ORC libelf-dev:native)" | 
 | extra_build_depends="$extra_build_depends, $(if_enabled_echo CONFIG_SYSTEM_TRUSTED_KEYRING libssl-dev:native)" | 
 |  | 
 | # Generate a simple changelog template | 
 | cat <<EOF > debian/changelog | 
 | $sourcename ($packageversion) $distribution; urgency=low | 
 |  | 
 |   * Custom built Linux kernel. | 
 |  | 
 |  -- $maintainer  $(date -R) | 
 | EOF | 
 |  | 
 | # Generate copyright file | 
 | cat <<EOF > debian/copyright | 
 | This is a packacked upstream version of the Linux kernel. | 
 |  | 
 | The sources may be found at most Linux archive sites, including: | 
 | https://www.kernel.org/pub/linux/kernel | 
 |  | 
 | Copyright: 1991 - 2018 Linus Torvalds and others. | 
 |  | 
 | The git repository for mainline kernel development is at: | 
 | git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git | 
 |  | 
 |     This program is free software; you can redistribute it and/or modify | 
 |     it under the terms of the GNU General Public License as published by | 
 |     the Free Software Foundation; version 2 dated June, 1991. | 
 |  | 
 | On Debian GNU/Linux systems, the complete text of the GNU General Public | 
 | License version 2 can be found in \`/usr/share/common-licenses/GPL-2'. | 
 | EOF | 
 |  | 
 | # Generate a control file | 
 | cat <<EOF > debian/control | 
 | Source: $sourcename | 
 | Section: kernel | 
 | Priority: optional | 
 | Maintainer: $maintainer | 
 | Rules-Requires-Root: no | 
 | Build-Depends: bc, rsync, kmod, cpio, bison, flex | flex:native $extra_build_depends | 
 | Homepage: https://www.kernel.org/ | 
 |  | 
 | Package: $packagename-$version | 
 | Architecture: $debarch | 
 | Description: Linux kernel, version $version | 
 |  This package contains the Linux kernel, modules and corresponding other | 
 |  files, version: $version. | 
 |  | 
 | Package: linux-libc-dev | 
 | Section: devel | 
 | Provides: linux-kernel-headers | 
 | Architecture: $debarch | 
 | Description: Linux support headers for userspace development | 
 |  This package provides userspaces headers from the Linux kernel.  These headers | 
 |  are used by the installed headers for GNU glibc and other system libraries. | 
 | Multi-Arch: same | 
 | EOF | 
 |  | 
 | if is_enabled CONFIG_MODULES; then | 
 | cat <<EOF >> debian/control | 
 |  | 
 | Package: linux-headers-$version | 
 | Architecture: $debarch | 
 | Description: Linux kernel headers for $version on $debarch | 
 |  This package provides kernel header files for $version on $debarch | 
 |  . | 
 |  This is useful for people who need to build external modules | 
 | EOF | 
 | fi | 
 |  | 
 | if is_enabled CONFIG_DEBUG_INFO; then | 
 | cat <<EOF >> debian/control | 
 |  | 
 | Package: linux-image-$version-dbg | 
 | Section: debug | 
 | Architecture: $debarch | 
 | Description: Linux kernel debugging symbols for $version | 
 |  This package will come in handy if you need to debug the kernel. It provides | 
 |  all the necessary debug symbols for the kernel and its modules. | 
 | EOF | 
 | fi | 
 |  | 
 | cat <<EOF > debian/rules | 
 | #!$(command -v $MAKE) -f | 
 |  | 
 | srctree ?= . | 
 |  | 
 | build-indep: | 
 | build-arch: | 
 | 	\$(MAKE) KERNELRELEASE=${version} ARCH=${ARCH} \ | 
 | 	KBUILD_BUILD_VERSION=${revision} -f \$(srctree)/Makefile | 
 |  | 
 | build: build-arch | 
 |  | 
 | binary-indep: | 
 | binary-arch: build-arch | 
 | 	\$(MAKE) KERNELRELEASE=${version} ARCH=${ARCH} \ | 
 | 	KBUILD_BUILD_VERSION=${revision} -f \$(srctree)/Makefile intdeb-pkg | 
 |  | 
 | clean: | 
 | 	rm -rf debian/files debian/linux-* | 
 | 	\$(MAKE) clean | 
 |  | 
 | binary: binary-arch | 
 | EOF | 
 | chmod +x debian/rules | 
 |  | 
 | exit 0 |