summaryrefslogtreecommitdiffstats
path: root/lib/Debian/Debhelper/Buildsystem/perl_makemaker.pm
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--lib/Debian/Debhelper/Buildsystem/perl_makemaker.pm104
1 files changed, 104 insertions, 0 deletions
diff --git a/lib/Debian/Debhelper/Buildsystem/perl_makemaker.pm b/lib/Debian/Debhelper/Buildsystem/perl_makemaker.pm
new file mode 100644
index 0000000..881f1ec
--- /dev/null
+++ b/lib/Debian/Debhelper/Buildsystem/perl_makemaker.pm
@@ -0,0 +1,104 @@
+# A debhelper build system class for handling Perl MakeMaker based projects.
+#
+# Copyright: © 2008-2009 Joey Hess
+# © 2008-2009 Modestas Vainius
+# License: GPL-2+
+
+package Debian::Debhelper::Buildsystem::perl_makemaker;
+
+use strict;
+use warnings;
+use Debian::Debhelper::Dh_Lib qw(compat is_cross_compiling perl_cross_incdir warning);
+use parent qw(Debian::Debhelper::Buildsystem::makefile);
+use Config;
+
+sub DESCRIPTION {
+ "Perl ExtUtils::MakeMaker (Makefile.PL)"
+}
+
+sub check_auto_buildable {
+ my $this=shift;
+ my ($step)=@_;
+
+ # Handles everything if Makefile.PL exists. Otherwise - next class.
+ if (-e $this->get_sourcepath("Makefile.PL")) {
+ if ($step eq "configure") {
+ return 1;
+ }
+ else {
+ return $this->SUPER::check_auto_buildable(@_);
+ }
+ }
+ return 0;
+}
+
+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);
+ # If set to a true value then MakeMaker's prompt function will
+ # # always return the default without waiting for user input.
+ $ENV{PERL_MM_USE_DEFAULT}=1;
+ # This prevents Module::Install from interactive behavior.
+ $ENV{PERL_AUTOINSTALL}="--skipdeps";
+
+ if ($ENV{CFLAGS} && ! compat(8)) {
+ push @flags, "OPTIMIZE=$ENV{CFLAGS} $ENV{CPPFLAGS}";
+ }
+ my $cross_flag;
+ if (is_cross_compiling()) {
+ my $incdir = perl_cross_incdir();
+ if (defined $incdir) {
+ $cross_flag = "-I$incdir";
+ } else {
+ warning("cross Config.pm does not exist (missing build dependency on perl-xs-dev?)");
+ }
+ }
+ if ($ENV{LDFLAGS} && ! compat(8)) {
+ my $ld = $Config{ld};
+ $ld = qx/perl $cross_flag -MConfig -e 'print \$Config{ld}'/
+ if is_cross_compiling() and defined $cross_flag;
+ push @flags, "LD=$ld $ENV{CFLAGS} $ENV{LDFLAGS}";
+ }
+
+ push(@perl_flags, '-I.') if compat(10);
+
+ push @perl_flags, $cross_flag
+ if is_cross_compiling() and defined $cross_flag;
+
+ $this->doit_in_sourcedir($^X, @perl_flags, "Makefile.PL", "INSTALLDIRS=vendor",
+ # if perl_build is not tested first, need to pass packlist
+ # option to handle fallthrough case
+ (compat(7) ? "create_packlist=0" : ()),
+ @flags, @_);
+}
+
+sub test {
+ my $this=shift;
+ # Make tests verbose
+ $this->SUPER::test("TEST_VERBOSE=1", @_);
+}
+
+sub install {
+ my $this=shift;
+ my $destdir=shift;
+
+ # Special case for Makefile.PL that uses
+ # Module::Build::Compat. PREFIX should not be passed
+ # for those; it already installs into /usr by default.
+ my $makefile=$this->get_sourcepath("Makefile");
+ if (system(qq{grep -q "generated automatically by MakeMaker" $makefile}) != 0) {
+ $this->SUPER::install($destdir, @_);
+ }
+ else {
+ $this->SUPER::install($destdir, "PREFIX=/usr", @_);
+ }
+}
+
+1