~ubuntu-branches/debian/stretch/dkms/stretch

« back to all changes in this revision

Viewing changes to debian/scripts/dh_dkms

  • Committer: Bazaar Package Importer
  • Author(s): Giuseppe Iuculano, David Paleino, Giuseppe Iuculano
  • Date: 2010-01-27 10:02:27 UTC
  • mfrom: (1.1.13 upstream)
  • Revision ID: james.westby@ubuntu.com-20100127100227-p8fawacw9e4e2spw
Tags: 2.1.1.1-1
[ David Paleino ]
* [19ac85e] Added DKMS debhelper script (Closes: #553665)

[ Giuseppe Iuculano ]
* [9d66264] Imported Upstream version 2.1.1.1
* [0735c11] Removed 01_upstart.patch
* [ec26539] Merge from Ubuntu: Remove the init script and Upstart job.
  There is no reason that DKMS needs to run on boot; you can build
  modules for non-running kernels just fine at installation time.
* [48ff9a4] Correct a minor shell error in dkms_autoinstaller
* [5c76a45] Fixed a minor spelling error in dh_dkms man page
* [c611461] debian/preinst: Use set -e

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#!/usr/bin/perl -w
 
2
 
 
3
=head1 NAME
 
4
 
 
5
dh_dkms - correctly handle DKMS usage by a kernel module package
 
6
 
 
7
=cut
 
8
 
 
9
use strict;
 
10
use Debian::Debhelper::Dh_Lib;
 
11
 
 
12
=head1 SYNOPSIS
 
13
 
 
14
B<dh_dkms> [S<I<debhelper options>>] [S<B<-l>>] [S<B<--> I<file>>]
 
15
 
 
16
=head1 DESCRIPTION
 
17
 
 
18
dh_dkms is a debhelper program that is responsible for correctly setting
 
19
postinst, postrm and dependencies in kernel module packages using DKMS.
 
20
 
 
21
If a file named debian/package.dkms exists, then different actions are
 
22
performed, depending on its contents.
 
23
 
 
24
=head1 FILES
 
25
 
 
26
=over 4
 
27
 
 
28
=item debian/I<package>.dkms
 
29
 
 
30
=item debian/dkms
 
31
 
 
32
It can be a proper configuration file, and in this case it would be installed
 
33
in the proper directory as dkms.conf.
 
34
 
 
35
It can also point to another file (this should be used when the configuration
 
36
is provided by upstream), and in this case that file will be installed as dkms.conf
 
37
in the propery directory.
 
38
 
 
39
This file can only miss if a filename is provided when calling dh_dkms.
 
40
 
 
41
=back
 
42
 
 
43
=head1 OPTIONS
 
44
 
 
45
=over 4
 
46
 
 
47
=item B<-l>, B<--legacy>
 
48
 
 
49
Add code to also support DKMS versions < 2.1.0.0.
 
50
 
 
51
=item B<--> I<file>
 
52
 
 
53
Don't look for debian/I<package>.dkms or debian/dkms, but install I<file> as dkms.conf.
 
54
 
 
55
=back
 
56
 
 
57
=head1 NOTES
 
58
 
 
59
Note that this command is not idempotent. L<dh_prep(1)> should be called
 
60
between invocations of this command. Otherwise, it may cause multiple
 
61
instances of the same text to be added to maintainer scripts.
 
62
 
 
63
=cut
 
64
 
 
65
init(options => {
 
66
        "l|legacy" => \$dh{LEGACY_DKMS},
 
67
});
 
68
 
 
69
foreach my $package (@{$dh{DOPACKAGES}}) {
 
70
        #next if is_udeb($package);
 
71
 
 
72
        my $tmp = tmpdir($package);
 
73
        my $dkms_dir = "/usr/lib/dkms/";
 
74
        my $dkms_conf = pkgfile($package, "dkms");
 
75
        my $is_snippet = 0;
 
76
        my @other_conf;
 
77
        my $name;
 
78
        my $package_name;
 
79
        my $package_version;
 
80
 
 
81
        if ($dkms_conf) {
 
82
                # let's see if it's a proper snippet
 
83
                open(IN, "< $dkms_conf");
 
84
                while (my $l = <IN>) {
 
85
                        $l =~ /PACKAGE_NAME=(["'])(.*)\1/ && ($is_snippet = 1);
 
86
                }
 
87
                close(IN);
 
88
 
 
89
                if ($is_snippet) {
 
90
                        $name = $dkms_conf;
 
91
                }
 
92
                else {
 
93
                        @other_conf = filearray($dkms_conf);
 
94
                        if ($#other_conf > 1) {
 
95
                                error "cannot list more than one file in $dkms_conf!";
 
96
                        }
 
97
                        else {
 
98
                                $name = $other_conf[0];
 
99
                        }
 
100
                }
 
101
        }
 
102
        elsif ($#ARGV == 0) {
 
103
                $name = $ARGV[0];
 
104
        }
 
105
        else {
 
106
                error "doing nothing!";
 
107
        }
 
108
        verbose_print "installing $name as dkms.conf";
 
109
 
 
110
        # now, parse our configuration file
 
111
        open(IN, "< $name");
 
112
        while (my $l = <IN>) {
 
113
                $l =~ /PACKAGE_NAME=(["'])(.*)\1/ && ($is_snippet = 1 && $package_name = $2);
 
114
                $l =~ /PACKAGE_VERSION=(["'])(.*)\1/ && ($package_version = $2);
 
115
        }
 
116
        close(IN);
 
117
 
 
118
        #$ENV{DH_AUTOSCRIPTDIR} = "debian/scripts/";
 
119
        if ($dh{LEGACY_DKMS}) {
 
120
                doit("install", "-p", "-D", "-m755", "$dkms_dir/common.postinst", "$tmp/usr/share/$package/postinst");
 
121
                addsubstvar($package, "misc:Depends", "dkms");
 
122
        }
 
123
        else {
 
124
                addsubstvar($package, "misc:Depends", "dkms", ">= 2.1.0.0");
 
125
        }
 
126
 
 
127
        autoscript($package, "prerm", "prerm-dkms",
 
128
            "s/#MODULE_NAME#/$package_name/;s/#MODULE_VERSION#/$package_version/");
 
129
        autoscript($package, "postinst", "postinst-dkms",
 
130
            "s/#MODULE_NAME#/$package_name/");
 
131
        doit("install", "-p", "-D", "-m644", "$name", "$tmp/usr/src/$package_name-$package_version/dkms.conf");
 
132
}
 
133
 
 
134
=head1 SEE ALSO
 
135
 
 
136
L<debhelper(1)>
 
137
 
 
138
This program is part of the Debian DKMS package.
 
139
 
 
140
L<dkms(8)>
 
141
 
 
142
=head1 AUTHOR
 
143
 
 
144
David Paleino <dapal@debian.org>
 
145
 
 
146
=cut