summaryrefslogtreecommitdiffstats
path: root/kheader.pl
diff options
context:
space:
mode:
authorPascal Rigaux <pixel@mandriva.com>2007-07-31 13:40:27 +0000
committerPascal Rigaux <pixel@mandriva.com>2007-07-31 13:40:27 +0000
commitc30a5b7b690021bc7228775dbb90ecf20e1bd9df (patch)
tree802aca388b1995d2842fb0c547e4671fffb4d8b9 /kheader.pl
downloadbootloader-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.pl163
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