summaryrefslogtreecommitdiff
path: root/dh_installudev
blob: 863f344cb5d19d5e31a90360136f306f3db6f4b8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
#!/usr/bin/perl

=head1 NAME

dh_installudev - install udev rules files

=cut

use strict;
use warnings;
use Debian::Debhelper::Dh_Lib;
use File::Find;

exit 0;

=head1 SYNOPSIS

B<dh_installudev> [S<I<debhelper options>>] [B<-n>] [B<--name=>I<name>] [B<--priority=>I<priority>]

=head1 DESCRIPTION

B<dh_installudev> is for Linux based distros. On this system it does nothing
and is kept only for compatibility and references.

B<dh_installudev> is a debhelper program that is responsible for
installing B<udev> rules files.

Code is added to the F<preinst> and F<postinst> to handle the upgrade from the
old B<udev> rules file location.

=head1 FILES

=over 4

=item debian/I<package>.udev

Installed into F<lib/udev/rules.d/> in the package build directory.

=back

=head1 OPTIONS

=over 4

=item B<--name=>I<name>

When this parameter is used, B<dh_installudev> looks for and
installs files named debian/I<package>.I<name>.udev instead of the usual
debian/I<package>.udev.

=item B<--priority=>I<priority>

Sets the priority the file. Default is 60.

=item B<-n>, B<--noscripts>

Do not modify F<preinst>/F<postinst> scripts.

=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();

# The priority used to look like z60_;
# we need to calculate that old value to handle
# conffile moves correctly.
my $old_priority=$dh{PRIORITY};

# In case a caller still uses the `z` prefix, remove it.
if (defined $dh{PRIORITY}) {
	$dh{PRIORITY}=~s/^z//;
}

if (! defined $dh{PRIORITY}) {
	$dh{PRIORITY}="60";
	$old_priority="z60";
}
if ($dh{PRIORITY}) {
	$dh{PRIORITY}.="-";
	$old_priority.="_";
}

# PROMISE: DH NOOP WITHOUT udev

foreach my $package (@{$dh{DOPACKAGES}}) {
	my $tmp=tmpdir($package);
	my $rules_file=pkgfile($package,"udev");
	my $filename=basename($rules_file);
	if ($filename eq 'udev') {
		$filename = "$package.udev";
	}
	$filename=~s/\.udev$/.rules/;
	my $oldfilename=$filename;
	if (defined $dh{NAME}) {
		$filename="$dh{NAME}.rules";
	}

	if ($rules_file) {
		if (! -e "$tmp/lib/udev/rules.d") {
			install_dir("$tmp/lib/udev/rules.d");
		}
		my $rule="/lib/udev/rules.d/$dh{PRIORITY}$filename";
		install_file($rules_file, "${tmp}${rule}");
		if (! $dh{NOSCRIPTS}) {
			# Remove old rule from /etc, unless it's modified,
			# in which case we rename it to match the new
			# file in /lib, so it will override.
			my $old="/etc/udev/rules.d/$old_priority$oldfilename";
			$rule=~s/^\/lib/\/etc/;
			autoscript($package,"preinst","preinst-moveconffile","s!#OLD#!$old!g;s!#NEW#!$rule!g;s!#PACKAGE#!$package!g");
			autoscript($package,"postinst","postinst-moveconffile","s!#OLD#!$old!g;s!#NEW#!$rule!g");
		}
	}
}

=head1 SEE ALSO

L<debhelper(7)>

This program is a part of debhelper.

=head1 AUTHOR

Joey Hess <joeyh@debian.org>

=cut

# Local Variables:
# indent-tabs-mode: t
# tab-width: 4
# cperl-indent-level: 4
# End: