diff options
Diffstat (limited to 'dh_installinfo')
-rwxr-xr-x | dh_installinfo | 133 |
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 |