author | Wolfgang Rosenauer <wr@rosenauer.org> |
Fri, 20 May 2011 07:05:50 +0200 | |
branch | mozilla-1.9.2 |
changeset 274 | e86384773149 |
parent 242 | 9d68a664c42a |
permissions | -rw-r--r-- |
242
9d68a664c42a
add devel package with RPM macros
Ludwig Nussel <lnussel@suse.de>
parents:
diff
changeset
|
1 |
#!/usr/bin/perl -w |
9d68a664c42a
add devel package with RPM macros
Ludwig Nussel <lnussel@suse.de>
parents:
diff
changeset
|
2 |
use XML::Simple; |
9d68a664c42a
add devel package with RPM macros
Ludwig Nussel <lnussel@suse.de>
parents:
diff
changeset
|
3 |
|
9d68a664c42a
add devel package with RPM macros
Ludwig Nussel <lnussel@suse.de>
parents:
diff
changeset
|
4 |
my $file = shift || die "Usage: $0 [install.rdf|somefile.xpi]\n"; |
9d68a664c42a
add devel package with RPM macros
Ludwig Nussel <lnussel@suse.de>
parents:
diff
changeset
|
5 |
my $xml; |
9d68a664c42a
add devel package with RPM macros
Ludwig Nussel <lnussel@suse.de>
parents:
diff
changeset
|
6 |
|
9d68a664c42a
add devel package with RPM macros
Ludwig Nussel <lnussel@suse.de>
parents:
diff
changeset
|
7 |
if ($file =~ /\.xpi$/) { |
9d68a664c42a
add devel package with RPM macros
Ludwig Nussel <lnussel@suse.de>
parents:
diff
changeset
|
8 |
use Archive::Zip qw/:ERROR_CODES :CONSTANTS/; |
9d68a664c42a
add devel package with RPM macros
Ludwig Nussel <lnussel@suse.de>
parents:
diff
changeset
|
9 |
my $zip = Archive::Zip->new(); |
9d68a664c42a
add devel package with RPM macros
Ludwig Nussel <lnussel@suse.de>
parents:
diff
changeset
|
10 |
if ( $zip->read($file) != AZ_OK ) { |
9d68a664c42a
add devel package with RPM macros
Ludwig Nussel <lnussel@suse.de>
parents:
diff
changeset
|
11 |
die "zip file read error\n"; |
9d68a664c42a
add devel package with RPM macros
Ludwig Nussel <lnussel@suse.de>
parents:
diff
changeset
|
12 |
} |
9d68a664c42a
add devel package with RPM macros
Ludwig Nussel <lnussel@suse.de>
parents:
diff
changeset
|
13 |
my $data = $zip->contents("install.rdf"); |
9d68a664c42a
add devel package with RPM macros
Ludwig Nussel <lnussel@suse.de>
parents:
diff
changeset
|
14 |
die "missing install.rdf in $file\n" unless $data; |
9d68a664c42a
add devel package with RPM macros
Ludwig Nussel <lnussel@suse.de>
parents:
diff
changeset
|
15 |
$xml = XMLin($data) || die "$!\n"; |
9d68a664c42a
add devel package with RPM macros
Ludwig Nussel <lnussel@suse.de>
parents:
diff
changeset
|
16 |
} elsif ($file =~ /install.rdf/) { |
9d68a664c42a
add devel package with RPM macros
Ludwig Nussel <lnussel@suse.de>
parents:
diff
changeset
|
17 |
$xml = XMLin($file) || die "$!\n"; |
9d68a664c42a
add devel package with RPM macros
Ludwig Nussel <lnussel@suse.de>
parents:
diff
changeset
|
18 |
} else { |
9d68a664c42a
add devel package with RPM macros
Ludwig Nussel <lnussel@suse.de>
parents:
diff
changeset
|
19 |
die "unsupported file format\n"; |
9d68a664c42a
add devel package with RPM macros
Ludwig Nussel <lnussel@suse.de>
parents:
diff
changeset
|
20 |
} |
9d68a664c42a
add devel package with RPM macros
Ludwig Nussel <lnussel@suse.de>
parents:
diff
changeset
|
21 |
|
9d68a664c42a
add devel package with RPM macros
Ludwig Nussel <lnussel@suse.de>
parents:
diff
changeset
|
22 |
my $desc; |
9d68a664c42a
add devel package with RPM macros
Ludwig Nussel <lnussel@suse.de>
parents:
diff
changeset
|
23 |
for my $tag (qw/RDF:Description Description/) { |
9d68a664c42a
add devel package with RPM macros
Ludwig Nussel <lnussel@suse.de>
parents:
diff
changeset
|
24 |
if (exists $xml->{$tag}) { |
9d68a664c42a
add devel package with RPM macros
Ludwig Nussel <lnussel@suse.de>
parents:
diff
changeset
|
25 |
if (ref $xml->{$tag} eq 'ARRAY') { |
9d68a664c42a
add devel package with RPM macros
Ludwig Nussel <lnussel@suse.de>
parents:
diff
changeset
|
26 |
$desc = $xml->{$tag}; |
9d68a664c42a
add devel package with RPM macros
Ludwig Nussel <lnussel@suse.de>
parents:
diff
changeset
|
27 |
} else { |
9d68a664c42a
add devel package with RPM macros
Ludwig Nussel <lnussel@suse.de>
parents:
diff
changeset
|
28 |
$desc = [ $xml->{$tag} ]; |
9d68a664c42a
add devel package with RPM macros
Ludwig Nussel <lnussel@suse.de>
parents:
diff
changeset
|
29 |
} |
9d68a664c42a
add devel package with RPM macros
Ludwig Nussel <lnussel@suse.de>
parents:
diff
changeset
|
30 |
} |
9d68a664c42a
add devel package with RPM macros
Ludwig Nussel <lnussel@suse.de>
parents:
diff
changeset
|
31 |
} |
9d68a664c42a
add devel package with RPM macros
Ludwig Nussel <lnussel@suse.de>
parents:
diff
changeset
|
32 |
|
9d68a664c42a
add devel package with RPM macros
Ludwig Nussel <lnussel@suse.de>
parents:
diff
changeset
|
33 |
my $uuid; |
9d68a664c42a
add devel package with RPM macros
Ludwig Nussel <lnussel@suse.de>
parents:
diff
changeset
|
34 |
my $id; |
9d68a664c42a
add devel package with RPM macros
Ludwig Nussel <lnussel@suse.de>
parents:
diff
changeset
|
35 |
for my $x (@$desc) { |
9d68a664c42a
add devel package with RPM macros
Ludwig Nussel <lnussel@suse.de>
parents:
diff
changeset
|
36 |
if ($x->{"em:id"} =~ /{[[:xdigit:]]+-/) { |
9d68a664c42a
add devel package with RPM macros
Ludwig Nussel <lnussel@suse.de>
parents:
diff
changeset
|
37 |
print STDERR "Warning: multiple uuids!\n" if defined $uuid; |
9d68a664c42a
add devel package with RPM macros
Ludwig Nussel <lnussel@suse.de>
parents:
diff
changeset
|
38 |
$uuid = $x->{"em:id"}; |
9d68a664c42a
add devel package with RPM macros
Ludwig Nussel <lnussel@suse.de>
parents:
diff
changeset
|
39 |
} elsif ($x->{"em:id"} =~ /@/) { |
9d68a664c42a
add devel package with RPM macros
Ludwig Nussel <lnussel@suse.de>
parents:
diff
changeset
|
40 |
print STDERR "Warning: multiple ids!\n" if defined $id; |
9d68a664c42a
add devel package with RPM macros
Ludwig Nussel <lnussel@suse.de>
parents:
diff
changeset
|
41 |
$id = $x->{"em:id"}; |
9d68a664c42a
add devel package with RPM macros
Ludwig Nussel <lnussel@suse.de>
parents:
diff
changeset
|
42 |
} |
9d68a664c42a
add devel package with RPM macros
Ludwig Nussel <lnussel@suse.de>
parents:
diff
changeset
|
43 |
} |
9d68a664c42a
add devel package with RPM macros
Ludwig Nussel <lnussel@suse.de>
parents:
diff
changeset
|
44 |
|
9d68a664c42a
add devel package with RPM macros
Ludwig Nussel <lnussel@suse.de>
parents:
diff
changeset
|
45 |
if (defined $id) { |
9d68a664c42a
add devel package with RPM macros
Ludwig Nussel <lnussel@suse.de>
parents:
diff
changeset
|
46 |
print "$id\n"; |
9d68a664c42a
add devel package with RPM macros
Ludwig Nussel <lnussel@suse.de>
parents:
diff
changeset
|
47 |
} elsif (defined $uuid) { |
9d68a664c42a
add devel package with RPM macros
Ludwig Nussel <lnussel@suse.de>
parents:
diff
changeset
|
48 |
print "$uuid\n"; |
9d68a664c42a
add devel package with RPM macros
Ludwig Nussel <lnussel@suse.de>
parents:
diff
changeset
|
49 |
} else { |
9d68a664c42a
add devel package with RPM macros
Ludwig Nussel <lnussel@suse.de>
parents:
diff
changeset
|
50 |
exit 1; |
9d68a664c42a
add devel package with RPM macros
Ludwig Nussel <lnussel@suse.de>
parents:
diff
changeset
|
51 |
} |