diff options
Diffstat (limited to 'trunk/src/ekeyword/ekeyword')
-rwxr-xr-x | trunk/src/ekeyword/ekeyword | 131 |
1 files changed, 0 insertions, 131 deletions
diff --git a/trunk/src/ekeyword/ekeyword b/trunk/src/ekeyword/ekeyword deleted file mode 100755 index 002e44b..0000000 --- a/trunk/src/ekeyword/ekeyword +++ /dev/null @@ -1,131 +0,0 @@ -#!/usr/bin/perl -w -# -# Copyright 2003-2009, Gentoo Foundation -# Distributed under the terms of the GNU General Public License v2 -# Written by Aron Griffis <agriffis@gentoo.org> -# -# ekeyword: Update the KEYWORDS in an ebuild. For example: -# -# $ ekeyword ~alpha oaf-0.6.8-r1.ebuild -# 12c12 -# < KEYWORDS="x86 ppc sparc" -# --- -# > KEYWORDS="x86 ppc sparc ~alpha" - - -my ($kw_re) = '^(?:([-~^]?)(\w[\w-]*)|([-^]\*))$'; -my (@kw); - -# make sure the cmdline consists of keywords and ebuilds -unless (@ARGV > 0) { - die "syntax: ekeyword { arch | ~[arch] | -[arch] } ebuild...\n" -} -for my $a (@ARGV) { - $a = '~all' if $a eq '~' or $a eq $ENV{'HOME'}; # for vapier - next if $a =~ /$kw_re/o; # keyword - next if $a =~ /^\S+\.ebuild$/; # ebuild - die "I don't understand $a\n"; -} - -my $files = 0; -for my $f (@ARGV) { - if ($f =~ /$kw_re/o) { - push @kw, $f; - next; - } - - print "$f\n"; - - open I, "<$f" or die "Can't read $f: $!\n"; - open O, ">$f.new" or die "Can't create $f.new: $!\n"; - select O; - - while (<I>) { - if (/^\s*KEYWORDS=/) { - - # extract the quoted section from KEYWORDS - while (not /^KEYWORDS=["'].*?["']/) { - chomp; - my $next = <I>; - $_ = join " ", $_, $next; - } - (my $quoted = $_) =~ s/^.*?["'](.*?)["'].*/$1/s; - - # replace -* with -STAR for our convenience below - $quoted =~ s/-\*/-STAR/; - - for my $k (@kw) { - my ($leader, $arch, $star) = ($k =~ /$kw_re/o); - - # handle -* and ^* - if (defined $star) { - $leader = substr $star,0,1; - $arch = 'STAR'; - } - - # remove keywords - if ($leader eq '^') { - if ($arch eq 'all') { - $quoted = ''; - } else { - $quoted =~ s/[-~]?\Q$arch\E\b//; - } - - # add or modify keywords - } else { - if ($arch eq 'all') { - # modify all non-masked keywords in the list - $quoted =~ s/(^|\s)~?(?=\w)/$1$leader/g; - } else { - # modify or add keyword - unless ($quoted =~ s/[-~]?\Q$arch\E(\s|$)/$leader$arch$1/) { - # modification failed, need to add - if ($arch eq 'STAR') { - $quoted = "$leader$arch $quoted"; - } else { - $quoted .= " $leader$arch"; - } - } - } - } - } - - # replace -STAR with -* - $quoted =~ s/-STAR\b/-*/; - - # sort keywords and fix spacing - $quoted = join " ", sort { - (my $sa = $a) =~ s/^\W//; - (my $sb = $b) =~ s/^\W//; - return -1 if $sa eq '*'; - return +1 if $sb eq '*'; - $sa .= "-"; - $sb .= "-"; - $sa =~ s/([a-z0-9]+)-([a-z0-9]*)/$2-$1/g; - $sb =~ s/([a-z0-9]+)-([a-z0-9]*)/$2-$1/g; - $sa cmp $sb; - } split " ", $quoted; - - # re-insert quoted to KEYWORDS - s/(["']).*?["']/$1$quoted$1/; - - print $_ or die "Can't write $f.new: $!\n"; - } else { - print, next; - } - } - - close I; - close O; - select STDOUT; - - system "diff -U 0 $f $f.new | sed -n '/KEYWORDS=/s:^: :p'"; - rename "$f.new", "$f" or die "Can't rename: $!\n"; - $files++; -} - -if ($files == 0) { - die "No ebuilds processed!"; -} - -# vim:ts=4 sw=4 |