diff options
author | Pascal Rigaux <pixel@mandriva.com> | 2007-07-31 13:40:27 +0000 |
---|---|---|
committer | Pascal Rigaux <pixel@mandriva.com> | 2007-07-31 13:40:27 +0000 |
commit | c30a5b7b690021bc7228775dbb90ecf20e1bd9df (patch) | |
tree | 802aca388b1995d2842fb0c547e4671fffb4d8b9 /kheader.pl | |
download | bootloader-utils-c30a5b7b690021bc7228775dbb90ecf20e1bd9df.tar bootloader-utils-c30a5b7b690021bc7228775dbb90ecf20e1bd9df.tar.gz bootloader-utils-c30a5b7b690021bc7228775dbb90ecf20e1bd9df.tar.bz2 bootloader-utils-c30a5b7b690021bc7228775dbb90ecf20e1bd9df.tar.xz bootloader-utils-c30a5b7b690021bc7228775dbb90ecf20e1bd9df.zip |
restore after the big svn loss
Diffstat (limited to 'kheader.pl')
-rw-r--r-- | kheader.pl | 163 |
1 files changed, 163 insertions, 0 deletions
diff --git a/kheader.pl b/kheader.pl new file mode 100644 index 0000000..8dbf935 --- /dev/null +++ b/kheader.pl @@ -0,0 +1,163 @@ +#!/usr/bin/perl + +use MDK::Common; + +my @kernels = group_by2( + 'smp' => 'SMP', + 'xen0' => 'XEN0', + 'default' => 'DEFAULT', + 'legacy' => 'LEGACY', + 'enterprise' => 'ENTERPRISE', + 'secure' => 'SECURE', + '-i686-up-4GB' => 'I686_UP_4GB', + '-i686-up-64GB' => 'I686_UP_64GB', + '-p3-smp-64GB' => 'P3_SMP_64GB', + '-i586-up-1GB' => 'I586_UP_1GB', + + 'desktop' => 'DESKTOP', + 'desktopsmp' => 'DESKTOPSMP', + 'desktop-i586' => 'DESKTOP_I586', + 'desktopsmp-i586' => 'DESKTOPSMP_I586', + 'laptop' => 'LAPTOP', + 'laptopsmp' => 'LAPTOPSMP', + 'server' => 'SERVER', + 'serversmp' => 'SERVERSMP', + + '*' => 'UP', #- keep it the last +); + +my $init_vars = join(';', map { "$_->[1]=0" } @kernels); + +my $set_vars = join('', + map { + <<EOF + $_->[0]) + $_->[1]=1;; +EOF + } @kernels); + + +my $defines = join("\n", + map { + <<EOF +#ifndef __BOOT_KERNEL_$_->[1] +#define __BOOT_KERNEL_$_->[1] \$$_->[1] +#endif +EOF + } @kernels); + +printf(<<'KHEADER', $init_vars, $set_vars, $defines); +#!/bin/sh +# (c) Mandriva, Pixel <pixel@mandriva.com> +# $Id: kheader.pl 84121 2006-11-14 16:12:11Z pixel $ +# +# kheader: Regenerates kernel headers +# +# chkconfig: 235 95 20 +# description: This shell script regenerates the /boot/kernel.h header for \ +# /usr/src/linux/include/{autoconf,version}.h +# +### BEGIN INIT INFO +# Provides: kheader +# Default-Start: 2 3 5 +# Short-Description: Regenerates kernel headers +# Description: This shell script regenerates the /boot/kernel.h header for +# /usr/src/linux/include/{autoconf,version}.h +### END INIT INFO + +. /etc/rc.d/init.d/functions + +: ${KERNEL_H:=/boot/kernel.h} +: ${HEADERFILE:=${KERNEL_H}-`uname -r`} +[ -d $(dirname $HEADERFILE) ] || exit 0 + +table() { + %s + + # this will do the trick until gprintf.py expands variables + echo_no_gprintf="echo" + + ver=$(uname -r) + mdk="md[kv]" + k=$($echo_no_gprintf $ver|sed "s/.*$mdk//") + + # for tmb & multimedia kernels + case $ver in + *-desktop-*) + k=desktop$k;; + *-laptop-*) + k=laptop$k;; + *-server-*) + k=server$k;; + esac + + case $k in +%s + esac + + # since 2.6.17-2mdv, default kernels can be SMP enabled by + # default, hence a new name + $echo_no_gprintf "$UP:$ver" | grep -q "^1:.*$mdk" && { + case $ver in + # XXX simpler to maintain a skip list + [01].*|2.[0-5].*|2.6.[0-9]-*|2.6.1[0-6]-*|2.6.17-1mdk);; + *) UP=0; DEFAULT=1;; + esac + } + + unset echo_no_gprintf +} + +generate () { + table; + # do not overwrite exsisting header, it confuses + # kernel make and forces it to recompile everything + cat > $HEADERFILE.tmp << EOF +/* This file is automatically generated at boot time. */ +#ifndef __BOOT_KERNEL_H_ +#define __BOOT_KERNEL_H_ + +%s +#endif +EOF + +mv -f $HEADERFILE.tmp $HEADERFILE + +if [ -f $KERNEL_H ] ; then + rm -f $KERNEL_H +fi + +ln -sf $HEADERFILE $KERNEL_H +} + +function remove_orphaned { + local version= i= + for i in /boot/kernel.h-* /boot/System.map-* /boot/config-*; do + version=${i#*-} + [[ -f /boot/vmlinuz-${version} ]] || rm -f ${i} + done +} + +case $1 in + start) + # We don't log this command, because most users don't want to hear this (c) Chmou + generate + touch /var/lock/subsys/kheader + ;; + restart) + ;; + reload) + generate + ;; + stop) + remove_orphaned; + rm -f /var/lock/subsys/kheader + ;; + status) + ;; + *) + gprintf "Usage: %%s\n" "$(basename $0) {start|stop|reload|restart}" + exit 0 + ;; +esac +KHEADER |