diff options
author | Modestas Vainius <modestas@vainius.eu> | 2009-04-14 15:12:14 +0300 |
---|---|---|
committer | Joey Hess <joey@gnu.kitenet.net> | 2009-04-14 14:14:07 -0400 |
commit | 683f6060d8304d6d4e83bd76e5ac624a35b43442 (patch) | |
tree | 12a7a34240e60a52269647584c92c3349c0b2e5a /Debian/Debhelper/Buildsystem/perl_makemaker.pm | |
parent | 2b7f42f9ef70c08bb7bc138fb8b24dc993da54ac (diff) |
Modular object-orientied buildsystem implementation (try 2).
Major changess:
* Dh_Buildsystem_Option dropped and Dh_Buildsystem_Chdir functionality
partitially merged into Dh_Buildsystem_Basic. Dh_Buildsystem_Bases.pm
renamed to Dh_Buildsystem_Basic.pm to match classname.
* *_impl() ditched completely. Previous {configure,build,test,install,clean}_impl()
renamed to just configure(), build(), test(), install(), clean() instead.
Added pre_action($action) and post_action($action) hooks instead which are called
by Dh_Buildsystems::buildsystems_do().
* Builddir is handled via mkdir_builddir(), doit_in_buildddir(), clean_builddir()
methods which buildsystems should call directly. Removed get_top* method, added
get_rel2builddir_path().
* is_buildable() method renamed to is_auto_buildable() to reflect its
purpose more.
* ::perl_makefile renamed to ::perl_makemaker and which is based on ::makefile
now. MakeMaker hack moved from ::makefile to ::perl_makemaker where it belongs
(thanks for the tip).
* Dh_Buildsystems refactored into a simple perl module rather than OO class and
simplified a bit.
* @BUILDSYSTEMS and is_auto_buildable() modified to 100% match historical order.
TODO: user documentation (e.g. DH_AUTO_BUILDDIRECTORY and DH_AUTO_BUILDSYSTEM
environment variables and common dh_auto_* options (--buildsystem and --builddirectory)).
Current plugin inheritance hierarchy is like this:
Buildsystem::perl_build -> Dh_Buildsystem_Basic <- Buildsystem::python_distutils
^
|
Buildsystem::makefile <- Buildsystem::perl_makemaker
^ ^ ^
/ | \
Buildsystem::autotools Buildsystem::cmake Buildsystem::python_distutils
Signed-off-by: Modestas Vainius <modestas@vainius.eu>
Diffstat (limited to 'Debian/Debhelper/Buildsystem/perl_makemaker.pm')
-rw-r--r-- | Debian/Debhelper/Buildsystem/perl_makemaker.pm | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/Debian/Debhelper/Buildsystem/perl_makemaker.pm b/Debian/Debhelper/Buildsystem/perl_makemaker.pm new file mode 100644 index 00000000..15539588 --- /dev/null +++ b/Debian/Debhelper/Buildsystem/perl_makemaker.pm @@ -0,0 +1,71 @@ +# A buildsystem plugin 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 Debian::Debhelper::Dh_Lib; +use base 'Debian::Debhelper::Buildsystem::makefile'; + +sub DESCRIPTION { + "support for building Perl MakeMaker based packages (in-source only)" +} + +sub is_auto_buildable { + my ($self, $action)=@_; + + # Handles configure, install; the rest - next class + if ($action eq "install") { + # This hack is needed to keep full 100% compatibility with previous + # debhelper versions. + if (-e "Makefile" && + system('grep -q "generated automatically by MakeMaker" Makefile') == 0) { + return 1; + } + } + elsif ($action eq "configure") { + return -e "Makefile.PL"; + } + else { + return 0; + } +} + +sub new { + my $cls=shift; + my $self=$cls->SUPER::new(@_); + $self->enforce_in_source_building(); + return $self; +} + +sub configure { + my $self=shift; + # 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; + doit("perl", "Makefile.PL", "INSTALLDIRS=vendor", @_); +} + +sub install { + my $self=shift; + my $destdir=shift; + # XXX JEH This is a really unfortunate breaking of the + # encapsulation of the perl_makefile module. Perhaps it would be + # better for that module to contain some hack that injects that + # test into this one? + # XXX MDX Solved. perl_makemaker will need come before makefile in + # @BUILDSYSTEMS. See also hack in is_auto_buildable(). + # This is a safety check needed to keep 100% compatibility with + # earlier debhelper behaviour. This if is very unlikely to be false. + if (-e "Makefile" && + system('grep -q "generated automatically by MakeMaker" Makefile') == 0) { + $self->SUPER::install($destdir, "PREFIX=/usr", @_); + } else { + $self->SUPER::install($destdir, @_); + } +} + +1; |