/usr/bin/dh_components is in pkg-components 0.8.
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 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 | #!/usr/bin/perl
use strict;
use warnings;
use Debian::Debhelper::Dh_Lib;
use Debian::Debhelper::Dh_components;
use Readonly;
use Cwd;
Readonly my $COMMA_RE => qr/,/;
Readonly my $CWD => getcwd;
init(options=>{
"purge!"=>\$dh{PURGE},
"components=s" => \$dh{COMPONENTS},
"build_stages=s" => \$dh{BUILD_STAGES},
"rules_locations=s" => \$dh{RULES_LOCATIONS},
});
# Work through the packages and components
foreach my $package (getpackages()) {
my $dir = find_components_dir($package);
next if !$dir;
my %args = (dir=>$dir, package=>$package);
if ($dh{BUILD_STAGES}) {
$args{build_stages} = [split $COMMA_RE, $dh{BUILD_STAGES}];
}
if ($dh{COMPONENTS}) {
$args{components} = [split $COMMA_RE, $dh{COMPONENTS}];
}
if ($dh{RULE_LOCATIONS}) {
$args{rules_locations} = [split $COMMA_RE, $dh{RULES_LOCATIONS}];
}
my $component_data = Debian::Debhelper::Dh_components->new(%args);
foreach my $c ($component_data->components) {
foreach my $bs ($component_data->build_stages) {
my $script = $component_data->script($c, $bs);
my $command = "CURDIR=$CWD PACKAGE=$package DH_COMPONENT=$c $script";
doit($command);
}
}
my $copyright_file = "$CWD/debian/$package.copyright";
if (not -f $copyright_file) {
verbose_print("Building $copyright_file");
$component_data->build_copyright($copyright_file);
}
foreach my $dependency ($component_data->substvars) {
my $var = "$dependency->{component}:$dependency->{substvar}";
my $verrel =
$dependency->{rel} ? "($dependency->{rel} $dependency->{ver})" : "";
my $deppackage = $dependency->{deppackage};
addsubstvar($package, $var, $deppackage, $verrel);
}
}
# Clean up the old components directory
if ($dh{PURGE} or not defined $dh{PURGE}) {
doit("rm -rf COMPONENTS");
}
exit(0);
sub find_components_dir {
my $package = shift;
my $dir = "debian/$package.components";
return $dir if -d $dir;
$dir = "debian/components";
return $dir if -d $dir && $package eq $dh{FIRSTPACKAGE};
return;
}
=head1 NAME
dh_components - build additional components
=head1 SYNOPSIS
B<dh_components> [S<I<debhelper options>>] [B<--components> I<comp>[,I<comp>,...]] [B<--build_stages> I<stage>[,I<stage>,...]] [B<--rules_locations> I<dir>[,I<dir>,...]]
=head1 DESCRIPTION
C<dh_components> is a debhelper program that is responsible for handling
additional components that come from separate upstream sources. The aim
is to turn each component into a "mini Debian package". It takes the
following actions:
=over
=item Run through the various build stages for each package and component.
=item Optionally stitch together the Debian copyright files.
=item Generate the C<substvar> file from the component control files.
=item Purge the components working directory (unless the I<--no-purge> option
is set).
=back
=head1 FILES
=over 4
=item debian/I<package>.components
=item debian/components
These directories contain all the component data for a given binary package.
The second form only works for the first binary in a source package and is
overridden by the equivalent first form.
=item debian/[I<package>.]components/I<component>
This is a directory that contains the files specific to that component.
In some ways it is like a cut-down version of the debian directory.
=item debian/[I<package>.]components/I<component>
=item debian/[I<package>.]components/
=item /usr/share/pkg-components/build_stages
These are the default locations of the build stage scripts in the order of
precedence with highest first. These can be overridden using the
C<--rules_locations>.
=item debian/[I<package>.]components/copyright.in
This file provides the DEP-5 copyright stanzas for the package but without
any of the component stanzas. It forms the basis for the I<package>.copyright
file.
=item debian/[I<package>.]components/I<component>/copyright
This file provides a DEP-5 fragment of the Debian copyright for this component.
It will be merged into the main copyright file at I<package>.copyright. Any
duplicate C<License> clauses will be shown only once.
=item debian/[I<package>.]components/I<component>/control
If present this file should look like a Debian control file for the component.
The package name of the binary stanza should match the component name.
The C<Depends>, C<Recommends>, C<Suggests>, C<Enhances>, C<Replaces>,
C<Pre-Depends>, C<Conflicts>, C<Breaks> fields are read and turned into
substitution variables. So if you have a component C<X> which declares a
Depends on C<Y>, then a substvar variable C<X:Depends> will be created with
the value C<Y>.
The source package stanza is ignored but can be used to document which
build dependencies are due to the component.
=back
=head1 OPTIONS
=over 4
=item B<--build_stages b1,b2,...>
If this option is listed the sequence described will be used instead
of the normal one.
=item B<--components c1,c2,...>
If this option is listed only those components listed will be considered.
=item B<--rules_locations r1,r2,...>
If this option is listed the specified locations will be used instead
of the default ones. One can use C<%> to mean the component. Thus to
explicitly specify the default one would set:
--rules_locations debian/components/%,debian/components,/usr/share/pkg-components/build_stages
=back
=head1 CONFIGURATION
To enable this functionality it is necessary to pass the argument
C<--with components> to the C<dh> programa in the C<debian/rules>
file.
=head1 SEE ALSO
L<debhelper(1)>
This program is used with debhelper.
L<quilt(1)>
=head1 AUTHOR
Nicholas Bamber <nicholas@periapt.co.uk>
=cut
|