diff options
author | Pascal Rigaux <pixel@mandriva.com> | 2004-07-21 00:16:04 +0000 |
---|---|---|
committer | Pascal Rigaux <pixel@mandriva.com> | 2004-07-21 00:16:04 +0000 |
commit | 7e8fa9773839843c9d8def81ec2ef1315115825a (patch) | |
tree | b20f63ae9f67b2d9c7e8aa6a2b86d56e0d953743 /perl-install/modules/modprobe_conf.pm | |
parent | 54b71cdf438434e4693aa6064596f4fdb4aac59e (diff) | |
download | drakx-7e8fa9773839843c9d8def81ec2ef1315115825a.tar drakx-7e8fa9773839843c9d8def81ec2ef1315115825a.tar.gz drakx-7e8fa9773839843c9d8def81ec2ef1315115825a.tar.bz2 drakx-7e8fa9773839843c9d8def81ec2ef1315115825a.tar.xz drakx-7e8fa9773839843c9d8def81ec2ef1315115825a.zip |
- %modules::conf is no more a global, so many functions need passing $modules_conf
- $modules_conf is a class choosing modules.conf or modprobe.conf
(esp. useful after install) (but not working yet!)
- modules::load() doesn't use $modules_conf, use modules::load_and_configure()
- modules::load() doesn't allow options, use either modules::load_raw() or modules::load_and_configure()
- some functions used to want an array ref for modules options and some a string, now every functions use a string
- many functions (like modules::get_alias()) are now methods on $modules_conf
- some functions in mouse.pm needed a $in where a $do_pkgs is enough
- some perl_checker compliance
- small fixes
Diffstat (limited to 'perl-install/modules/modprobe_conf.pm')
-rw-r--r-- | perl-install/modules/modprobe_conf.pm | 108 |
1 files changed, 108 insertions, 0 deletions
diff --git a/perl-install/modules/modprobe_conf.pm b/perl-install/modules/modprobe_conf.pm new file mode 100644 index 000000000..8b1e8305f --- /dev/null +++ b/perl-install/modules/modprobe_conf.pm @@ -0,0 +1,108 @@ +package modules::modprobe_conf; + +use log; +use common; + +our @ISA = qw(modules::any_conf); + + +sub get_above { + my ($conf, $name) = @_; + after_modules($name, $conf->{$name}{install}); +} +sub set_above { + my ($conf, $name, $modules) = @_; + #TODO +} + +sub get_probeall { + my ($conf, $alias) = @_; + #TODO +} +sub add_probeall { + my ($conf, $alias, $module) = @_; + + #TODO + my $l = $conf->{$alias}{probeall} ||= []; + @$l = uniq(@$l, $module); + log::l("setting probeall $alias to @$l"); +} +sub remove_probeall { + my ($conf, $alias, $module) = @_; + + #TODO + my $l = $conf->{$alias}{probeall} ||= []; + @$l = grep { $_ ne $module } @$l; + log::l("setting probeall $alias to @$l"); +} + + + +################################################################################ +sub remove_braces { + my ($s) = @_; + $s =~ s/^\s*\{\s*(.*)\s*;\s*\}\s*$/$1/; + $s; +} + +sub non_virtual { + my ($module, $s) = @_; + my ($before, $options, $after) = + $s =~ m!^(?:(.*);)? + \s*(?:/sbin/)?modprobe\s+(-\S+\s+)*\Q$module\E + \s*(?:&&\s*(.*))?$!x + or return; + $options =~ /--ignore-(install|remove)\b/ or return; + + ($before, $after) = map { remove_braces($_ || '') } $before, $after; + $after =~ s!\s*;\s*/bin/true$!!; + + $before, $after; +} + +sub after_modules { + my ($module, $s) = @_; + my (undef, $after) = non_virtual($module, $s) or return; + +} + +sub probeall { + my ($module, $s) = @_; + + non_virtual($module, $s) and return; + if ($s =~ /[{&|]/) { + log::l("weird install line in modprobe.conf for $module: $s"); + return; + } + $s ne '/bin/true' or return; #- we have "alias $module off" here + + $s =~ s!\s*;\s*/bin/true$!!; + + my @l = split(/\s*;\s*/, $s); + + [ map { + if (m!^(?:/sbin/)?modprobe\s+(\S+)$!) { + $1 + } else { + log::l("weird probeall string $_ (from install $module $s)"); + (); + } + } @l ]; +} + +sub parse { + my ($type, $module, $s) = @_; + + member($type, 'install', 'remove') or return; + + if (my ($before, $after) = non_virtual($module, $s)) { + [ + if_($after, [ "post-$type", $after ]), + if_($before, [ "pre-$type", $before ]), + ]; + } elsif (my $l = probeall($module, $s)) { + [ [ 'probeall', @$l ] ]; + } +} + +1; |