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