1b41d920aSRiku Voipio#!/bin/sh 2b41d920aSRiku Voipio# 3b41d920aSRiku Voipio# Copyright 2003 Wichert Akkerman <wichert@wiggy.net> 4b41d920aSRiku Voipio# 5b41d920aSRiku Voipio# Simple script to generate a debian/ directory for a Linux kernel. 6b41d920aSRiku Voipio 7c0414419SMasahiro Yamadaset -eu 8b41d920aSRiku Voipio 908d3892cSBen Hutchingsis_enabled() { 106fb7ef5aSMasahiro Yamada grep -q "^$1=y" include/config/auto.conf 1108d3892cSBen Hutchings} 1208d3892cSBen Hutchings 1308d3892cSBen Hutchingsif_enabled_echo() { 1408d3892cSBen Hutchings if is_enabled "$1"; then 1508d3892cSBen Hutchings echo -n "$2" 1608d3892cSBen Hutchings elif [ $# -ge 3 ]; then 1708d3892cSBen Hutchings echo -n "$3" 1808d3892cSBen Hutchings fi 1908d3892cSBen Hutchings} 2008d3892cSBen Hutchings 21b41d920aSRiku Voipioset_debarch() { 22c0414419SMasahiro Yamada if [ "${KBUILD_DEBARCH:+set}" ]; then 23f2abcc13SBen Hutchings debarch="$KBUILD_DEBARCH" 24f2abcc13SBen Hutchings return 25f2abcc13SBen Hutchings fi 26f2abcc13SBen Hutchings 27b41d920aSRiku Voipio # Attempt to find the correct Debian architecture 28b41d920aSRiku Voipio case "$UTS_MACHINE" in 290df8e970SMasahiro Yamada i386|alpha|m68k|riscv*) 30b41d920aSRiku Voipio debarch="$UTS_MACHINE" ;; 31b41d920aSRiku Voipio x86_64) 32b41d920aSRiku Voipio debarch=amd64 ;; 33b41d920aSRiku Voipio sparc*) 347e548e9aSMasahiro Yamada debarch=sparc$(if_enabled_echo CONFIG_64BIT 64) ;; 35b41d920aSRiku Voipio s390*) 364260ecd0SBen Hutchings debarch=s390x ;; 37b41d920aSRiku Voipio ppc*) 387e548e9aSMasahiro Yamada if is_enabled CONFIG_64BIT; then 397e548e9aSMasahiro Yamada debarch=ppc64$(if_enabled_echo CONFIG_CPU_LITTLE_ENDIAN el) 4050d511baSBen Hutchings else 417e548e9aSMasahiro Yamada debarch=powerpc$(if_enabled_echo CONFIG_SPE spe) 4250d511baSBen Hutchings fi 4350d511baSBen Hutchings ;; 44b41d920aSRiku Voipio parisc*) 45b41d920aSRiku Voipio debarch=hppa ;; 46b41d920aSRiku Voipio mips*) 477e548e9aSMasahiro Yamada if is_enabled CONFIG_CPU_LITTLE_ENDIAN; then 487e548e9aSMasahiro Yamada debarch=mips$(if_enabled_echo CONFIG_64BIT 64)$(if_enabled_echo CONFIG_CPU_MIPSR6 r6)el 497e548e9aSMasahiro Yamada elif is_enabled CONFIG_CPU_MIPSR6; then 507e548e9aSMasahiro Yamada debarch=mips$(if_enabled_echo CONFIG_64BIT 64)r6 51159b3794SBen Hutchings else 52159b3794SBen Hutchings debarch=mips 53159b3794SBen Hutchings fi 54159b3794SBen Hutchings ;; 55b41d920aSRiku Voipio aarch64|arm64) 56b41d920aSRiku Voipio debarch=arm64 ;; 57b41d920aSRiku Voipio arm*) 587e548e9aSMasahiro Yamada if is_enabled CONFIG_AEABI; then 597e548e9aSMasahiro Yamada debarch=arm$(if_enabled_echo CONFIG_VFP hf el) 60b41d920aSRiku Voipio else 61b41d920aSRiku Voipio debarch=arm 62b41d920aSRiku Voipio fi 63b41d920aSRiku Voipio ;; 64822f44fbSBen Hutchings openrisc) 65822f44fbSBen Hutchings debarch=or1k ;; 6679a85b55SBen Hutchings sh) 677e548e9aSMasahiro Yamada if is_enabled CONFIG_CPU_SH3; then 687e548e9aSMasahiro Yamada debarch=sh3$(if_enabled_echo CONFIG_CPU_BIG_ENDIAN eb) 697e548e9aSMasahiro Yamada elif is_enabled CONFIG_CPU_SH4; then 707e548e9aSMasahiro Yamada debarch=sh4$(if_enabled_echo CONFIG_CPU_BIG_ENDIAN eb) 7179a85b55SBen Hutchings fi 7279a85b55SBen Hutchings ;; 73a34e92d2SMasahiro Yamada um) 74a34e92d2SMasahiro Yamada if is_enabled CONFIG_64BIT; then 75a34e92d2SMasahiro Yamada debarch=amd64 76a34e92d2SMasahiro Yamada else 77a34e92d2SMasahiro Yamada debarch=i386 78a34e92d2SMasahiro Yamada fi 79a34e92d2SMasahiro Yamada ;; 801195306eSWangYuli loongarch64) 811195306eSWangYuli debarch=loong64 ;; 8279a85b55SBen Hutchings esac 8379a85b55SBen Hutchings if [ -z "$debarch" ]; then 84091d30aeSBen Hutchings debarch=$(dpkg-architecture -qDEB_HOST_ARCH) 85b41d920aSRiku Voipio echo "" >&2 86b41d920aSRiku Voipio echo "** ** ** WARNING ** ** **" >&2 87b41d920aSRiku Voipio echo "" >&2 88b41d920aSRiku Voipio echo "Your architecture doesn't have its equivalent" >&2 89b41d920aSRiku Voipio echo "Debian userspace architecture defined!" >&2 90091d30aeSBen Hutchings echo "Falling back to the current host architecture ($debarch)." >&2 91b41d920aSRiku Voipio echo "Please add support for $UTS_MACHINE to ${0} ..." >&2 92b41d920aSRiku Voipio echo "" >&2 9379a85b55SBen Hutchings fi 94b41d920aSRiku Voipio} 95b41d920aSRiku Voipio 96aa7d233fSMasahiro Yamada# Create debian/source/ if it is a source package build 97aa7d233fSMasahiro Yamadagen_source () 98aa7d233fSMasahiro Yamada{ 99aa7d233fSMasahiro Yamada mkdir -p debian/source 100aa7d233fSMasahiro Yamada 101aa7d233fSMasahiro Yamada echo "3.0 (quilt)" > debian/source/format 102aa7d233fSMasahiro Yamada 103aa7d233fSMasahiro Yamada { 104aa7d233fSMasahiro Yamada echo "diff-ignore" 105aa7d233fSMasahiro Yamada echo "extend-diff-ignore = .*" 106aa7d233fSMasahiro Yamada } > debian/source/local-options 107aa7d233fSMasahiro Yamada 108aa7d233fSMasahiro Yamada # Add .config as a patch 109aa7d233fSMasahiro Yamada mkdir -p debian/patches 110aa7d233fSMasahiro Yamada { 111aa7d233fSMasahiro Yamada echo "Subject: Add .config" 112aa7d233fSMasahiro Yamada echo "Author: ${maintainer}" 113aa7d233fSMasahiro Yamada echo 114aa7d233fSMasahiro Yamada echo "--- /dev/null" 115aa7d233fSMasahiro Yamada echo "+++ linux/.config" 116aa7d233fSMasahiro Yamada diff -u /dev/null "${KCONFIG_CONFIG}" | tail -n +3 117aa7d233fSMasahiro Yamada } > debian/patches/config.patch 118aa7d233fSMasahiro Yamada echo config.patch > debian/patches/series 119aa7d233fSMasahiro Yamada 120aa7d233fSMasahiro Yamada "${srctree}/scripts/package/gen-diff-patch" debian/patches/diff.patch 121aa7d233fSMasahiro Yamada if [ -s debian/patches/diff.patch ]; then 122aa7d233fSMasahiro Yamada sed -i " 123aa7d233fSMasahiro Yamada 1iSubject: Add local diff 124aa7d233fSMasahiro Yamada 1iAuthor: ${maintainer} 125aa7d233fSMasahiro Yamada 1i 126aa7d233fSMasahiro Yamada " debian/patches/diff.patch 127aa7d233fSMasahiro Yamada 128aa7d233fSMasahiro Yamada echo diff.patch >> debian/patches/series 129aa7d233fSMasahiro Yamada else 130aa7d233fSMasahiro Yamada rm -f debian/patches/diff.patch 131aa7d233fSMasahiro Yamada fi 132aa7d233fSMasahiro Yamada} 133aa7d233fSMasahiro Yamada 1347bf4582dSMasahiro Yamadarm -rf debian 135aa7d233fSMasahiro Yamadamkdir debian 136aa7d233fSMasahiro Yamada 137d67015eeSMasahiro Yamadauser=${KBUILD_BUILD_USER:-$(id -nu)} 138d67015eeSMasahiro Yamadaname=${DEBFULLNAME:-${user}} 139c5209080SMasahiro Yamadaif [ "${DEBEMAIL:+set}" ]; then 140c5209080SMasahiro Yamada email=${DEBEMAIL} 141c5209080SMasahiro Yamadaelse 142d67015eeSMasahiro Yamada buildhost=${KBUILD_BUILD_HOST:-$(hostname -f 2>/dev/null || hostname)} 143aa7d233fSMasahiro Yamada email="${user}@${buildhost}" 144aa7d233fSMasahiro Yamadafi 145aa7d233fSMasahiro Yamadamaintainer="${name} <${email}>" 146aa7d233fSMasahiro Yamada 147c0414419SMasahiro Yamadawhile [ $# -gt 0 ]; do 148c0414419SMasahiro Yamada case "$1" in 149c0414419SMasahiro Yamada --need-source) 150aa7d233fSMasahiro Yamada gen_source 151c0414419SMasahiro Yamada shift 152c0414419SMasahiro Yamada ;; 153c0414419SMasahiro Yamada *) 154c0414419SMasahiro Yamada break 155c0414419SMasahiro Yamada ;; 156c0414419SMasahiro Yamada esac 157c0414419SMasahiro Yamadadone 1587bf4582dSMasahiro Yamada 159b41d920aSRiku Voipio# Some variables and settings used throughout the script 160c0414419SMasahiro Yamadaif [ "${KDEB_PKGVERSION:+set}" ]; then 161b41d920aSRiku Voipio packageversion=$KDEB_PKGVERSION 162b41d920aSRiku Voipioelse 1637e752910SMasahiro Yamada upstream_version=$("${srctree}/scripts/setlocalversion" --no-local "${srctree}" | sed 's/-\(rc[1-9]\)/~\1/') 1647e752910SMasahiro Yamada debian_revision=$("${srctree}/scripts/build-version") 1657e752910SMasahiro Yamada packageversion=${upstream_version}-${debian_revision} 166b41d920aSRiku Voipiofi 1676eabebb1SMasahiro Yamadasourcename=${KDEB_SOURCENAME:-linux-upstream} 168b41d920aSRiku Voipio 169b41d920aSRiku Voipioif [ "$ARCH" = "um" ] ; then 1700fa21cf4SMasahiro Yamada packagename=user-mode-linux 1710fa21cf4SMasahiro Yamadaelse 1720fa21cf4SMasahiro Yamada packagename=linux-image 173b41d920aSRiku Voipiofi 174b41d920aSRiku Voipio 1750fa21cf4SMasahiro Yamadadebarch= 1760fa21cf4SMasahiro Yamadaset_debarch 1770fa21cf4SMasahiro Yamada 178b41d920aSRiku Voipio# Try to determine distribution 179c0414419SMasahiro Yamadaif [ "${KDEB_CHANGELOG_DIST:+set}" ]; then 180b41d920aSRiku Voipio distribution=$KDEB_CHANGELOG_DIST 181b41d920aSRiku Voipio# In some cases lsb_release returns the codename as n/a, which breaks dpkg-parsechangelog 182b41d920aSRiku Voipioelif distribution=$(lsb_release -cs 2>/dev/null) && [ -n "$distribution" ] && [ "$distribution" != "n/a" ]; then 183b41d920aSRiku Voipio : # nothing to do in this case 184b41d920aSRiku Voipioelse 185b41d920aSRiku Voipio distribution="unstable" 186b41d920aSRiku Voipio echo >&2 "Using default distribution of 'unstable' in the changelog" 187b41d920aSRiku Voipio echo >&2 "Install lsb-release or set \$KDEB_CHANGELOG_DIST explicitly" 188b41d920aSRiku Voipiofi 189b41d920aSRiku Voipio 190b41d920aSRiku Voipioecho $debarch > debian/arch 191b41d920aSRiku Voipio 192e2c31822SMasahiro Yamadahost_gnu=$(dpkg-architecture -a "${debarch}" -q DEB_HOST_GNU_TYPE | sed 's/_/-/g') 193e2c31822SMasahiro Yamada 194b41d920aSRiku Voipio# Generate a simple changelog template 195b41d920aSRiku Voipiocat <<EOF > debian/changelog 196b41d920aSRiku Voipio$sourcename ($packageversion) $distribution; urgency=low 197b41d920aSRiku Voipio 198b41d920aSRiku Voipio * Custom built Linux kernel. 199b41d920aSRiku Voipio 200b41d920aSRiku Voipio -- $maintainer $(date -R) 201b41d920aSRiku VoipioEOF 202b41d920aSRiku Voipio 203b41d920aSRiku Voipio# Generate a control file 204b41d920aSRiku Voipiocat <<EOF > debian/control 205b41d920aSRiku VoipioSource: $sourcename 206b41d920aSRiku VoipioSection: kernel 207b41d920aSRiku VoipioPriority: optional 208b41d920aSRiku VoipioMaintainer: $maintainer 2093e854180SGuillem JoverRules-Requires-Root: no 2105e73758bSMasahiro YamadaBuild-Depends: debhelper-compat (= 12) 21182a1978dSMasahiro YamadaBuild-Depends-Arch: bc, bison, flex, 212e2c31822SMasahiro Yamada gcc-${host_gnu} <!pkg.${sourcename}.nokernelheaders>, 213*657f96cbSWangYuli kmod, libdw-dev:native, libelf-dev:native, 214e2c31822SMasahiro Yamada libssl-dev:native, libssl-dev <!pkg.${sourcename}.nokernelheaders>, 2156b1fabceSMasahiro Yamada python3:native, rsync 21616a122c7SAlexander A. KlimovHomepage: https://www.kernel.org/ 217b41d920aSRiku Voipio 2181c3107ecSMasahiro YamadaPackage: $packagename-${KERNELRELEASE} 219b41d920aSRiku VoipioArchitecture: $debarch 2201c3107ecSMasahiro YamadaDescription: Linux kernel, version ${KERNELRELEASE} 221b41d920aSRiku Voipio This package contains the Linux kernel, modules and corresponding other 2221c3107ecSMasahiro Yamada files, version: ${KERNELRELEASE}. 22336862e14SMasahiro YamadaEOF 22436862e14SMasahiro Yamada 22536862e14SMasahiro Yamadaif [ "${SRCARCH}" != um ]; then 22636862e14SMasahiro Yamadacat <<EOF >> debian/control 227b41d920aSRiku Voipio 228b41d920aSRiku VoipioPackage: linux-libc-dev 229b41d920aSRiku VoipioSection: devel 230b41d920aSRiku VoipioProvides: linux-kernel-headers 231b41d920aSRiku VoipioArchitecture: $debarch 232b41d920aSRiku VoipioDescription: Linux support headers for userspace development 233b41d920aSRiku Voipio This package provides userspaces headers from the Linux kernel. These headers 234b41d920aSRiku Voipio are used by the installed headers for GNU glibc and other system libraries. 2355a464217SCedric HombourgerMulti-Arch: same 236d9dac147SReinhard KarcherEOF 237d9dac147SReinhard Karcher 238bac977cbSMasahiro Yamadaif is_enabled CONFIG_MODULES; then 239bac977cbSMasahiro Yamadacat <<EOF >> debian/control 240bac977cbSMasahiro Yamada 2411c3107ecSMasahiro YamadaPackage: linux-headers-${KERNELRELEASE} 242bac977cbSMasahiro YamadaArchitecture: $debarch 243e2c31822SMasahiro YamadaBuild-Profiles: <!pkg.${sourcename}.nokernelheaders> 2441c3107ecSMasahiro YamadaDescription: Linux kernel headers for ${KERNELRELEASE} on $debarch 2451c3107ecSMasahiro Yamada This package provides kernel header files for ${KERNELRELEASE} on $debarch 246bac977cbSMasahiro Yamada . 247bac977cbSMasahiro Yamada This is useful for people who need to build external modules 248bac977cbSMasahiro YamadaEOF 249bac977cbSMasahiro Yamadafi 25036862e14SMasahiro Yamadafi 251bac977cbSMasahiro Yamada 252d9dac147SReinhard Karcherif is_enabled CONFIG_DEBUG_INFO; then 253d9dac147SReinhard Karchercat <<EOF >> debian/control 254b41d920aSRiku Voipio 2551c3107ecSMasahiro YamadaPackage: linux-image-${KERNELRELEASE}-dbg 256b41d920aSRiku VoipioSection: debug 257b41d920aSRiku VoipioArchitecture: $debarch 2582ad7126cSMasahiro YamadaBuild-Profiles: <!pkg.${sourcename}.nokerneldbg> 2591c3107ecSMasahiro YamadaDescription: Linux kernel debugging symbols for ${KERNELRELEASE} 260b41d920aSRiku Voipio This package will come in handy if you need to debug the kernel. It provides 261b41d920aSRiku Voipio all the necessary debug symbols for the kernel and its modules. 262b41d920aSRiku VoipioEOF 263d9dac147SReinhard Karcherfi 264b41d920aSRiku Voipio 265d9287ea8SMasahiro Yamadacat <<EOF > debian/rules.vars 266d9287ea8SMasahiro YamadaARCH := ${ARCH} 267d9287ea8SMasahiro YamadaKERNELRELEASE := ${KERNELRELEASE} 268b41d920aSRiku VoipioEOF 269d9287ea8SMasahiro Yamada 2709c65810cSMasahiro Yamadacp "${srctree}/scripts/package/debian/copyright" debian/ 271d9287ea8SMasahiro Yamadacp "${srctree}/scripts/package/debian/rules" debian/ 272b41d920aSRiku Voipio 273b41d920aSRiku Voipioexit 0 274