package-notes/dh/dh_package_notes

86 lines
2.4 KiB
Perl
Executable File

#!/usr/bin/perl -w
# SPDX-License-Identifier: CC0-1.0
=head1 NAME
dh_package_notes - Add package metadata to ELF header
=cut
use strict;
use warnings;
use Debian::Debhelper::Dh_Lib
qw(%dh doit hostarch init isnative sourcepackage);
use Dpkg::Vendor qw(get_current_vendor);
our $VERSION = '0.8';
=head1 SYNOPSIS
B<dh_package_notes>
=cut
=head1 DESCRIPTION
B<dh_package_notes> is a debhelper program that creates a linker script to
include package metadata in ELF binaries built by packages.
The package metadata specification for ELF binaries can be found at
L<https://systemd.io/COREDUMP_PACKAGE_METADATA/>.
B<dh_package_notes> creates a linker script in a fixed location at
B<debian/.debhelper/notes.ld> with the package type set to B<deb>, the package
name and version set to the source package name and version respectively, and
the B<os> and B<osVersion> fields set to the values of the B<ID> and
B<VERSION_ID> fields found in B</etc/os-release>. Simply add
B<dh-sequence-package-notes> to the Build-Depends or add
B<--with package_notes> to the B<dh $@> call to make this happen.
The package using B<dh_package_notes> also needs to manually set in debian/rules
B<include /usr/share/debhelper/dh_package_notes/package-notes.mk> as it is
not possible to do so from a debhelper addon.
=cut
init();
isnative( $dh{MAINPACKAGE} ); # Necessary to have $dh{VERSION}
my $source_package = sourcepackage();
my $package_arch = hostarch();
my $vendor = get_current_vendor();
my $url = $ENV{'DEBUGINFOD_URLS'};
if (!defined $url) {
$url = "https://debuginfod.debian.net";
}
my %options = ( 'stdout' => "debian/.debhelper/notes.ld" );
my @cmd = (
"/usr/bin/generate-package-notes",
"--type", "deb",
"--os", lc ${vendor},
"--name", ${source_package},
"--architecture", ${package_arch},
"--version", $dh{VERSION},
"--debugInfoUrl", ${url}
);
if ( not mkdir("debian/.debhelper") ) {
error("mkdir debian/.debhelper failed: $!");
}
doit( \%options, @cmd );
# FIXME: neither of these work, so appending from each debian/rules file is
# currently the only way to make this work, which is less than ideal
#$ENV{'DEB_LDFLAGS_MAINT_APPEND'} .= ' -Wl,-dT,debian/.debhelper/notes.ld';
#$ENV{'LDFLAGS'} .= ' -Wl,-dT,debian/.debhelper/notes.ld';
=head1 SEE ALSO
L<debhelper(7)>
=head1 AUTHOR
Luca Boccassi <bluca@debian.org>
=cut