summaryrefslogtreecommitdiffstats
path: root/scripts/Build.PL.in
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/Build.PL.in')
-rw-r--r--scripts/Build.PL.in171
1 files changed, 171 insertions, 0 deletions
diff --git a/scripts/Build.PL.in b/scripts/Build.PL.in
new file mode 100644
index 0000000..17a0d84
--- /dev/null
+++ b/scripts/Build.PL.in
@@ -0,0 +1,171 @@
+#!/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;