#!/usr/bin/perl use strict; use warnings; 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 => { homepage => 'https://wiki.debian.org/Teams/Dpkg', repository => { type => 'git', url => 'https://git.dpkg.org/git/dpkg/dpkg.git', web => 'https://git.dpkg.org/cgit/dpkg/dpkg.git', }, bugtracker => { web => 'https://bugs.debian.org/src:dpkg', }, }, 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();