/usr/bin/dh_di_numbers is in dh-di 3.
This file is owned by root:root, with mode 0o755.
The actual contents of the file can be viewed below.
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 140 141 142 143 144 145 146 147 148 149 150 | #!/usr/bin/perl -w
=head1 NAME
dh_di_numbers - install numbered scripts into package build directories
=cut
use strict;
use Debian::Debhelper::Dh_Lib;
=head1 SYNOPSIS
B<dh_di_numbers> [S<B<debhelper options>>] [S<I<dir [...] dest>>]
=head1 DESCRIPTION
dh_di_numbers is a debhelper program that installs directories of numbered
scripts into package build directories.
Within each directory, there should be a C<_numbers> file in which each line
contains at least two space-separated fields. The first field in each line
is a two-digit number, which will be prefixed to the entry name to provide
ordering within the directory; the second is the entry name, which must
correspond to a file or directory alongside the C<_numbers> file; and the
third field, if present, is another two-digit number which identifies
another entry with the same entry name to which this entry should be a
symlink.
Any additional directory names specified as parameters will be installed in
the package build directory of the first package dh_di_numbers 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.
=head1 FILES
=over 4
=item debian/I<package>.di-numbers
List the directories to install into each package and the directory they
should be installed to. The format is a set of lines, where each line lists
a directory or directories to install, and at the end of the line tells the
directory they should be installed in. The name of the directories to
install should be given relative to the current directory, while the
installation directory is given relative to the package build directory. You
may use wildcards in the names of the files to install (in v3 mode and
above).
=back
=head1 OPTIONS
=over 4
=item I<dir [...] dest>
Lists directories to install and where to install them to. The files will be
installed into the first package dh_di_numbers acts on.
=back
=cut
sub install_dir {
my $tmp = shift;
my $dir = shift;
my $dest = shift;
$dest = "$tmp/$dest/" . basename($dir);
doit("install", "-d", $dest);
my %numbers;
my %links;
local (*NUMBERS, $_);
if (open NUMBERS, "$dir/_numbers") {
while (<NUMBERS>) {
my @fields = split;
if (@fields < 2) {
next;
} elsif (@fields == 2) {
push @{$numbers{$fields[1]}}, $fields[0];
} else {
push @{$links{$fields[1]}}, [@fields[0, 2]];
}
}
}
close NUMBERS;
foreach my $file (glob("$dir/*")) {
my $base = basename($file);
next if $base eq "_numbers";
if (exists $numbers{$base}) {
for my $number (@{$numbers{$base}}) {
doit("cp", "-r", $file,
"$dest/$number$base");
}
} else {
doit("cp", "-r", $file, "$dest/$base");
}
if (exists $links{$base}) {
for my $linkpair (@{$links{$base}}) {
my ($link, $target) = @$linkpair;
doit("ln", "-s", "$target$base",
"$dest/$link$base");
}
}
}
}
init();
foreach my $package (@{$dh{DOPACKAGES}}) {
my $tmp = tmpdir($package);
my $file = pkgfile($package,"di-numbers");
my @di_numbers;
if ($file) {
@di_numbers = filedoublearray($file, '.');
}
if (($package eq $dh{FIRSTPACKAGE} || $dh{PARAMS_ALL}) && @ARGV) {
push @di_numbers, [@ARGV];
}
foreach my $set (@di_numbers) {
if (@$set <= 1) {
error("$file or parameters lists a directory without a destination.");
}
my $dest = pop @$set;
foreach my $src (@$set) {
if (-d $src) {
install_dir($tmp, $src, $dest);
}
}
}
}
=head1 SEE ALSO
L<debhelper(7)>
This program is a part of dh-di.
=head1 AUTHOR
Colin Watson <cjwatson@debian.org>
=cut
|