summaryrefslogtreecommitdiffstats
path: root/perl-install/modules
diff options
context:
space:
mode:
Diffstat (limited to 'perl-install/modules')
-rw-r--r--perl-install/modules/any_conf.pm40
-rw-r--r--perl-install/modules/interactive.pm40
-rw-r--r--perl-install/modules/modprobe_conf.pm7
-rw-r--r--perl-install/modules/modules_conf.pm5
-rw-r--r--perl-install/modules/parameters.pm47
5 files changed, 55 insertions, 84 deletions
diff --git a/perl-install/modules/any_conf.pm b/perl-install/modules/any_conf.pm
index c7ce2a475..c235e84f4 100644
--- a/perl-install/modules/any_conf.pm
+++ b/perl-install/modules/any_conf.pm
@@ -1,17 +1,12 @@
-package modules::any_conf; # $Id$
+package modules::any_conf;
use log;
use common;
sub vnew {
- if (c::kernel_version() =~ /^\Q2.6/) {
- require modules::modprobe_conf;
- modules::modprobe_conf->new;
- } else {
- require modules::modules_conf;
- modules::modules_conf->new;
- }
+ require modules::modprobe_conf;
+ modules::modprobe_conf->new;
}
@@ -103,7 +98,14 @@ sub remove_alias_regexp_byname {
sub remove_module {
my ($conf, $module) = @_;
+ return if !$module;
$module = $conf->mapping($module);
+ foreach my $file ("$::prefix/etc/modules", "$::prefix/etc/modprobe.preload") {
+ substInFile {
+ undef $_ if /^$module/;
+ } $file;
+ }
+
$conf->remove_alias($module);
log::explanations("removing module $module");
delete $conf->{$module};
@@ -124,7 +126,7 @@ sub set_sound_slot {
sub read {
my (undef, $o_file) = @_;
- my $conf = modules::any_conf::vnew();
+ my $conf = vnew();
$conf->read($o_file);
}
@@ -137,10 +139,7 @@ sub write {
#- Substitute new config (if config has changed)
substInFile {
my ($type, $module, $val) = split(' ', chomp_($_), 3);
- if ($type eq 'post-install' && $module eq 'supermount') {
- #- remove the post-install supermount stuff.
- $_ = '';
- } elsif (member($type, $conf->handled_fields)) {
+ if (member($type, $conf->handled_fields)) {
my $new_val = $conf->{$module}{$type};
if (!$new_val) {
$_ = '';
@@ -164,14 +163,22 @@ sub write {
modules::write_preload_conf($conf);
}
+sub merge_into {
+ my ($conf, $conf2) = @_;
-
+ if (ref($conf) eq ref($conf2)) {
+ log::l("merging " . ref($conf));
+ add2hash($conf, $conf2);
+ } else {
+ log::l("not merging modules_conf " . ref($conf2) . " into " . ref($conf));
+ }
+}
################################################################################
sub read_handled {
my ($conf, $o_file) = @_;
my $file = $o_file || $::prefix . $conf->file;
- my $raw_conf = modules::any_conf::read_raw($file);
+ my $raw_conf = read_raw($file);
foreach my $module (keys %$raw_conf) {
my $raw = $raw_conf->{$module};
@@ -193,9 +200,6 @@ sub read_raw {
s/#.*$//;
s/\s+$//;
- s/\b(snd-card-)/snd-/g;
- s/\b(snd-via686|snd-via8233)\b/snd-via82xx/g;
-
my ($type, $module, $val) = split(' ', $_, 3) or next;
$c{$module}{$type} = $val;
diff --git a/perl-install/modules/interactive.pm b/perl-install/modules/interactive.pm
index 39fcdda4d..dae135889 100644
--- a/perl-install/modules/interactive.pm
+++ b/perl-install/modules/interactive.pm
@@ -1,5 +1,5 @@
package modules::interactive;
-use interactive;
+
use modules;
use common;
@@ -11,17 +11,18 @@ sub config_window {
require modules::parameters;
my @l;
foreach (modules::parameters::parameters($data->{driver})) {
- my ($name, $format, $description) = @$_;
- push @l, { label => $name, help => join("\n", $description, if_(c::kernel_version() !~ /^\Q2.6/, "[$format]")),
- val => \$conf{$name}, allow_empty_list => 1 };
+ my ($name, $description) = @$_;
+ push @l, { label => $name, help => $description,
+ val => \$conf{$name}, allow_empty_list => 1 };
+ }
+ if (!@l) {
+ $in->ask_warn(N("Error"), N("This driver has no configuration parameter!"));
+ return;
}
- # BUG: once we've released mdk9.2 and unfreeze cooker, morph this
- # into a proper error dialog with a nice error message (but
- # for now we cannot due to string freeze :-()
- @l = { label => N("Parameters"), help => "", val => N("NONE"), allow_empty_list => 1 } if !@l;
if ($in->ask_from(N("Module configuration"), N("You can configure each parameter of the module here."), \@l)) {
- my $options = join(' ', map { if_($conf{$_}, "$_=$conf{$_}") } keys %conf);
- if ($options) {
+ my $options = join(' ', map { if_($conf{$_} =~ /^\S+$/, "$_=$conf{$_}") } keys %conf);
+ my $old_options = $modules_conf->get_options($data->{driver});
+ if ($options ne $old_options) {
$modules_conf->set_options($data->{driver}, $options);
$modules_conf->write;
}
@@ -66,7 +67,7 @@ sub load_category__prompt_for_more {
my $r = 'No';
$in->ask_from_({ messages => $msg,
- if_($category =~ m!disk/.*(sata|scsi|hardware_raid|usb|firewire)!, interactive_help_id => 'setupSCSI'),
+ if_($category =~ m!disk/.*(ide|sata|scsi|hardware_raid|usb|firewire)!, interactive_help_id => 'setupSCSI'),
},
[ { list => [ N_("Yes"), N_("No"), N_("See hardware info") ], val => \$r, type => 'list', format => \&translate } ]);
if ($r eq "No") { return @l }
@@ -80,13 +81,13 @@ sub load_category__prompt_for_more {
my %category2text = (
'bus/usb' => N_("Installing driver for USB controller"),
- 'bus/firewire' => N_("Installing driver for firewire controller %s"),
- 'disk/ide|scsi|hardware_raid|sata|firewire' => N_("Installing driver for hard drive controller %s"),
- list_modules::ethernet_categories() => N_("Installing driver for ethernet controller %s"),
+ 'bus/firewire' => N_("Installing driver for firewire controller \"%s\""),
+ 'disk/card_reader|ide|scsi|hardware_raid|sata|firewire|virtual' => N_("Installing driver for hard disk drive controller \"%s\""),
+ list_modules::ethernet_categories() => N_("Installing driver for ethernet controller \"%s\""),
);
sub wait_load_module {
- my ($in, $category, $text, $module) = @_;
+ my ($in, $category, $text, $_module) = @_;
my $msg = do {
if (my $t = $category2text{$category}) {
sprintf(translate($t), $text);
@@ -96,20 +97,21 @@ sub wait_load_module {
N("Installing driver for %s card %s", $category, $text);
}
};
- $in->wait_message('', [ $msg, if_($::expert, N("(module %s)", $module)) ]);
+ $in->wait_message(N("Configuring Hardware"), $msg);
}
sub load_module__ask_options {
my ($in, $module_descr, $parameters) = @_;
- my @parameters = map { [ @$_[0, 1, 2] ] } @$parameters;
+ #- deep copying
+ my @parameters = map { [ @$_[0, 1] ] } @$parameters;
if (@parameters) {
$in->ask_from('',
N("You may now provide options to module %s.\nNote that any address should be entered with the prefix 0x like '0x123'", $module_descr),
- [ map { { label => $_->[0] . ($_->[1] ? " ($_->[1])" : ''), help => $_->[2], val => \$_->[3] } } @parameters ],
+ [ map { { label => $_->[0], help => $_->[1], val => \$_->[2] } } @parameters ],
) or return;
- join(' ', map { if_($_->[3], "$_->[0]=$_->[3]") } @parameters);
+ join(' ', map { if_($_->[2], "$_->[0]=$_->[2]") } @parameters);
} else {
my $s = $in->ask_from_entry('',
N("You may now provide options to module %s.
diff --git a/perl-install/modules/modprobe_conf.pm b/perl-install/modules/modprobe_conf.pm
index b2a57717d..7989096f8 100644
--- a/perl-install/modules/modprobe_conf.pm
+++ b/perl-install/modules/modprobe_conf.pm
@@ -1,7 +1,8 @@
-package modules::modprobe_conf; # $Id$
+package modules::modprobe_conf;
use log;
use common;
+# perl_checker: require modules::any_conf
our @ISA = qw(modules::any_conf);
@@ -21,7 +22,7 @@ sub get_above {
my (undef, $after) = parse_non_virtual($module, $conf->{$module}{install}) or return;
my ($l, $_other_cmds) = partition_modprobes($after);
- join(' ', @$l);
+ @$l;
}
sub set_above {
my ($conf, $module, $o_modules) = @_;
@@ -102,7 +103,7 @@ sub parse_non_virtual {
sub unparse_non_virtual {
my ($module, $mode, $before, $after) = @_;
($before ? "$before; " : '')
- . "/sbin/modprobe --first-time $mode $module"
+ . (($before || $after) ? "/sbin/modprobe --first-time $mode $module" : '')
. ($after ? " && { $after; /bin/true; }" : '');
}
diff --git a/perl-install/modules/modules_conf.pm b/perl-install/modules/modules_conf.pm
index afcf08b35..be4b8fca4 100644
--- a/perl-install/modules/modules_conf.pm
+++ b/perl-install/modules/modules_conf.pm
@@ -1,7 +1,8 @@
-package modules::modules_conf; # $Id$
+package modules::modules_conf;
use log;
use common;
+# perl_checker: require modules::any_conf
our @ISA = qw(modules::any_conf);
@@ -19,7 +20,7 @@ sub get_above {
my ($conf, $module) = @_;
$module = $conf->mapping($module);
- $conf->{$module} && $conf->{$module}{above};
+ $conf->{$module} && split(' ', $conf->{$module}{above});
}
sub set_above {
my ($conf, $module, $o_modules) = @_;
diff --git a/perl-install/modules/parameters.pm b/perl-install/modules/parameters.pm
index fa8fcfae7..36990b5d1 100644
--- a/perl-install/modules/parameters.pm
+++ b/perl-install/modules/parameters.pm
@@ -1,4 +1,4 @@
-package modules::parameters; # $Id$
+package modules::parameters;
use diagnostics;
use strict;
@@ -13,48 +13,11 @@ use modules;
sub parameters {
my ($module) = @_;
- if (!$::isStandalone && !$::testing) {
- ($module) = modules::extract_modules('/tmp', $module);
- }
-
- my @parameters;
- foreach (common::join_lines(run_program::get_stdout('modinfo', '-p', $module))) {
+ map {
chomp;
- next if /^warning:/;
- (my $name, $_) = /(\w+)(?::|\s+)(.*)/s or warn "modules::parameters::get_options_name($module): unknown line\n";
- if (c::kernel_version() =~ /^\Q2.6/) {
- push @parameters, [ $name, '', $_ ];
- next;
- }
-
- my $c_types = 'int|string|short|byte|char|long';
- my ($is_a_number, $description, $min, $max) = (0, '', 1, 1);
- if (/^($c_types) array \(min = (\d+), max = (\d+)\),?\s*(.*)/s) {
- $_ = $4;
- #- seems like "char" are buggy entries
- ($is_a_number, $min, $max) = ($1 ne 'string', $2, $3) if $1 ne 'char';
- } elsif (/^($c_types),?\s*(.*)/s) {
- $_ = $2;
- #- here "char" really are size-limited strings, modinfo does not display the size limit (but since we do not care about it, it does not matter :)
- $is_a_number = $1 ne 'string' if $1 ne 'char';
- } else {
- #- for things like "no format character" or "unknown format character"
- }
- if (/^description "(.*)",?\s*/s) {
- ($description, $_) = ($1, $2);
- }
- #- print "STILL HAVE ($_)\n" if $_;
-
- my $format = $min == 1 && $max == 1 ?
- ($is_a_number ? N("a number") : '') :
- $min == $max ?
- ($is_a_number ? N("%d comma separated numbers", $min) : N("%d comma separated strings", $min)) :
- $min == 1 ?
- ($is_a_number ? N("comma separated numbers") : N("comma separated strings")) :
- ''; #- too weird and buggy, do not display it
- push @parameters, [ $name, $format, $description ];
- }
- @parameters;
+ (my $name, $_) = /(\w+):(.*)/s or warn "modules::parameters::parameters($module): unknown line\n";
+ [ $name, $_ ];
+ } common::join_lines(run_program::get_stdout('modinfo', '-p', $module));
}
1;