[Pkg-dkms-commits] [SCM] Dynamic Kernel Module Support branch, master, updated. debian/2.1.1.0-2-1-g19ac85e

David Paleino dapal at debian.org
Sat Jan 16 22:28:47 UTC 2010


The following commit has been merged in the master branch:
commit 19ac85eae6c7fbc34720c7e70a6babd9426c7e9b
Author: David Paleino <dapal at debian.org>
Date:   Sat Jan 16 23:00:38 2010 +0100

    Added DKMS debhelper script (Closes: #553665)
    
      This script is usable both by calling dh_dkms directly, and by
      passing --with dkms to dh calls in dh7-style debian/rules. Read
      dh_dkms(1) for more information.

diff --git a/debian/install b/debian/install
new file mode 100644
index 0000000..bc5fcae
--- /dev/null
+++ b/debian/install
@@ -0,0 +1,4 @@
+debian/scripts/dh_dkms      usr/bin
+debian/scripts/dh_dkms.1    usr/share/man/man1/
+debian/scripts/*-dkms       usr/share/debhelper/autoscripts/
+debian/scripts/dkms.pm      usr/share/perl5/Debian/Debhelper/Sequence/
diff --git a/debian/rules b/debian/rules
index 2a49dc3..62195d3 100755
--- a/debian/rules
+++ b/debian/rules
@@ -8,6 +8,12 @@ CURVER = $(shell dpkg-parsechangelog | grep ^Version | cut -d" " -f2 | cut -d"-"
 
 include /usr/share/quilt/quilt.make
 
+dh_dkms.1: debian/scripts/dh_dkms
+	pod2man \
+		--center "DKMS Debhelper" \
+		--release $(CURVER) \
+		$< > debian/scripts/$@
+
 build: build-stamp
 build-stamp: $(QUILT_STAMPFN)
 	dh_testdir
@@ -26,6 +32,7 @@ install: build
 	dh_prep 
 	dh_installdirs
 	$(MAKE) install-debian DESTDIR=$(CURDIR)/debian/dkms
+	dh_install
 	
 binary-arch: build install
 binary-indep: build install
diff --git a/debian/scripts/dh_dkms b/debian/scripts/dh_dkms
new file mode 100755
index 0000000..55e3c49
--- /dev/null
+++ b/debian/scripts/dh_dkms
@@ -0,0 +1,146 @@
+#!/usr/bin/perl -w
+
+=head1 NAME
+
+dh_dkms - correctly handle DKMS usage by a kernel module package
+
+=cut
+
+use strict;
+use Debian::Debhelper::Dh_Lib;
+
+=head1 SYNOPSIS
+
+B<dh_dkms> [S<I<debhelper options>>] [S<B<-l>>] [S<B<--> I<file>>]
+
+=head1 DESCRIPTION
+
+dh_dkms is a debhelper program that is responsible for correctly setting
+postinst, postrm and dependencies in kernel module packages using DKMS.
+
+If a file named debian/package.dkms exists, then different actions are
+performed, depending on its contents.
+
+=head1 FILES
+
+=over 4
+
+=item debian/I<package>.dkms
+
+=item debian/dkms
+
+It can be a proper configuration file, and in this case it would be installed
+in the proper directory as dkms.conf.
+
+It can also point to another file (this should be used when the configuration
+is provided by upstream), and in this case that file will be installed as dkms.conf
+in the propery directory.
+
+This file can only miss if a filename is provided when calling dh_dkms.
+
+=back
+
+=head1 OPTIONS
+
+=over 4
+
+=item B<-l>, B<--legacy>
+
+Add code to also support DKMS versions < 2.1.0.0.
+
+=item B<--> I<file>
+
+Don't look for debian/I<package>.dkms or debian/dkms, but install I<file> as dkms.conf.
+
+=back
+
+=head1 NOTES
+
+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.
+
+=cut
+
+init(options => {
+	"l|legacy" => \$dh{LEGACY_DKMS},
+});
+
+foreach my $package (@{$dh{DOPACKAGES}}) {
+	#next if is_udeb($package);
+
+	my $tmp = tmpdir($package);
+	my $dkms_dir = "/usr/lib/dkms/";
+	my $dkms_conf = pkgfile($package, "dkms");
+	my $is_snippet = 0;
+	my @other_conf;
+	my $name;
+	my $package_name;
+	my $package_version;
+
+	if ($dkms_conf) {
+		# let's see if it's a proper snippet
+		open(IN, "< $dkms_conf");
+		while (my $l = <IN>) {
+			$l =~ /PACKAGE_NAME=(["'])(.*)\1/ && ($is_snippet = 1);
+		}
+		close(IN);
+
+		if ($is_snippet) {
+			$name = $dkms_conf;
+		}
+		else {
+			@other_conf = filearray($dkms_conf);
+			if ($#other_conf > 1) {
+				error "cannot list more than one file in $dkms_conf!";
+			}
+			else {
+				$name = $other_conf[0];
+			}
+		}
+	}
+	elsif ($#ARGV == 0) {
+		$name = $ARGV[0];
+	}
+	else {
+		error "doing nothing!";
+	}
+	verbose_print "installing $name as dkms.conf";
+
+	# now, parse our configuration file
+	open(IN, "< $name");
+	while (my $l = <IN>) {
+		$l =~ /PACKAGE_NAME=(["'])(.*)\1/ && ($is_snippet = 1 && $package_name = $2);
+		$l =~ /PACKAGE_VERSION=(["'])(.*)\1/ && ($package_version = $2);
+	}
+	close(IN);
+
+	#$ENV{DH_AUTOSCRIPTDIR} = "debian/scripts/";
+	if ($dh{LEGACY_DKMS}) {
+		doit("install", "-p", "-D", "-m755", "$dkms_dir/common.postinst", "$tmp/usr/share/$package/postinst");
+		addsubstvar($package, "misc:Depends", "dkms");
+	}
+	else {
+		addsubstvar($package, "misc:Depends", "dkms", ">= 2.1.0.0");
+	}
+
+	autoscript($package, "prerm", "prerm-dkms",
+	    "s/#MODULE_NAME#/$package_name/;s/#MODULE_VERSION#/$package_version/");
+	autoscript($package, "postinst", "postinst-dkms",
+	    "s/#MODULE_NAME#/$package_name/");
+	doit("install", "-p", "-D", "-m644", "$name", "$tmp/usr/src/$package_name-$package_version/dkms.conf");
+}
+
+=head1 SEE ALSO
+
+L<debhelper(1)>
+
+This program is part of the Debian DKMS package.
+
+L<dkms(8)>
+
+=head1 AUTHOR
+
+David Paleino <dapal at debian.org>
+
+=cut
diff --git a/debian/scripts/dh_dkms.1 b/debian/scripts/dh_dkms.1
new file mode 100644
index 0000000..ebeedf5
--- /dev/null
+++ b/debian/scripts/dh_dkms.1
@@ -0,0 +1,182 @@
+.\" Automatically generated by Pod::Man 2.22 (Pod::Simple 3.07)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings.  \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote.  \*(C+ will
+.\" give a nicer C++.  Capital omega is used to do unbreakable dashes and
+.\" therefore won't be available.  \*(C` and \*(C' expand to `' in nroff,
+.\" nothing in troff, for use with C<>.
+.tr \(*W-
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+.    ds -- \(*W-
+.    ds PI pi
+.    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+.    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
+.    ds L" ""
+.    ds R" ""
+.    ds C` ""
+.    ds C' ""
+'br\}
+.el\{\
+.    ds -- \|\(em\|
+.    ds PI \(*p
+.    ds L" ``
+.    ds R" ''
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el       .ds Aq '
+.\"
+.\" If the F register is turned on, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD.  Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.ie \nF \{\
+.    de IX
+.    tm Index:\\$1\t\\n%\t"\\$2"
+..
+.    nr % 0
+.    rr F
+.\}
+.el \{\
+.    de IX
+..
+.\}
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear.  Run.  Save yourself.  No user-serviceable parts.
+.    \" fudge factors for nroff and troff
+.if n \{\
+.    ds #H 0
+.    ds #V .8m
+.    ds #F .3m
+.    ds #[ \f1
+.    ds #] \fP
+.\}
+.if t \{\
+.    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+.    ds #V .6m
+.    ds #F 0
+.    ds #[ \&
+.    ds #] \&
+.\}
+.    \" simple accents for nroff and troff
+.if n \{\
+.    ds ' \&
+.    ds ` \&
+.    ds ^ \&
+.    ds , \&
+.    ds ~ ~
+.    ds /
+.\}
+.if t \{\
+.    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+.    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+.    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+.    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+.    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+.    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+.    \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+.    \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+.    \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+.    ds : e
+.    ds 8 ss
+.    ds o a
+.    ds d- d\h'-1'\(ga
+.    ds D- D\h'-1'\(hy
+.    ds th \o'bp'
+.    ds Th \o'LP'
+.    ds ae ae
+.    ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "DH_DKMS 1"
+.TH DH_DKMS 1 "2010-01-16" "2.1.1.0" "DKMS Debhelper"
+.\" For nroff, turn off justification.  Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH "NAME"
+dh_dkms \- correctly handle DKMS usage by a kernel module package
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+\&\fBdh_dkms\fR [\fIdebhelper\ options\fR] [\fB\-l\fR] [\fB\-\-\fR\ \fIfile\fR]
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+dh_dkms is a debhelper program that is responsible for correctly setting
+postinst, postrm and dependencies in kernel module packages using \s-1DKMS\s0.
+.PP
+If a file named debian/package.dkms exists, then different actions are
+performed, depending on its contents.
+.SH "FILES"
+.IX Header "FILES"
+.IP "debian/\fIpackage\fR.dkms" 4
+.IX Item "debian/package.dkms"
+.PD 0
+.IP "debian/dkms" 4
+.IX Item "debian/dkms"
+.PD
+It can be a proper configuration file, and in this case it would be installed
+in the proper directory as dkms.conf.
+.Sp
+It can also point to another file (this should be used when the configuration
+is provided by upstream), and in this case that file will be installed as dkms.conf
+in the propery directory.
+.Sp
+This file can only miss if a filename is provided when calling dh_dkms.
+.SH "OPTIONS"
+.IX Header "OPTIONS"
+.IP "\fB\-l\fR, \fB\-\-legacy\fR" 4
+.IX Item "-l, --legacy"
+Add code to also support \s-1DKMS\s0 versions < 2.1.0.0.
+.IP "\fB\-\-\fR \fIfile\fR" 4
+.IX Item "-- file"
+Don't look for debian/\fIpackage\fR.dkms or debian/dkms, but install \fIfile\fR as dkms.conf.
+.SH "NOTES"
+.IX Header "NOTES"
+Note that this command is not idempotent. \fIdh_prep\fR\|(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.
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+\&\fIdebhelper\fR\|(1)
+.PP
+This program is part of the Debian \s-1DKMS\s0 package.
+.PP
+\&\fIdkms\fR\|(8)
+.SH "AUTHOR"
+.IX Header "AUTHOR"
+David Paleino <dapal at debian.org>
diff --git a/debian/scripts/dkms.pm b/debian/scripts/dkms.pm
new file mode 100644
index 0000000..a337a9c
--- /dev/null
+++ b/debian/scripts/dkms.pm
@@ -0,0 +1,8 @@
+#!/usr/bin/perl
+use warnings;
+use strict;
+use Debian::Debhelper::Dh_Lib;
+
+insert_before("dh_installinit", "dh_dkms");
+
+1;
diff --git a/debian/scripts/postinst-dkms b/debian/scripts/postinst-dkms
new file mode 100644
index 0000000..c519050
--- /dev/null
+++ b/debian/scripts/postinst-dkms
@@ -0,0 +1,23 @@
+# The original file can be found in template-dkms-mkdeb/debian/postinst
+# in the DKMS tarball, check it for copyright notices.
+
+DKMS_NAME=#MODULE_NAME#
+DKMS_PACKAGE_NAME=$DKMS_NAME-dkms
+DKMS_CVERSION=$(dpkg-query -W -f='${Version}' $DKMS_PACKAGE_NAME | awk -F "-" '{print $1}' | cut -d\: -f2)
+
+case "$1" in
+	configure)
+		for DKMS_POSTINST in /usr/lib/dkms/common.postinst /usr/share/$DKMS_PACKAGE_NAME/postinst; do
+			if [ -f $DKMS_POSTINST ]; then
+				$DKMS_POSTINST $DKMS_NAME $DKMS_CVERSION /usr/share/$DKMS_PACKAGE_NAME "" $2
+				exit $?
+			fi
+			echo "WARNING: $DKMS_POSTINST does not exist."
+		done
+		echo "ERROR: DKMS version is too old and $DKMS_PACKAGE_NAME was not"
+		echo "built with legacy DKMS support."
+		echo "You must either rebuild $DKMS_PACKAGE_NAME with legacy postinst"
+		echo "support or upgrade DKMS to a more current version."
+		exit 1
+	;;
+esac
diff --git a/debian/scripts/prerm-dkms b/debian/scripts/prerm-dkms
new file mode 100644
index 0000000..6ae2988
--- /dev/null
+++ b/debian/scripts/prerm-dkms
@@ -0,0 +1,10 @@
+DKMS_NAME=#MODULE_NAME#
+DKMS_VERSION=#MODULE_VERSION#
+
+case "$1" in
+    remove|upgrade|deconfigure)
+      if [  "$(dkms status -m $DKMS_NAME)" ]; then
+         dkms remove -m $DKMS_NAME -v $DKMS_VERSION --all
+      fi
+    ;;
+esac

-- 
Dynamic Kernel Module Support



More information about the Pkg-dkms-commits mailing list