#!/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{LANG} = 'C'; 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 => '@PACKAGE_CPAN_NAME@', dist_abstract => 'Debian Package Manager Perl modules', dist_version => '@PACKAGE_VERSION@', dist_author => '@PACKAGE_COPYRIGHT_HOLDER@ <@PACKAGE_BUGREPORT@>', license => 'GPL_2', release_status => @PACKAGE_DIST_IS_RELEASE@ ? 'stable' : 'testing', # Set only to avoid warnings. module_name => '@PACKAGE_CPAN_NAME@', 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 => '@PACKAGE_URL@', repository => { type => '@PACKAGE_VCS_TYPE@', url => '@PACKAGE_VCS_URL@', web => '@PACKAGE_VCS_WEB@', }, bugtracker => { web => '@PACKAGE_BUG_WEB@', }, }, keywords => [ qw(dpkg debian perl) ], }, sign => @PACKAGE_DIST_IS_RELEASE@, 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' => '@PERL_MIN_VERSION@', }, 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(); 1;