]> git.donarmstrong.com Git - debhelper.git/blobdiff - dh_installmodules
basic docs about buildsystem classes
[debhelper.git] / dh_installmodules
index 13fd8f5c66651e9e3da23897f581807ca2696cd9..475d83886e6ade8960afdff0c2b18ffebe15d436 100755 (executable)
@@ -13,21 +13,32 @@ use File::Find;
 
 =head1 SYNOPSIS
 
 
 =head1 SYNOPSIS
 
-B<dh_installmodules> [S<I<debhelper options>>] [B<-n>]
+B<dh_installmodules> [S<I<debhelper options>>] [B<-n>] [B<--name=>I<name>]
 
 =head1 DESCRIPTION
 
 dh_installmodules is a debhelper program that is responsible for
 
 =head1 DESCRIPTION
 
 dh_installmodules is a debhelper program that is responsible for
-registering kernel modules with modutils.
+registering kernel modules.
 
 
-Files named debian/package.modules will be installed as
-etc/modutils/package in the package build directory.
+Files named debian/package.modprobe will be installed in
+etc/modprobe.d/package.conf in the package build directory, to be used by
+module-init-tools's version of modprobe.
 
 
-Then postinst and postrm commands are automatically generated to register
-the modules when the package is installed. See L<dh_installdeb(1)> for an
-explanation of how this works. Note that this will be done for any
-package this program acts on which has either the above-mentioned file, or
-has .o files in /lib/modules.
+Kernel modules are searched for in the package build directory and if
+found, postinst and postrm commands are automatically generated to 
+run depmod and register the modules when the package is installed. 
+These commands are inserted into the maintainer scripts by dh_installdeb.
+See L<dh_installdeb(1)> for an explanation of how this works.
+
+Previous versions of dh_installmodules installed files named
+etc/modprobe.d/package, code is added to the preinst and postinst to
+handle the upgrade from the old location.
+
+Previous versions of dh_installmodules also supported 
+files named debian/package.modules, which were installed into 
+etc/modutils/package in the package build directory. This was for use by
+modutils, which is no longer in Debian. dh_installmodules will warn about
+such files now.
 
 =head1 OPTIONS
 
 
 =head1 OPTIONS
 
@@ -37,11 +48,18 @@ has .o files in /lib/modules.
 
 Do not modify postinst/postrm scripts.
 
 
 Do not modify postinst/postrm scripts.
 
+=item B<--name=>I<name>
+
+When this parameter is used, dh_installmodules looks for and
+installs files named debian/package.name.modules and
+debian/package.name.modprobe instead of the usual
+debian/package.modules and debian/package.modprobe
+
 =back
 
 =head1 NOTES
 
 =back
 
 =head1 NOTES
 
-Note that this command is not idempotent. "dh_clean -k" should be called
+Note that this command is not idempotent. L<dh_prep(1)> should be called
 between invocations of this command. Otherwise, it may cause multiple
 instances of the same text to be added to maintainer scripts.
 
 between invocations of this command. Otherwise, it may cause multiple
 instances of the same text to be added to maintainer scripts.
 
@@ -49,35 +67,57 @@ instances of the same text to be added to maintainer scripts.
 
 init();
 
 
 init();
 
-# Returns true if there are any .o files in the passed directory.
+# Looks for kernel modules in the passed directory. If any are found,
+# returns the kernel version (or versions) that the modules seem to be for.
 sub find_kernel_modules {
        my $searchdir=shift;
 sub find_kernel_modules {
        my $searchdir=shift;
-       my @results=();
+       my %versions;
 
        return unless -d $searchdir;
 
        return unless -d $searchdir;
-       find(sub { push @results, $_ if /\.o$/ }, $searchdir);
-       return @results > 0;
+       find(sub {
+               if (/\.k?o$/) {
+                       my ($kvers)=$File::Find::dir=~m!lib/modules/([^/]+)/!;
+                       if (! defined $kvers || ! length $kvers) {
+                               warning("Cannot determine kernel version for module $File::Find::name");
+                       }
+                       else {
+                               $versions{$kvers}=1;
+                       }
+               }
+       }, $searchdir);
+
+       return keys %versions;
 }
 
 foreach my $package (@{$dh{DOPACKAGES}}) {
        my $tmp=tmpdir($package);
 }
 
 foreach my $package (@{$dh{DOPACKAGES}}) {
        my $tmp=tmpdir($package);
-       my $file=pkgfile($package,"modules");
+       my $modutils_file=pkgfile($package,"modules");
+       my $modprobe_file=pkgfile($package,"modprobe");
 
        if (! -e $tmp) {
                doit("install","-d",$tmp);
        }
 
 
        if (! -e $tmp) {
                doit("install","-d",$tmp);
        }
 
-       if ($file) {
-               if (! -e "$tmp/etc/modutils") {
-                       doit("install","-d","$tmp/etc/modutils");
-               }
-               doit("install","-m","0644",$file,"$tmp/etc/modutils/$package");
+       if ($modutils_file) {
+               warning("ignoring $modutils_file, since modutils is no longer in Debian");
        }
 
        }
 
-       if (! $dh{NOSCRIPTS} &&
-           ($file || find_kernel_modules("$tmp/lib/modules"))) {
-                       autoscript($package,"postinst","postinst-modules","s/#PACKAGE#/$package/");
-                       autoscript($package,"postrm","postrm-modules","s/#PACKAGE#/$package/");
+       if ($modprobe_file) {
+               if (! -e "$tmp/etc/modprobe.d") {
+                       doit("install","-d","$tmp/etc/modprobe.d");
+               }
+               my $old="/etc/modprobe.d/".pkgfilename($package);
+               my $new=$old.".conf";
+               doit("install","-m","0644",$modprobe_file,"$tmp/$new");
+               autoscript($package,"preinst","preinst-moveconffile","s!#OLD#!$old!g;s!#PACKAGE#!$package!g");
+               autoscript($package,"postinst","postinst-moveconffile","s!#OLD#!$old!g;s!#NEW#!$new!g");
+       }
+       
+       if (! $dh{NOSCRIPTS}) {
+               foreach my $kvers (find_kernel_modules("$tmp/lib/modules")) {
+                       autoscript($package,"postinst","postinst-modules","s/#KVERS#/$kvers/g");
+                       autoscript($package,"postrm","postrm-modules","s/#KVERS#/$kvers/g");
+               }
        }
 }
 
        }
 }