
# Version options
%define kernel_base_version 2.4.22
%define kernel_extra_version	%nil
# Numeric extra version scheme developed by Alexander Bokovoy:
# 0.0.X -- preX
# 0.X.0 -- rcX
# 1.0.0 -- release
%define kernel_extra_version_numeric 1.0.0
%define krelease alt17

%define base_flavour	std
%define subflavour	up

%define flavour		%base_flavour-%subflavour

# Build options
# You can change compiler by editing and uncommenting this line:
#define kgcc gcc-3.2

# Enable/disable SGML docs formatting
%def_enable docs

# Fixes:
%add_patch_list kernel-fix-build

%add_patch_list kernel-fix-security-owl
%add_patch_list kernel-fix-security

%add_patch_list kernel-fix-net
%add_patch_list kernel-fix-core 
%add_patch_list kernel-fix-fs
%add_patch_list kernel-fix-lvm

%add_patch_list kernel-fix-drivers-ide
%add_patch_list kernel-fix-drivers-net
%add_patch_list kernel-fix-drivers-pci
%add_patch_list kernel-fix-drivers-scsi 
%add_patch_list kernel-fix-drivers-sound 
%add_patch_list kernel-fix-drivers-usb
%add_patch_list kernel-fix-drivers-cdrom
%add_patch_list kernel-fix-drivers-char
%add_patch_list kernel-fix-drivers-md
%add_patch_list kernel-fix-drivers-mtd
%add_patch_list kernel-fix-drivers-video
%add_patch_list kernel-fix-drivers-ieee1394
%add_patch_list kernel-fix-drivers-atm
%add_patch_list kernel-fix-drivers-pnp
%add_patch_list kernel-fix-drivers-block


##################
%add_patch_list kernel-feat-fs-xfs
%add_patch_list kernel-feat-acpi
%add_patch_list kernel-feat-cpufreq
#add_patch_list kernel-feat-core-O1sched
#add_patch_list kernel-feat-addon
#add_patch_list kernel-feat-bttv
%add_patch_list kernel-feat-i2c kernel-feat-fs-ntfs
%add_patch_list kernel-feat-kconfig
%add_patch_list kernel-feat-crypto
%add_patch_list kernel-feat-drivers-usb
%add_patch_list kernel-feat-drivers-block-enbd
#add_patch_list kernel-feat-drivers-pktcdvd
%add_patch_list kernel-feat-drivers-video-splash
%add_patch_list kernel-feat-net-ppp-mppe
%add_patch_list kernel-feat-net-ipsec
%add_patch_list kernel-feat-drivers-media-v4l2
#add_patch_list kernel-feat-saa7134
%add_patch_list	kernel-feat-drivers-net-sk98lin
%add_patch_list	kernel-feat-drivers-sound-emu10k1
%add_patch_list kernel-feat-drivers-libata
%add_patch_list kernel-feat-drivers-net-pcnet32-old

## Don't edit below this line ##################################

%define	kversion %kernel_base_version

%{?__ccache_cc: %define _disable_ccache 1}

%if_enabled ccache
%define kcc "ccache %kgcc"
%else
%define kcc "%kgcc"
%endif

%ifdef use_ccache
%define kcc "ccache %kgcc"
%else
%define kcc "%kgcc"
%endif

Name: kernel-image-%flavour
Version: %kversion
Release: %krelease

Summary: The Linux kernel (the core of the Linux operating system)
License: GPL
Group: System/Kernel and hardware
URL: http://www.kernel.org/
Packager: Kernel Maintainer Team <kernel@packages.altlinux.org>

Source1: config-%kversion-%flavour
Source2: rhkmvtag.c
%define rhkmvtag %SOURCE2

Source3: kernel-headers-Makefile.patch

ExclusiveOS: Linux

BuildRequires: coreutils libdb4-devel perl flex dev86
BuildRequires: rpm >= 4.0.2-75
BuildRequires: kernel-source-%kernel_base_version = %kernel_extra_version_numeric
BuildRequires: kernel-build-tools
BuildRequires: %get_patch_list
BuildRequires: %(echo %kgcc | sed -e "s/-//")
BuildRequires: kernel-fix-core >= 2003.06.11

%if_enabled docs
BuildRequires: docbook-utils transfig ghostscript
%endif

%if_enabled ccache
BuildRequires: ccache
%endif

%ifdef use_ccache
BuildRequires: ccache
%endif

Requires: bootloader-utils >= 0.1-alt7, modutils, mkinitrd >= 1:2.8.6-alt2
Provides: kernel = %kversion
Provides: kernel24 = %kversion

Prereq:		coreutils
Prereq:		modutils >= 2.4.17
Prereq:		bootloader-utils >= 0.1-alt7
Prereq:		mkinitrd >= 1:2.8.6-alt2
Obsoletes:	kernel-modules, kernel-modules-i2c-%flavour
ExclusiveArch:	%ix86


%description
This package contains the Linux kernel that is used to boot and run
your system. It contains few device drivers for specific hardware.
Most hardware is instead supported by modules loaded after booting.
Patches included:%format_patch_list

