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