diff options
Diffstat (limited to 'perl-install/modules/any_conf.pm')
| -rw-r--r-- | perl-install/modules/any_conf.pm | 116 |
1 files changed, 68 insertions, 48 deletions
diff --git a/perl-install/modules/any_conf.pm b/perl-install/modules/any_conf.pm index b2655dba0..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; } @@ -30,44 +25,50 @@ sub get_alias { $conf->{$alias}{alias}; } sub get_options { - my ($conf, $name) = @_; - $conf->{$name}{options}; + my ($conf, $module) = @_; + $module = $conf->mapping($module); + $conf->{$module}{options}; } sub set_options { - my ($conf, $name, $new_option) = @_; - log::l(qq(set option "$new_option" for module "$name")); - $conf->{$name}{options} = $new_option; + my ($conf, $module, $new_option) = @_; + $module = $conf->mapping($module); + log::explanations(qq(set option "$new_option" for module "$module")); + $conf->{$module}{options} = $new_option; } sub get_parameters { - my ($conf, $name) = @_; - map { if_(/(.*)=(.*)/, $1 => $2) } split(' ', $conf->get_options($name)); + my ($conf, $module) = @_; + $module = $conf->mapping($module); + map { if_(/(.*)=(.*)/, $1 => $2) } split(' ', $conf->get_options($module)); } sub get_probeall { my ($conf, $alias) = @_; $conf->{$alias}{probeall}; } -sub set_probeall { +sub _set_probeall { my ($conf, $alias, $modules) = @_; $conf->{$alias}{probeall} = $modules; - log::l("setting probeall $alias to $modules"); + log::explanations("setting probeall $alias to $modules"); } sub add_probeall { my ($conf, $alias, $module) = @_; + $module = $conf->mapping($module); my $modules = join(' ', uniq(split(' ', $conf->{$alias}{probeall}), $module)); - set_probeall($conf, $alias, $modules); + _set_probeall($conf, $alias, $modules); } sub remove_probeall { my ($conf, $alias, $module) = @_; + $module = $conf->mapping($module); my $modules = join(' ', grep { $_ ne $module } split(' ', $conf->{$alias}{probeall})); - set_probeall($conf, $alias, $modules); + _set_probeall($conf, $alias, $modules); } sub set_alias { my ($conf, $alias, $module) = @_; $module =~ /ignore/ and return; + $module = $conf->mapping($module); /\Q$alias/ && $conf->{$_}{alias} && $conf->{$_}{alias} eq $module and return $_ foreach keys %$conf; - log::l("adding alias $alias to $module"); + log::explanations("adding alias $alias to $module"); $conf->{$alias}{alias} = $module; $alias; } @@ -75,13 +76,13 @@ sub set_alias { sub remove_alias { my ($conf, $name) = @_; - log::l(qq(removing alias "$name")); + log::explanations(qq(removing alias "$name")); $conf->remove_alias_regexp("^$name\$"); } sub remove_alias_regexp { my ($conf, $aliased) = @_; - log::l(qq(removing all aliases that match "$aliased")); + log::explanations(qq(removing all aliases that match "$aliased")); foreach (keys %$conf) { delete $conf->{$_}{alias} if /$aliased/; } @@ -89,22 +90,31 @@ sub remove_alias_regexp { sub remove_alias_regexp_byname { my ($conf, $name) = @_; - log::l(qq(removing all aliases which names match "$name")); + log::explanations(qq(removing all aliases which names match "$name")); foreach (keys %$conf) { delete $conf->{$_} if /$name/; } } sub remove_module { - my ($conf, $name) = @_; - $conf->remove_alias($name); - log::l("removing module $name"); - delete $conf->{$name}; + 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}; 0; } sub set_sound_slot { my ($conf, $alias, $module) = @_; + $module = $conf->mapping($module); if (my $old = $conf->get_alias($alias)) { $conf->set_above($old, undef); } @@ -116,18 +126,8 @@ sub set_sound_slot { sub read { my (undef, $o_file) = @_; - my $conf = modules::any_conf::vnew(); - my $raw_conf = modules::any_conf::read_raw($o_file || $::prefix . $conf->file); - - foreach my $module (keys %$raw_conf) { - my $raw = $raw_conf->{$module}; - my $keep = $conf->{$module} = {}; - foreach ($conf->handled_fields) { - $keep->{$_} = $raw->{$_} if $raw->{$_}; - } - } - - $conf; + my $conf = vnew(); + $conf->read($o_file); } sub write { @@ -139,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) { $_ = ''; @@ -156,7 +153,9 @@ sub write { my $to_add; while (my ($module, $h) = each %$conf) { while (my ($type, $v) = each %$h) { - $to_add .= "$type $module $v\n" if $v && !$written{$module}{$type}; + if ($v && !$written{$module}{$type}) { + $to_add .= "$type $module $v\n"; + } } } append_to_file($file, $to_add); @@ -164,10 +163,34 @@ 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 = read_raw($file); + + foreach my $module (keys %$raw_conf) { + my $raw = $raw_conf->{$module}; + my $keep = $conf->{$module} = {}; + foreach ($conf->handled_fields) { + $keep->{$_} = $raw->{$_} if $raw->{$_}; + } + } + + $conf; +} + sub read_raw { my ($file) = @_; my %c; @@ -177,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; |
