diff options
Diffstat (limited to 'dh_installmodules')
-rwxr-xr-x | dh_installmodules | 100 |
1 files changed, 83 insertions, 17 deletions
diff --git a/dh_installmodules b/dh_installmodules index 0ee00dce..13fd8f5c 100755 --- a/dh_installmodules +++ b/dh_installmodules @@ -1,28 +1,94 @@ #!/usr/bin/perl -w -# -# Register modules with modutils. -BEGIN { push @INC, "debian", "/usr/share/debhelper" } -use Dh_Lib; +=head1 NAME + +dh_installmodules - register modules with modutils + + +=cut + +use strict; +use Debian::Debhelper::Dh_Lib; +use File::Find; + +=head1 SYNOPSIS + +B<dh_installmodules> [S<I<debhelper options>>] [B<-n>] + +=head1 DESCRIPTION + +dh_installmodules is a debhelper program that is responsible for +registering kernel modules with modutils. + +Files named debian/package.modules will be installed as +etc/modutils/package in the package build directory. + +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. + +=head1 OPTIONS + +=over 4 + +=item B<-n>, B<--noscripts> + +Do not modify postinst/postrm scripts. + +=back + +=head1 NOTES + +Note that this command is not idempotent. "dh_clean -k" should be called +between invocations of this command. Otherwise, it may cause multiple +instances of the same text to be added to maintainer scripts. + +=cut + init(); -foreach $PACKAGE (@{$dh{DOPACKAGES}}) { - $TMP=tmpdir($PACKAGE); - $file=pkgfile($PACKAGE,"modules"); +# Returns true if there are any .o files in the passed directory. +sub find_kernel_modules { + my $searchdir=shift; + my @results=(); + + return unless -d $searchdir; + find(sub { push @results, $_ if /\.o$/ }, $searchdir); + return @results > 0; +} + +foreach my $package (@{$dh{DOPACKAGES}}) { + my $tmp=tmpdir($package); + my $file=pkgfile($package,"modules"); - 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 (! $dh{NOSCRIPTS}) { - autoscript($PACKAGE,"postinst","postinst-modules","s/#PACKAGE#/$PACKAGE/"); - autoscript($PACKAGE,"postrm","postrm-modules","s/#PACKAGE#/$PACKAGE/"); + if (! -e "$tmp/etc/modutils") { + doit("install","-d","$tmp/etc/modutils"); } + doit("install","-m","0644",$file,"$tmp/etc/modutils/$package"); + } + + 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/"); } } + +=head1 SEE ALSO + +L<debhelper(7)> + +This program is a part of debhelper. + +=head1 AUTHOR + +Joey Hess <joeyh@debian.org> + +=cut |