The Perl and Raku Conference 2025: Greenville, South Carolina - June 27-29 Learn more

#!/usr/bin/perl
use strict;
eval {
require Module::Build;
} or do {
die "error: Missing Module::Build module, cannot proceed.\n";
};
if (-e 'Build.PL.in') {
die "error: This is an in-tree build, not a proper perl distribution.\n" .
"To create one please configure normally and then run 'make dist'.\n";
}
my $class = Module::Build->subclass(
class => 'Module::Build::Dpkg',
code => q{
require Config;
require IPC::Cmd;
sub find_command {
my (@alts) = @_;
foreach my $cmd (@alts) {
my $pathname = IPC::Cmd::can_run($cmd);
return $pathname if defined $pathname;
}
die "error: cannot find any of @alts\n";
}
sub subst {
my ($self, $file) = @_;
my $path = $self->install_path();
my $version = $self->dist_version();
my $progmake = find_command(qw(gmake make));
my $progpatch = find_command(qw(gpatch patch));
my $progtar = find_command(qw(gtar tar));
unlink "blib/$file"
or die "error: cannot remove blib/$file: $!\n";
open my $fhin, '<', $file
or die "error: cannot open $file: $!\n";
open my $fhout, '>', "blib/$file"
or die "error: cannot create blib/$file: $!\n";
while (<$fhin>) {
s{our \$PROGVERSION = .*;}{our \$PROGVERSION = '$version';};
s{our \$PROGMAKE = .*;}{our \$PROGMAKE = '$progmake';};
s{our \$PROGPATCH = .*;}{our \$PROGPATCH = '$progpatch';};
s{our \$PROGTAR = .*;}{our \$PROGTAR = '$progtar';};
s{our \$CONFDIR = .*;}{our \$CONFDIR = '$path->{conf}';};
s{our \$DATADIR = .*;}{our \$DATADIR = '$path->{data}';};
s{our \$ADMINDIR = .*;}{our \$ADMINDIR = '$path->{admin}';};
s{our \$LIBDIR = .*;}{our \$LIBDIR = '$path->{libexec}';};
print { $fhout } $_;
}
close $fhout or die "error: cannot write blib/$file: $!\n";
close $fhin;
}
sub ACTION_build {
my $self = shift;
$self->SUPER::ACTION_build;
$self->subst('lib/Dpkg.pm');
}
sub ACTION_test {
my $self = shift;
local $ENV{LC_ALL} = 'C';
local $ENV{PERL} = $Config::Config{perlpath} || $^X || 'perl';
local $ENV{DPKG_TEST_MODE} = 'cpan';
local $ENV{DPKG_DATADIR} = 'data';
local $ENV{DPKG_ORIGINS_DIR} = 't/origins';
# To avoid requiring dpkg(1).
local $ENV{DEB_BUILD_ARCH} = 'amd64';
$self->SUPER::ACTION_test;
}
},
);
my $build = $class->new(
dist_name => 'Dpkg',
dist_abstract => 'Debian Package Manager Perl modules',
dist_version => '1.22.18',
dist_author => 'Dpkg Developers <debian-dpkg@lists.debian.org>',
license => 'GPL_2',
release_status => 1 ? 'stable' : 'testing',
# Set only to avoid warnings.
module_name => 'Dpkg',
meta_merge => {
'meta-spec' => {
version => 2,
},
prereqs => {
configure => {
recommends => {
'Module::Signature' => 0,
},
},
test => {
recommends => {
'Test::Pod' => 0,
'Test::Strict' => 0,
},
},
develop => {
recommends => {
'Test::MinimumVersion' => 0,
'Test::Perl::Critic' => 0,
'Test::Pod::Coverage' => 0,
'Test::Spelling' => 0,
'Test::Synopsis' => 0,
},
},
},
resources => {
repository => {
type => 'git',
},
bugtracker => {
},
},
keywords => [ qw(dpkg debian perl) ],
},
sign => 1,
dynamic_config => 0,
configure_requires => {
'Module::Build' => '0.4004',
},
test_requires => {
'TAP::Harness' => 0,
'Test::More' => 0,
},
recommends => {
'Algorithm::Merge' => 0,
'File::FcntlLock' => 0,
'Locale::gettext' => 0,
},
requires => {
'perl' => '5.32.1',
},
data_files => {
map { $_ => $_ } glob 'data/*'
},
install_path => {
conf => '/etc/dpkg',
data => '/usr/share/dpkg',
admin => '/var/lib/dpkg',
libexec => '/usr/lib/dpkg',
},
);
$build->add_build_element('data');
$build->create_build_script();