summaryrefslogtreecommitdiffstats
path: root/lib/Debian/Debhelper/Buildsystem/perl_build.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Debian/Debhelper/Buildsystem/perl_build.pm')
-rw-r--r--lib/Debian/Debhelper/Buildsystem/perl_build.pm97
1 files changed, 97 insertions, 0 deletions
diff --git a/lib/Debian/Debhelper/Buildsystem/perl_build.pm b/lib/Debian/Debhelper/Buildsystem/perl_build.pm
new file mode 100644
index 0000000..8752905
--- /dev/null
+++ b/lib/Debian/Debhelper/Buildsystem/perl_build.pm
@@ -0,0 +1,97 @@
+# A build system class for handling Perl Build based projects.
+#
+# Copyright: © 2008-2009 Joey Hess
+# © 2008-2009 Modestas Vainius
+# License: GPL-2+
+
+package Debian::Debhelper::Buildsystem::perl_build;
+
+use strict;
+use warnings;
+use Debian::Debhelper::Dh_Lib qw(compat is_cross_compiling perl_cross_incdir warning);
+use parent qw(Debian::Debhelper::Buildsystem);
+use Config;
+
+sub DESCRIPTION {
+ "Perl Module::Build (Build.PL)"
+}
+
+sub check_auto_buildable {
+ my ($this, $step) = @_;
+
+ # Handles everything
+ my $ret = -e $this->get_sourcepath("Build.PL");
+ if ($step ne "configure") {
+ $ret &&= -e $this->get_sourcepath("Build");
+ }
+ return $ret ? 1 : 0;
+}
+
+sub do_perl {
+ my $this=shift;
+ my %options;
+ if (is_cross_compiling()) {
+ my $cross_incdir = perl_cross_incdir();
+ if (defined $cross_incdir) {
+ my $perl5lib = $cross_incdir;
+ $perl5lib .= $Config{path_sep} . $ENV{PERL5LIB}
+ if defined $ENV{PERL5LIB};
+ $options{update_env} = { PERL5LIB => $perl5lib };
+ } else {
+ warning("cross Config.pm does not exist (missing build dependency on perl-xs-dev?)");
+ }
+ }
+ $this->doit_in_sourcedir(\%options, $^X, @_);
+}
+
+sub new {
+ my $class=shift;
+ my $this= $class->SUPER::new(@_);
+ $this->enforce_in_source_building();
+ return $this;
+}
+
+sub configure {
+ my $this=shift;
+ my (@flags, @perl_flags);
+ $ENV{PERL_MM_USE_DEFAULT}=1;
+ if ($ENV{CFLAGS} && ! compat(8)) {
+ push @flags, "--config", "optimize=$ENV{CFLAGS} $ENV{CPPFLAGS}";
+ }
+ if ($ENV{LDFLAGS} && ! compat(8)) {
+ my $ld = $Config{ld};
+ if (is_cross_compiling()) {
+ my $incdir = perl_cross_incdir();
+ $ld = qx/perl -I$incdir -MConfig -e 'print \$Config{ld}'/
+ if defined $incdir;
+ }
+ push @flags, "--config", "ld=$ld $ENV{CFLAGS} $ENV{LDFLAGS}";
+ }
+ push(@perl_flags, '-I.') if compat(10);
+ $this->do_perl(@perl_flags, "Build.PL", "--installdirs", "vendor", @flags, @_);
+}
+
+sub build {
+ my $this=shift;
+ $this->do_perl("Build", @_);
+}
+
+sub test {
+ my $this=shift;
+ $this->do_perl("Build", "test", "--verbose", 1, @_);
+}
+
+sub install {
+ my $this=shift;
+ my $destdir=shift;
+ $this->do_perl("Build", "install", "--destdir", "$destdir", "--create_packlist", 0, @_);
+}
+
+sub clean {
+ my $this=shift;
+ if (-e $this->get_sourcepath("Build")) {
+ $this->do_perl("Build", "realclean", "--allow_mb_mismatch", 1, @_);
+ }
+}
+
+1