#!/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 { <[0]) $_->[1]=1;; EOF } @kernels); my $defines = join("\n", map { <[1] #define __BOOT_KERNEL_$_->[1] \$$_->[1] #endif EOF } @kernels); printf(<<'KHEADER', $init_vars, $set_vars, $defines); #!/bin/sh # (c) Mandriva, Pixel # $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