kernel/kernel.spec

2369 lines
71 KiB
RPMSpec
Raw Normal View History

2010-07-29 23:46:31 +00:00
# We have to override the new %%install behavior because, well... the kernel is special.
%global __spec_install_pre %{___build_pre}
Summary: The Linux kernel
# For a stable, released kernel, released_kernel should be 1. For rawhide
# and/or a kernel built from an rc or git snapshot, released_kernel should
# be 0.
2013-01-04 21:16:10 +00:00
%global released_kernel 0
2010-07-29 23:46:31 +00:00
# Sign modules on x86. Make sure the config files match this setting if more
# architectures are added.
%ifarch %{ix86} x86_64
%global signmodules 1
%else
%global signmodules 0
%endif
2010-07-29 23:46:31 +00:00
# Save original buildid for later if it's defined
%if 0%{?buildid:1}
%global orig_buildid %{buildid}
%undefine buildid
%endif
###################################################################
# Polite request for people who spin their own kernel rpms:
# please modify the "buildid" define in a way that identifies
# that the kernel isn't the stock distribution kernel, for example,
# by setting the define to ".local" or ".bz123456". This will be
# appended to the full kernel version.
#
# (Uncomment the '#' and both spaces below to set the buildid.)
#
# % define buildid .local
###################################################################
# The buildid can also be specified on the rpmbuild command line
# by adding --define="buildid .whatever". If both the specfile and
# the environment define a buildid they will be concatenated together.
%if 0%{?orig_buildid:1}
%if 0%{?buildid:1}
%global srpm_buildid %{buildid}
%define buildid %{srpm_buildid}%{orig_buildid}
%else
%define buildid %{orig_buildid}
%endif
%endif
2010-07-30 01:35:15 +00:00
# baserelease defines which build revision of this kernel version we're
# building. We used to call this fedora_build, but the magical name
# baserelease is matched by the rpmdev-bumpspec tool, which you should use.
2010-07-29 23:46:31 +00:00
#
2010-07-30 01:35:15 +00:00
# We used to have some extra magic weirdness to bump this automatically,
# but now we don't. Just use: rpmdev-bumpspec -c 'comment for changelog'
# When changing base_sublevel below or going from rc to a final kernel,
# reset this by hand to 1 (or to 0 and then use rpmdev-bumpspec).
# scripts/rebase.sh should be made to do that for you, actually.
#
2011-11-07 13:46:25 +00:00
# NOTE: baserelease must be > 0 or bad things will happen if you switch
# to a released kernel (released version will be < rc version)
2010-08-18 23:44:48 +00:00
#
2011-11-07 13:46:25 +00:00
# For non-released -rc kernels, this will be appended after the rcX and
# gitX tags, so a 3 here would become part of release "0.rcX.gitX.3"
#
2013-01-04 21:16:10 +00:00
%global baserelease 1
2010-07-30 01:35:15 +00:00
%global fedora_build %{baserelease}
2010-07-29 23:46:31 +00:00
# base_sublevel is the kernel version we're starting with and patching
2012-03-12 16:54:01 +00:00
# on top of -- for example, 3.1-rc7-git1 starts with a 3.0 base,
# which yields a base_sublevel of 0.
2012-12-11 14:49:11 +00:00
%define base_sublevel 7
2010-07-29 23:46:31 +00:00
## If this is a released kernel ##
%if 0%{?released_kernel}
# Do we have a -stable update to apply?
%define stable_update 0
2010-07-29 23:46:31 +00:00
# Is it a -stable RC?
%define stable_rc 0
# Set rpm version accordingly
%if 0%{?stable_update}
%define stablerev %{stable_update}
2010-07-29 23:46:31 +00:00
%define stable_base %{stable_update}
%if 0%{?stable_rc}
# stable RCs are incremental patches, so we need the previous stable patch
%define stable_base %(echo $((%{stable_update} - 1)))
%endif
%endif
%define rpmversion 3.%{base_sublevel}.%{stable_update}
2010-07-29 23:46:31 +00:00
## The not-released-kernel case ##
%else
# The next upstream release sublevel (base_sublevel+1)
%define upstream_sublevel %(echo $((%{base_sublevel} + 1)))
2010-07-29 23:46:31 +00:00
# The rc snapshot level
2013-01-04 21:16:10 +00:00
%define rcrev 2
2010-07-29 23:46:31 +00:00
# The git snapshot level
2013-01-08 15:35:57 +00:00
%define gitrev 3
2010-07-29 23:46:31 +00:00
# Set rpm version accordingly
%define rpmversion 3.%{upstream_sublevel}.0
2010-07-29 23:46:31 +00:00
%endif
# Nb: The above rcrev and gitrev values automagically define Patch00 and Patch01 below.
# What parts do we want to build? We must build at least one kernel.
# These are the kernels that are built IF the architecture allows it.
# All should default to 1 (enabled) and be flipped to 0 (disabled)
# by later arch-specific checks.
# The following build options are enabled by default.
# Use either --without <opt> in your rpmbuild command or force values
# to 0 in here to disable them.
#
# standard kernel
%define with_up %{?_without_up: 0} %{?!_without_up: 1}
# kernel-smp (only valid for ppc 32-bit)
%define with_smp %{?_without_smp: 0} %{?!_without_smp: 1}
# kernel-PAE (only valid for i686)
%define with_pae %{?_without_pae: 0} %{?!_without_pae: 1}
2010-07-29 23:46:31 +00:00
# kernel-debug
%define with_debug %{?_without_debug: 0} %{?!_without_debug: 1}
# kernel-doc
%define with_doc %{?_without_doc: 0} %{?!_without_doc: 1}
# kernel-headers
%define with_headers %{?_without_headers: 0} %{?!_without_headers: 1}
# perf
%define with_perf %{?_without_perf: 0} %{?!_without_perf: 1}
# tools
%define with_tools %{?_without_tools: 0} %{?!_without_tools: 1}
2010-07-29 23:46:31 +00:00
# kernel-debuginfo
%define with_debuginfo %{?_without_debuginfo: 0} %{?!_without_debuginfo: 1}
2010-07-29 23:46:31 +00:00
# kernel-bootwrapper (for creating zImages from kernel + initrd)
%define with_bootwrapper %{?_without_bootwrapper: 0} %{?!_without_bootwrapper: 1}
# Want to build a the vsdo directories installed
%define with_vdso_install %{?_without_vdso_install: 0} %{?!_without_vdso_install: 1}
# ARM OMAP (Beagle/Panda Board)
%define with_omap %{?_without_omap: 0} %{?!_without_omap: 1}
# kernel-tegra (only valid for arm)
%define with_tegra %{?_without_tegra: 0} %{?!_without_tegra: 1}
# kernel-kirkwood (only valid for arm)
%define with_kirkwood %{?_without_kirkwood: 0} %{?!_without_kirkwood: 1}
#
2010-07-29 23:46:31 +00:00
# Additional options for user-friendly one-off kernel building:
#
# Only build the base kernel (--with baseonly):
%define with_baseonly %{?_with_baseonly: 1} %{?!_with_baseonly: 0}
# Only build the smp kernel (--with smponly):
%define with_smponly %{?_with_smponly: 1} %{?!_with_smponly: 0}
# Only build the pae kernel (--with paeonly):
%define with_paeonly %{?_with_paeonly: 1} %{?!_with_paeonly: 0}
2010-07-29 23:46:31 +00:00
# Only build the debug kernel (--with dbgonly):
%define with_dbgonly %{?_with_dbgonly: 1} %{?!_with_dbgonly: 0}
#
2010-07-29 23:46:31 +00:00
# should we do C=1 builds with sparse
2010-10-26 17:51:00 +00:00
%define with_sparse %{?_with_sparse: 1} %{?!_with_sparse: 0}
#
# build a release kernel on rawhide
%define with_release %{?_with_release: 1} %{?!_with_release: 0}
2010-07-29 23:46:31 +00:00
# Set debugbuildsenabled to 1 for production (build separate debug kernels)
# and 0 for rawhide (all kernels are debug kernels).
# See also 'make debug' and 'make release'.
2012-12-11 16:57:22 +00:00
%define debugbuildsenabled 0
2010-07-29 23:46:31 +00:00
# Want to build a vanilla kernel build without any non-upstream patches?
%define with_vanilla %{?_with_vanilla: 1} %{?!_with_vanilla: 0}
# Build the kernel-doc package, but don't fail the build if it botches.
# Here "true" means "continue" and "false" means "fail the build".
%if 0%{?released_kernel}
%define doc_build_fail false
%else
%define doc_build_fail true
%endif
2012-12-11 16:57:22 +00:00
%define rawhide_skip_docs 1
%if 0%{?rawhide_skip_docs}
%define with_doc 0
%define doc_build_fail true
%endif
2010-07-29 23:46:31 +00:00
# pkg_release is what we'll fill in for the rpm Release: field
%if 0%{?released_kernel}
%if 0%{?stable_rc}
%define stable_rctag .rc%{stable_rc}
%define pkg_release 0%{stable_rctag}.%{fedora_build}%{?buildid}%{?dist}
%else
%define pkg_release %{fedora_build}%{?buildid}%{?dist}
2010-07-29 23:46:31 +00:00
%endif
%else
# non-released_kernel
%if 0%{?rcrev}
%define rctag .rc%rcrev
%else
%define rctag .rc0
%endif
%if 0%{?gitrev}
%define gittag .git%gitrev
%else
%define gittag .git0
%endif
%define pkg_release 0%{?rctag}%{?gittag}.%{fedora_build}%{?buildid}%{?dist}
2010-07-29 23:46:31 +00:00
%endif
# The kernel tarball/base version
%define kversion 3.%{base_sublevel}
2010-07-29 23:46:31 +00:00
%define make_target bzImage
%define KVERREL %{version}-%{release}.%{_target_cpu}
%define hdrarch %_target_cpu
%define asmarch %_target_cpu
%if 0%{!?nopatches:1}
%define nopatches 0
%endif
%if %{with_vanilla}
%define nopatches 1
%endif
%if %{nopatches}
%define with_bootwrapper 0
%define variant -vanilla
%else
%define variant_fedora -fedora
%endif
%define using_upstream_branch 0
%if 0%{?upstream_branch:1}
%define stable_update 0
%define using_upstream_branch 1
%define variant -%{upstream_branch}%{?variant_fedora}
%define pkg_release 0.%{fedora_build}%{upstream_branch_tag}%{?buildid}%{?dist}
%endif
%if !%{debugbuildsenabled}
%define with_debug 0
%endif
%if !%{with_debuginfo}
%define _enable_debug_packages 0
%endif
%define debuginfodir /usr/lib/debug
# kernel-PAE is only built on i686.
%ifnarch i686
2010-07-29 23:46:31 +00:00
%define with_pae 0
%endif
# kernel up (unified kernel target), tegra and omap are only built on armv7 hfp/sfp
%ifnarch armv7hl armv7l
2012-05-09 13:19:03 +00:00
%define with_omap 0
%define with_tegra 0
%endif
2012-02-21 23:05:36 +00:00
# kernel-kirkwood is only built for armv5
%ifnarch armv5tel
%define with_kirkwood 0
2012-05-09 13:19:03 +00:00
%endif
2010-07-29 23:46:31 +00:00
# if requested, only build base kernel
%if %{with_baseonly}
%define with_smp 0
%define with_pae 0
2010-07-29 23:46:31 +00:00
%define with_debug 0
%endif
# if requested, only build smp kernel
%if %{with_smponly}
%define with_up 0
%define with_pae 0
%define with_debug 0
%endif
# if requested, only build pae kernel
%if %{with_paeonly}
%define with_up 0
%define with_smp 0
2010-07-29 23:46:31 +00:00
%define with_debug 0
%endif
# if requested, only build debug kernel
%if %{with_dbgonly}
%if %{debugbuildsenabled}
%define with_up 0
%define with_pae 0
2010-07-29 23:46:31 +00:00
%endif
%define with_smp 0
%define with_pae 0
%define with_tools 0
%define with_perf 0
2010-07-29 23:46:31 +00:00
%endif
%define all_x86 i386 i686
%if %{with_vdso_install}
# These arches install vdso/ directories.
2012-08-09 00:25:31 +00:00
%define vdso_arches %{all_x86} x86_64 ppc ppc64 ppc64p7 s390 s390x
2010-07-29 23:46:31 +00:00
%endif
# Overrides for generic default options
# only ppc needs a separate smp kernel
%ifnarch ppc
2010-07-29 23:46:31 +00:00
%define with_smp 0
%endif
# don't do debug builds on anything but i686 and x86_64
%ifnarch i686 x86_64
%define with_debug 0
%endif
# only package docs noarch
%ifnarch noarch
%define with_doc 0
%endif
# don't build noarch kernels or headers (duh)
%ifarch noarch
%define with_up 0
%define with_headers 0
%define with_tools 0
%define with_perf 0
2010-07-29 23:46:31 +00:00
%define all_arch_configs kernel-%{version}-*.config
%endif
# bootwrapper is only on ppc
2012-08-09 00:25:31 +00:00
%ifnarch ppc ppc64 ppc64p7
2010-07-29 23:46:31 +00:00
%define with_bootwrapper 0
%endif
# sparse blows up on ppc64 and sparc64
2013-01-07 16:50:09 +00:00
%ifarch ppc64 ppc ppc64p7
2010-07-29 23:46:31 +00:00
%define with_sparse 0
%endif
# Per-arch tweaks
%ifarch %{all_x86}
%define asmarch x86
%define hdrarch i386
%define all_arch_configs kernel-%{version}-i?86*.config
%define image_install_path boot
%define kernel_image arch/x86/boot/bzImage
%endif
%ifarch x86_64
%define asmarch x86
%define all_arch_configs kernel-%{version}-x86_64*.config
%define image_install_path boot
%define kernel_image arch/x86/boot/bzImage
%endif
2012-08-09 00:25:31 +00:00
%ifarch ppc64 ppc64p7
2010-07-29 23:46:31 +00:00
%define asmarch powerpc
%define hdrarch powerpc
%define all_arch_configs kernel-%{version}-ppc64*.config
%define image_install_path boot
%define make_target vmlinux
%define kernel_image vmlinux
%define kernel_image_elf 1
%endif
%ifarch s390x
%define asmarch s390
%define hdrarch s390
%define all_arch_configs kernel-%{version}-s390x.config
%define image_install_path boot
%define make_target image
%define kernel_image arch/s390/boot/image
%define with_tools 0
2010-07-29 23:46:31 +00:00
%endif
%ifarch ppc
%define asmarch powerpc
%define hdrarch powerpc
%define all_arch_configs kernel-%{version}-ppc{-,.}*config
%define image_install_path boot
%define make_target vmlinux
%define kernel_image vmlinux
%define kernel_image_elf 1
%endif
%ifarch %{arm}
%define all_arch_configs kernel-%{version}-arm*.config
%define image_install_path boot
%define asmarch arm
2010-07-29 23:46:31 +00:00
%define hdrarch arm
%define make_target bzImage
%define kernel_image arch/arm/boot/zImage
# we only build headers/perf/tools on the base arm arches
# just like we used to only build them on i386 for x86
2012-05-15 15:23:43 +00:00
%ifarch armv5tel
%define with_up 0
%endif
%ifnarch armv5tel armv7hl
%define with_headers 0
%define with_perf 0
%define with_tools 0
%endif
# TEMPORARY until perf build fixed on ARM to get a new 3.7rc kernel
%define with_perf 0
2010-07-29 23:46:31 +00:00
%endif
# Should make listnewconfig fail if there's config options
# printed out?
%if %{nopatches}%{using_upstream_branch}
%define listnewconfig_fail 0
%else
%define listnewconfig_fail 1
%endif
2010-07-29 23:46:31 +00:00
# To temporarily exclude an architecture from being built, add it to
# %%nobuildarches. Do _NOT_ use the ExclusiveArch: line, because if we
2010-07-29 23:46:31 +00:00
# don't build kernel-headers then the new build system will no longer let
# us use the previous build of that package -- it'll just be completely AWOL.
# Which is a BadThing(tm).
# We only build kernel-headers on the following...
2013-01-07 16:50:09 +00:00
%define nobuildarches i386 s390
2010-07-29 23:46:31 +00:00
%ifarch %nobuildarches
%define with_up 0
%define with_smp 0
%define with_pae 0
%define with_debuginfo 0
%define with_perf 0
%define with_tools 0
2010-07-29 23:46:31 +00:00
%define _enable_debug_packages 0
%endif
%define with_pae_debug 0
%if %{with_pae}
%define with_pae_debug %{with_debug}
%endif
2011-08-18 01:18:53 +00:00
# Architectures we build tools/cpupower on
2012-08-09 00:25:31 +00:00
%define cpupowerarchs %{ix86} x86_64 ppc ppc64 ppc64p7 %{arm}
2011-08-18 01:18:53 +00:00
2010-07-29 23:46:31 +00:00
#
# Three sets of minimum package version requirements in the form of Conflicts:
# to versions below the minimum
#
#
# First the general kernel 2.6 required versions as per
# Documentation/Changes
#
%define kernel_dot_org_conflicts ppp < 2.4.3-3, isdn4k-utils < 3.2-32, nfs-utils < 1.2.5-7.fc17, e2fsprogs < 1.37-4, util-linux < 2.12, jfsutils < 1.1.7-2, reiserfs-utils < 3.6.19-2, xfsprogs < 2.6.13-4, procps < 3.2.5-6.3, oprofile < 0.9.1-2, device-mapper-libs < 1.02.63-2, mdadm < 3.2.1-5
2010-07-29 23:46:31 +00:00
#
# Then a series of requirements that are distribution specific, either
# because we add patches for something, or the older versions have
# problems with the newer kernel or lack certain things that make
# integration in the distro harder than needed.
#
%define package_conflicts initscripts < 7.23, udev < 063-6, iptables < 1.3.2-1, ipw2200-firmware < 2.4, iwl4965-firmware < 228.57.2, selinux-policy-targeted < 1.25.3-14, squashfs-tools < 4.0, wireless-tools < 29-3
# We moved the drm include files into kernel-headers, make sure there's
# a recent enough libdrm-devel on the system that doesn't have those.
%define kernel_headers_conflicts libdrm-devel < 2.4.0-0.15
#
# Packages that need to be installed before the kernel is, because the %%post
2010-07-29 23:46:31 +00:00
# scripts use them.
#
%define kernel_prereq fileutils, module-init-tools >= 3.16-4, initscripts >= 8.11.1-1, grubby >= 8.3-1
2010-07-29 23:46:31 +00:00
%define initrd_prereq dracut >= 001-7
#
# This macro does requires, provides, conflicts, obsoletes for a kernel package.
# %%kernel_reqprovconf <subpackage>
# It uses any kernel_<subpackage>_conflicts and kernel_<subpackage>_obsoletes
# macros defined above.
#
%define kernel_reqprovconf \
Provides: kernel = %{rpmversion}-%{pkg_release}\
Provides: kernel-%{_target_cpu} = %{rpmversion}-%{pkg_release}%{?1:.%{1}}\
Provides: kernel-drm = 4.3.0\
Provides: kernel-drm-nouveau = 16\
Provides: kernel-modeset = 1\
Provides: kernel-uname-r = %{KVERREL}%{?1:.%{1}}\
Requires(pre): %{kernel_prereq}\
Requires(pre): %{initrd_prereq}\
Requires(pre): linux-firmware >= 20120206-0.1.git06c8f81\
2010-07-29 23:46:31 +00:00
Requires(post): /sbin/new-kernel-pkg\
Requires(preun): /sbin/new-kernel-pkg\
Conflicts: %{kernel_dot_org_conflicts}\
Conflicts: %{package_conflicts}\
%{expand:%%{?kernel%{?1:_%{1}}_conflicts:Conflicts: %%{kernel%{?1:_%{1}}_conflicts}}}\
%{expand:%%{?kernel%{?1:_%{1}}_obsoletes:Obsoletes: %%{kernel%{?1:_%{1}}_obsoletes}}}\
%{expand:%%{?kernel%{?1:_%{1}}_provides:Provides: %%{kernel%{?1:_%{1}}_provides}}}\
# We can't let RPM do the dependencies automatic because it'll then pick up\
# a correct but undesirable perl dependency from the module headers which\
# isn't required for the kernel proper to function\
AutoReq: no\
AutoProv: yes\
%{nil}
Name: kernel%{?variant}
Group: System Environment/Kernel
2012-09-14 16:04:56 +00:00
License: GPLv2 and Redistributable, no modification permitted
2010-07-29 23:46:31 +00:00
URL: http://www.kernel.org/
Version: %{rpmversion}
Release: %{pkg_release}
# DO NOT CHANGE THE 'ExclusiveArch' LINE TO TEMPORARILY EXCLUDE AN ARCHITECTURE BUILD.
# SET %%nobuildarches (ABOVE) INSTEAD
2013-01-07 16:50:09 +00:00
ExclusiveArch: noarch %{all_x86} x86_64 ppc ppc64 ppc64p7 s390 s390x %{arm}
2010-07-29 23:46:31 +00:00
ExclusiveOS: Linux
%kernel_reqprovconf
2010-07-29 23:46:31 +00:00
#
# List the packages used during the kernel build
#
BuildRequires: module-init-tools, patch >= 2.5.4, bash >= 2.03, sh-utils, tar
2011-11-07 13:16:50 +00:00
BuildRequires: bzip2, xz, findutils, gzip, m4, perl, make >= 3.78, diffutils, gawk
BuildRequires: gcc >= 3.4.2, binutils >= 2.12, redhat-rpm-config, hmaccalc
2013-01-02 14:08:37 +00:00
BuildRequires: net-tools, hostname
2010-07-29 23:46:31 +00:00
BuildRequires: xmlto, asciidoc
%if %{with_sparse}
BuildRequires: sparse >= 0.4.1
%endif
%if %{with_perf}
2012-04-03 16:32:32 +00:00
BuildRequires: elfutils-devel zlib-devel binutils-devel newt-devel python-devel perl(ExtUtils::Embed) bison
BuildRequires: audit-libs-devel
%endif
%if %{with_tools}
BuildRequires: pciutils-devel gettext
2010-07-29 23:46:31 +00:00
%endif
BuildConflicts: rhbuildsys(DiskFree) < 500Mb
%if %{with_debuginfo}
# Fancy new debuginfo generation introduced in Fedora 8/RHEL 6.
# The -r flag to find-debuginfo.sh to invoke eu-strip --reloc-debug-sections
# reduces the number of relocations in kernel module .ko.debug files and was
# introduced with rpm 4.9 and elfutils 0.153.
BuildRequires: rpm-build >= 4.9.0-1, elfutils >= elfutils-0.153-1
%define debuginfo_args --strict-build-id -r
2010-07-29 23:46:31 +00:00
%endif
%if %{signmodules}
BuildRequires: openssl
BuildRequires: pesign >= 0.10-4
%endif
2012-01-05 01:32:22 +00:00
Source0: ftp://ftp.kernel.org/pub/linux/kernel/v3.0/linux-%{kversion}.tar.xz
2010-07-29 23:46:31 +00:00
%if %{signmodules}
Source11: x509.genkey
%endif
2010-07-29 23:46:31 +00:00
Source15: merge.pl
Source16: mod-extra.list
Source17: mod-extra.sh
Source18: mod-extra-sign.sh
2010-07-29 23:46:31 +00:00
Source19: Makefile.release
2010-07-29 23:46:31 +00:00
Source20: Makefile.config
Source21: config-debug
Source22: config-nodebug
Source23: config-generic
Source30: config-x86-generic
Source31: config-i686-PAE
Source32: config-x86-32-generic
2010-07-29 23:46:31 +00:00
Source40: config-x86_64-generic
Source50: config-powerpc-generic
Source51: config-powerpc32-generic
Source52: config-powerpc32-smp
Source53: config-powerpc64
2012-08-09 00:25:31 +00:00
Source54: config-powerpc64p7
2010-07-29 23:46:31 +00:00
Source70: config-s390x
# Unified ARM kernels
Source100: config-armv7
# Legacy ARM kernels
Source105: config-arm-generic
Source110: config-arm-omap
Source111: config-arm-tegra
Source112: config-arm-kirkwood
2010-07-29 23:46:31 +00:00
# This file is intentionally left empty in the stock kernel. Its a nicety
# added for those wanting to do custom rebuilds with altered config opts.
Source1000: config-local
2011-08-18 01:18:53 +00:00
# Sources for kernel-tools
Source2000: cpupower.service
Source2001: cpupower.config
2010-07-29 23:46:31 +00:00
# Here should be only the patches up to the upstream canonical Linus tree.
# For a stable release kernel
%if 0%{?stable_update}
%if 0%{?stable_base}
%define stable_patch_00 patch-3.%{base_sublevel}.%{stable_base}.xz
2010-07-29 23:46:31 +00:00
Patch00: %{stable_patch_00}
%endif
%if 0%{?stable_rc}
2012-03-22 16:05:20 +00:00
%define stable_patch_01 patch-3.%{base_sublevel}.%{stable_update}-rc%{stable_rc}.xz
2010-07-29 23:46:31 +00:00
Patch01: %{stable_patch_01}
%endif
# non-released_kernel case
# These are automagically defined by the rcrev and gitrev values set up
# near the top of this spec file.
%else
%if 0%{?rcrev}
Patch00: patch-3.%{upstream_sublevel}-rc%{rcrev}.xz
2010-07-29 23:46:31 +00:00
%if 0%{?gitrev}
Patch01: patch-3.%{upstream_sublevel}-rc%{rcrev}-git%{gitrev}.xz
2010-07-29 23:46:31 +00:00
%endif
%else
# pre-{base_sublevel+1}-rc1 case
%if 0%{?gitrev}
2012-03-22 16:05:20 +00:00
Patch00: patch-3.%{base_sublevel}-git%{gitrev}.xz
2010-07-29 23:46:31 +00:00
%endif
%endif
%endif
%if %{using_upstream_branch}
### BRANCH PATCH ###
%endif
# we also need compile fixes for -vanilla
Patch04: linux-2.6-compile-fixes.patch
# build tweak for build ID magic, even for -vanilla
Patch05: linux-2.6-makefile-after_link.patch
%if !%{nopatches}
2010-08-17 21:20:03 +00:00
2010-07-29 23:46:31 +00:00
# revert upstream patches we get via other methods
Patch09: linux-2.6-upstream-reverts.patch
# Git trees.
# Standalone patches
Patch100: taint-vbox.patch
2010-07-29 23:46:31 +00:00
Patch110: vmbugon-warnon.patch
2010-07-29 23:46:31 +00:00
Patch390: linux-2.6-defaults-acpi-video.patch
Patch391: linux-2.6-acpi-video-dos.patch
Patch394: linux-2.6-acpi-debug-infinite-loop.patch
Patch396: acpi-sony-nonvs-blacklist.patch
2010-07-29 23:46:31 +00:00
Patch450: linux-2.6-input-kill-stupid-messages.patch
Patch452: linux-2.6.30-no-pcspkr-modalias.patch
Patch460: linux-2.6-serial-460800.patch
Patch470: die-floppy-die.patch
Patch510: linux-2.6-silence-noise.patch
Patch520: quite-apm.patch
2010-07-29 23:46:31 +00:00
Patch530: linux-2.6-silence-fbcon-logo.patch
Patch700: linux-2.6-e1000-ich9-montevina.patch
2010-07-29 23:46:31 +00:00
Patch800: linux-2.6-crash-driver.patch
# crypto/
# secure boot
2013-01-04 21:16:10 +00:00
Patch1000: secure-boot-20130104.patch
Patch1001: efivarfs-nlink-fix.patch
2010-07-29 23:46:31 +00:00
# virt + ksm patches
# DRM
#atch1700: drm-edid-try-harder-to-fix-up-broken-headers.patch
#Patch1800: drm-vgem.patch
2010-10-16 17:19:24 +00:00
2010-07-29 23:46:31 +00:00
# nouveau + drm fixes
# intel drm is all merged upstream
Patch1824: drm-intel-next.patch
Patch1825: drm-i915-dp-stfu.patch
2010-12-03 12:26:49 +00:00
2010-07-29 23:46:31 +00:00
# Quiet boot fixes
# silence the ACPI blacklist code
Patch2802: linux-2.6-silence-acpi-blacklist.patch
# media patches
Patch2899: linux-2.6-v4l-dvb-fixes.patch
Patch2900: linux-2.6-v4l-dvb-update.patch
Patch2901: linux-2.6-v4l-dvb-experimental.patch
# fs fixes
# NFSv4
# patches headed upstream
Patch10000: fs-proc-devtree-remove_proc_entry.patch
2010-07-29 23:46:31 +00:00
Patch12016: disable-i8042-check-on-apple-mac.patch
Patch12303: dmar-disable-when-ricoh-multifunction.patch
Patch13003: efi-dont-map-boot-services-on-32bit.patch
Patch14000: hibernate-freeze-filesystems.patch
Patch14010: lis3-improve-handling-of-null-rate.patch
2012-06-28 14:35:42 +00:00
# ARM
Patch21000: arm-export-read_current_timer.patch
Patch21001: arm-allnoconfig-error-__LINUX_ARM_ARCH__-undeclared.patch
2012-10-08 17:41:42 +00:00
# OMAP
# https://patchwork.kernel.org/patch/1721241/
# https://patchwork.kernel.org/patch/1839401/
Patch21003: arm-omapdrm-fixinc.patch
# ARM tegra
2012-02-16 01:03:09 +00:00
Patch21004: arm-tegra-nvec-kconfig.patch
Patch21005: arm-tegra-usb-no-reset-linux33.patch
#rhbz 754518
Patch21235: scsi-sd_revalidate_disk-prevent-NULL-ptr-deref.patch
2012-03-07 22:12:06 +00:00
Patch22000: weird-root-dentry-name-debug.patch
#selinux ptrace child permissions
Patch22001: selinux-apply-different-permission-to-ptrace-child.patch
2012-10-15 20:57:08 +00:00
# Build patch, should go away
Patch22070: irqnr-build.patch
2012-11-20 13:20:01 +00:00
#rhbz 859485
Patch21226: vt-Drop-K_OFF-for-VC_MUTE.patch
#rhbz 883414
Patch21236: mac80211-fix-ibss-scanning.patch
#rhbz 873107
Patch21237: 0001-ACPI-sony-laptop-do-proper-memcpy-for-ACPI_TYPE_INTE.patch
# END OF PATCH DEFINITIONS
2010-07-29 23:46:31 +00:00
%endif
BuildRoot: %{_tmppath}/kernel-%{KVERREL}-root
%description
The kernel package contains the Linux kernel (vmlinuz), the core of any
Linux operating system. The kernel handles the basic functions
of the operating system: memory allocation, process allocation, device
input and output, etc.
%package doc
Summary: Various documentation bits found in the kernel source
Group: Documentation
%description doc
This package contains documentation files from the kernel
source. Various bits of information about the Linux kernel and the
device drivers shipped with it are documented in these files.
You'll want to install this package if you need a reference to the
options that can be passed to Linux kernel modules at load time.
%package headers
Summary: Header files for the Linux kernel for use by glibc
Group: Development/System
Obsoletes: glibc-kernheaders < 3.0-46
2010-07-29 23:46:31 +00:00
Provides: glibc-kernheaders = 3.0-46
%description headers
Kernel-headers includes the C header files that specify the interface
between the Linux kernel and userspace libraries and programs. The
header files define structures and constants that are needed for
building most standard programs and are also needed for rebuilding the
glibc package.
%package bootwrapper
Summary: Boot wrapper files for generating combined kernel + initrd images
Group: Development/System
Requires: gzip binutils
2010-07-29 23:46:31 +00:00
%description bootwrapper
Kernel-bootwrapper contains the wrapper code which makes bootable "zImage"
files combining both kernel and initial ramdisk.
%package debuginfo-common-%{_target_cpu}
Summary: Kernel source files used by %{name}-debuginfo packages
Group: Development/Debug
%description debuginfo-common-%{_target_cpu}
This package is required by %{name}-debuginfo subpackages.
It provides the kernel source files common to all builds.
%if %{with_perf}
%package -n perf
Summary: Performance monitoring for the Linux kernel
Group: Development/System
License: GPLv2
%description -n perf
This package contains the perf tool, which enables performance monitoring
of the Linux kernel.
%package -n perf-debuginfo
Summary: Debug information for package perf
Group: Development/Debug
Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release}
AutoReqProv: no
%description -n perf-debuginfo
This package provides debug information for the perf package.
# Note that this pattern only works right to match the .build-id
# symlinks because of the trailing nonmatching alternation and
# the leading .*, because of find-debuginfo.sh's buggy handling
# of matching the pattern against the symlinks file.
%{expand:%%global debuginfo_args %{?debuginfo_args} -p '.*%%{_bindir}/perf(\.debug)?|.*%%{_libexecdir}/perf-core/.*|XXX' -o perf-debuginfo.list}
%package -n python-perf
Summary: Python bindings for apps which will manipulate perf events
Group: Development/Libraries
%description -n python-perf
The python-perf package contains a module that permits applications
written in the Python programming language to use the interface
to manipulate perf events.
%{!?python_sitearch: %global python_sitearch %(%{__python} -c "from distutils.sysconfig import get_python_lib; print get_python_lib(1)")}
%package -n python-perf-debuginfo
Summary: Debug information for package perf python bindings
Group: Development/Debug
Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release}
AutoReqProv: no
%description -n python-perf-debuginfo
This package provides debug information for the perf python bindings.
# the python_sitearch macro should already be defined from above
%{expand:%%global debuginfo_args %{?debuginfo_args} -p '.*%%{python_sitearch}/perf.so(\.debug)?|XXX' -o python-perf-debuginfo.list}
%endif # with_perf
%if %{with_tools}
%package -n kernel-tools
Summary: Assortment of tools for the Linux kernel
2010-07-29 23:46:31 +00:00
Group: Development/System
License: GPLv2
Provides: cpupowerutils = 1:009-0.6.p1
Obsoletes: cpupowerutils < 1:009-0.6.p1
Provides: cpufreq-utils = 1:009-0.6.p1
Provides: cpufrequtils = 1:009-0.6.p1
Obsoletes: cpufreq-utils < 1:009-0.6.p1
Obsoletes: cpufrequtils < 1:009-0.6.p1
Obsoletes: cpuspeed < 1:1.5-16
Requires: kernel-tools-libs = %{version}-%{release}
%description -n kernel-tools
This package contains the tools/ directory from the kernel source
and the supporting documentation.
2011-03-04 23:40:12 +00:00
%package -n kernel-tools-libs
Summary: Libraries for the kernels-tools
Group: Development/System
License: GPLv2
%description -n kernel-tools-libs
This package contains the libraries built from the tools/ directory
from the kernel source.
%package -n kernel-tools-libs-devel
2011-08-18 01:18:53 +00:00
Summary: Assortment of tools for the Linux kernel
Group: Development/System
License: GPLv2
Requires: kernel-tools = %{version}-%{release}
Provides: cpupowerutils-devel = 1:009-0.6.p1
Obsoletes: cpupowerutils-devel < 1:009-0.6.p1
Requires: kernel-tools-libs = %{version}-%{release}
Provides: kernel-tools-devel
%description -n kernel-tools-libs-devel
2011-08-18 01:18:53 +00:00
This package contains the development files for the tools/ directory from
the kernel source.
%package -n kernel-tools-debuginfo
Summary: Debug information for package kernel-tools
2011-03-04 23:40:12 +00:00
Group: Development/Debug
Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release}
AutoReqProv: no
%description -n kernel-tools-debuginfo
This package provides debug information for package kernel-tools.
2011-03-04 23:40:12 +00:00
# Note that this pattern only works right to match the .build-id
# symlinks because of the trailing nonmatching alternation and
# the leading .*, because of find-debuginfo.sh's buggy handling
# of matching the pattern against the symlinks file.
%{expand:%%global debuginfo_args %{?debuginfo_args} -p '.*%%{_bindir}/centrino-decode(\.debug)?|.*%%{_bindir}/powernow-k8-decode(\.debug)?|.*%%{_bindir}/cpupower(\.debug)?|.*%%{_libdir}/libcpupower.*|XXX' -o kernel-tools-debuginfo.list}
2011-10-31 20:01:28 +00:00
%endif # with_tools
2010-07-29 23:46:31 +00:00
#
# This macro creates a kernel-<subpackage>-debuginfo package.
# %%kernel_debuginfo_package <subpackage>
#
%define kernel_debuginfo_package() \
%package %{?1:%{1}-}debuginfo\
Summary: Debug information for package %{name}%{?1:-%{1}}\
Group: Development/Debug\
Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release}\
Provides: %{name}%{?1:-%{1}}-debuginfo-%{_target_cpu} = %{version}-%{release}\
AutoReqProv: no\
%description -n %{name}%{?1:-%{1}}-debuginfo\
This package provides debug information for package %{name}%{?1:-%{1}}.\
This is required to use SystemTap with %{name}%{?1:-%{1}}-%{KVERREL}.\
%{expand:%%global debuginfo_args %{?debuginfo_args} -p '/.*/%%{KVERREL}%{?1:\.%{1}}/.*|/.*%%{KVERREL}%{?1:\.%{1}}(\.debug)?' -o debuginfo%{?1}.list}\
%{nil}
#
# This macro creates a kernel-<subpackage>-devel package.
# %%kernel_devel_package <subpackage> <pretty-name>
#
%define kernel_devel_package() \
%package %{?1:%{1}-}devel\
Summary: Development package for building kernel modules to match the %{?2:%{2} }kernel\
Group: System Environment/Kernel\
Provides: kernel%{?1:-%{1}}-devel-%{_target_cpu} = %{version}-%{release}\
Provides: kernel-devel-%{_target_cpu} = %{version}-%{release}%{?1:.%{1}}\
Provides: kernel-devel = %{version}-%{release}%{?1:.%{1}}\
Provides: kernel-devel-uname-r = %{KVERREL}%{?1:.%{1}}\
AutoReqProv: no\
Requires(pre): /usr/bin/find\
Requires: perl\
%description -n kernel%{?variant}%{?1:-%{1}}-devel\
This package provides kernel headers and makefiles sufficient to build modules\
against the %{?2:%{2} }kernel package.\
%{nil}
#
# This macro creates a kernel-<subpackage>-modules-extra package.
# %%kernel_modules-extra_package <subpackage> <pretty-name>
#
%define kernel_modules-extra_package() \
%package %{?1:%{1}-}modules-extra\
Summary: Extra kernel modules to match the %{?2:%{2} }kernel\
Group: System Environment/Kernel\
Provides: kernel%{?1:-%{1}}-modules-extra-%{_target_cpu} = %{version}-%{release}\
Provides: kernel-modules-extra-%{_target_cpu} = %{version}-%{release}%{?1:.%{1}}\
Provides: kernel-modules-extra = %{version}-%{release}%{?1:.%{1}}\
Provides: installonlypkg(kernel-module)\
Provides: kernel-modules-extra-uname-r = %{KVERREL}%{?1:.%{1}}\
Requires: kernel-uname-r = %{KVERREL}%{?1:.%{1}}\
AutoReqProv: no\
%description -n kernel%{?variant}%{?1:-%{1}}-modules-extra\
This package provides less commonly used kernel modules for the %{?2:%{2} }kernel package.\
%{nil}
2010-07-29 23:46:31 +00:00
#
# This macro creates a kernel-<subpackage> and its -devel and -debuginfo too.
# %%define variant_summary The Linux kernel compiled for <configuration>
# %%kernel_variant_package [-n <pretty-name>] <subpackage>
#
%define kernel_variant_package(n:) \
%package %1\
Summary: %{variant_summary}\
Group: System Environment/Kernel\
%kernel_reqprovconf\
%{expand:%%kernel_devel_package %1 %{!?-n:%1}%{?-n:%{-n*}}}\
%{expand:%%kernel_modules-extra_package %1 %{!?-n:%1}%{?-n:%{-n*}}}\
2010-07-29 23:46:31 +00:00
%{expand:%%kernel_debuginfo_package %1}\
%{nil}
# First the auxiliary packages of the main kernel package.
%kernel_devel_package
%kernel_modules-extra_package
2010-07-29 23:46:31 +00:00
%kernel_debuginfo_package
# Now, each variant package.
%define variant_summary The Linux kernel compiled for SMP machines
%kernel_variant_package -n SMP smp
%description smp
This package includes a SMP version of the Linux kernel. It is
required only on machines with two or more CPUs as well as machines with
hyperthreading technology.
Install the kernel-smp package if your machine uses two or more CPUs.
%define variant_summary The Linux kernel compiled for PAE capable machines
%kernel_variant_package PAE
%description PAE
This package includes a version of the Linux kernel with support for up to
64GB of high memory. It requires a CPU with Physical Address Extensions (PAE).
The non-PAE kernel can only address up to 4GB of memory.
Install the kernel-PAE package if your machine has more than 4GB of memory.
%define variant_summary The Linux kernel compiled with extra debugging enabled for PAE capable machines
%kernel_variant_package PAEdebug
Obsoletes: kernel-PAE-debug
%description PAEdebug
This package includes a version of the Linux kernel with support for up to
64GB of high memory. It requires a CPU with Physical Address Extensions (PAE).
The non-PAE kernel can only address up to 4GB of memory.
Install the kernel-PAE package if your machine has more than 4GB of memory.
This variant of the kernel has numerous debugging options enabled.
It should only be installed when trying to gather additional information
on kernel bugs, as some of these options impact performance noticably.
%define variant_summary The Linux kernel compiled with extra debugging enabled
%kernel_variant_package debug
%description debug
The kernel package contains the Linux kernel (vmlinuz), the core of any
Linux operating system. The kernel handles the basic functions
of the operating system: memory allocation, process allocation, device
input and output, etc.
This variant of the kernel has numerous debugging options enabled.
It should only be installed when trying to gather additional information
on kernel bugs, as some of these options impact performance noticably.
%define variant_summary The Linux kernel compiled for marvell kirkwood boards
%kernel_variant_package kirkwood
%description kirkwood
This package includes a version of the Linux kernel with support for
marvell kirkwood based systems, i.e., guruplug, sheevaplug
%define variant_summary The Linux kernel compiled for TI-OMAP boards
%kernel_variant_package omap
%description omap
This package includes a version of the Linux kernel with support for
TI-OMAP based systems, i.e., BeagleBoard-xM.
%define variant_summary The Linux kernel compiled for tegra boards
%kernel_variant_package tegra
%description tegra
This package includes a version of the Linux kernel with support for
nvidia tegra based systems, i.e., trimslice, ac-100.
2010-07-29 23:46:31 +00:00
%prep
# do a few sanity-checks for --with *only builds
%if %{with_baseonly}
%if !%{with_up}%{with_pae}
echo "Cannot build --with baseonly, up build is disabled"
exit 1
%endif
%endif
%if %{with_smponly}
%if !%{with_smp}
echo "Cannot build --with smponly, smp build is disabled"
exit 1
%endif
%endif
%if "%{baserelease}" == "0"
2011-11-07 13:46:25 +00:00
echo "baserelease must be greater than zero"
exit 1
%endif
2010-07-29 23:46:31 +00:00
# more sanity checking; do it quietly
if [ "%{patches}" != "%%{patches}" ] ; then
for patch in %{patches} ; do
if [ ! -f $patch ] ; then
echo "ERROR: Patch ${patch##/*/} listed in specfile but is missing"
exit 1
fi
done
fi 2>/dev/null
patch_command='patch -p1 -F1 -s'
ApplyPatch()
{
local patch=$1
shift
if [ ! -f $RPM_SOURCE_DIR/$patch ]; then
exit 1
fi
%if !%{using_upstream_branch}
if ! grep -E "^Patch[0-9]+: $patch\$" %{_specdir}/${RPM_PACKAGE_NAME%%%%%{?variant}}.spec ; then
2011-06-17 15:40:56 +00:00
if [ "${patch:0:8}" != "patch-3." ] ; then
2010-07-29 23:46:31 +00:00
echo "ERROR: Patch $patch not listed as a source patch in specfile"
exit 1
fi
fi 2>/dev/null
%endif
case "$patch" in
*.bz2) bunzip2 < "$RPM_SOURCE_DIR/$patch" | $patch_command ${1+"$@"} ;;
2011-11-07 13:16:50 +00:00
*.gz) gunzip < "$RPM_SOURCE_DIR/$patch" | $patch_command ${1+"$@"} ;;
*.xz) unxz < "$RPM_SOURCE_DIR/$patch" | $patch_command ${1+"$@"} ;;
2010-07-29 23:46:31 +00:00
*) $patch_command ${1+"$@"} < "$RPM_SOURCE_DIR/$patch" ;;
esac
}
# don't apply patch if it's empty
ApplyOptionalPatch()
{
local patch=$1
shift
if [ ! -f $RPM_SOURCE_DIR/$patch ]; then
exit 1
fi
local C=$(wc -l $RPM_SOURCE_DIR/$patch | awk '{print $1}')
if [ "$C" -gt 9 ]; then
ApplyPatch $patch ${1+"$@"}
fi
}
# First we unpack the kernel tarball.
# If this isn't the first make prep, we use links to the existing clean tarball
# which speeds things up quite a bit.
# Update to latest upstream.
%if 0%{?released_kernel}
2011-05-30 10:50:03 +00:00
%define vanillaversion 3.%{base_sublevel}
2010-07-29 23:46:31 +00:00
# non-released_kernel case
%else
%if 0%{?rcrev}
2011-05-30 10:50:03 +00:00
%define vanillaversion 3.%{upstream_sublevel}-rc%{rcrev}
2010-07-29 23:46:31 +00:00
%if 0%{?gitrev}
2011-05-30 10:50:03 +00:00
%define vanillaversion 3.%{upstream_sublevel}-rc%{rcrev}-git%{gitrev}
2010-07-29 23:46:31 +00:00
%endif
%else
# pre-{base_sublevel+1}-rc1 case
%if 0%{?gitrev}
2011-05-30 10:50:03 +00:00
%define vanillaversion 3.%{base_sublevel}-git%{gitrev}
2010-07-29 23:46:31 +00:00
%else
2011-05-30 10:50:03 +00:00
%define vanillaversion 3.%{base_sublevel}
2010-07-29 23:46:31 +00:00
%endif
%endif
%endif
# %%{vanillaversion} : the full version name, e.g. 2.6.35-rc6-git3
# %%{kversion} : the base version, e.g. 2.6.34
2010-07-29 23:46:31 +00:00
# Use kernel-%%{kversion}%%{?dist} as the top-level directory name
# so we can prep different trees within a single git directory.
2010-07-29 23:46:31 +00:00
# Build a list of the other top-level kernel tree directories.
# This will be used to hardlink identical vanilla subdirs.
2011-05-30 10:50:03 +00:00
sharedirs=$(find "$PWD" -maxdepth 1 -type d -name 'kernel-3.*' \
| grep -x -v "$PWD"/kernel-%{kversion}%{?dist}) ||:
2010-07-29 23:46:31 +00:00
# Delete all old stale trees.
if [ -d kernel-%{kversion}%{?dist} ]; then
cd kernel-%{kversion}%{?dist}
for i in linux-*
do
2012-03-22 16:05:20 +00:00
if [ -d $i ]; then
# Just in case we ctrl-c'd a prep already
rm -rf deleteme.%{_target_cpu}
# Move away the stale away, and delete in background.
mv $i deleteme-$i
rm -rf deleteme* &
fi
done
cd ..
fi
# Generate new tree
if [ ! -d kernel-%{kversion}%{?dist}/vanilla-%{vanillaversion} ]; then
if [ -d kernel-%{kversion}%{?dist}/vanilla-%{kversion} ]; then
# The base vanilla version already exists.
cd kernel-%{kversion}%{?dist}
2010-07-29 23:46:31 +00:00
# Any vanilla-* directories other than the base one are stale.
for dir in vanilla-*; do
[ "$dir" = vanilla-%{kversion} ] || rm -rf $dir &
done
else
rm -f pax_global_header
# Look for an identical base vanilla dir that can be hardlinked.
2010-07-29 23:46:31 +00:00
for sharedir in $sharedirs ; do
if [[ ! -z $sharedir && -d $sharedir/vanilla-%{kversion} ]] ; then
2010-07-29 23:46:31 +00:00
break
fi
done
if [[ ! -z $sharedir && -d $sharedir/vanilla-%{kversion} ]] ; then
%setup -q -n kernel-%{kversion}%{?dist} -c -T
cp -rl $sharedir/vanilla-%{kversion} .
2010-07-29 23:46:31 +00:00
else
%setup -q -n kernel-%{kversion}%{?dist} -c
mv linux-%{kversion} vanilla-%{kversion}
2010-07-29 23:46:31 +00:00
fi
fi
%if "%{kversion}" != "%{vanillaversion}"
for sharedir in $sharedirs ; do
if [[ ! -z $sharedir && -d $sharedir/vanilla-%{vanillaversion} ]] ; then
2010-07-29 23:46:31 +00:00
break
fi
done
if [[ ! -z $sharedir && -d $sharedir/vanilla-%{vanillaversion} ]] ; then
2010-07-29 23:46:31 +00:00
cp -rl $sharedir/vanilla-%{vanillaversion} .
2010-07-29 23:46:31 +00:00
else
# Need to apply patches to the base vanilla version.
2010-07-29 23:46:31 +00:00
cp -rl vanilla-%{kversion} vanilla-%{vanillaversion}
cd vanilla-%{vanillaversion}
# Update vanilla to the latest upstream.
# (non-released_kernel case only)
%if 0%{?rcrev}
ApplyPatch patch-3.%{upstream_sublevel}-rc%{rcrev}.xz
2010-07-29 23:46:31 +00:00
%if 0%{?gitrev}
ApplyPatch patch-3.%{upstream_sublevel}-rc%{rcrev}-git%{gitrev}.xz
2010-07-29 23:46:31 +00:00
%endif
%else
# pre-{base_sublevel+1}-rc1 case
%if 0%{?gitrev}
2012-03-22 16:05:20 +00:00
ApplyPatch patch-3.%{base_sublevel}-git%{gitrev}.xz
2010-07-29 23:46:31 +00:00
%endif
%endif
cd ..
fi
%endif
else
# We already have all vanilla dirs, just change to the top-level directory.
cd kernel-%{kversion}%{?dist}
2010-07-29 23:46:31 +00:00
fi
# Now build the fedora kernel tree.
cp -rl vanilla-%{vanillaversion} linux-%{KVERREL}
2010-07-29 23:46:31 +00:00
cd linux-%{KVERREL}
2010-07-29 23:46:31 +00:00
# released_kernel with possible stable updates
%if 0%{?stable_base}
ApplyPatch %{stable_patch_00}
%endif
%if 0%{?stable_rc}
ApplyPatch %{stable_patch_01}
%endif
%if %{using_upstream_branch}
### BRANCH APPLY ###
%endif
# Drop some necessary files from the source dir into the buildroot
cp $RPM_SOURCE_DIR/config-* .
cp %{SOURCE15} .
%if !%{debugbuildsenabled}
%if %{with_release}
# The normal build is a really debug build and the user has explicitly requested
# a release kernel. Change the config files into non-debug versions.
make -f %{SOURCE19} config-release
%endif
%endif
2010-07-29 23:46:31 +00:00
# Dynamically generate kernel .config files from config-* files
make -f %{SOURCE20} VERSION=%{version} configs
# Merge in any user-provided local config option changes
%if %{?all_arch_configs:1}%{!?all_arch_configs:0}
for i in %{all_arch_configs}
do
mv $i $i.tmp
./merge.pl %{SOURCE1000} $i.tmp > $i
rm $i.tmp
done
%endif
2010-07-29 23:46:31 +00:00
ApplyPatch linux-2.6-makefile-after_link.patch
#
# misc small stuff to make things compile
#
ApplyOptionalPatch linux-2.6-compile-fixes.patch
%if !%{nopatches}
# revert patches from upstream that conflict or that we get via other means
ApplyOptionalPatch linux-2.6-upstream-reverts.patch -R
ApplyPatch taint-vbox.patch
ApplyPatch vmbugon-warnon.patch
2010-07-29 23:46:31 +00:00
# Architecture patches
# x86(-64)
#
# ARM
#
ApplyPatch arm-export-read_current_timer.patch
ApplyPatch arm-allnoconfig-error-__LINUX_ARM_ARCH__-undeclared.patch
ApplyPatch arm-omapdrm-fixinc.patch
2013-01-04 21:16:10 +00:00
# ApplyPatch arm-tegra-nvec-kconfig.patch
ApplyPatch arm-tegra-usb-no-reset-linux33.patch
2010-07-29 23:46:31 +00:00
#
# bugfixes to drivers and filesystems
#
# ext4
# xfs
# btrfs
# eCryptfs
# NFSv4
# USB
# WMI
# ACPI
ApplyPatch linux-2.6-defaults-acpi-video.patch
ApplyPatch linux-2.6-acpi-video-dos.patch
ApplyPatch linux-2.6-acpi-debug-infinite-loop.patch
ApplyPatch acpi-sony-nonvs-blacklist.patch
2010-07-29 23:46:31 +00:00
#
# PCI
#
#
# SCSI Bits.
#
# ACPI
# ALSA
# Networking
# Misc fixes
# The input layer spews crap no-one cares about.
ApplyPatch linux-2.6-input-kill-stupid-messages.patch
# stop floppy.ko from autoloading during udev...
ApplyPatch die-floppy-die.patch
ApplyPatch linux-2.6.30-no-pcspkr-modalias.patch
# Allow to use 480600 baud on 16C950 UARTs
ApplyPatch linux-2.6-serial-460800.patch
# Silence some useless messages that still get printed with 'quiet'
ApplyPatch linux-2.6-silence-noise.patch
# Make fbcon not show the penguins with 'quiet'
ApplyPatch linux-2.6-silence-fbcon-logo.patch
# Changes to upstream defaults.
# /dev/crash driver.
ApplyPatch linux-2.6-crash-driver.patch
# Hack e1000e to work on Montevina SDV
ApplyPatch linux-2.6-e1000-ich9-montevina.patch
2010-07-29 23:46:31 +00:00
# crypto/
# secure boot
2013-01-04 21:16:10 +00:00
ApplyPatch secure-boot-20130104.patch
ApplyPatch efivarfs-nlink-fix.patch
2010-07-29 23:46:31 +00:00
# Assorted Virt Fixes
2010-10-16 17:19:24 +00:00
# DRM core
#ApplyPatch drm-edid-try-harder-to-fix-up-broken-headers.patch
2012-10-03 16:01:41 +00:00
#ApplyPatch drm-vgem.patch
2010-07-29 23:46:31 +00:00
2010-10-16 17:19:24 +00:00
# Nouveau DRM
# Intel DRM
2010-07-29 23:46:31 +00:00
ApplyOptionalPatch drm-intel-next.patch
ApplyPatch drm-i915-dp-stfu.patch
2010-07-29 23:46:31 +00:00
# silence the ACPI blacklist code
ApplyPatch linux-2.6-silence-acpi-blacklist.patch
ApplyPatch quite-apm.patch
2010-07-29 23:46:31 +00:00
# V4L/DVB updates/fixes/experimental drivers
# apply if non-empty
ApplyOptionalPatch linux-2.6-v4l-dvb-fixes.patch
ApplyOptionalPatch linux-2.6-v4l-dvb-update.patch
ApplyOptionalPatch linux-2.6-v4l-dvb-experimental.patch
# Patches headed upstream
ApplyPatch fs-proc-devtree-remove_proc_entry.patch
2010-07-29 23:46:31 +00:00
ApplyPatch disable-i8042-check-on-apple-mac.patch
# rhbz#605888
ApplyPatch dmar-disable-when-ricoh-multifunction.patch
ApplyPatch efi-dont-map-boot-services-on-32bit.patch
2012-03-22 16:05:20 +00:00
# FIXME: REBASE
#ApplyPatch hibernate-freeze-filesystems.patch
ApplyPatch lis3-improve-handling-of-null-rate.patch
#rhbz 754518
ApplyPatch scsi-sd_revalidate_disk-prevent-NULL-ptr-deref.patch
2012-03-07 22:12:06 +00:00
ApplyPatch weird-root-dentry-name-debug.patch
#selinux ptrace child permissions
ApplyPatch selinux-apply-different-permission-to-ptrace-child.patch
2012-10-15 20:57:08 +00:00
#Build patch, should go away
ApplyPatch irqnr-build.patch
2012-11-20 13:20:01 +00:00
#rhbz 859485
ApplyPatch vt-Drop-K_OFF-for-VC_MUTE.patch
#rhbz 883414
ApplyPatch mac80211-fix-ibss-scanning.patch
#rhbz 873107
ApplyPatch 0001-ACPI-sony-laptop-do-proper-memcpy-for-ACPI_TYPE_INTE.patch
2010-07-29 23:46:31 +00:00
# END OF PATCH APPLICATIONS
%endif
# Any further pre-build tree manipulations happen here.
chmod +x scripts/checkpatch.pl
# This Prevents scripts/setlocalversion from mucking with our version numbers.
2010-08-17 14:34:59 +00:00
touch .scmversion
2010-07-29 23:46:31 +00:00
# only deal with configs if we are going to build for the arch
%ifnarch %nobuildarches
mkdir configs
# Remove configs not for the buildarch
for cfg in kernel-%{version}-*.config; do
if [ `echo %{all_arch_configs} | grep -c $cfg` -eq 0 ]; then
rm -f $cfg
fi
done
%if !%{debugbuildsenabled}
rm -f kernel-%{version}-*debug.config
%endif
# now run oldconfig over all the config files
for i in *.config
do
mv $i .config
Arch=`head -1 .config | cut -b 3-`
make ARCH=$Arch listnewconfig | grep -E '^CONFIG_' >.newoptions || true
%if %{listnewconfig_fail}
if [ -s .newoptions ]; then
cat .newoptions
exit 1
fi
%endif
rm -f .newoptions
make ARCH=$Arch oldnoconfig
echo "# $Arch" > configs/$i
cat .config >> configs/$i
done
2010-07-29 23:46:31 +00:00
# end of kernel config
%endif
# get rid of unwanted files resulting from patch fuzz
find . \( -name "*.orig" -o -name "*~" \) -exec rm -f {} \; >/dev/null
# remove unnecessary SCM files
find . -name .gitignore -exec rm -f {} \; >/dev/null
2010-07-29 23:46:31 +00:00
cd ..
###
### build
###
%build
%if %{with_sparse}
%define sparse_mflags C=1
%endif
%if %{with_debuginfo}
2010-07-29 23:46:31 +00:00
# This override tweaks the kernel makefiles so that we run debugedit on an
# object before embedding it. When we later run find-debuginfo.sh, it will
# run debugedit again. The edits it does change the build ID bits embedded
# in the stripped object, but repeating debugedit is a no-op. We do it
# beforehand to get the proper final build ID bits into the embedded image.
# This affects the vDSO images in vmlinux, and the vmlinux image in bzImage.
export AFTER_LINK=\
'sh -xc "/usr/lib/rpm/debugedit -b $$RPM_BUILD_DIR -d /usr/src/debug \
-i $@ > $@.id"'
%endif
cp_vmlinux()
{
eu-strip --remove-comment -o "$2" "$1"
}
BuildKernel() {
MakeTarget=$1
KernelImage=$2
Flavour=$3
InstallName=${4:-vmlinuz}
# Pick the right config file for the kernel we're building
Config=kernel-%{version}-%{_target_cpu}${Flavour:+-${Flavour}}.config
DevelDir=/usr/src/kernels/%{KVERREL}${Flavour:+.${Flavour}}
# When the bootable image is just the ELF kernel, strip it.
# We already copy the unstripped file into the debuginfo package.
if [ "$KernelImage" = vmlinux ]; then
CopyKernel=cp_vmlinux
else
CopyKernel=cp
fi
KernelVer=%{version}-%{release}.%{_target_cpu}${Flavour:+.${Flavour}}
echo BUILDING A KERNEL FOR ${Flavour} %{_target_cpu}...
%if 0%{?stable_update}
# make sure SUBLEVEL is incremented on a stable release. Sigh 3.x.
perl -p -i -e "s/^SUBLEVEL.*/SUBLEVEL = %{?stablerev}/" Makefile
%endif
2010-07-29 23:46:31 +00:00
# make sure EXTRAVERSION says what we want it to say
perl -p -i -e "s/^EXTRAVERSION.*/EXTRAVERSION = -%{release}.%{_target_cpu}${Flavour:+.${Flavour}}/" Makefile
2010-07-29 23:46:31 +00:00
# if pre-rc1 devel kernel, must fix up PATCHLEVEL for our versioning scheme
2010-07-29 23:46:31 +00:00
%if !0%{?rcrev}
%if 0%{?gitrev}
perl -p -i -e 's/^PATCHLEVEL.*/PATCHLEVEL = %{upstream_sublevel}/' Makefile
2010-07-29 23:46:31 +00:00
%endif
%endif
# and now to start the build process
make -s mrproper
cp configs/$Config .config
%if %{signmodules}
cp %{SOURCE11} .
%endif
chmod +x scripts/sign-file
2010-07-29 23:46:31 +00:00
Arch=`head -1 .config | cut -b 3-`
echo USING ARCH=$Arch
2010-08-17 20:06:35 +00:00
make -s ARCH=$Arch oldnoconfig >/dev/null
%ifarch %{arm}
# http://lists.infradead.org/pipermail/linux-arm-kernel/2012-March/091404.html
make -s ARCH=$Arch V=1 %{?_smp_mflags} $MakeTarget %{?sparse_mflags} KALLSYMS_EXTRA_PASS=1
%else
make -s ARCH=$Arch V=1 %{?_smp_mflags} $MakeTarget %{?sparse_mflags}
%endif
make -s ARCH=$Arch V=1 %{?_smp_mflags} modules %{?sparse_mflags} || exit 1
2010-07-29 23:46:31 +00:00
# Start installing the results
%if %{with_debuginfo}
mkdir -p $RPM_BUILD_ROOT%{debuginfodir}/boot
mkdir -p $RPM_BUILD_ROOT%{debuginfodir}/%{image_install_path}
%endif
mkdir -p $RPM_BUILD_ROOT/%{image_install_path}
install -m 644 .config $RPM_BUILD_ROOT/boot/config-$KernelVer
install -m 644 System.map $RPM_BUILD_ROOT/boot/System.map-$KernelVer
# We estimate the size of the initramfs because rpm needs to take this size
# into consideration when performing disk space calculations. (See bz #530778)
dd if=/dev/zero of=$RPM_BUILD_ROOT/boot/initramfs-$KernelVer.img bs=1M count=20
if [ -f arch/$Arch/boot/zImage.stub ]; then
cp arch/$Arch/boot/zImage.stub $RPM_BUILD_ROOT/%{image_install_path}/zImage.stub-$KernelVer || :
fi
%if %{signmodules}
# Sign the image if we're using EFI
%pesign -s -i $KernelImage -o vmlinuz.signed
mv vmlinuz.signed $KernelImage
%endif
2010-07-29 23:46:31 +00:00
$CopyKernel $KernelImage \
$RPM_BUILD_ROOT/%{image_install_path}/$InstallName-$KernelVer
chmod 755 $RPM_BUILD_ROOT/%{image_install_path}/$InstallName-$KernelVer
# hmac sign the kernel for FIPS
echo "Creating hmac file: $RPM_BUILD_ROOT/%{image_install_path}/.vmlinuz-$KernelVer.hmac"
ls -l $RPM_BUILD_ROOT/%{image_install_path}/$InstallName-$KernelVer
sha512hmac $RPM_BUILD_ROOT/%{image_install_path}/$InstallName-$KernelVer | sed -e "s,$RPM_BUILD_ROOT,," > $RPM_BUILD_ROOT/%{image_install_path}/.vmlinuz-$KernelVer.hmac;
2010-07-29 23:46:31 +00:00
mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer
# Override $(mod-fw) because we don't want it to install any firmware
# we'll get it from the linux-firmware package and we don't want conflicts
2010-07-29 23:46:31 +00:00
make -s ARCH=$Arch INSTALL_MOD_PATH=$RPM_BUILD_ROOT modules_install KERNELRELEASE=$KernelVer mod-fw=
2010-07-29 23:46:31 +00:00
%ifarch %{vdso_arches}
make -s ARCH=$Arch INSTALL_MOD_PATH=$RPM_BUILD_ROOT vdso_install KERNELRELEASE=$KernelVer
if [ ! -s ldconfig-kernel.conf ]; then
echo > ldconfig-kernel.conf "\
# Placeholder file, no vDSO hwcap entries used in this kernel."
fi
%{__install} -D -m 444 ldconfig-kernel.conf \
$RPM_BUILD_ROOT/etc/ld.so.conf.d/kernel-$KernelVer.conf
%endif
# And save the headers/makefiles etc for building modules against
#
# This all looks scary, but the end result is supposed to be:
# * all arch relevant include/ files
# * all Makefile/Kconfig files
# * all script/ files
rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/build
rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/source
mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/build
(cd $RPM_BUILD_ROOT/lib/modules/$KernelVer ; ln -s build source)
# dirs for additional modules per module-init-tools, kbuild/modules.txt
mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/extra
mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/updates
# first copy everything
cp --parents `find -type f -name "Makefile*" -o -name "Kconfig*"` $RPM_BUILD_ROOT/lib/modules/$KernelVer/build
cp Module.symvers $RPM_BUILD_ROOT/lib/modules/$KernelVer/build
cp System.map $RPM_BUILD_ROOT/lib/modules/$KernelVer/build
if [ -s Module.markers ]; then
cp Module.markers $RPM_BUILD_ROOT/lib/modules/$KernelVer/build
fi
# then drop all but the needed Makefiles/Kconfig files
rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/Documentation
rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts
rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include
cp .config $RPM_BUILD_ROOT/lib/modules/$KernelVer/build
cp -a scripts $RPM_BUILD_ROOT/lib/modules/$KernelVer/build
if [ -d arch/$Arch/scripts ]; then
cp -a arch/$Arch/scripts $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/arch/%{_arch} || :
fi
if [ -f arch/$Arch/*lds ]; then
cp -a arch/$Arch/*lds $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/arch/%{_arch}/ || :
fi
rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts/*.o
rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts/*/*.o
2012-08-09 00:25:31 +00:00
%ifarch ppc ppc64 ppc64p7
2010-07-29 23:46:31 +00:00
cp -a --parents arch/powerpc/lib/crtsavres.[So] $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/
%endif
if [ -d arch/%{asmarch}/include ]; then
cp -a --parents arch/%{asmarch}/include $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/
fi
# include the machine specific headers for ARM variants, if available.
%ifarch %{arm}
if [ -d arch/%{asmarch}/mach-${Flavour}/include ]; then
cp -a --parents arch/%{asmarch}/mach-${Flavour}/include $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/
fi
%endif
2010-07-29 23:46:31 +00:00
cp -a include $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include
# Make sure the Makefile and version.h have a matching timestamp so that
# external modules can be built
2012-10-25 19:52:49 +00:00
touch -r $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/Makefile $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include/generated/uapi/linux/version.h
2010-07-29 23:46:31 +00:00
# Copy .config to include/config/auto.conf so "make prepare" is unnecessary.
cp $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/.config $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include/config/auto.conf
%if %{with_debuginfo}
2010-07-29 23:46:31 +00:00
if test -s vmlinux.id; then
cp vmlinux.id $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/vmlinux.id
else
2010-08-17 01:15:33 +00:00
echo >&2 "*** ERROR *** no vmlinux build ID! ***"
exit 1
2010-07-29 23:46:31 +00:00
fi
#
# save the vmlinux file for kernel debugging into the kernel-debuginfo rpm
#
mkdir -p $RPM_BUILD_ROOT%{debuginfodir}/lib/modules/$KernelVer
cp vmlinux $RPM_BUILD_ROOT%{debuginfodir}/lib/modules/$KernelVer
%endif
find $RPM_BUILD_ROOT/lib/modules/$KernelVer -name "*.ko" -type f >modnames
# mark modules executable so that strip-to-file can strip them
xargs --no-run-if-empty chmod u+x < modnames
# Generate a list of modules for block and networking.
grep -F /drivers/ modnames | xargs --no-run-if-empty nm -upA |
2010-07-29 23:46:31 +00:00
sed -n 's,^.*/\([^/]*\.ko\): *U \(.*\)$,\1 \2,p' > drivers.undef
collect_modules_list()
{
sed -r -n -e "s/^([^ ]+) \\.?($2)\$/\\1/p" drivers.undef |
LC_ALL=C sort -u > $RPM_BUILD_ROOT/lib/modules/$KernelVer/modules.$1
}
collect_modules_list networking \
'register_netdev|ieee80211_register_hw|usbnet_probe|phy_driver_register|rt(l_|2x00)(pci|usb)_probe'
2010-07-29 23:46:31 +00:00
collect_modules_list block \
'ata_scsi_ioctl|scsi_add_host|scsi_add_host_with_dma|blk_init_queue|register_mtd_blktrans|scsi_esp_register|scsi_register_device_handler'
collect_modules_list drm \
'drm_open|drm_init'
collect_modules_list modesetting \
'drm_crtc_init'
# detect missing or incorrect license tags
rm -f modinfo
while read i
do
echo -n "${i#$RPM_BUILD_ROOT/lib/modules/$KernelVer/} " >> modinfo
/sbin/modinfo -l $i >> modinfo
done < modnames
grep -E -v \
2010-07-29 23:46:31 +00:00
'GPL( v2)?$|Dual BSD/GPL$|Dual MPL/GPL$|GPL and additional rights$' \
modinfo && exit 1
rm -f modinfo modnames
# Call the modules-extra script to move things around
%{SOURCE17} $RPM_BUILD_ROOT/lib/modules/$KernelVer %{SOURCE16}
%if %{signmodules}
# Save off the .tmp_versions/ directory. We'll use it in the
# __debug_install_post macro below to sign the right things
2012-11-15 00:54:44 +00:00
# Also save the signing keys so we actually sign the modules with the
# right key.
cp -r .tmp_versions .tmp_versions.sign${Flavour:+.${Flavour}}
2012-11-15 00:54:44 +00:00
cp signing_key.priv signing_key.priv.sign${Flavour:+.${Flavour}}
cp signing_key.x509 signing_key.x509.sign${Flavour:+.${Flavour}}
%endif
# remove files that will be auto generated by depmod at rpm -i time
for i in alias alias.bin builtin.bin ccwmap dep dep.bin ieee1394map inputmap isapnpmap ofmap pcimap seriomap symbols symbols.bin usbmap devname softdep
do
rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/modules.$i
done
2010-07-29 23:46:31 +00:00
# Move the devel headers out of the root file system
mkdir -p $RPM_BUILD_ROOT/usr/src/kernels
2010-07-29 23:46:31 +00:00
mv $RPM_BUILD_ROOT/lib/modules/$KernelVer/build $RPM_BUILD_ROOT/$DevelDir
# This is going to create a broken link during the build, but we don't use
# it after this point. We need the link to actually point to something
# when kernel-devel is installed, and a relative link doesn't work across
# the F17 UsrMove feature.
ln -sf $DevelDir $RPM_BUILD_ROOT/lib/modules/$KernelVer/build
# prune junk from kernel-devel
find $RPM_BUILD_ROOT/usr/src/kernels -name ".*.cmd" -exec rm -f {} \;
2010-07-29 23:46:31 +00:00
}
###
# DO it...
###
# prepare directories
rm -rf $RPM_BUILD_ROOT
mkdir -p $RPM_BUILD_ROOT/boot
mkdir -p $RPM_BUILD_ROOT%{_libexecdir}
cd linux-%{KVERREL}
2010-07-29 23:46:31 +00:00
%if %{with_debug}
BuildKernel %make_target %kernel_image debug
%endif
%if %{with_pae_debug}
BuildKernel %make_target %kernel_image PAEdebug
%endif
%if %{with_pae}
BuildKernel %make_target %kernel_image PAE
%endif
%if %{with_kirkwood}
BuildKernel %make_target %kernel_image kirkwood
%endif
%if %{with_omap}
BuildKernel %make_target %kernel_image omap
%endif
%if %{with_tegra}
BuildKernel %make_target %kernel_image tegra
%endif
2010-07-29 23:46:31 +00:00
%if %{with_up}
BuildKernel %make_target %kernel_image
%endif
%if %{with_smp}
BuildKernel %make_target %kernel_image smp
%endif
%global perf_make \
make %{?_smp_mflags} -C tools/perf -s V=1 WERROR=0 NO_LIBUNWIND=1 HAVE_CPLUS_DEMANGLE=1 prefix=%{_prefix}
%if %{with_perf}
2011-08-18 01:18:53 +00:00
# perf
%{perf_make} all
%{perf_make} man || %{doc_build_fail}
%endif
2011-08-18 01:18:53 +00:00
%if %{with_tools}
2011-08-18 01:18:53 +00:00
%ifarch %{cpupowerarchs}
# cpupower
# make sure version-gen.sh is executable.
chmod +x tools/power/cpupower/utils/version-gen.sh
make %{?_smp_mflags} -C tools/power/cpupower CPUFREQ_BENCH=false
%ifarch %{ix86}
2011-08-18 01:18:53 +00:00
cd tools/power/cpupower/debug/i386
make %{?_smp_mflags} centrino-decode powernow-k8-decode
cd -
%endif
%ifarch x86_64
cd tools/power/cpupower/debug/x86_64
make %{?_smp_mflags} centrino-decode powernow-k8-decode
cd -
%endif
%ifarch %{ix86} x86_64
cd tools/power/x86/x86_energy_perf_policy/
make
cd -
cd tools/power/x86/turbostat
make
cd -
%endif #turbostat/x86_energy_perf_policy
2011-08-18 01:18:53 +00:00
%endif
2010-07-29 23:46:31 +00:00
%endif
%if %{with_doc}
# Make the HTML and man pages.
make htmldocs mandocs || %{doc_build_fail}
2010-07-29 23:46:31 +00:00
# sometimes non-world-readable files sneak into the kernel source tree
chmod -R a=rX Documentation
find Documentation -type d | xargs chmod u+w
%endif
###
### Special hacks for debuginfo subpackages.
###
# This macro is used by %%install, so we must redefine it before that.
%define debug_package %{nil}
# In the modsign case, we do 3 things. 1) We check the "flavour" and hard
# code the value in the following invocations. This is somewhat sub-optimal
# but we're doing this inside of an RPM macro and it isn't as easy as it
# could be because of that. 2) We restore the .tmp_versions/ directory from
# the one we saved off in BuildKernel above. This is to make sure we're
# signing the modules we actually built/installed in that flavour. 3) We
# grab the arch and invoke 'make modules_sign' and the mod-extra-sign.sh
# commands to actually sign the modules.
#
# We have to do all of those things _after_ find-debuginfo runs, otherwise
# that will strip the signature off of the modules.
%if %{with_debuginfo}
2010-07-29 23:46:31 +00:00
%define __debug_install_post \
/usr/lib/rpm/find-debuginfo.sh %{debuginfo_args} %{_builddir}/%{?buildsubdir}\
if [ "%{signmodules}" == "1" ]; \
then \
if [ "%{with_pae}" != "0" ]; \
then \
Arch=`head -1 configs/kernel-%{version}-%{_target_cpu}-PAE.config | cut -b 3-` \
rm -rf .tmp_versions \
mv .tmp_versions.sign.PAE .tmp_versions \
2012-11-15 00:54:44 +00:00
mv signing_key.priv.sign.PAE signing_key.priv \
mv signing_key.x509.sign.PAE signing_key.x509 \
make -s ARCH=$Arch V=1 INSTALL_MOD_PATH=$RPM_BUILD_ROOT modules_sign KERNELRELEASE=%{KVERREL}.PAE \
%{SOURCE18} $RPM_BUILD_ROOT/lib/modules/%{KVERREL}.PAE/extra/ \
fi \
if [ "%{with_debug}" != "0" ]; \
then \
Arch=`head -1 configs/kernel-%{version}-%{_target_cpu}-debug.config | cut -b 3-` \
rm -rf .tmp_versions \
mv .tmp_versions.sign.debug .tmp_versions \
2012-11-15 00:54:44 +00:00
mv signing_key.priv.sign.debug signing_key.priv \
mv signing_key.x509.sign.debug signing_key.x509 \
make -s ARCH=$Arch V=1 INSTALL_MOD_PATH=$RPM_BUILD_ROOT modules_sign KERNELRELEASE=%{KVERREL}.debug \
%{SOURCE18} $RPM_BUILD_ROOT/lib/modules/%{KVERREL}.debug/extra/ \
fi \
if [ "%{with_pae_debug}" != "0" ]; \
then \
Arch=`head -1 configs/kernel-%{version}-%{_target_cpu}-PAEdebug.config | cut -b 3-` \
rm -rf .tmp_versions \
mv .tmp_versions.sign.PAEdebug .tmp_versions \
2012-11-15 00:54:44 +00:00
mv signing_key.priv.sign.PAEdebug signing_key.priv \
mv signing_key.x509.sign.PAEdebug signing_key.x509 \
make -s ARCH=$Arch V=1 INSTALL_MOD_PATH=$RPM_BUILD_ROOT modules_sign KERNELRELEASE=%{KVERREL}.PAEdebug \
%{SOURCE18} $RPM_BUILD_ROOT/lib/modules/%{KVERREL}.PAEdebug/extra/ \
fi \
if [ "%{with_up}" != "0" ]; \
then \
Arch=`head -1 configs/kernel-%{version}-%{_target_cpu}.config | cut -b 3-` \
rm -rf .tmp_versions \
mv .tmp_versions.sign .tmp_versions \
2012-11-15 00:54:44 +00:00
mv signing_key.priv.sign signing_key.priv \
mv signing_key.x509.sign signing_key.x509 \
make -s ARCH=$Arch V=1 INSTALL_MOD_PATH=$RPM_BUILD_ROOT modules_sign KERNELRELEASE=%{KVERREL} \
%{SOURCE18} $RPM_BUILD_ROOT/lib/modules/%{KVERREL}/extra/ \
fi \
fi \
2010-07-29 23:46:31 +00:00
%{nil}
%ifnarch noarch
%global __debug_package 1
%files -f debugfiles.list debuginfo-common-%{_target_cpu}
%defattr(-,root,root)
%endif
%endif
###
### install
###
%install
cd linux-%{KVERREL}
2010-07-29 23:46:31 +00:00
%if %{with_doc}
docdir=$RPM_BUILD_ROOT%{_datadir}/doc/kernel-doc-%{rpmversion}
man9dir=$RPM_BUILD_ROOT%{_datadir}/man/man9
# copy the source over
mkdir -p $docdir
tar -h -f - --exclude=man --exclude='.*' -c Documentation | tar xf - -C $docdir
2010-07-29 23:46:31 +00:00
# Install man pages for the kernel API.
mkdir -p $man9dir
find Documentation/DocBook/man -name '*.9.gz' -print0 |
xargs -0 --no-run-if-empty %{__install} -m 444 -t $man9dir $m
ls $man9dir | grep -q '' || > $man9dir/BROKEN
%endif # with_doc
2011-08-18 01:18:53 +00:00
# We have to do the headers install before the tools install because the
# kernel headers_install will remove any header files in /usr/include that
# it doesn't install itself.
2010-07-29 23:46:31 +00:00
%if %{with_headers}
# Install kernel headers
make ARCH=%{hdrarch} INSTALL_HDR_PATH=$RPM_BUILD_ROOT/usr headers_install
# Do headers_check but don't die if it fails.
make ARCH=%{hdrarch} INSTALL_HDR_PATH=$RPM_BUILD_ROOT/usr headers_check \
> hdrwarnings.txt || :
if grep -q exist hdrwarnings.txt; then
sed s:^$RPM_BUILD_ROOT/usr/include/:: hdrwarnings.txt
# Temporarily cause a build failure if header inconsistencies.
# exit 1
fi
find $RPM_BUILD_ROOT/usr/include \
\( -name .install -o -name .check -o \
-name ..install.cmd -o -name ..check.cmd \) | xargs rm -f
# glibc provides scsi headers for itself, for now
rm -rf $RPM_BUILD_ROOT/usr/include/scsi
rm -f $RPM_BUILD_ROOT/usr/include/asm*/atomic.h
rm -f $RPM_BUILD_ROOT/usr/include/asm*/io.h
rm -f $RPM_BUILD_ROOT/usr/include/asm*/irq.h
%endif
%if %{with_perf}
2011-08-18 01:18:53 +00:00
# perf tool binary and supporting scripts/binaries
%{perf_make} DESTDIR=$RPM_BUILD_ROOT install
2011-08-18 01:18:53 +00:00
2011-10-31 20:01:28 +00:00
# python-perf extension
%{perf_make} DESTDIR=$RPM_BUILD_ROOT install-python_ext
2011-10-31 20:01:28 +00:00
2011-08-18 01:18:53 +00:00
# perf man pages (note: implicit rpm magic compresses them later)
%{perf_make} DESTDIR=$RPM_BUILD_ROOT install-man || %{doc_build_fail}
%endif
2011-08-18 01:18:53 +00:00
%if %{with_tools}
2011-08-18 01:18:53 +00:00
%ifarch %{cpupowerarchs}
make -C tools/power/cpupower DESTDIR=$RPM_BUILD_ROOT libdir=%{_libdir} mandir=%{_mandir} CPUFREQ_BENCH=false install
2011-08-18 01:18:53 +00:00
rm -f %{buildroot}%{_libdir}/*.{a,la}
%find_lang cpupower
mv cpupower.lang ../
%ifarch %{ix86}
2011-08-18 01:18:53 +00:00
cd tools/power/cpupower/debug/i386
install -m755 centrino-decode %{buildroot}%{_bindir}/centrino-decode
install -m755 powernow-k8-decode %{buildroot}%{_bindir}/powernow-k8-decode
cd -
%endif
%ifarch x86_64
cd tools/power/cpupower/debug/x86_64
install -m755 centrino-decode %{buildroot}%{_bindir}/centrino-decode
install -m755 powernow-k8-decode %{buildroot}%{_bindir}/powernow-k8-decode
cd -
%endif
2011-08-18 01:18:53 +00:00
chmod 0755 %{buildroot}%{_libdir}/libcpupower.so*
mkdir -p %{buildroot}%{_unitdir} %{buildroot}%{_sysconfdir}/sysconfig
install -m644 %{SOURCE2000} %{buildroot}%{_unitdir}/cpupower.service
install -m644 %{SOURCE2001} %{buildroot}%{_sysconfdir}/sysconfig/cpupower
%endif
%ifarch %{ix86} x86_64
mkdir -p %{buildroot}%{_mandir}/man8
cd tools/power/x86/x86_energy_perf_policy
make DESTDIR=%{buildroot} install
cd -
cd tools/power/x86/turbostat
make DESTDIR=%{buildroot} install
cd -
%endif #turbostat/x86_energy_perf_policy
2011-08-18 01:18:53 +00:00
%endif
2010-07-29 23:46:31 +00:00
%if %{with_bootwrapper}
make DESTDIR=$RPM_BUILD_ROOT bootwrapper_install WRAPPER_OBJDIR=%{_libdir}/kernel-wrapper WRAPPER_DTSDIR=%{_libdir}/kernel-wrapper/dts
%endif
###
### clean
###
%clean
rm -rf $RPM_BUILD_ROOT
###
### scripts
###
%if %{with_tools}
2011-08-18 01:18:53 +00:00
%post -n kernel-tools
/sbin/ldconfig
%postun -n kernel-tools
/sbin/ldconfig
%endif
2011-08-18 01:18:53 +00:00
2010-07-29 23:46:31 +00:00
#
# This macro defines a %%post script for a kernel*-devel package.
# %%kernel_devel_post [<subpackage>]
#
%define kernel_devel_post() \
%{expand:%%post %{?1:%{1}-}devel}\
if [ -f /etc/sysconfig/kernel ]\
then\
. /etc/sysconfig/kernel || exit $?\
fi\
if [ "$HARDLINK" != "no" -a -x /usr/sbin/hardlink ]\
then\
(cd /usr/src/kernels/%{KVERREL}%{?1:.%{1}} &&\
/usr/bin/find . -type f | while read f; do\
hardlink -c /usr/src/kernels/*.fc*.*/$f $f\
done)\
fi\
%{nil}
#
# This macro defines a %%post script for a kernel*-modules-extra package.
# %%kernel_modules-extra_post [<subpackage>]
#
%define kernel_modules_extra_post() \
%{expand:%%post %{?1:%{1}-}modules-extra}\
/sbin/depmod -a %{KVERREL}%{?1:.%{1}}\
%{nil}
2011-08-18 01:18:53 +00:00
2010-07-29 23:46:31 +00:00
# This macro defines a %%posttrans script for a kernel package.
# %%kernel_variant_posttrans [<subpackage>]
# More text can follow to go at the end of this variant's %%post.
#
%define kernel_variant_posttrans() \
%{expand:%%posttrans %{?1}}\
/sbin/new-kernel-pkg --package kernel%{?-v:-%{-v*}} --mkinitrd --dracut --depmod --update %{KVERREL}%{?-v:.%{-v*}} || exit $?\
/sbin/new-kernel-pkg --package kernel%{?1:-%{1}} --rpmposttrans %{KVERREL}%{?1:.%{1}} || exit $?\
%{nil}
#
# This macro defines a %%post script for a kernel package and its devel package.
# %%kernel_variant_post [-v <subpackage>] [-r <replace>]
# More text can follow to go at the end of this variant's %%post.
#
%define kernel_variant_post(v:r:) \
%{expand:%%kernel_devel_post %{?-v*}}\
%{expand:%%kernel_modules_extra_post %{?-v*}}\
2010-07-29 23:46:31 +00:00
%{expand:%%kernel_variant_posttrans %{?-v*}}\
%{expand:%%post %{?-v*}}\
%{-r:\
if [ `uname -i` == "x86_64" -o `uname -i` == "i386" ] &&\
[ -f /etc/sysconfig/kernel ]; then\
/bin/sed -r -i -e 's/^DEFAULTKERNEL=%{-r*}$/DEFAULTKERNEL=kernel%{?-v:-%{-v*}}/' /etc/sysconfig/kernel || exit $?\
fi}\
%{expand:\
/sbin/new-kernel-pkg --package kernel%{?-v:-%{-v*}} --install %{KVERREL}%{?-v:.%{-v*}} || exit $?\
}\
%{nil}
#
# This macro defines a %%preun script for a kernel package.
# %%kernel_variant_preun <subpackage>
#
%define kernel_variant_preun() \
%{expand:%%preun %{?1}}\
/sbin/new-kernel-pkg --rminitrd --rmmoddep --remove %{KVERREL}%{?1:.%{1}} || exit $?\
%{nil}
%kernel_variant_preun
%kernel_variant_post -r kernel-smp
%kernel_variant_preun smp
%kernel_variant_post -v smp
%kernel_variant_preun PAE
%kernel_variant_post -v PAE -r (kernel|kernel-smp)
%kernel_variant_preun debug
%kernel_variant_post -v debug
%kernel_variant_post -v PAEdebug -r (kernel|kernel-smp)
%kernel_variant_preun PAEdebug
%kernel_variant_preun kirkwood
%kernel_variant_post -v kirkwood
%kernel_variant_preun omap
%kernel_variant_post -v omap
%kernel_variant_preun tegra
%kernel_variant_post -v tegra
2010-07-29 23:46:31 +00:00
if [ -x /sbin/ldconfig ]
then
/sbin/ldconfig -X || exit $?
fi
###
### file lists
###
%if %{with_headers}
%files headers
%defattr(-,root,root)
/usr/include/*
%endif
%if %{with_bootwrapper}
%files bootwrapper
%defattr(-,root,root)
/usr/sbin/*
%{_libdir}/kernel-wrapper
%endif
# only some architecture builds need kernel-doc
%if %{with_doc}
%files doc
%defattr(-,root,root)
%{_datadir}/doc/kernel-doc-%{rpmversion}/Documentation/*
%dir %{_datadir}/doc/kernel-doc-%{rpmversion}/Documentation
%dir %{_datadir}/doc/kernel-doc-%{rpmversion}
%{_datadir}/man/man9/*
%endif
%if %{with_perf}
%files -n perf
2010-07-29 23:46:31 +00:00
%defattr(-,root,root)
%{_bindir}/perf
%dir %{_libexecdir}/perf-core
%{_libexecdir}/perf-core/*
%{_mandir}/man[1-8]/perf*
2012-10-05 20:39:01 +00:00
%{_sysconfdir}/bash_completion.d/perf
%doc linux-%{KVERREL}/tools/perf/Documentation/examples.txt
%files -n python-perf
%defattr(-,root,root)
%{python_sitearch}
%if %{with_debuginfo}
%files -f perf-debuginfo.list -n perf-debuginfo
%defattr(-,root,root)
%files -f python-perf-debuginfo.list -n python-perf-debuginfo
%defattr(-,root,root)
%endif
%endif # with_perf
2011-03-04 23:40:12 +00:00
%if %{with_tools}
%files -n kernel-tools -f cpupower.lang
%defattr(-,root,root)
2011-08-18 01:18:53 +00:00
%ifarch %{cpupowerarchs}
%{_bindir}/cpupower
%ifarch %{ix86} x86_64
2011-08-18 01:18:53 +00:00
%{_bindir}/centrino-decode
%{_bindir}/powernow-k8-decode
%endif
2011-08-18 01:18:53 +00:00
%{_unitdir}/cpupower.service
%{_mandir}/man[1-8]/cpupower*
2011-08-18 01:18:53 +00:00
%config(noreplace) %{_sysconfdir}/sysconfig/cpupower
%ifarch %{ix86} x86_64
%{_bindir}/x86_energy_perf_policy
%{_mandir}/man8/x86_energy_perf_policy*
%{_bindir}/turbostat
%{_mandir}/man8/turbostat*
%endif
2011-08-18 01:18:53 +00:00
%endif
2011-03-04 23:40:12 +00:00
%if %{with_debuginfo}
2011-08-18 01:18:53 +00:00
%files -f kernel-tools-debuginfo.list -n kernel-tools-debuginfo
2011-03-04 23:40:12 +00:00
%defattr(-,root,root)
%endif
2011-08-18 01:18:53 +00:00
%ifarch %{cpupowerarchs}
%files -n kernel-tools-libs
%{_libdir}/libcpupower.so.0
%{_libdir}/libcpupower.so.0.0.0
%files -n kernel-tools-libs-devel
2011-08-18 01:18:53 +00:00
%{_libdir}/libcpupower.so
%{_includedir}/cpufreq.h
%endif
%endif # with_perf
2010-07-29 23:46:31 +00:00
# This is %%{image_install_path} on an arch where that includes ELF files,
2010-07-29 23:46:31 +00:00
# or empty otherwise.
%define elf_image_install_path %{?kernel_image_elf:%{image_install_path}}
#
# This macro defines the %%files sections for a kernel package
# and its devel and debuginfo packages.
# %%kernel_variant_files [-k vmlinux] <condition> <subpackage>
#
%define kernel_variant_files(k:) \
%if %{1}\
%{expand:%%files %{?2}}\
%defattr(-,root,root)\
2010-11-22 13:19:35 +00:00
/%{image_install_path}/%{?-k:%{-k*}}%{!?-k:vmlinuz}-%{KVERREL}%{?2:.%{2}}\
/%{image_install_path}/.vmlinuz-%{KVERREL}%{?2:.%{2}}.hmac \
%attr(600,root,root) /boot/System.map-%{KVERREL}%{?2:.%{2}}\
2010-07-29 23:46:31 +00:00
/boot/config-%{KVERREL}%{?2:.%{2}}\
%dir /lib/modules/%{KVERREL}%{?2:.%{2}}\
/lib/modules/%{KVERREL}%{?2:.%{2}}/kernel\
/lib/modules/%{KVERREL}%{?2:.%{2}}/build\
/lib/modules/%{KVERREL}%{?2:.%{2}}/source\
/lib/modules/%{KVERREL}%{?2:.%{2}}/updates\
%ifarch %{vdso_arches}\
/lib/modules/%{KVERREL}%{?2:.%{2}}/vdso\
/etc/ld.so.conf.d/kernel-%{KVERREL}%{?2:.%{2}}.conf\
%endif\
/lib/modules/%{KVERREL}%{?2:.%{2}}/modules.*\
%ghost /boot/initramfs-%{KVERREL}%{?2:.%{2}}.img\
%{expand:%%files %{?2:%{2}-}devel}\
%defattr(-,root,root)\
/usr/src/kernels/%{KVERREL}%{?2:.%{2}}\
%{expand:%%files %{?2:%{2}-}modules-extra}\
%defattr(-,root,root)\
/lib/modules/%{KVERREL}%{?2:.%{2}}/extra\
2010-07-29 23:46:31 +00:00
%if %{with_debuginfo}\
%ifnarch noarch\
%{expand:%%files -f debuginfo%{?2}.list %{?2:%{2}-}debuginfo}\
%defattr(-,root,root)\
%endif\
%endif\
%endif\
%{nil}
%kernel_variant_files %{with_up}
%kernel_variant_files %{with_smp} smp
%kernel_variant_files %{with_debug} debug
%kernel_variant_files %{with_pae} PAE
%kernel_variant_files %{with_pae_debug} PAEdebug
%kernel_variant_files %{with_kirkwood} kirkwood
%kernel_variant_files %{with_omap} omap
%kernel_variant_files %{with_tegra} tegra
2010-07-29 23:46:31 +00:00
# plz don't put in a version string unless you're going to tag
# and build.
# ___________________________________________________________
2012-09-05 18:29:19 +00:00
# / This branch is for Fedora 19. You probably want to commit \
# \ to the F-18 branch instead, or in addition to this one. /
# -----------------------------------------------------------
# \ ^__^
# \ (@@)\_______
# (__)\ )\/\
# ||----w |
# || ||
2010-07-29 23:46:31 +00:00
%changelog
2013-01-08 15:35:57 +00:00
* Tue Jan 08 2013 Justin M. Forbes <jforbes@redhat.com> - 3.8.0-0.rc2.git3.1
- Linux v3.8-rc2-222-g2a893f9
2013-01-07 21:24:21 +00:00
* Mon Jan 07 2013 Justin M. Forbes <jforbes@redhat.com> - 3.8.0-0.rc2.git2.1
- Linux v3.8-rc2-191-gd287b87
- remove the namei-include.patch, it's upstream now
2013-01-07 21:24:21 +00:00
* Mon Jan 07 2013 Justin M. Forbes <jforbes@redhat.com> - 3.8.0-0.rc2.git1.2
- Reenable debugging options.
* Mon Jan 7 2013 Peter Robinson <pbrobinson@fedoraproject.org>
- Further ARM config updates
- Add patch to fix building omapdrm
2013-01-07 16:50:09 +00:00
* Mon Jan 07 2013 Justin M. Forbes <jforbes@redhat.com>
- Bye sparc
2013-01-07 16:40:58 +00:00
* Mon Jan 07 2013 Justin M. Forbes <jforbes@redhat.com>
- Fix up configs for build
* Mon Jan 07 2013 Josh Boyer <jwboyer@redhat.com>
- Patch to fix efivarfs underflow from Lingzhu Xiang (rhbz 888163)
* Sat Jan 5 2013 Peter Robinson <pbrobinson@fedoraproject.org>
- Initial update of ARM configs for 3.8
- Enable DRM driver for tegra
- Drop separate imx kernel. Will be reintroduced soon in unified
2013-01-04 21:16:10 +00:00
* Fri Jan 04 2013 Justin M. Forbes <jforbes@redhat.com> - 3.8.0-0.rc2.git1.1
- Linux v3.8-rc2-116-g5f243b9
* Thu Jan 03 2013 Justin M. Forbes <jforbes@redhat.com>
- Initial 3.8-rc2 rebase
2013-01-02 14:08:37 +00:00
* Wed Jan 02 2013 Josh Boyer <jwboyer@redhat.com>
- BR the hostname package (rhbz 886113)
* Tue Dec 18 2012 Dave Jones <davej@redhat.com>
- On rebases, list new config options.
(Revert to pre-18 behaviour)
* Mon Dec 17 2012 Josh Boyer <jwboyer@redhat.com>
- Fix oops in sony-laptop setup (rhbz 873107)
* Fri Dec 14 2012 Peter Robinson <pbrobinson@fedoraproject.org>
- Add patch to fix arm imx drm driver build
* Wed Dec 12 2012 Josh Boyer <jwboyer@redhat.com>
- Fix infinite loop in efi signature parser
- Don't error out if db doesn't exist
* Tue Dec 11 2012 Peter Robinson <pbrobinson@fedoraproject.org>
- Update ARM configs for latest 3.7
- Drop highbank kernel build variant as its in unified kernel
* Tue Dec 11 2012 Josh Boyer <jwboyer@redhat.com>
- Update secure boot patches to include MoK support
- Fix IBSS scanning in mac80211 (rhbz 883414)
2012-12-11 16:57:22 +00:00
* Tue Dec 11 2012 Dave Jones <davej@redhat.com> - 3.7.0-2
- Reenable debugging options.
2012-12-11 14:49:11 +00:00
* Tue Dec 11 2012 Dave Jones <davej@redhat.com> - 3.7.0-1
- Linux v3.7
2010-07-29 23:46:31 +00:00
###
# The following Emacs magic makes C-c C-e use UTC dates.
# Local Variables:
# rpm-change-log-uses-utc: t
# End:
###