summaryrefslogtreecommitdiff
path: root/dh_installinfo
blob: 814c831b58cf1cd0a19c6c64a8929283d23e5f42 (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
#!/usr/bin/perl -w

=head1 NAME

dh_installinfo - install and register info files

=cut

use strict;
use Debian::Debhelper::Dh_Lib;

=head1 SYNOPSIS

B<dh_installinfo> [S<I<debhelper options>>] [B<-A>] [B<-n>] [S<I<file ...>>]

=head1 DESCRIPTION

dh_installinfo is a debhelper program that is responsible for installing
info files and registering the files it installs with install-info.

It determines some information about the info files by parsing them, in
particular, it looks at the INFO-DIR-SECTION line to determine what section
the info file belongs in.

Any filenames specified as parameters will be installed into the first
package dh_installinfo is told to act on. By default, this is the first
binary package in debian/control, but if you use -p, -i, or -a flags, it
will be the first package specified by those flags.

Files named debian/package.info can list other files to be installed.

dh_installinfo will automatically generate the postinst and prerm commands
needed to interface with install-info, updating the info . See L<dh_installdeb(1)> for an
explanation of how this works.

=head1 OPTIONS

=over 4

=item B<-A>, B<--all>

Install all files specified by command line parameters in ALL packages
acted on.

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

Do not modify postinst/prerm scripts.

=item I<file ...>

Install these info files into the first package acted on. (Or in
all packages if -A is specified).

=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 my $package (@{$dh{DOPACKAGES}}) {
	my $tmp=tmpdir($package);
	my $file=pkgfile($package,"info");

	my @info;
	
	if ($file) {
		@info=filearray($file, ".");
	}

	if (($package eq $dh{FIRSTPACKAGE} || $dh{PARAMS_ALL}) && @ARGV) {
		push @info, @ARGV;
	}

	if (@info) {
		if ( ! -d "$tmp/usr/share/info") {
			doit("install","-d","$tmp/usr/share/info");
		}
		doit("cp",@info,"$tmp/usr/share/info");
		doit("chmod","-R", "go=rX","$tmp/usr/share/info/");
		doit("chmod","-R", "u+rw","$tmp/usr/share/info/");
	}

	foreach $file (@info) {
		# Only register with install-info if this is a head file in
		# a tree of info files.
		if ($file !~ /-\d+$/ && ! $dh{NOSCRIPTS}) {
			# Figure out what section this file goes in.
			my $section='';
			open (IN, "<$file") || die "$file: $!";
			while (<IN>) {
				if (/INFO-DIR-SECTION\s+(.*)/) {
					$section=$1;
					last;
				}
			}
			close IN;
			
			my $fn="/usr/share/info/".basename($file);
			
			if ($section ne '') {
				$section=~s:/:\\/:g; # allow / in section.
				autoscript($package,"postinst","postinst-info",
					"s/#SECTION#/$section/g;s:#FILE#:$fn:");
			}
			else {
				autoscript($package,"postinst","postinst-info-nosection",
					"s:#FILE#:$fn:");
			}
			autoscript($package,"prerm","prerm-info", "s:#FILE#:$fn:");
		}
	}
}

=head1 SEE ALSO

L<debhelper(7)>

This program is a part of debhelper.

=head1 AUTHOR

Joey Hess <joeyh@debian.org>

=cut