You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
buildsys-build-rpmfusion/SOURCES/buildsys-build-rpmfusion-li...

304 lines
7.8 KiB

#!/bin/bash
#
# buildsys-build-list-kernels.sh - Helper script for building kernel module RPMs for Fedora
#
# Copyright (c) 2007 Thorsten Leemhuis <fedora@leemhuis.info>
# 2012 Nicolas Chauvet <kwizart@gmail.com>
#
# Permission is hereby granted, free of charge, to any person obtaining
# a copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
# without limitation the rights to use, copy, modify, merge, publish,
# distribute, sublicense, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so, subject to
# the following conditions:
#
# The above copyright notice and this permission notice shall be
# included in all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
shopt -s extglob
myver="0.2.1"
repo=rpmfusion
myprog="buildsys-build-${repo}-kerneldevpkgs"
supported_targetarchs="i686 x86_64 ppc ppc64 ppc64le ppc64p7 aarch64 armv5tel armv7l armv7hl s390x"
#This has changed in Fedora >= 20
variant_sep="+"
if [[ -e ./buildsys-build-${repo}-kerneldevpkgs-current ]]; then
prefix=./buildsys-build-${repo}-
else
prefix=/usr/share/buildsys-build-${repo}/
fi
requires=
filterfile=
target=$(uname -m)
#show_kernels="current"
bb_list_kernels_default()
{
echo ${1}
}
bb_list_kernels_i686()
{
bb_list_kernels_default ${1}
echo ${1}PAE
}
bb_list_kernels_x86_64()
{
bb_list_kernels_default ${1}
}
bb_list_kernels_ppc()
{
bb_list_kernels_default ${1}
echo ${1}smp
}
bb_list_kernels_ppc64()
{
bb_list_kernels_default ${1}
}
bb_list_kernels_ppc64le()
{
bb_list_kernels_default ${1}
}
bb_list_kernels_ppc64p7()
{
bb_list_kernels_default ${1}
}
bb_list_kernels_armv5tel()
{
bb_list_kernels_default ${1}
}
bb_list_kernels_armv7l()
{
bb_list_kernels_default ${1}
}
bb_list_kernels_armv7hl()
{
bb_list_kernels_default ${1}
echo ${1}lpae
}
bb_list_kernels_aarch64()
{
bb_list_kernels_default ${1}
}
bb_list_kernels_s390x()
{
bb_list_kernels_default ${1}
}
bb_list_kernels_sparc64()
{
bb_list_kernels_default ${1}
}
print_kernels ()
{
local this_target=${1}
local this_grepoptions=
local this_command=
local this_kernellistfiles="${prefix}kerneldevpkgs-current"
# error out if not defined
if (( $(stat -c%s "${this_kernellistfiles}") <= 1 )); then
echo "(no kernels defined)"
return 1
fi
# go
bb_list_kernels_${this_target} $(cat ${this_kernellistfiles}) | while read this_kernel; do
this_kernel_verrel=${this_kernel%%$kernels_known_variants}
this_kernel_variant=${this_kernel##$this_kernel_verrel}
if [[ "${requires}" ]] || [[ "${buildrequires}" ]]; then
if echo ${this_kernel} | grep -- 'default' &> /dev/null; then
if [[ "${requires}" ]]; then
echo "Requires: kernel${this_kernel_variant:+-${this_kernel_variant}}-devel%{_isa}"
fi
if [[ "${buildrequires}" ]]; then
echo "BuildRequires: kernel${this_kernel_variant:+-${this_kernel_variant}}-devel%{_isa}"
fi
else
if [[ "${requires}" ]]; then
echo "Requires: kernel-devel-uname-r = ${this_kernel_verrel}.${this_target}${this_kernel_variant:+${variant_sep}${this_kernel_variant}}"
fi
if [[ "${buildrequires}" ]]; then
echo "BuildRequires: kernel-devel-uname-r = ${this_kernel_verrel}.${this_target}${this_kernel_variant:+${variant_sep}${this_kernel_variant}}"
fi
fi
else
if echo ${this_kernel} | grep -- 'default' &> /dev/null; then
# fixme: there are better/reliable ways to get the latest version, but this should do in the
# buildsys, the only place where this normally is used; hardcoding the variants is also not ideal
if [[ "${this_kernel_variant}" ]]; then
# non-standard-kernel
local real_version="$(ls -1r /usr/src/kernels/ | grep -v -e "${this_kernel_variant}PAE$" | head -n1)"
real_version=${real_version%%.$kernels_known_variants}
else
# standard kernel
local real_version="$(ls -1r /usr/src/kernels/ | grep -v -e "PAE$" -e "smp$" | head -n1)"
fi
if [[ "${real_version}" ]]; then
echo ${real_version}${this_kernel_variant:+.${this_kernel_variant}}
else
# should we fail here?
echo unknown.${this_target}${this_kernel_variant:+.${this_kernel_variant}}
fi
else
echo ${this_kernel_verrel}.${this_target}${this_kernel_variant:+${variant_sep}${this_kernel_variant}}
fi
fi
done
}
print_requires ()
{
local this_kernel_verrel
local this_kernel_variant
for this_arch in ${supported_targetarchs}; do
echo $'\n'"%ifarch ${this_arch}"
print_kernels ${this_arch}
echo "%endif"
done
}
myprog_help ()
{
echo "Usage: $(basename ${0}) [OPTIONS]"
echo $'\n'"Prints a list of all avilable kernel-devel packages in the buildsys, as"$'\n'"defined by the buildsys-buildkmods-all package."
echo $'\n'"Available options:"
# echo " --filterfile <file> -- filter the results with grep --file <file>"
# echo " --current -- only list current up2date kernels"
# echo " --newest -- only list newly released kernels"
echo " --requires -- print list as requires with ifarch section for"$'\n'" further use in a RPM spec file package header"
echo " --prefix <dir> -- look for the data files in <prefix>"
echo " --target <arch> -- target-arch (ignored if --requires is used)"
echo $'\n'"Supported target archs: ${supported_targetarchs}"
}
while [ "${1}" ] ; do
case "${1}" in
--prefix)
shift
if [[ ! "${1}" ]] ; then
echo "Error: Please provide a prefix where to find data-files together with --prefix" >&2
exit 2
fi
prefix="${1}"
shift
;;
# not used anymore:
--filterfile)
shift
# if [[ ! "${1}" ]] ; then
# echo "Error: Please provide path to a filter-file together with --filterfile" >&2
# exit 2
# elif [[ ! -e "${1}" ]]; then
# echo "Error: Filterfile ${1} not found" >&2
# exit 2
# fi
# filterfile="${1}"
shift
;;
--target)
shift
if [[ ! "${1}" ]] ; then
echo "Error: Please provide one of the supported targets together with --target" >&2
exit 2
fi
for this_arch in ${supported_targetarchs}; do
if [[ "${this_arch}" = "${1}" ]]; then
target="${1}"
shift
break
fi
done
if [[ ! "${target}" ]]; then
echo "Error: ${1} is not a supported target" >&2
exit 2
fi
;;
--requires)
shift
requires="true"
;;
--buildrequires)
shift
buildrequires="true"
;;
# not used anymore:
--current)
shift
# show_kernels="current"
;;
# not used anymore:
--newest)
shift
# show_kernels="newest"
;;
--help)
myprog_help
exit 0
;;
--version)
echo "${myprog} ${myver}"
exit 0
;;
*)
echo "Error: Unknown option '${1}'."$'\n' >&2
myprog_help >&2
exit 2
;;
esac
done
# more init after parsing command line parameters
if [[ -e ./kmodtool-kernel-variants ]] ; then
kernels_known_variants="$(cat ./kmodtool-kernel-variants)"
elif [[ -e /usr/share/kmodtool/kernel-variants ]] ; then
kernels_known_variants="$(cat /usr/share/kmodtool/kernel-variants)"
else
echo "Could not find /usr/share/kmodtool/kernel-variants (required)" >&2
exit 2
fi
# sanity check to make sure it's really filled
if [[ ! "${kernels_known_variants}" ]] ; then
echo "could not determine known kernel variants"
exit 2
fi
# go
if [[ "${requires}" ]] || [[ "${buildrequires}" ]] ; then
print_requires
else
print_kernels ${target}
fi