From 7e8fa9773839843c9d8def81ec2ef1315115825a Mon Sep 17 00:00:00 2001 From: Pascal Rigaux Date: Wed, 21 Jul 2004 00:16:04 +0000 Subject: - %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 --- perl-install/modules/modprobe_conf.pm | 108 ++++++++++++++++++++++++++++++++++ 1 file changed, 108 insertions(+) create mode 100644 perl-install/modules/modprobe_conf.pm (limited to 'perl-install/modules/modprobe_conf.pm') 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; -- cgit v1.2.1