summaryrefslogtreecommitdiffstats
path: root/dh_installinfo
diff options
context:
space:
mode:
Diffstat (limited to 'dh_installinfo')
-rwxr-xr-xdh_installinfo133
1 files changed, 133 insertions, 0 deletions
diff --git a/dh_installinfo b/dh_installinfo
new file mode 100755
index 0000000..3a25542
--- /dev/null
+++ b/dh_installinfo
@@ -0,0 +1,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