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

=head1 NAME

dh_installinfo - install info files

=cut

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

our $VERSION = DH_BUILTIN_VERSION;

=head1 SYNOPSIS

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

=head1 DESCRIPTION

B<dh_installinfo> is a debhelper program that is responsible for installing
info files into F<usr/share/info> in the package build directory.

From debhelper compatibility level 11 on, B<dh_install> will fall back to
looking in F<debian/tmp> for files, if it does not find them in the current
directory (or wherever you've told it to look using B<--sourcedir>).

=head1 FILES

=over 4

=item debian/I<package>.info

List info files to be installed.

Supports substitution variables in compat 13 and later as
documented in L<debhelper(7)>.

=back

=head1 OPTIONS

=over 4

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

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

=item B<--sourcedir=>I<dir>

Look in the specified directory for files to be installed.  This option
requires compat 11 or later (it is silently ignored in compat 10 or earlier).

Note that this is not the same as the B<--sourcedirectory> option used
by the B<dh_auto_>I<*> commands. You rarely need to use this option, since
B<dh_installinfo> automatically looks for files in F<debian/tmp> in debhelper
compatibility level 11 and above.

=item I<file> ...

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

=back

=cut

init(options => {
	"sourcedir=s" => \$dh{SOURCEDIR},
});

# PROMISE: DH NOOP WITHOUT pkgfile-logged(info) cli-options() tmp(usr/share/info/dir)

my $default_error_handler = compat(10) ? \&glob_expand_error_handler_reject_nomagic_warn_discard : \&glob_expand_error_handler_reject;
my $nodocs = is_build_profile_active('nodoc') || get_buildoption('nodoc') ? 1 : 0;
# We cannot assume documentation is built under nodoc, but if it is we must flag it as handled
# or dh_missing might make noise.
$default_error_handler = \&glob_expand_error_handler_silently_ignore if $nodocs;

foreach my $package (getpackages()) {
	my $tmp=tmpdir($package);
	my $file=pkgfile($package,"info");
	my @search_dirs = ('.');
	my @ignored_files;
	my $skip_install = process_pkg($package) ? 0 : 1;
	my $error_handler = $skip_install ? \&glob_expand_error_handler_silently_ignore : $default_error_handler;
	@search_dirs = ($dh{SOURCEDIR} // '.', default_sourcedir($package)) if not compat(10);

	my @info;
	
	if ($file) {
		@info = filearray($file, \@search_dirs, $error_handler) if $file;
	}

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

	# Pretend that we handled usr/share/info/dir.  We do not want to install it as it causes
	# file conflicts between packages and we also do not want dh_missing to drop a bomb on
	# the user for it.
	#
	# See #971036
	for my $path (@search_dirs) {
		if ( -e "${path}/usr/share/info/dir" ) {
			push(@ignored_files, 'usr/share/info/dir');
			last;
		}
	}

	log_installed_files($package, @info, @ignored_files);

	next if $skip_install or $nodocs;

	if (@info) {
		install_dir("$tmp/usr/share/info");
		xargs(\@info, "cp", '--reflink=auto', XARGS_INSERT_PARAMS_HERE, "$tmp/usr/share/info");
		doit("chmod","-R", "u+rw,go=rX","$tmp/usr/share/info/");
	}
}

=head1 SEE ALSO

L<debhelper(7)>

This program is a part of debhelper.

=head1 AUTHOR

Joey Hess <joeyh@debian.org>

=cut