#!/usr/bin/perl -w # $Id$ #require 5.008; use strict; use Getopt::Mixed qw(nextOption); my @lines = (); my ($REL) = q$Revision: 1.4 $=~m/(\d+(?:\.\d+)+)/; my $prefix = undef; my $verbose = undef; my $reverse = undef; my $flag_choice = undef; my $line = ''; # help(): print help text and exit sub help { print "Usage: $0 [options] -h, --help show this short help and exit -p, --prefix=PREFIX prefix -r, --reverse revert changes -v, --verbose print superfluous info -V, --version show version string and exit\n"; exit; } # version(): print version info and exit sub version { print "$0 r$REL, Jochen Striepe \n"; exit; } # esc(): escapes a scalar reference for use in perl regexp sub esc { ${$_[0]} =~ s/([\[\]\(\)\*\.\-\^\$\@])/\\$1/g; } # get command line params: $0 =~ s!^.*/!!; Getopt::Mixed::init('h p=s r v V help>h prefix>p reverse>r verbose>v version>V'); while (my ($opt, $val, $pretty) = nextOption()) { if ($opt eq 'h') { help(); } elsif ($opt eq 'p') { $prefix = $val; } elsif ($opt eq 'r') { $reverse = 1; } elsif ($opt eq 'v') { $verbose = 1; } elsif ($opt eq 'V') { version(); } } Getopt::Mixed::cleanup(); if (!defined $prefix) { print STDERR "Fatal: prefix not specified\n\n"; help; die; } if (defined $reverse) { esc(\$prefix); } @lines = ; while (@lines) { $line = shift @lines; chomp($line); if (defined $reverse) { if ($line =~ s/^(\s*config\s+)$prefix/$1/e) { print STDERR "$prefix removed\n" if defined $verbose; $flag_choice = undef; } elsif ($line =~ /^\s*depends\s+(on\s)?\s*/) { while ($line =~ s/^(\s*depends\s+(on\s)?\s*(?:[0-9A-Z_]+\s+)*?)$prefix/$1/e) { print STDERR "$prefix removed\n" if defined $verbose; } } elsif ($line =~ s/^(\s*(?:default\s+\S+\s+)?if\s+)(.*)/$1/e) { while ($line =~ s/^(\s*(?:default\s+\S\s+)?if\s(?:[0-9A-Z_]+\s+)*?)$prefix/$1/e) { print STDERR "$prefix removed\n" if defined $verbose; } } elsif (defined $flag_choice) { if ($line =~ s/^(\s*default\s+)$prefix/$1/e) { print STDERR "$prefix removed\n" if defined $verbose; } } } elsif ($line =~ s/^(\s*config\s+)([0-9A-Z_]+)/$1.$prefix.$2/e) { print STDERR "$2 is now $prefix$2\n" if defined $verbose; $flag_choice = undef; } elsif ($line =~ s/^(\s*select\s+)([0-9A-Z_]+)/$1.$prefix.$2/e) { print STDERR "$2 is now $prefix$2\n" if defined $verbose; $flag_choice = undef; } elsif ($line =~ s/^(\s*depends\s+(on\s)?\s*)(.*)/$1/e) { my $foo = $3; while ($foo =~ s/^([^0-9A-Z_]*)([0-9A-Z_]+)(.*)/$3/e) { $line .= $1.$prefix.$2; print STDERR "$2 is now $prefix$2\n" if defined $verbose; } $line .= $foo; } elsif ($line =~ s/^(\s*(?:default\s+\S+\s+)?if\s+)(.*)/$1/e) { my $foo = $2; while ($foo =~ s/^([^0-9A-Z_]*)([0-9A-Z_]+)(.*)/$3/e) { $line .= $1.$prefix.$2; print STDERR "$2 is now $prefix$2\n" if defined $verbose; } $line .= $foo; } elsif (defined $flag_choice) { if ($line =~ s/^(\s*default\s+)([0-9A-Z_]+)/$1.$prefix.$2/e) { print STDERR "$2 is now $prefix$2\n" if defined $verbose; } } if ($line =~ /^choice/) { $flag_choice = 1; } print STDOUT "$line\n"; } # vim500:set shiftwidth=4 # vim500:set tabstop=4 # eof