%package -n kernel-headers-%flavour
Summary: Header files for the Linux kernel
Group: System/Kernel and hardware
Requires: kernel-headers-common >= 1.1
Obsoletes: kernel-headers-i2c-%flavour
Provides: kernel-headers-%base_flavour = %version-%release
Provides: kernel-headers = %version
Provides: kernel24-headers = %version

%description -n kernel-headers-%flavour
These are the C header files for the Linux kernel, which define
structures and constants that are needed when building most standard
programs under Linux, as well as to rebuild the kernel.
Patches included:%format_patch_list

%package -n kernel-headers-modules-%flavour
Summary: SCSI header files for the Linux kernel
Group: System/Kernel and hardware
Requires: kernel-headers-%flavour = %version-%release

%description -n kernel-headers-modules-%flavour
These are the C header files for the Linux kernel scsi subsystem, which define
structures and constants that are needed when building only scsi-related 
kernel modules. Don't use it for any purposes except building a kernel modules.

%package -n kernel-doc-%base_flavour
Summary: Linux kernel %kversion documentation
Group: System/Kernel and hardware

%description -n kernel-doc-%base_flavour
This package contains documentation files for ALT Linux kernel packages:
 * kernel-image-%base_flavour-up-%kversion-%krelease
 * kernel-image-%base_flavour-smp-%kversion-%krelease

%prep

%setup -cT -n kernel-image-%flavour-%kversion-%krelease

%__rm -rf kernel-source-%kernel_base_version

%__tar -jxf %kernel_src/kernel-source-%kernel_base_version.tar.bz2

%setup -D -T -n kernel-image-%flavour-%kversion-%krelease/kernel-source-%kernel_base_version

echo "patches = %_patch_list"

%apply_patches 2.4

%__subst 's/EXTRAVERSION =.*/EXTRAVERSION = %kernel_extra_version-%flavour-%krelease/g' Makefile
%__subst 's/CC.*$(CROSS_COMPILE)gcc/CC		= %kgcc/g' Makefile


%build

KERNEL_BUILD_DIR=`pwd`


KernelVer=%kversion-%flavour-%krelease

echo "Building Kernel $KernelVer"

:> arch/%base_arch/defconfig

%__cat %SOURCE1 >> arch/%base_arch/defconfig

%make_build mrproper CC=%kcc

%make_build oldconfig CC=%kcc

### It's a hack, but a useful hack:

cmp -s .config %SOURCE1 || %__cp -vf .config %SOURCE1

%make_build dep clean CC=%kcc

%make_build include/linux/version.h CC=%kcc

%make_build bzImage CC=%kcc

%make_build modules CC=%kcc YACC="bison -y"

echo "Kernel built $KernelVer"

%if_enabled docs
# psdocs, pdfdocs don't work yet
%make_build htmldocs
%endif

%install

KernelVer=%kversion-%flavour-%krelease


%__mkdir -p $RPM_BUILD_ROOT/boot
%__install System.map $RPM_BUILD_ROOT/boot/System.map-$KernelVer
%__cp arch/i386/boot/bzImage $RPM_BUILD_ROOT/boot/vmlinuz-$KernelVer
%__cp .config $RPM_BUILD_ROOT/boot/config-$KernelVer

%__make modules_install \
    INSTALL_MOD_PATH=$RPM_BUILD_ROOT \
    KERNELRELEASE=$KernelVer

%__cc -o rhkmvtag %rhkmvtag init/version.o
./rhkmvtag >$RPM_BUILD_ROOT/lib/modules/$KernelVer/.rhkmvtag ||:
%__rm -f rhkmvtag

%__install -d $RPM_BUILD_ROOT%_prefix/include/linux-%version-%flavour/include

pushd include
%__cp -a . $RPM_BUILD_ROOT%_prefix/include/linux-%version-%flavour/include
popd

# drivers-headers install
%__install -d $RPM_BUILD_ROOT%_prefix/src/linux-%version-%flavour/drivers/scsi
%__cp -a ./drivers/scsi/{{constants,sd,scsi,hosts,scsi_obsolete}.h,scsi_module.c} \
	$RPM_BUILD_ROOT%_prefix/src/linux-%version-%flavour/drivers/scsi/

#%__install -d $RPM_BUILD_ROOT%_prefix/src/linux-%version-%flavour/drivers/media/video
#%__cp -a ./drivers/addon/bttv/{{id,bttv,bttvp,audiochip,i2c-compat,tuner,bt848}.h} \
#	$RPM_BUILD_ROOT%_prefix/src/linux-%version-%flavour/drivers/media/video

%__install -d %buildroot%_prefix/src/linux-%version-%flavour/arch/%base_arch
%__install -d %buildroot%_prefix/src/linux-%version-%flavour/scripts
%__cp -a ./{Makefile,Rules.make} \
	%buildroot%_prefix/src/linux-%version-%flavour/
