summaryrefslogtreecommitdiffstats
path: root/gurpmi.pm
blob: 16a369c2a2938ceefaf8584bf5dfcdf38c9994a7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
package gurpmi;

#- Copyright (C) 2005 MandrakeSoft SA
#- Copyright (C) 2005, 2006 Mandriva SA

#- This is needed because text printed by Gtk2 will always be encoded
#- in UTF-8; we first check if LC_ALL is defined, because if it is,
#- changing only LC_COLLATE will have no effect.
use POSIX qw(setlocale LC_ALL LC_COLLATE);
use locale;
my $collation_locale = $ENV{LC_ALL};
if ($collation_locale) {
    $collation_locale =~ /UTF-8/ or setlocale(LC_ALL, "$collation_locale.UTF-8");
} else {
    $collation_locale = setlocale(LC_COLLATE);
    $collation_locale =~ /UTF-8/ or setlocale(LC_COLLATE, "$collation_locale.UTF-8");
}

use urpm;
use strict;

use Exporter;
our @ISA = qw(Exporter);
our @EXPORT = qw(fatal but quit add_button_box new_label N);
(our $VERSION) = q$Id$ =~ /(\d+\.\d+)/;

sub usage () {
    print <<USAGE;
gurpmi version $urpm::VERSION
Usage :
    gurpmi <rpm> [ <rpm>... ]
Options :
    --auto
    --auto-select
    --no-verify-rpm
    --media media1,...
    --searchmedia media1,...
USAGE
    exit 0;
}

#- fatal gurpmi initialisation error (*not* fatal urpmi errors)
sub fatal { my $s = $_[0]; print STDERR "$s\n"; exit 1 }

#- Parse command line
#- puts options in %gurpmi::options
#- puts bare names (not rpm filenames) in @gurpmi::names
sub parse_command_line {
    my @all_rpms;
    our %options;
    our @names;
    # Expand *.urpmi arguments
    my @ARGV_expanded;
    foreach my $a (@ARGV) {
	if ($a =~ /\.urpmi$/) {
	    open my $fh, '<', $a or do { warn "Can't open $a: $!\n"; next };
	    push @ARGV_expanded, map { chomp; $_ } <$fh>;
	    close $fh;
	} else {
	    push @ARGV_expanded, $a;
	}
    }
    my $nextopt;
    foreach (@ARGV_expanded) {
	if ($nextopt) { $options{$nextopt} = $_; undef $nextopt; next }
	if (/^-/) {
	    if (/^--(no-verify-rpm|auto-select|auto)$/) {
		$options{$1} = 1;
		next;
	    }
	    if (/^--(media|searchmedia)$/) {
		$nextopt = $1;
		next;
	    }
	    /^--?[hv?]/ and usage();
	    fatal(N("Unknown option %s", $_));
	}
	if (-f) {
	    push @all_rpms, $_
	} else {
	    push @names, $_
	}
	
    }
    $options{'auto-select'} || @all_rpms + @names
	or fatal(N("No packages specified"));
    return @all_rpms;
}

sub but ($) { "    $_[0]    " }

sub quit () { Gtk2->main_quit }

sub add_button_box {
    my ($vbox, @buttons) = @_;
    my $hbox = Gtk2::HButtonBox->new;
    $vbox->pack_start($hbox, 0, 0, 0);
    $hbox->set_layout('edge');
    $_->set_alignment(0.5, 0.5), $hbox->add($_) foreach @buttons;
}

sub new_label {
    my ($msg) = @_;
    my $label = Gtk2::Label->new($msg);
    $label->set_line_wrap(1);
    $label->set_alignment(0.5, 0.5);
    if (($msg =~ tr/\n/\n/) > 5) {
	my $sw = Gtk2::ScrolledWindow->new;
	$sw->set_policy('never', 'automatic');
	$sw->add_with_viewport($label);
	$sw->set_size_request(-1,200);
	return $sw;
    } else {
	return $label;
    }
}

sub N {
    my ($format, @params) = @_;
    my $r = sprintf(
	eval { Locale::gettext::gettext($format || '') } || $format,
	@params,
    );
    Locale::gettext::iconv($r, undef, "UTF-8");
}

1;