1eda14cbcSMatt Macy#!/usr/bin/env bash 2*61145dc2SMartin Matuska# SPDX-License-Identifier: MIT 3bb2d13b6SMartin Matuska# shellcheck disable=SC2086,SC2295 4eda14cbcSMatt Macy 5eda14cbcSMatt Macy# kmodtool - Helper script for building kernel module RPMs 6eda14cbcSMatt Macy# Copyright (c) 2003-2012 Ville Skyttä <ville.skytta@iki.fi>, 7eda14cbcSMatt Macy# Thorsten Leemhuis <fedora@leemhuis.info> 8eda14cbcSMatt Macy# Nicolas Chauvet <kwizart@gmail.com> 9eda14cbcSMatt Macy# 10eda14cbcSMatt Macy# Permission is hereby granted, free of charge, to any person obtaining 11eda14cbcSMatt Macy# a copy of this software and associated documentation files (the 12eda14cbcSMatt Macy# "Software"), to deal in the Software without restriction, including 13eda14cbcSMatt Macy# without limitation the rights to use, copy, modify, merge, publish, 14eda14cbcSMatt Macy# distribute, sublicense, and/or sell copies of the Software, and to 15eda14cbcSMatt Macy# permit persons to whom the Software is furnished to do so, subject to 16eda14cbcSMatt Macy# the following conditions: 17eda14cbcSMatt Macy# 18eda14cbcSMatt Macy# The above copyright notice and this permission notice shall be 19eda14cbcSMatt Macy# included in all copies or substantial portions of the Software. 20eda14cbcSMatt Macy# 21eda14cbcSMatt Macy# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 22eda14cbcSMatt Macy# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 23eda14cbcSMatt Macy# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 24eda14cbcSMatt Macy# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 25eda14cbcSMatt Macy# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 26eda14cbcSMatt Macy# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 27eda14cbcSMatt Macy# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 28eda14cbcSMatt Macy 29eda14cbcSMatt Macyshopt -s extglob 30eda14cbcSMatt Macy 31eda14cbcSMatt Macymyprog="kmodtool-${repo}" 32eda14cbcSMatt Macymyver="0.12.1" 33eda14cbcSMatt Macy 34eda14cbcSMatt Macykmodname= 35eda14cbcSMatt Macybuild_kernels="current" 36eda14cbcSMatt Macykernels_known_variants= 37eda14cbcSMatt Macykernel_versions= 38eda14cbcSMatt Macykernel_versions_to_build_for= 39eda14cbcSMatt Macyprefix= 40eda14cbcSMatt Macyfilterfile= 41eda14cbcSMatt Macytarget= 42eda14cbcSMatt Macybuildroot= 4316038816SMartin Matuskadashvariant= 44eda14cbcSMatt Macy 45eda14cbcSMatt Macyerror_out() 46eda14cbcSMatt Macy{ 47eda14cbcSMatt Macy local errorlevel=${1} 48eda14cbcSMatt Macy shift 4916038816SMartin Matuska echo "Error: $*" >&2 50eda14cbcSMatt Macy # the next line is not multi-line safe -- not needed *yet* 5116038816SMartin Matuska echo "%global kmodtool_check echo \"kmodtool error: $*\"; exit ${errorlevel};" 5216038816SMartin Matuska exit "${errorlevel}" 53eda14cbcSMatt Macy} 54eda14cbcSMatt Macy 55eda14cbcSMatt Macyprint_rpmtemplate_header() 56eda14cbcSMatt Macy{ 57eda14cbcSMatt Macy echo 58e92ffd9bSMartin Matuska echo "%global kmodinstdir_prefix ${prefix}/lib/modules/" 59e92ffd9bSMartin Matuska echo "%global kmodinstdir_postfix /extra/${kmodname}/" 60e92ffd9bSMartin Matuska echo "%global kernel_versions ${kernel_versions}" 61eda14cbcSMatt Macy echo 62eda14cbcSMatt Macy} 63eda14cbcSMatt Macy 64eda14cbcSMatt Macyprint_akmodtemplate () 65eda14cbcSMatt Macy{ 66eda14cbcSMatt Macy echo 67eda14cbcSMatt Macy cat <<EOF 68eda14cbcSMatt Macy 69eda14cbcSMatt Macy%global akmod_install mkdir -p \$RPM_BUILD_ROOT/%{_usrsrc}/akmods/; \\\ 70eda14cbcSMatt MacyLANG=C rpmbuild --define "_sourcedir %{_sourcedir}" \\\ 71eda14cbcSMatt Macy--define "_srcrpmdir \$RPM_BUILD_ROOT/%{_usrsrc}/akmods/" \\\ 72eda14cbcSMatt Macy-bs --nodeps %{_specdir}/%{name}.spec ; \\\ 73eda14cbcSMatt Macyln -s \$(ls \$RPM_BUILD_ROOT/%{_usrsrc}/akmods/) \$RPM_BUILD_ROOT/%{_usrsrc}/akmods/${kmodname}-kmod.latest 74eda14cbcSMatt Macy 75eda14cbcSMatt Macy%package -n akmod-${kmodname} 76eda14cbcSMatt MacySummary: Akmod package for ${kmodname} kernel module(s) 77eda14cbcSMatt MacyGroup: System Environment/Kernel 78eda14cbcSMatt MacyRequires: kmodtool 79eda14cbcSMatt MacyRequires: akmods 80eda14cbcSMatt Macy%{?AkmodsBuildRequires:Requires: %{AkmodsBuildRequires}} 81eda14cbcSMatt Macy# same requires and provides as a kmods package would have 82eda14cbcSMatt MacyRequires: ${kmodname}-kmod-common >= %{?epoch:%{epoch}:}%{version} 83eda14cbcSMatt MacyProvides: ${kmodname}-kmod = %{?epoch:%{epoch}:}%{version}-%{release} 84eda14cbcSMatt MacyEOF 85eda14cbcSMatt Macy 86eda14cbcSMatt Macy cat <<EOF 87eda14cbcSMatt Macy 88eda14cbcSMatt Macy%description -n akmod-${kmodname} 89eda14cbcSMatt MacyThis package provides the akmod package for the ${kmodname} kernel modules. 90eda14cbcSMatt Macy 91eda14cbcSMatt Macy%posttrans -n akmod-${kmodname} 92eda14cbcSMatt Macynohup ${prefix}/sbin/akmods --from-akmod-posttrans --akmod ${kmodname} &> /dev/null & 93eda14cbcSMatt Macy 94eda14cbcSMatt Macy%files -n akmod-${kmodname} 95eda14cbcSMatt Macy%defattr(-,root,root,-) 96eda14cbcSMatt Macy%{_usrsrc}/akmods/* 97eda14cbcSMatt Macy 98eda14cbcSMatt MacyEOF 99eda14cbcSMatt Macy} 100eda14cbcSMatt Macy 101eda14cbcSMatt Macyprint_akmodmeta () 102eda14cbcSMatt Macy{ 103eda14cbcSMatt Macy cat <<EOF 104eda14cbcSMatt Macy%package -n kmod-${kmodname} 105eda14cbcSMatt MacySummary: Metapackage which tracks in ${kmodname} kernel module for newest kernel${dashvariant} 106eda14cbcSMatt MacyGroup: System Environment/Kernel 107eda14cbcSMatt Macy 108eda14cbcSMatt MacyProvides: ${kmodname}-kmod = %{?epoch:%{epoch}:}%{version}-%{release} 109eda14cbcSMatt MacyProvides: kmod-${kmodname}-xen = %{?epoch:%{epoch}:}%{version}-%{release} 110eda14cbcSMatt MacyProvides: kmod-${kmodname}-smp = %{?epoch:%{epoch}:}%{version}-%{release} 111eda14cbcSMatt MacyProvides: kmod-${kmodname}-PAE = %{?epoch:%{epoch}:}%{version}-%{release} 112eda14cbcSMatt MacyRequires: akmod-${kmodname} = %{?epoch:%{epoch}:}%{version}-%{release} 113eda14cbcSMatt MacyEOF 114eda14cbcSMatt Macy 115eda14cbcSMatt Macycat <<EOF 116eda14cbcSMatt Macy 117eda14cbcSMatt Macy%description -n kmod-${kmodname}${dashvariant} 118eda14cbcSMatt MacyThis is a meta-package without payload which sole purpose is to require the 119eda14cbcSMatt Macy${kmodname} kernel module(s) for the newest kernel${dashvariant}, 120eda14cbcSMatt Macyto make sure you get it together with a new kernel. 121eda14cbcSMatt Macy 122eda14cbcSMatt Macy%files -n kmod-${kmodname}${dashvariant} 123eda14cbcSMatt Macy%defattr(644,root,root,755) 124eda14cbcSMatt MacyEOF 125eda14cbcSMatt Macy} 126eda14cbcSMatt Macy 127eda14cbcSMatt Macyprint_rpmtemplate_per_kmodpkg () 128eda14cbcSMatt Macy{ 129bb2d13b6SMartin Matuska if [[ "${1}" = "--custom" ]]; then 130eda14cbcSMatt Macy shift 131eda14cbcSMatt Macy local customkernel=true 132bb2d13b6SMartin Matuska elif [[ "${1}" = "--redhat" ]]; then 133eda14cbcSMatt Macy # this is needed for akmods 134eda14cbcSMatt Macy shift 135eda14cbcSMatt Macy local redhatkernel=true 136eda14cbcSMatt Macy fi 137eda14cbcSMatt Macy 138eda14cbcSMatt Macy local kernel_uname_r=${1} 139eda14cbcSMatt Macy local kernel_variant="${2:+-${2}}" 140eda14cbcSMatt Macy 141eda14cbcSMatt Macy # Detect depmod install location 142eda14cbcSMatt Macy local depmod_path=/sbin/depmod 143bb2d13b6SMartin Matuska if [[ ! -f "${depmod_path}" ]]; then 144eda14cbcSMatt Macy depmod_path=/usr/sbin/depmod 145eda14cbcSMatt Macy fi 146eda14cbcSMatt Macy 147eda14cbcSMatt Macy # first part 148eda14cbcSMatt Macy cat <<EOF 149eda14cbcSMatt Macy%package -n kmod-${kmodname}-${kernel_uname_r} 150eda14cbcSMatt MacySummary: ${kmodname} kernel module(s) for ${kernel_uname_r} 151eda14cbcSMatt MacyGroup: System Environment/Kernel 152eda14cbcSMatt MacyProvides: kernel-modules-for-kernel = ${kernel_uname_r} 153eda14cbcSMatt MacyProvides: kmod-${kmodname}-uname-r = ${kernel_uname_r} 154eda14cbcSMatt MacyProvides: ${kmodname}-kmod = %{?epoch:%{epoch}:}%{version}-%{release} 155eda14cbcSMatt MacyRequires: ${kmodname}-kmod-common >= %{?epoch:%{epoch}:}%{version} 156eda14cbcSMatt Macy 157eda14cbcSMatt Macy%if 0%{?rhel} == 6 || 0%{?centos} == 6 158eda14cbcSMatt MacyRequires(post): module-init-tools 159eda14cbcSMatt MacyRequires(postun): module-init-tools 160eda14cbcSMatt Macy%else 161eda14cbcSMatt MacyRequires(post): kmod 162eda14cbcSMatt MacyRequires(postun): kmod 163eda14cbcSMatt Macy%endif 164eda14cbcSMatt MacyEOF 165eda14cbcSMatt Macy 166eda14cbcSMatt Macy # second part 167bb2d13b6SMartin Matuska if [[ -z "${customkernel}" ]]; then 168eda14cbcSMatt Macy cat <<EOF 169eda14cbcSMatt MacyRequires: kernel-uname-r = ${kernel_uname_r} 170eda14cbcSMatt MacyBuildRequires: kernel-devel-uname-r = ${kernel_uname_r} 171eda14cbcSMatt Macy%{?KmodsRequires:Requires: %{KmodsRequires}-uname-r = ${kernel_uname_r}} 172eda14cbcSMatt Macy%{?KmodsRequires:BuildRequires: %{KmodsRequires}-uname-r = ${kernel_uname_r}} 173eda14cbcSMatt Macy%post -n kmod-${kmodname}-${kernel_uname_r} 174bb2d13b6SMartin Matuskaif [[ -f "/boot/System.map-${kernel_uname_r}" ]]; then 175eda14cbcSMatt Macy ${prefix}${depmod_path} -aeF /boot/System.map-${kernel_uname_r} ${kernel_uname_r} > /dev/null || : 176bb2d13b6SMartin Matuskaelif [[ -f "/lib/modules/${kernel_uname_r}/System.map" ]]; then 17716038816SMartin Matuska ${prefix}${depmod_path} -aeF /lib/modules/${kernel_uname_r}/System.map ${kernel_uname_r} > /dev/null || : 17816038816SMartin Matuskaelse 17916038816SMartin Matuska ${prefix}${depmod_path} -ae ${kernel_uname_r} &> /dev/null || : 18016038816SMartin Matuskafi 181eda14cbcSMatt Macy%postun -n kmod-${kmodname}-${kernel_uname_r} 182bb2d13b6SMartin Matuskaif [[ -f "/boot/System.map-${kernel_uname_r}" ]]; then 183eda14cbcSMatt Macy ${prefix}${depmod_path} -aF /boot/System.map-${kernel_uname_r} ${kernel_uname_r} &> /dev/null || : 184bb2d13b6SMartin Matuskaelif [[ -f "/lib/modules/${kernel_uname_r}/System.map" ]]; then 18516038816SMartin Matuska ${prefix}${depmod_path} -aF /lib/modules/${kernel_uname_r}/System.map ${kernel_uname_r} &> /dev/null || : 18616038816SMartin Matuskaelse 18716038816SMartin Matuska ${prefix}${depmod_path} -a ${kernel_uname_r} &> /dev/null || : 18816038816SMartin Matuskafi 189eda14cbcSMatt Macy 190eda14cbcSMatt MacyEOF 191eda14cbcSMatt Macy else 192eda14cbcSMatt Macy cat <<EOF 193eda14cbcSMatt Macy%post -n kmod-${kmodname}-${kernel_uname_r} 194e92ffd9bSMartin Matuska[ "\$(uname -r)" = "${kernel_uname_r}" ] && ${prefix}${depmod_path} -a > /dev/null || : 195eda14cbcSMatt Macy%postun -n kmod-${kmodname}-${kernel_uname_r} 196e92ffd9bSMartin Matuska[ "\$(uname -r)" = "${kernel_uname_r}" ] && ${prefix}${depmod_path} -a > /dev/null || : 197eda14cbcSMatt Macy 198eda14cbcSMatt MacyEOF 199eda14cbcSMatt Macy fi 200eda14cbcSMatt Macy 201eda14cbcSMatt Macy # third part 202eda14cbcSMatt Macy cat <<EOF 203eda14cbcSMatt Macy%description -n kmod-${kmodname}-${kernel_uname_r} 204eda14cbcSMatt MacyThis package provides the ${kmodname} kernel modules built for the Linux 205eda14cbcSMatt Macykernel ${kernel_uname_r} for the %{_target_cpu} family of processors. 206eda14cbcSMatt Macy%files -n kmod-${kmodname}-${kernel_uname_r} 207eda14cbcSMatt Macy%defattr(644,root,root,755) 208eda14cbcSMatt Macy%dir $prefix/lib/modules/${kernel_uname_r}/extra 209eda14cbcSMatt Macy${prefix}/lib/modules/${kernel_uname_r}/extra/${kmodname}/ 210eda14cbcSMatt Macy 211eda14cbcSMatt Macy 212eda14cbcSMatt MacyEOF 213eda14cbcSMatt Macy} 214eda14cbcSMatt Macy 215eda14cbcSMatt Macyprint_rpmtemplate_kmoddevelpkg () 216eda14cbcSMatt Macy{ 217bb2d13b6SMartin Matuska if [[ "${1}" = "--custom" ]]; then 218eda14cbcSMatt Macy shift 219eda14cbcSMatt Macy local customkernel=true 220bb2d13b6SMartin Matuska elif [[ "${1}" = "--redhat" ]]; then 221eda14cbcSMatt Macy shift 222eda14cbcSMatt Macy local redhatkernel=true 223eda14cbcSMatt Macy fi 224eda14cbcSMatt Macy 225eda14cbcSMatt Macy local kernel_uname_r=${1} 226eda14cbcSMatt Macy 227eda14cbcSMatt Macy cat <<EOF 228eda14cbcSMatt Macy%package -n kmod-${kmodname}-devel 229eda14cbcSMatt MacySummary: ${kmodname} kernel module(s) devel common 230eda14cbcSMatt MacyGroup: System Environment/Kernel 231eda14cbcSMatt MacyProvides: ${kmodname}-devel-kmod = %{?epoch:%{epoch}:}%{version}-%{release} 232eda14cbcSMatt MacyEOF 233eda14cbcSMatt Macy 234bb2d13b6SMartin Matuska if [[ -z "${customkernel}" ]] && [[ -z "${redhatkernel}" ]]; then 235eda14cbcSMatt Macy echo "Requires: kmod-${kmodname}-devel-${kernel_uname_r} >= %{?epoch:%{epoch}:}%{version}-%{release}" 236eda14cbcSMatt Macy fi 237eda14cbcSMatt Macy 238eda14cbcSMatt Macy cat <<EOF 239eda14cbcSMatt Macy%description -n kmod-${kmodname}-devel 240eda14cbcSMatt MacyThis package provides the common header files to build kernel modules 241eda14cbcSMatt Macywhich depend on the ${kmodname} kernel module. It may optionally require 242eda14cbcSMatt Macythe ${kmodname}-devel-<kernel> objects for the newest kernel. 243eda14cbcSMatt Macy 244eda14cbcSMatt Macy%files -n kmod-${kmodname}-devel 245eda14cbcSMatt Macy%defattr(644,root,root,755) 246eda14cbcSMatt Macy%{_usrsrc}/${kmodname}-%{version} 247eda14cbcSMatt MacyEOF 248eda14cbcSMatt Macy 249eda14cbcSMatt Macy for kernel in ${1}; do 250eda14cbcSMatt Macy local kernel_uname_r=${kernel} 251eda14cbcSMatt Macy echo "%exclude %{_usrsrc}/${kmodname}-%{version}/${kernel_uname_r}" 252eda14cbcSMatt Macy done 253eda14cbcSMatt Macy 254eda14cbcSMatt Macy echo 255eda14cbcSMatt Macy echo 256eda14cbcSMatt Macy} 257eda14cbcSMatt Macy 258eda14cbcSMatt Macyprint_rpmtemplate_per_kmoddevelpkg () 259eda14cbcSMatt Macy{ 260bb2d13b6SMartin Matuska if [[ "${1}" = "--custom" ]]; then 261eda14cbcSMatt Macy shift 262eda14cbcSMatt Macy local customkernel=true 263bb2d13b6SMartin Matuska elif [[ "${1}" = "--redhat" ]]; then 264eda14cbcSMatt Macy # this is needed for akmods 265eda14cbcSMatt Macy shift 266eda14cbcSMatt Macy local redhatkernel=true 267eda14cbcSMatt Macy fi 268eda14cbcSMatt Macy 269eda14cbcSMatt Macy local kernel_uname_r=${1} 270eda14cbcSMatt Macy local kernel_variant="${2:+-${2}}" 271eda14cbcSMatt Macy 272eda14cbcSMatt Macy # first part 273eda14cbcSMatt Macy cat <<EOF 274eda14cbcSMatt Macy%package -n kmod-${kmodname}-devel-${kernel_uname_r} 275eda14cbcSMatt MacySummary: ${kmodname} kernel module(s) devel for ${kernel_uname_r} 276eda14cbcSMatt MacyGroup: System Environment/Kernel 277eda14cbcSMatt MacyProvides: kernel-objects-for-kernel = ${kernel_uname_r} 278eda14cbcSMatt MacyProvides: ${kmodname}-devel-kmod = %{?epoch:%{epoch}:}%{version}-%{release} 279eda14cbcSMatt MacyProvides: kmod-${kmodname}-devel-uname-r = ${kernel_uname_r} 280eda14cbcSMatt MacyEOF 281eda14cbcSMatt Macy 282eda14cbcSMatt Macy # second part 283bb2d13b6SMartin Matuska if [[ -z "${customkernel}" ]]; then 284eda14cbcSMatt Macy cat <<EOF 285eda14cbcSMatt MacyRequires: kernel-devel-uname-r = ${kernel_uname_r} 286eda14cbcSMatt MacyBuildRequires: kernel-devel-uname-r = ${kernel_uname_r} 287eda14cbcSMatt Macy%{?KmodsDevelRequires:Requires: %{KmodsDevelRequires}-uname-r = ${kernel_uname_r}} 288eda14cbcSMatt Macy%{?KmodsDevelRequires:BuildRequires: %{KmodsDevelRequires}-uname-r = ${kernel_uname_r}} 289eda14cbcSMatt MacyEOF 290eda14cbcSMatt Macy fi 291eda14cbcSMatt Macy 292eda14cbcSMatt Macy # third part 293eda14cbcSMatt Macy cat <<EOF 294eda14cbcSMatt Macy%description -n kmod-${kmodname}-devel-${kernel_uname_r} 295eda14cbcSMatt MacyThis package provides objects and symbols required to build kernel modules 296eda14cbcSMatt Macywhich depend on the ${kmodname} kernel modules built for the Linux 297eda14cbcSMatt Macykernel ${kernel_uname_r} for the %{_target_cpu} family of processors. 298eda14cbcSMatt Macy%files -n kmod-${kmodname}-devel-${kernel_uname_r} 299eda14cbcSMatt Macy%defattr(644,root,root,755) 300eda14cbcSMatt Macy%{_usrsrc}/${kmodname}-%{version}/${kernel_uname_r} 301eda14cbcSMatt MacyEOF 302eda14cbcSMatt Macy} 303eda14cbcSMatt Macy 304eda14cbcSMatt Macyprint_rpmtemplate_kmodmetapkg () 305eda14cbcSMatt Macy{ 306eda14cbcSMatt Macy local kernel_uname_r=${1} 307eda14cbcSMatt Macy local kernel_variant="${2:+-${2}}" 308eda14cbcSMatt Macy 309eda14cbcSMatt Macy cat <<EOF 310eda14cbcSMatt Macy%package -n kmod-${kmodname}${kernel_variant} 311eda14cbcSMatt MacySummary: Metapackage which tracks in ${kmodname} kernel module for newest kernel${kernel_variant} 312eda14cbcSMatt MacyGroup: System Environment/Kernel 313eda14cbcSMatt Macy 314eda14cbcSMatt MacyProvides: ${kmodname}-kmod = %{?epoch:%{epoch}:}%{version}-%{release} 315eda14cbcSMatt MacyRequires: kmod-${kmodname}-${kernel_uname_r} >= %{?epoch:%{epoch}:}%{version}-%{release} 316eda14cbcSMatt Macy%{?KmodsMetaRequires:Requires: %{?KmodsMetaRequires}} 317eda14cbcSMatt MacyEOF 318eda14cbcSMatt Macy 319eda14cbcSMatt Macy cat <<EOF 320eda14cbcSMatt Macy 321eda14cbcSMatt Macy%description -n kmod-${kmodname}${kernel_variant} 322eda14cbcSMatt MacyThis is a meta-package without payload which sole purpose is to require the 323eda14cbcSMatt Macy${kmodname} kernel module(s) for the newest kernel${kernel_variant}. 324eda14cbcSMatt Macyto make sure you get it together with a new kernel. 325eda14cbcSMatt Macy 326eda14cbcSMatt Macy%files -n kmod-${kmodname}${kernel_variant} 327eda14cbcSMatt Macy%defattr(644,root,root,755) 328eda14cbcSMatt Macy 329eda14cbcSMatt Macy 330eda14cbcSMatt MacyEOF 331eda14cbcSMatt Macy} 332eda14cbcSMatt Macy 333eda14cbcSMatt Macyprint_customrpmtemplate () 334eda14cbcSMatt Macy{ 335eda14cbcSMatt Macy for kernel in ${1} 336eda14cbcSMatt Macy do 3372a58b312SMartin Matuska if [[ -e "${prefix}/lib/modules/${kernel}/build/Makefile" ]]; then 3382a58b312SMartin Matuska # likely a user-build-kernel with available buildfiles 3392a58b312SMartin Matuska # fixme: we should check if uname from Makefile is the same as ${kernel} 3402a58b312SMartin Matuska 3412a58b312SMartin Matuska kernel_versions="${kernel_versions}${kernel}___${prefix}/lib/modules/${kernel}/build/ " 3422a58b312SMartin Matuska print_rpmtemplate_per_kmodpkg --custom "${kernel}" 3432a58b312SMartin Matuska 3442a58b312SMartin Matuska # create development package 3452a58b312SMartin Matuska if [[ -n "${devel}" ]]; then 3462a58b312SMartin Matuska # create devel package including common headers 3472a58b312SMartin Matuska print_rpmtemplate_kmoddevelpkg --custom "${kernel}" 3482a58b312SMartin Matuska 3492a58b312SMartin Matuska # create devel package 3502a58b312SMartin Matuska print_rpmtemplate_per_kmoddevelpkg --custom "${kernel}" 3512a58b312SMartin Matuska fi 3522a58b312SMartin Matuska elif [[ -e "${buildroot}/usr/src/kernels/${kernel}" ]]; then 353eda14cbcSMatt Macy # this looks like a Fedora/RH kernel -- print a normal template (which includes the proper BR) and be happy :) 354eda14cbcSMatt Macy kernel_versions="${kernel_versions}${kernel}___${buildroot}%{_usrsrc}/kernels/${kernel} " 355eda14cbcSMatt Macy 356eda14cbcSMatt Macy # parse kernel versions string and print template 357eda14cbcSMatt Macy local kernel_verrelarch=${kernel%%${kernels_known_variants}} 358eda14cbcSMatt Macy print_rpmtemplate_per_kmodpkg --redhat ${kernel} ${kernel##${kernel_verrelarch}} 359eda14cbcSMatt Macy 360eda14cbcSMatt Macy # create development package 361bb2d13b6SMartin Matuska if [[ -n "${devel}" ]]; then 362eda14cbcSMatt Macy # create devel package including common headers 363eda14cbcSMatt Macy print_rpmtemplate_kmoddevelpkg --redhat ${kernel} ${kernel##${kernel_verrelarch}} 364eda14cbcSMatt Macy 365eda14cbcSMatt Macy # create devel package 366eda14cbcSMatt Macy print_rpmtemplate_per_kmoddevelpkg --redhat ${kernel} ${kernel##${kernel_verrelarch}} 367eda14cbcSMatt Macy fi 368eda14cbcSMatt Macy else 369eda14cbcSMatt Macy error_out 2 "Don't know how to handle ${kernel} -- ${prefix}/lib/modules/${kernel}/build/Makefile not found" 370eda14cbcSMatt Macy fi 371eda14cbcSMatt Macy done 372eda14cbcSMatt Macy 373eda14cbcSMatt Macy # well, it's no header anymore, but who cares ;-) 374eda14cbcSMatt Macy print_rpmtemplate_header 375eda14cbcSMatt Macy} 376eda14cbcSMatt Macy 377eda14cbcSMatt Macy 378eda14cbcSMatt Macyprint_rpmtemplate () 379eda14cbcSMatt Macy{ 380eda14cbcSMatt Macy # create kernel_versions var 381eda14cbcSMatt Macy for kernel_version in ${kernel_versions_to_build_for} 382eda14cbcSMatt Macy do 383eda14cbcSMatt Macy kernel_versions="${kernel_versions}${kernel_version}___%{_usrsrc}/kernels/${kernel_version} " 384eda14cbcSMatt Macy done 385eda14cbcSMatt Macy 386eda14cbcSMatt Macy # and print it and some other required stuff as macro 387eda14cbcSMatt Macy print_rpmtemplate_header 388eda14cbcSMatt Macy 389eda14cbcSMatt Macy # now print the packages 390eda14cbcSMatt Macy for kernel in ${kernel_versions_to_build_for} ; do 391eda14cbcSMatt Macy 392eda14cbcSMatt Macy local kernel_verrelarch=${kernel%%${kernels_known_variants}} 393eda14cbcSMatt Macy 394eda14cbcSMatt Macy # create metapackage 395e92ffd9bSMartin Matuska print_rpmtemplate_kmodmetapkg "${kernel}" "${kernel##${kernel_verrelarch}}" 396eda14cbcSMatt Macy 397eda14cbcSMatt Macy # create package 398e92ffd9bSMartin Matuska print_rpmtemplate_per_kmodpkg "${kernel}" "${kernel##${kernel_verrelarch}}" 399eda14cbcSMatt Macy 400bb2d13b6SMartin Matuska if [[ -n "${devel}" ]]; then 401eda14cbcSMatt Macy # create devel package including common headers 402e92ffd9bSMartin Matuska print_rpmtemplate_kmoddevelpkg "${kernel}" "${kernel##${kernel_verrelarch}}" 403eda14cbcSMatt Macy 404eda14cbcSMatt Macy # create devel package 405e92ffd9bSMartin Matuska print_rpmtemplate_per_kmoddevelpkg "${kernel}" "${kernel##${kernel_verrelarch}}" 406eda14cbcSMatt Macy fi 407eda14cbcSMatt Macy done 408eda14cbcSMatt Macy} 409eda14cbcSMatt Macy 410eda14cbcSMatt Macymyprog_help () 411eda14cbcSMatt Macy{ 412dae17134SMartin Matuska echo "Usage: ${0##*/} [OPTIONS]" 413e92ffd9bSMartin Matuska echo 414e92ffd9bSMartin Matuska echo "Creates a template to be used during kmod building" 415e92ffd9bSMartin Matuska echo 416e92ffd9bSMartin Matuska echo "Available options:" 417eda14cbcSMatt Macy echo " --filterfile <file> -- filter the results with grep --file <file>" 418eda14cbcSMatt Macy echo " --for-kernels <list> -- created templates only for these kernels" 419eda14cbcSMatt Macy echo " --kmodname <file> -- name of the kmod (required)" 420eda14cbcSMatt Macy echo " --devel -- make kmod-devel package" 421eda14cbcSMatt Macy echo " --noakmod -- no akmod package" 422eda14cbcSMatt Macy echo " --repo <name> -- use buildsys-build-<name>-kerneldevpkgs" 423eda14cbcSMatt Macy echo " --target <arch> -- target-arch (required)" 424eda14cbcSMatt Macy echo " --buildroot <dir> -- Build root (place to look for build files)" 425eda14cbcSMatt Macy} 426eda14cbcSMatt Macy 427bb2d13b6SMartin Matuskawhile [[ -n "${1}" ]] ; do 428eda14cbcSMatt Macy case "${1}" in 429eda14cbcSMatt Macy --filterfile) 430eda14cbcSMatt Macy shift 431bb2d13b6SMartin Matuska if [[ -z "${1}" ]] ; then 432eda14cbcSMatt Macy error_out 2 "Please provide path to a filter-file together with --filterfile" >&2 433bb2d13b6SMartin Matuska elif [[ ! -e "${1}" ]]; then 434eda14cbcSMatt Macy error_out 2 "Filterfile ${1} not found" >&2 435eda14cbcSMatt Macy fi 436eda14cbcSMatt Macy filterfile="${1}" 437eda14cbcSMatt Macy shift 438eda14cbcSMatt Macy ;; 439eda14cbcSMatt Macy --kmodname) 440eda14cbcSMatt Macy shift 441bb2d13b6SMartin Matuska if [[ -z "${1}" ]] ; then 442eda14cbcSMatt Macy error_out 2 "Please provide the name of the kmod together with --kmodname" >&2 443eda14cbcSMatt Macy fi 444eda14cbcSMatt Macy # strip pending -kmod 445eda14cbcSMatt Macy kmodname="${1%%-kmod}" 446eda14cbcSMatt Macy shift 447eda14cbcSMatt Macy ;; 448eda14cbcSMatt Macy --devel) 449eda14cbcSMatt Macy shift 450eda14cbcSMatt Macy devel="true" 451eda14cbcSMatt Macy ;; 452eda14cbcSMatt Macy --prefix) 453eda14cbcSMatt Macy shift 454bb2d13b6SMartin Matuska if [[ -z "${1}" ]] ; then 455eda14cbcSMatt Macy error_out 2 "Please provide a prefix with --prefix" >&2 456eda14cbcSMatt Macy fi 457eda14cbcSMatt Macy prefix="${1}" 458eda14cbcSMatt Macy shift 459eda14cbcSMatt Macy ;; 460eda14cbcSMatt Macy --repo) 461eda14cbcSMatt Macy shift 462bb2d13b6SMartin Matuska if [[ -z "${1}" ]] ; then 463eda14cbcSMatt Macy error_out 2 "Please provide the name of the repo together with --repo" >&2 464eda14cbcSMatt Macy fi 465eda14cbcSMatt Macy repo=${1} 466eda14cbcSMatt Macy shift 467eda14cbcSMatt Macy ;; 468eda14cbcSMatt Macy --for-kernels) 469eda14cbcSMatt Macy shift 470bb2d13b6SMartin Matuska if [[ -z "${1}" ]] ; then 471eda14cbcSMatt Macy error_out 2 "Please provide the name of the kmod together with --kmodname" >&2 472eda14cbcSMatt Macy fi 473eda14cbcSMatt Macy for_kernels="${1}" 474eda14cbcSMatt Macy shift 475eda14cbcSMatt Macy ;; 476eda14cbcSMatt Macy --noakmod) 477eda14cbcSMatt Macy shift 478eda14cbcSMatt Macy noakmod="true" 479eda14cbcSMatt Macy ;; 480eda14cbcSMatt Macy --target) 481eda14cbcSMatt Macy shift 482eda14cbcSMatt Macy target="${1}" 483eda14cbcSMatt Macy shift 484eda14cbcSMatt Macy ;; 485eda14cbcSMatt Macy --akmod) 486eda14cbcSMatt Macy shift 487eda14cbcSMatt Macy build_kernels="akmod" 488eda14cbcSMatt Macy ;; 489eda14cbcSMatt Macy --newest) 490eda14cbcSMatt Macy shift 491eda14cbcSMatt Macy build_kernels="newest" 492eda14cbcSMatt Macy ;; 493eda14cbcSMatt Macy --current) 494eda14cbcSMatt Macy shift 495eda14cbcSMatt Macy build_kernels="current" 496eda14cbcSMatt Macy ;; 497eda14cbcSMatt Macy --buildroot) 498eda14cbcSMatt Macy shift 499eda14cbcSMatt Macy buildroot="${1}" 500eda14cbcSMatt Macy shift 501eda14cbcSMatt Macy ;; 502eda14cbcSMatt Macy --help) 503eda14cbcSMatt Macy myprog_help 504eda14cbcSMatt Macy exit 0 505eda14cbcSMatt Macy ;; 506eda14cbcSMatt Macy --version) 507eda14cbcSMatt Macy echo "${myprog} ${myver}" 508eda14cbcSMatt Macy exit 0 509eda14cbcSMatt Macy ;; 510eda14cbcSMatt Macy *) 511eda14cbcSMatt Macy echo "Error: Unknown option '${1}'." >&2 512eda14cbcSMatt Macy usage >&2 513eda14cbcSMatt Macy exit 2 514eda14cbcSMatt Macy ;; 515eda14cbcSMatt Macy esac 516eda14cbcSMatt Macydone 517eda14cbcSMatt Macy 518bb2d13b6SMartin Matuskaif [[ -e ./kmodtool-kernel-variants ]]; then 519eda14cbcSMatt Macy kernels_known_variants="$(cat ./kmodtool-kernel-variants)" 520bb2d13b6SMartin Matuskaelif [[ -e /usr/share/kmodtool/kernel-variants ]] ; then 521eda14cbcSMatt Macy kernels_known_variants="$(cat /usr/share/kmodtool/kernel-variants)" 522eda14cbcSMatt Macyelse 523eda14cbcSMatt Macy kernels_known_variants="@(smp?(-debug)|PAE?(-debug)|debug|kdump|xen|kirkwood|highbank|imx|omap|tegra)" 524eda14cbcSMatt Macyfi 525eda14cbcSMatt Macy 526eda14cbcSMatt Macy# general sanity checks 527bb2d13b6SMartin Matuskaif [[ -z "${target}" ]]; then 528eda14cbcSMatt Macy error_out 2 "please pass target arch with --target" 529bb2d13b6SMartin Matuskaelif [[ -z "${kmodname}" ]]; then 530eda14cbcSMatt Macy error_out 2 "please pass kmodname with --kmodname" 531bb2d13b6SMartin Matuskaelif [[ -z "${kernels_known_variants}" ]] ; then 532eda14cbcSMatt Macy error_out 2 "could not determine known variants" 533eda14cbcSMatt Macyfi 534eda14cbcSMatt Macy 535eda14cbcSMatt Macy# go 536bb2d13b6SMartin Matuskaif [[ -n "${for_kernels}" ]]; then 537eda14cbcSMatt Macy # this is easy: 538eda14cbcSMatt Macy print_customrpmtemplate "${for_kernels}" 539bb2d13b6SMartin Matuskaelif [[ "${build_kernels}" = "akmod" ]]; then 540eda14cbcSMatt Macy # do only a akmod package 541eda14cbcSMatt Macy print_akmodtemplate 542eda14cbcSMatt Macy print_akmodmeta 543eda14cbcSMatt Macyelse 544eda14cbcSMatt Macy # seems we are on out own to decide for which kernels to build 545eda14cbcSMatt Macy 546eda14cbcSMatt Macy # we need more sanity checks in this case 547bb2d13b6SMartin Matuska if [[ -z "${repo}" ]]; then 548eda14cbcSMatt Macy error_out 2 "please provide repo name with --repo" 549e92ffd9bSMartin Matuska elif ! command -v "buildsys-build-${repo}-kerneldevpkgs" > /dev/null 2>&1; then 550eda14cbcSMatt Macy error_out 2 "buildsys-build-${repo}-kerneldevpkgs not found" 551eda14cbcSMatt Macy fi 552eda14cbcSMatt Macy 553eda14cbcSMatt Macy # call buildsys-build-${repo}-kerneldevpkgs to get the list of kernels 554eda14cbcSMatt Macy cmdoptions="--target ${target}" 555eda14cbcSMatt Macy 556eda14cbcSMatt Macy # filterfile to filter list of kernels? 557bb2d13b6SMartin Matuska if [[ -n "${filterfile}" ]] ; then 558eda14cbcSMatt Macy cmdoptions="${cmdoptions} --filterfile ${filterfile}" 559eda14cbcSMatt Macy fi 560eda14cbcSMatt Macy 561e3aa18adSMartin Matuska kernel_versions_to_build_for=$(buildsys-build-${repo}-kerneldevpkgs "--${build_kernels}" ${cmdoptions}) || 562e92ffd9bSMartin Matuska error_out 2 "buildsys-build-${repo}-kerneldevpkgs failed: ${kernel_versions_to_build_for}" 563eda14cbcSMatt Macy 564bb2d13b6SMartin Matuska if [[ "${build_kernels}" = "current" ]] && [[ -z "${noakmod}" ]]; then 565eda14cbcSMatt Macy print_akmodtemplate 566eda14cbcSMatt Macy fi 567eda14cbcSMatt Macy 568eda14cbcSMatt Macy print_rpmtemplate 569eda14cbcSMatt Macyfi 570