diff options
Diffstat (limited to 'Rpmdrake/init.pm')
-rwxr-xr-x | Rpmdrake/init.pm | 150 |
1 files changed, 150 insertions, 0 deletions
diff --git a/Rpmdrake/init.pm b/Rpmdrake/init.pm new file mode 100755 index 00000000..8f0476b2 --- /dev/null +++ b/Rpmdrake/init.pm @@ -0,0 +1,150 @@ +package Rpmdrake::init; +#***************************************************************************** +# +# Copyright (c) 2002 Guillaume Cottenceau +# Copyright (c) 2002-2007 Thierry Vignaud <tvignaud@mandriva.com> +# Copyright (c) 2003, 2004, 2005 MandrakeSoft SA +# Copyright (c) 2005-2007 Mandriva SA +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License version 2, as +# published by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +#***************************************************************************** +# +# $Id$ + +use strict; +use MDK::Common::Func 'any'; +use lib qw(/usr/lib/libDrakX); +use common; +BEGIN { $::no_global_argv_parsing = 1 } + +use Exporter; +our @ISA = qw(Exporter); +our @EXPORT = qw(init warn_about_user_mode $changelog_first $default_list_mode %options $MODE); + + +BEGIN { #- we want to run this code before the Gtk->init of the use-my_gtk + my $basename = sub { local $_ = shift; s|/*\s*$||; s|.*/||; $_ }; + any { /^--?h/ } @ARGV and do { + printf join("\n", N("Usage: %s [OPTION]...", $basename->($0)), +N(" --changelog-first display changelog before filelist in the description window"), +N(" --media=medium1,.. limit to given media"), +N(" --merge-all-rpmnew propose to merge all .rpmnew/.rpmsave files found"), +N(" --mode=MODE set mode (install (default), remove, update)"), +N(" --no-confirmation don't ask first confirmation question in update mode"), +N(" --no-media-update don't update media at startup"), +N(" --no-verify-rpm don't verify packages signatures"), +N(" --parallel=alias,host be in parallel mode, use \"alias\" group, use \"host\" machine to show needed deps"), +N(" --pkg-nosel=pkg1,.. show only these packages"), +N(" --pkg-sel=pkg1,.. preselect these packages"), +N(" --root force to run as root"), +N(" --search=pkg run search for \"pkg\""), +"" +); + exit 0; + }; +} + +BEGIN { #- for mcc + if ("@ARGV" =~ /--embedded (\w+)/) { + $::XID = $1; + $::isEmbedded = 1; + } +} + +use rpmdrake; + +#- 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 strftime); +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"); +} + +our %options; +foreach (@ARGV) { + /^-?-(\S+)$/ or next; + my $val = $1; + if ($val =~ /=/) { + my ($name, $values) = split /=/, $val; + my @values = split /,/, $values; + $options{$name} = \@values if @values; + } else { + $options{$val} = 1; + } +} + +our $MODE = ref $options{mode} ? $options{mode}[0] : undef; +unless ($MODE) { + $MODE = 'install'; + $0 =~ m|remove$| and $MODE = 'remove'; + $0 =~ m|update$|i and $MODE = 'update'; +} + +our $default_list_mode; +$default_list_mode = 'all' if $MODE eq 'install'; +if ($MODE eq 'remove') { + $default_list_mode = 'installed'; +} elsif ($MODE eq 'update') { + $default_list_mode = 'all_updates'; +} + +$MODE eq 'update' || $options{root} and require_root_capability(); +$::noborderWhenEmbedded = 1; + +our $changelog_first = $changelog_first_config->[0]; +$changelog_first = 1 if $options{'changelog-first'}; + +sub warn_about_user_mode() { + $> and (interactive_msg(N("Running in user mode"), + N("You are launching this program as a normal user. +You will not be able to perform modifications on the system, +but you may still browse the existing database."), yesno => 1, text => { no => N("Cancel"), yes => N("Ok") }) or myexit(0)); +} + +sub init() { + if (!$> && !member($MODE, @$already_splashed)) { + interactive_msg(N("Welcome"), + N("%s + +Is it ok to continue?", + $MODE eq 'remove' ? + N("Welcome to the software removal tool! + +This tool will help you choose which software you want to remove from +your computer.") + : $MODE eq 'update' ? + N("Welcome to %s! + +This tool will help you choose the updates you want to install on your +computer.", $rpmdrake::myname_update) + : + ($rpmdrake::branded ? N("Welcome to the software installation tool!") + : N("Welcome to the software installation tool! + +Your Mandriva Linux system comes with several thousands of software +packages on CDROM or DVD. This tool will help you choose which software +you want to install on your computer."))) + , yesno => 1) or myexit(-1); + push @$already_splashed, $MODE; + } +} + +1; |