summaryrefslogtreecommitdiffstats
path: root/perl-install/pkgs.pm
diff options
context:
space:
mode:
Diffstat (limited to 'perl-install/pkgs.pm')
-rw-r--r--perl-install/pkgs.pm43
1 files changed, 29 insertions, 14 deletions
diff --git a/perl-install/pkgs.pm b/perl-install/pkgs.pm
index a93fbed50..6bcdbab7f 100644
--- a/perl-install/pkgs.pm
+++ b/perl-install/pkgs.pm
@@ -1,7 +1,7 @@
-package pkgs; # $Id: pkgs.pm 269470 2010-05-26 09:23:39Z pterjan $
+package pkgs;
use strict;
-
+use lib qw(/usr/lib/libDrakX); # for perl_checker
use common;
use run_program;
use detect_devices;
@@ -92,7 +92,7 @@ sub read_rpmsrate_raw {
}
sub read_rpmsrate {
- my ($packages, $rpmsrate_flags_chosen, $file, $match_all_hardware) = @_;
+ my ($packages, $rpmsrate_flags_chosen, $file, $match_all_hardware, $o_match_only_hardware) = @_;
my ($rates, $flags, $need_to_copy) = read_rpmsrate_raw($file);
@@ -118,6 +118,7 @@ sub read_rpmsrate {
@flags = map {
my ($user_flags, $known_flags) = partition { /^!?CAT_/ } split('\|\|', $_);
+ my $bits_ok;
my $ok = find {
my $inv = s/^!//;
return 0 if $::isStandalone && $inv;
@@ -125,6 +126,12 @@ sub read_rpmsrate {
$match_all_hardware ? 1 : ($inv xor find { $_->{description} =~ /$p/i } @probeall);
} elsif (($p) = /^DRIVER"(.*)"/) {
$match_all_hardware ? 1 : ($inv xor find { $_->{driver} =~ /$p/i } @probeall);
+ } elsif (/^TYPE"64bit"/) {
+ #- When searching for hardware support packages, we need to filter out packages
+ #- that don't match our architecture without signalling a positive match for
+ #- packages that do. So we record the result of the test here for use later.
+ $bits_ok ||= ($inv xor $TYPEs->{'64bit'});
+ $o_match_only_hardware ? 0 : $bits_ok;
} elsif (($p) = /^TYPE"(.*)"/) {
$match_all_hardware ? 1 : ($inv xor $TYPEs->{$p});
} elsif (($p) = /^HW_CAT"(.*)"/) {
@@ -133,7 +140,7 @@ sub read_rpmsrate {
$inv xor $rpmsrate_flags_chosen->{$_};
}
} @$known_flags;
- $ok ? 'TRUE' : @$user_flags ? join('||', @$user_flags) : 'FALSE';
+ $ok ? 'TRUE' : @$user_flags ? join('||', @$user_flags) : $bits_ok ? () : 'FALSE';
} @flags;
@flags = member('FALSE', @flags) ? 'FALSE' : @flags;
@@ -150,8 +157,8 @@ sub read_rpmsrate {
sub simple_read_rpmsrate {
- my ($o_match_all_hardware, $o_ignore_flags) = @_;
- my ($rates, $flags) = read_rpmsrate({}, {}, $::prefix . '/usr/share/meta-task/rpmsrate-raw', $o_match_all_hardware);
+ my ($o_match_all_hardware, $o_ignore_flags, $o_match_only_hardware) = @_;
+ my ($rates, $flags) = read_rpmsrate({}, {}, $::prefix . '/usr/share/meta-task/rpmsrate-raw', $o_match_all_hardware, $o_match_only_hardware);
# FIXME: we do not handle !CAT_desktop but we do not care for now:
if (!$o_match_all_hardware && $o_ignore_flags) {
@@ -168,11 +175,11 @@ sub simple_read_rpmsrate {
sub detect_rpmsrate_hardware_packages {
my ($o_match_all_hardware, $ignore_flags) = @_;
- grep { !/openoffice|java/ } simple_read_rpmsrate($o_match_all_hardware, $ignore_flags);
+ grep { !/openoffice|java/ } simple_read_rpmsrate($o_match_all_hardware, $ignore_flags, 'match-only-hardware');
}
sub detect_graphical_drivers {
- my ($do_pkgs, $o_match_all_hardware) = @_;
+ my ($do_pkgs, $o_match_all_hardware, $o_firmware_only) = @_;
require Xconfig::card;
require Xconfig::proprietary;
@@ -185,6 +192,7 @@ sub detect_graphical_drivers {
}
my @firmware_pkgs = grep { $_ } uniq(map { $_->{FIRMWARE} } @cards);
+ return @firmware_pkgs if $o_firmware_only;
my @drivers = grep { $_ } uniq(map { $_->{Driver2} } @cards);
my @proprietary_pkgs = map { Xconfig::proprietary::pkgs_for_Driver2($_, $do_pkgs) } @drivers;
return @firmware_pkgs, @proprietary_pkgs;
@@ -209,7 +217,7 @@ sub detect_network_drivers {
foreach my $settings (@network_settings) {
foreach (@network::thirdparty::thirdparty_types) {
my @packages = network::thirdparty::get_required_packages($_, $settings);
- push @l, network::thirdparty::get_available_packages($_, $do_pkgs, @packages);
+ push @l, network::thirdparty::get_available_packages($_, $do_pkgs, @packages) if @packages;
}
}
}
@@ -219,8 +227,13 @@ sub detect_network_drivers {
sub detect_hardware_packages {
my ($do_pkgs, $o_match_all_hardware) = @_;
my @ignore_flags = $::isInstall ? () : (
- if_(!$do_pkgs->is_installed('task-kde4-minimal'), "CAT_KDE"),
+ if_(!$do_pkgs->is_installed('task-plasma-minimal'), "CAT_PLASMA"),
if_(!$do_pkgs->is_installed('task-gnome-minimal'), "CAT_GNOME"),
+ if_(!$do_pkgs->is_installed('task-cinnamon-minimal'), "CAT_CINNAMON"),
+ if_(!$do_pkgs->is_installed('task-mate-minimal'), "CAT_MATE"),
+ if_(!$do_pkgs->is_installed('task-xfce-minimal'), "CAT_XFCE"),
+ if_(!$do_pkgs->is_installed('task-enlightenment-minimal'), "CAT_ENLIGHTENMENT"),
+ if_(!$do_pkgs->is_installed('task-lxqt-minimal'), "CAT_LXQT"),
);
(
($::isInstall ? () : detect_rpmsrate_hardware_packages($o_match_all_hardware, \@ignore_flags)),
@@ -242,9 +255,10 @@ sub detect_unselected_locale_packages {
require lang;
my $locales_prefix = 'locales-';
my $locale = lang::read();
- my $selected_locale = $locales_prefix . lang::locale_to_main_locale($locale->{lang});
+ my @selected_locales = map { $locales_prefix . $_ } lang::locale_to_main_locale($locale->{lang}), lang::locale_to_main_locale(lang::c2locale($locale->{country}));
my @available_locales = $do_pkgs->are_installed($locales_prefix . '*');
- member($selected_locale, @available_locales) ? difference2(\@available_locales, [ $selected_locale ]) : ();
+ my @unneeded_locales = difference2(\@available_locales, \@selected_locales);
+ $do_pkgs->are_installed(@unneeded_locales);
}
sub remove_unused_packages {
@@ -259,7 +273,7 @@ sub remove_unused_packages {
undef $wait;
# Packages to not remove even if they seem unused
- my @wanted_hardware_packages = qw(gnome-bluetooth gnome-phone-manager kbluetooth kppp ppp wireless-tools wpa_supplicant);
+ my @wanted_hardware_packages = qw(gnome-bluetooth pulseaudio-module-bluetooth gnome-phone-manager bluedevil kppp ppp wireless-tools wireless-regdb wpa_supplicant iw crda kernel-firmware-nonfree radeon-firmware ralink-firmware rtlwifi-firmware ipw2100-firmware ipw2200-firmware iwlwifi-3945-ucode iwlwifi-4965-ucode iwlwifi-firmware b43-fwcutter b43-openfwwf atmel-firmware speedtouch-firmware zd1211-firmware isdn4k-utils rfkill x11-driver-input-wacom x11-driver-video-vmware usb_modeswitch usb_modeswitch-data);
@unused_hardware_packages = difference2(\@unused_hardware_packages, \@wanted_hardware_packages);
@unused_hardware_packages || @unselected_locales or return;
@@ -285,7 +299,8 @@ sub remove_unused_packages {
#- we should have some gurpme
$wait = $in->wait_message(N("Please wait"), N("Removing packages..."));
- run_program::rooted($o_prefix, 'urpme', '--auto',
+ #- disable timeout, it can cause irrepairable damage to the rpm database (mga#27580)
+ run_program::raw({ root => $o_prefix, timeout => 'never' }, 'urpme', '--auto',
if_($hardware, @unused_hardware_packages),
if_($locales, @unselected_locales),
);