Andreas Gruenbacher df04b9
#! /usr/bin/perl -w
Andreas Gruenbacher df04b9
Michal Marek 0a417c
#############################################################################
Michal Marek 0a417c
# Copyright (c) 2007 Novell, Inc.
Michal Marek 0a417c
# All Rights Reserved.
Michal Marek 0a417c
#
Michal Marek 0a417c
# This program is free software; you can redistribute it and/or
Michal Marek 0a417c
# modify it under the terms of version 2 of the GNU General Public License as
Michal Marek 0a417c
# published by the Free Software Foundation.
Michal Marek 0a417c
#
Michal Marek 0a417c
# This program is distributed in the hope that it will be useful,
Michal Marek 0a417c
# but WITHOUT ANY WARRANTY; without even the implied warranty of
Michal Marek 0a417c
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.   See the
Michal Marek 0a417c
# GNU General Public License for more details.
Michal Marek 0a417c
#
Michal Marek 0a417c
# You should have received a copy of the GNU General Public License
Michal Marek 0a417c
# along with this program; if not, contact Novell, Inc.
Michal Marek 0a417c
#
Michal Marek 0a417c
# To contact Novell about this file by physical or electronic mail,
Michal Marek 0a417c
# you may find current contact information at www.novell.com
Michal Marek 0a417c
#############################################################################
Michal Marek 0a417c
Andreas Gruenbacher df04b9
if (@ARGV < 2) {
Andreas Gruenbacher df04b9
    print STDERR "Usage: $0 <config1> <config2> [<config3>]\n";
Andreas Gruenbacher df04b9
    print STDERR "Diff kernel config files config1 and config2, or " .
Andreas Gruenbacher df04b9
		 "apply those differences to config3\n";
Andreas Gruenbacher df04b9
    exit 1;
Andreas Gruenbacher df04b9
}
Andreas Gruenbacher df04b9
Andreas Gruenbacher df04b9
open CONFIG1, $ARGV[0]
Andreas Gruenbacher df04b9
    or die $ARGV[0] . ": $!\n";
Andreas Gruenbacher df04b9
while (<CONFIG1>) {
Michal Marek 235504
    next unless /^(CONFIG_\w+)/a || /^# (CONFIG_\w+) is not set/a;
Andreas Gruenbacher df04b9
    $config1{$1} = $_;
Andreas Gruenbacher df04b9
}
Andreas Gruenbacher df04b9
Andreas Gruenbacher df04b9
open CONFIG2, $ARGV[1]
Andreas Gruenbacher df04b9
    or die $ARGV[1] . ": $!\n";
Andreas Gruenbacher df04b9
while (<CONFIG2>) {
Michal Marek 235504
    next unless /^(CONFIG_\w+)/a || /^# (CONFIG_\w+) is not set/a;
Andreas Gruenbacher df04b9
    $config2{$1} = $_;
Andreas Gruenbacher df04b9
}
Andreas Gruenbacher df04b9
Andreas Gruenbacher df04b9
while (($key, $value) = each %config2) {
Andreas Gruenbacher df04b9
    if (!exists $config1{$key} || $config1{$key} ne $value) {
Andreas Gruenbacher df04b9
	$diff{$key} = $value;
Andreas Gruenbacher df04b9
    }
Andreas Gruenbacher df04b9
}
Andreas Gruenbacher df04b9
Andreas Gruenbacher df04b9
if (@ARGV >= 3) {
Andreas Gruenbacher df04b9
    open OLD, $ARGV[2]
Andreas Gruenbacher df04b9
	or die $ARGV[2] . ": $!\n";
Andreas Gruenbacher df04b9
    while (<OLD>) {
Michal Marek 235504
	if (/^(CONFIG_\w+)/a || /^# (CONFIG_\w+) is not set/a) {
Andreas Gruenbacher df04b9
	    if (exists $diff{$1}) {
Andreas Gruenbacher df04b9
		print $diff{$1};
Andreas Gruenbacher df04b9
		$diff_used{$1} = 1;
Andreas Gruenbacher df04b9
		next;
Andreas Gruenbacher df04b9
   	    }
Andreas Gruenbacher df04b9
	}
Andreas Gruenbacher df04b9
	print;
Andreas Gruenbacher df04b9
    }
Andreas Gruenbacher df04b9
}
Andreas Gruenbacher df04b9
Michal Marek bdd5e8
foreach my $key (sort(keys(%diff))) {
Andreas Gruenbacher df04b9
    next if exists $diff_used{$key};
Michal Marek bdd5e8
    print $diff{$key};
Andreas Gruenbacher df04b9
}