#!/usr/bin/perl
# Maintain repository of kernel configs
# Written by Martin K. Petersen <mkp@mkp.net>

$configdir = "/home/mkp/Code/kernel/configs";

# Extract version from kernel Makefile
open MAKEFILE, "Makefile" || die "Can't open kernel Makefile\n";

while (<MAKEFILE>) {
      if (/VERSION = (\d+)/) { $ver = $1; };
      if (/PATCHLEVEL = (\d+)/) { $patch = $1; };
      if (/SUBLEVEL = (\d+)/) { $sublevel = $1; };
      if (/EXTRAVERSION = ([\w\.-]+)/) { $extra = $1; };
}

$mkfver = "$ver.$patch.$sublevel";
close MAKEFILE;

die "Kernel version could not be extracted from Makefile\n" if $mkfver == "";

# Extract version from current .config
open CONFIG, ".config" || die "Can't open kernel .config\n";

while (<CONFIG>) {
    $cfgver = $1 if (/# Linux.* (\d\.\d+\.[\w\.]+)/);
}

close CONFIG;

die "Kernel version could not be extracted from .config\n" if $cfgver == "";

print "Makefile kernel version: $mkfver\n";
print "config   kernel version: $cfgver\n";

if ($mkfver != $cfgver) {

    # Save a copy of current .config if it is newer than the saved version
    system "cp -puv .config $configdir/$config-$cfgver";
    die "Can't copy .config to $configdir/$config-$cfgver\n" if $?;

    # Copy configfile matching current kernel
    if (-f "$configdir/config-$mkfver") {
	system "cp -pv $configdir/config-$mkfver .config";
	die "Can't copy $configdir/$config-$mkfver to .config\n" if $?;
    }
}

