#!/usr/bin/perl
#
# edit-config - Properly change the content of a .config file
#
# Written 2006 by Werner Almesberger
#

sub usage
{
    print STDERR "usage: $0 file [+]CONFIG_...=... ...\n\n";
    print STDERR "  +  adds the option only if it is not already set\n";
    exit(1);
}


$file = shift @ARGV;
&usage unless defined $file;
&usage if grep { $_ !~ /^\+?\S+=\S+$/; } @ARGV;

open(FILE,$file) || die "$file: $!";
@file = <FILE>;
close FILE;

foreach (@ARGV) {
    /^(\+?)([^=]+)=/;
    $name = $2;
    $set = "$2=$'";
    if ($1 eq "") {
	map { $_ = undef if /^(#\s*$name\s+|$name=)/; } @file;
    }
    else {
	next if grep { /^(#\s*$name\s+|$name=)/ } @file;
    }
    push(@file,"$set\n");
    
}

open(FILE,">$file.tmp") || die "$file.tmp: $!";
print FILE join("",@file) || die "$file.tmp: $!";
close FILE || die "$file.tmp: $!";

rename("$file.tmp",$file) || die "rename $file.tmp $file: $!";
