summaryrefslogtreecommitdiff
path: root/sys-kernel/linux/linux-5.15.13-r1.ebuild
blob: b0483f6844f430adba4aa3a6e243fb0ddbf8c668 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
# Copyright 1999-2017 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2

EAPI=6

VER="${PV%-r*}"
REV="r${PV##*-r}"

DESCRIPTION="Linux kernel"
HOMEPAGE="http://kernel.org/"
SRC_URI="https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/snapshot/linux-${VER}.tar.gz -> ${P}.tar.gz"
S="${WORKDIR}/linux-${VER}"

LICENSE="GPLv2"
SLOT="${PV}"
KEYWORDS="amd64 ~x86"
IUSE="amd intel initramfs ucode"

RDEPEND="initramfs? ( sys-boot/myinitramfs )"
DEPEND="
	sys-devel/bc
	dev-libs/elfutils
	dev-util/pahole
	app-arch/cpio
"

src_configure() {
	# Fix ARCH variable
	[ "$ARCH" = "amd64" ] && ARCH="x86"

	"${FILESDIR}"/config_prepare.sh $(usev amd) $(usev intel) \
		|| die "Configuration application failed"
}

src_install() {
	emake modules_install INSTALL_MOD_PATH="${D}"
	for dir in "build" "source"; do
		rm "${D}/lib/modules/${PV}/$dir"
		ln -sf "../../../usr/src/${P}" "${D}/lib/modules/${PV}/$dir"
	done

	dodir /boot
	insinto /boot
	newins "${S}/arch/$ARCH/boot/bzImage" "bzlinux-${PV}"

	# Package source (kind of annoying because of some packages expecting it)
	emake clean
	dodir /usr/src
	cp -a "${S}" "${D}/usr/src/${P}"
}

# Link /usr/src/linux to newest kernel
src_link() {
	(
	cd "${ROOT}/usr/src"
	rm -f linux
	ln -s $(ls | grep "linux-" | sort | tail -1) linux
	)
}

sysfile() {
	local cfgs=(
		"/boot/syslinux.cfg"
		"/boot/syslinux/syslinux.cfg"
		"/boot/EFI/BOOT/syslinux.cfg"
		"/boot/extlinux.conf"
	)
	for cfg in "${cfgs[@]}"; do
		if [ -f "${ROOT}${cfg}" ]; then
			echo "${ROOT}${cfg}"
			return 0
		fi
	done
	eerror "Can't locate syslinux configuration!"
}

pkg_postinst() {
	# Add label to syslinux config if there is non yet
	local syslinux initrd args
	local syslinux="$(sysfile)"
	if ! grep -q "^LABEL gentoo-${PV}$" "${syslinux}"; then
		if $(use initramfs); then
			if $(use ucode); then
				if $(use intel); then
					initrd="\tINITRD /intel-uc.img,/initramfs-gentoo\n"
				else
					initrd="\tINITRD /ucode.cpio,/initramfs-gentoo\n"
				fi
			else
				initrd="\tINITRD /initramfs-gentoo\n"
			fi
		fi
		args="$(grep -E "^# ARGS: " "${syslinux}" | sed 's/^# ARGS: //')"
		if [ -n "$args" ]; then
			sed -i "/^## Dynamic labels ##$/a LABEL gentoo-${PV}\n\tMENU LABEL Gentoo ${PV}\n\tLINUX /bzlinux-${PV}\n\tAPPEND ${args}\n$initrd" "${syslinux}" || eerror "Adding label to syslinux configuration failed!"
			sed -i "/^## Dynamic recovery labels ##$/a LABEL gentoo-${PV}-recovery\n\tMENU LABEL Gentoo ${PV} - Recovery\n\tLINUX /bzlinux-${PV}\n\tAPPEND ${args} recovery\n$initrd" "${syslinux}" || eerror "Adding recovery label to syslinux configuration failed!"
		else
			eerror "Adding label to syslinux configuration failed as there are no arguments"
		fi
	fi

	src_link
}

pkg_prerm() {
	# Remove label from syslinux config
	local syslinux="$(sysfile)"
	sed -i "/^LABEL gentoo-${PV}\(\|-recovery\)$/,/^$/d" "${syslinux}" || eerror "Removing label from syslinux fonfiguration failed!"
}

pkg_postrm() {
	# Remove any residue files
	rm -rf "/usr/src/${P}" "/lib/modules/${PV}"

	src_link
}