summaryrefslogtreecommitdiffstats
path: root/perl-install/modules/modprobe_conf.pm
diff options
context:
space:
mode:
authorPascal Rigaux <pixel@mandriva.com>2004-07-21 00:16:04 +0000
committerPascal Rigaux <pixel@mandriva.com>2004-07-21 00:16:04 +0000
commit7e8fa9773839843c9d8def81ec2ef1315115825a (patch)
treeb20f63ae9f67b2d9c7e8aa6a2b86d56e0d953743 /perl-install/modules/modprobe_conf.pm
parent54b71cdf438434e4693aa6064596f4fdb4aac59e (diff)
downloaddrakx-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.pm108
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;