%__cp -a ./arch/%base_arch/Makefile \
	%buildroot%_prefix/src/linux-%version-%flavour/arch/%base_arch/
%__cp -a ./scripts/pathdown.sh \
	%buildroot%_prefix/src/linux-%version-%flavour/scripts/

pushd %buildroot%_prefix/src/linux-%version-%flavour
ln -sf ../../include/linux-%version-%flavour/include include
patch Makefile < %SOURCE3
popd

%__cp -a .config $RPM_BUILD_ROOT%_prefix/src/linux-%version-%flavour/.config
pushd $RPM_BUILD_ROOT
rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/build
ln -sf %_prefix/include/linux-%version-%flavour/ \
    $RPM_BUILD_ROOT/lib/modules/$KernelVer/build
popd

# remove asm-* include files for other architectures
pushd $RPM_BUILD_ROOT%_prefix/include/linux-%version-%flavour/include
for dir in asm-*; do
	[ "$dir" = "asm-generic" ] && continue
	[ "$dir" = "asm-%base_arch" ] && continue
	%__rm -rf -- "$dir"
done
popd

# install documentation
%if_enabled docs
%__install -d %buildroot%_docdir/kernel-doc-%base_flavour-%version/
%__cp -a Documentation/* %buildroot%_docdir/kernel-doc-%base_flavour-%version/
%__install -d %buildroot%_docdir/kernel-doc-%base_flavour-%version/scsi/
%__cp -a drivers/scsi/README* \
	%buildroot%_docdir/kernel-doc-%base_flavour-%version/scsi/
for dir in aacraid aic7xxx aic7xxx_old; do
	%__install -d \
		%buildroot%_docdir/kernel-doc-%base_flavour-%version/scsi/$dir/
	%__cp -a drivers/scsi/$dir/README* \
		%buildroot%_docdir/kernel-doc-%base_flavour-%version/scsi/$dir/
done
%__install -d \
	%buildroot%_docdir/kernel-doc-%base_flavour-%version/scsi/sym53c8xx_2
%__cp -a drivers/scsi/sym53c8xx_2/*.txt \
	%buildroot%_docdir/kernel-doc-%base_flavour-%version/scsi/sym53c8xx_2
%endif # if_enabled docs

%post
cd /boot
if [ -x /sbin/installkernel ];then
    /sbin/installkernel -a -c %kversion-%flavour-%krelease
fi

ln -snf vmlinuz-%kversion-%flavour-%krelease /boot/vmlinuz-%subflavour
ln -snf initrd-%kversion-%flavour-%krelease.img /boot/initrd-%subflavour.img

# later - fix please bootloader-utils package
ln -snf vmlinuz-%kversion-%flavour-%krelease /boot/vmlinuz
ln -snf initrd-%kversion-%flavour-%krelease.img /boot/initrd.img


%preun
/sbin/modprobe loop 2> /dev/null > /dev/null

REMOVE=
if [ -f /etc/sysconfig/system ];then
		source /etc/sysconfig/system
		[[ "$CLASS" = "beginner" ]] && REMOVE=yes
fi
if [ -f /etc/sysconfig/installkernel ];then
		source /etc/sysconfig/installkernel
		[[ "$AUTOREMOVE" = [Yy][Ee][Ss] ]] && REMOVE=yes
		[[ "$AUTOREMOVE" = [Nn][Oo] ]] && REMOVE=
fi

BUILD=/lib/modules/%kversion-%flavour-%krelease/build 

/sbin/installkernel -a -R -c %kversion-%flavour-%krelease

%postun
rm -f /boot/initrd-%kversion-%flavour-%krelease.img

%files
%defattr(644,root,root,755)
/boot/vmlinuz-%version-%flavour-%krelease
/boot/System.map-%version-%flavour-%krelease
/boot/config-%version-%flavour-%krelease
/lib/modules/%version-%flavour-%krelease
%exclude /lib/modules/%version-%flavour-%krelease/build

%files -n kernel-headers-%flavour
%defattr(644,root,root,755)
%dir %_prefix/include/linux-%version-%flavour
%_prefix/include/linux-%version-%flavour/include
/lib/modules/%version-%flavour-%krelease/build

%files -n kernel-headers-modules-%flavour
%defattr(644,root,root,755)
%_prefix/src/linux-%version-%flavour

%if_enabled docs
%files -n kernel-doc-%base_flavour
%defattr(644,root,root,755)
%doc %_docdir/kernel-doc-%base_flavour-%version
%endif

%changelog
* Mon Feb 02 2004 Sergey Vlasov <vsu@altlinux.ru> kernel-policy-1.2
- added kernel-doc subpackage generation
- kernel-headers packaging cleanup
- fixed Provides, Requires, Prereq

* Tue Jul  1 2003 Ed V. Bartosh <ed@altlinux.ru> kernel-policy-1.1
- Naming rules minor changes
- spec example changed (don't exclude I2C headers from the kernel-headers package)

* Thu May 22 2003 Peter Novodvorsky <nidd@altlinux.com> kernel-policy-1.0
- 1.0 policy release.
