From 23305636a7a0fb167f7e43805e861c44786aa582 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Mon, 20 Apr 2009 14:44:11 -0400 Subject: rename Dh_Buildsystem to Buildsystem This way the root of the class hierarchy has the same name as the directory holding the classes. --- Debian/Debhelper/Buildsystem.pm | 257 +++++++++++++++++++++++ Debian/Debhelper/Buildsystem/makefile.pm | 2 +- Debian/Debhelper/Buildsystem/perl_build.pm | 2 +- Debian/Debhelper/Buildsystem/python_distutils.pm | 2 +- Debian/Debhelper/Dh_Buildsystem.pm | 257 ----------------------- 5 files changed, 260 insertions(+), 260 deletions(-) create mode 100644 Debian/Debhelper/Buildsystem.pm delete mode 100644 Debian/Debhelper/Dh_Buildsystem.pm diff --git a/Debian/Debhelper/Buildsystem.pm b/Debian/Debhelper/Buildsystem.pm new file mode 100644 index 00000000..78d14e70 --- /dev/null +++ b/Debian/Debhelper/Buildsystem.pm @@ -0,0 +1,257 @@ +# Defines debhelper buildsystem class interface and implementation +# of common functionality. +# +# Copyright: © 2008-2009 Modestas Vainius +# License: GPL-2+ + +package Debian::Debhelper::Buildsystem; + +use strict; +use warnings; +use Cwd; +use File::Spec; +use Debian::Debhelper::Dh_Lib; + +# Cache DEB_BUILD_GNU_TYPE value. Performance hit of multiple +# invocations is noticable when listing buildsystems. +our $DEB_BUILD_GNU_TYPE = dpkg_architecture_value("DEB_BUILD_GNU_TYPE"); + +# Build system name. Defaults to the last component of the class +# name. Do not override this method unless you know what you are +# doing. +sub NAME { + my $this=shift; + my $class = ref($this) || $this; + if ($class =~ m/^.+::([^:]+)$/) { + return $1; + } + else { + error("ınvalid buildsystem class name: $class"); + } +} + +# Description of the build system to be shown to the users. +sub DESCRIPTION { + "basic debhelper build system class (please provide description)"; +} + +# Default build directory. Can be overriden in the derived +# class if really needed. +sub DEFAULT_BUILD_DIRECTORY { + "obj-" . $DEB_BUILD_GNU_TYPE; +} + +# Constructs a new build system object. Named parameters: +# - builddir - specifies build directory to use. If not specified, +# in-source build will be performed. If undef or empty, +# DEFAULT_BUILD_DIRECTORY will be used. +# - build_action - set this parameter to the name of the build action +# if you want the object to determine its is_buidable +# status automatically (with check_auto_buildable()). +# Do not pass this parameter if is_buildable flag should +# be forced to true or set this parameter to undef if +# is_buildable flag should be false. +# Derived class can override the constructor to initialize common object +# parameters and execute commands to configure build environment if +# is_buildable flag is set on the object. +sub new { + my ($class, %opts)=@_; + + my $this = bless({ builddir => undef, is_buildable => 1 }, $class); + if (exists $opts{builddir}) { + if ($opts{builddir}) { + $this->{builddir} = $opts{builddir}; + } + else { + $this->{builddir} = $this->DEFAULT_BUILD_DIRECTORY(); + } + } + if (exists $opts{build_action}) { + if (defined $opts{build_action}) { + $this->{is_buildable} = $this->check_auto_buildable($opts{build_action}); + } + else { + $this->{is_buildable} = 0; + } + } + return $this; +} + +# Test is_buildable flag of the object. +sub is_buildable { + my $this=shift; + return $this->{is_buildable}; +} + +# This instance method is called to check if the build system is capable +# to auto build a source package. Additional argument $action describes +# which operation the caller is going to perform (either configure, +# build, test, install or clean). You must override this method for the +# build system module to be ever picked up automatically. This method is +# used in conjuction with @Dh_Buildsystems::BUILDSYSTEMS. +# +# This method is supposed to be called with source root directory being +# working directory. Use $this->get_buildpath($path) method to get full +# path to the files in the build directory. +sub check_auto_buildable { + my $this=shift; + my ($action) = @_; + return 0; +} + +# Derived class can call this method in its constructor +# to enforce in-source building even if the user requested otherwise. +sub enforce_in_source_building { + my $this=shift; + if ($this->{builddir}) { + # Do not emit warning unless the object is buildable. + if ($this->is_buildable()) { + warning("warning: " . $this->NAME() . + " does not support building outside-source. In-source build enforced."); + } + $this->{builddir} = undef; + } +} + +# Derived class can call this method in its constructor to enforce +# outside-source building even if the user didn't request it. +sub enforce_outside_source_building { + my ($this, $builddir) = @_; + if (!defined $this->{builddir}) { + $this->{builddir} = ($builddir && $builddir ne ".") ? $builddir : $this->DEFAULT_BUILD_DIRECTORY(); + } +} + +# Get path to the specified build directory +sub get_builddir { + my $this=shift; + return $this->{builddir}; +} + +# Construct absolute path to the file from the given path that is relative +# to the build directory. +sub get_buildpath { + my ($this, $path) = @_; + if ($this->get_builddir()) { + return File::Spec->catfile($this->get_builddir(), $path); + } + else { + return File::Spec->catfile('.', $path); + } +} + +# When given a relative path in the source tree, converts it +# to the path that is relative to the build directory. +# If $path is not given, returns relative path to the root of the +# source tree from the build directory. +sub get_rel2builddir_path { + my $this=shift; + my $path=shift; + + if (defined $path) { + $path = File::Spec->catfile(Cwd::getcwd(), $path); + } + else { + $path = Cwd::getcwd(); + } + if ($this->get_builddir()) { + return File::Spec->abs2rel($path, Cwd::abs_path($this->get_builddir())); + } + return $path; +} + +sub _cd { + my ($this, $dir)=@_; + if (! $dh{NO_ACT}) { + verbose_print("cd $dir"); + chdir $dir or error("error: unable to chdir to $dir"); + } +} + +# Creates a build directory. +sub mkdir_builddir { + my $this=shift; + if ($this->get_builddir()) { + doit("mkdir", "-p", $this->get_builddir()); + } +} + +# Changes working directory the build directory (if needed), calls doit(@_) +# and changes working directory back to the source directory. +sub doit_in_builddir { + my $this=shift; + if ($this->get_builddir()) { + my $builddir = $this->get_builddir(); + my $sourcedir = $this->get_rel2builddir_path(); + $this->_cd($builddir); + doit(@_); + $this->_cd($sourcedir); + } + else { + doit(@_); + } + return 1; +} + +# In case of outside-source tree building, whole build directory +# gets wiped (if it exists) and 1 is returned. Otherwise, nothing +# is done and 0 is returned. +sub clean_builddir { + my $this=shift; + if ($this->get_builddir()) { + if (-d $this->get_builddir()) { + doit("rm", "-rf", $this->get_builddir()); + } + return 1; + } + return 0; +} + + +# Instance method that is called before performing any action (see below). +# Action name is passed as an argument. Derived classes overriding this +# method should also call SUPER implementation of it. +sub pre_action { + my $this=shift; + my ($action)=@_; +} + +# Instance method that is called after performing any action (see below). +# Action name is passed as an argument. Derived classes overriding this +# method should also call SUPER implementation of it. +sub post_action { + my $this=shift; + my ($action)=@_; +} + +# The instance methods below provide support for configuring, +# building, testing, install and cleaning source packages. +# In case of failure, the method may just error() out. +# +# These methods should be overriden by derived classes to +# implement buildsystem specific actions needed to build the +# source. Arbitary number of custom action arguments might be +# passed. Default implementations do nothing. +sub configure { + my $this=shift; +} + +sub build { + my $this=shift; +} + +sub test { + my $this=shift; +} + +# destdir parameter specifies where to install files. +sub install { + my $this=shift; + my $destdir=shift; +} + +sub clean { + my $this=shift; +} + +1; diff --git a/Debian/Debhelper/Buildsystem/makefile.pm b/Debian/Debhelper/Buildsystem/makefile.pm index 2d4c64ca..db244526 100644 --- a/Debian/Debhelper/Buildsystem/makefile.pm +++ b/Debian/Debhelper/Buildsystem/makefile.pm @@ -8,7 +8,7 @@ package Debian::Debhelper::Buildsystem::makefile; use strict; use Debian::Debhelper::Dh_Lib; -use base 'Debian::Debhelper::Dh_Buildsystem'; +use base 'Debian::Debhelper::Buildsystem'; sub get_makecmd_C { my $this=shift; diff --git a/Debian/Debhelper/Buildsystem/perl_build.pm b/Debian/Debhelper/Buildsystem/perl_build.pm index b5ad96df..e00a7eb0 100644 --- a/Debian/Debhelper/Buildsystem/perl_build.pm +++ b/Debian/Debhelper/Buildsystem/perl_build.pm @@ -8,7 +8,7 @@ package Debian::Debhelper::Buildsystem::perl_build; use strict; use Debian::Debhelper::Dh_Lib; -use base 'Debian::Debhelper::Dh_Buildsystem'; +use base 'Debian::Debhelper::Buildsystem'; sub DESCRIPTION { "support for building Perl Build.PL based packages (in-source only)" diff --git a/Debian/Debhelper/Buildsystem/python_distutils.pm b/Debian/Debhelper/Buildsystem/python_distutils.pm index e34183c6..1013c4bd 100644 --- a/Debian/Debhelper/Buildsystem/python_distutils.pm +++ b/Debian/Debhelper/Buildsystem/python_distutils.pm @@ -9,7 +9,7 @@ package Debian::Debhelper::Buildsystem::python_distutils; use strict; use Debian::Debhelper::Dh_Lib; -use base 'Debian::Debhelper::Dh_Buildsystem'; +use base 'Debian::Debhelper::Buildsystem'; sub DESCRIPTION { "support for building Python distutils based packages" diff --git a/Debian/Debhelper/Dh_Buildsystem.pm b/Debian/Debhelper/Dh_Buildsystem.pm deleted file mode 100644 index 31e462a3..00000000 --- a/Debian/Debhelper/Dh_Buildsystem.pm +++ /dev/null @@ -1,257 +0,0 @@ -# Defines debhelper buildsystem class interface and implementation -# of common functionality. -# -# Copyright: © 2008-2009 Modestas Vainius -# License: GPL-2+ - -package Debian::Debhelper::Dh_Buildsystem; - -use strict; -use warnings; -use Cwd; -use File::Spec; -use Debian::Debhelper::Dh_Lib; - -# Cache DEB_BUILD_GNU_TYPE value. Performance hit of multiple -# invocations is noticable when listing buildsystems. -our $DEB_BUILD_GNU_TYPE = dpkg_architecture_value("DEB_BUILD_GNU_TYPE"); - -# Build system name. Defaults to the last component of the class -# name. Do not override this method unless you know what you are -# doing. -sub NAME { - my $this=shift; - my $class = ref($this) || $this; - if ($class =~ m/^.+::([^:]+)$/) { - return $1; - } - else { - error("ınvalid buildsystem class name: $class"); - } -} - -# Description of the build system to be shown to the users. -sub DESCRIPTION { - "basic debhelper build system class (please provide description)"; -} - -# Default build directory. Can be overriden in the derived -# class if really needed. -sub DEFAULT_BUILD_DIRECTORY { - "obj-" . $DEB_BUILD_GNU_TYPE; -} - -# Constructs a new build system object. Named parameters: -# - builddir - specifies build directory to use. If not specified, -# in-source build will be performed. If undef or empty, -# DEFAULT_BUILD_DIRECTORY will be used. -# - build_action - set this parameter to the name of the build action -# if you want the object to determine its is_buidable -# status automatically (with check_auto_buildable()). -# Do not pass this parameter if is_buildable flag should -# be forced to true or set this parameter to undef if -# is_buildable flag should be false. -# Derived class can override the constructor to initialize common object -# parameters and execute commands to configure build environment if -# is_buildable flag is set on the object. -sub new { - my ($class, %opts)=@_; - - my $this = bless({ builddir => undef, is_buildable => 1 }, $class); - if (exists $opts{builddir}) { - if ($opts{builddir}) { - $this->{builddir} = $opts{builddir}; - } - else { - $this->{builddir} = $this->DEFAULT_BUILD_DIRECTORY(); - } - } - if (exists $opts{build_action}) { - if (defined $opts{build_action}) { - $this->{is_buildable} = $this->check_auto_buildable($opts{build_action}); - } - else { - $this->{is_buildable} = 0; - } - } - return $this; -} - -# Test is_buildable flag of the object. -sub is_buildable { - my $this=shift; - return $this->{is_buildable}; -} - -# This instance method is called to check if the build system is capable -# to auto build a source package. Additional argument $action describes -# which operation the caller is going to perform (either configure, -# build, test, install or clean). You must override this method for the -# build system module to be ever picked up automatically. This method is -# used in conjuction with @Dh_Buildsystems::BUILDSYSTEMS. -# -# This method is supposed to be called with source root directory being -# working directory. Use $this->get_buildpath($path) method to get full -# path to the files in the build directory. -sub check_auto_buildable { - my $this=shift; - my ($action) = @_; - return 0; -} - -# Derived class can call this method in its constructor -# to enforce in-source building even if the user requested otherwise. -sub enforce_in_source_building { - my $this=shift; - if ($this->{builddir}) { - # Do not emit warning unless the object is buildable. - if ($this->is_buildable()) { - warning("warning: " . $this->NAME() . - " does not support building outside-source. In-source build enforced."); - } - $this->{builddir} = undef; - } -} - -# Derived class can call this method in its constructor to enforce -# outside-source building even if the user didn't request it. -sub enforce_outside_source_building { - my ($this, $builddir) = @_; - if (!defined $this->{builddir}) { - $this->{builddir} = ($builddir && $builddir ne ".") ? $builddir : $this->DEFAULT_BUILD_DIRECTORY(); - } -} - -# Get path to the specified build directory -sub get_builddir { - my $this=shift; - return $this->{builddir}; -} - -# Construct absolute path to the file from the given path that is relative -# to the build directory. -sub get_buildpath { - my ($this, $path) = @_; - if ($this->get_builddir()) { - return File::Spec->catfile($this->get_builddir(), $path); - } - else { - return File::Spec->catfile('.', $path); - } -} - -# When given a relative path in the source tree, converts it -# to the path that is relative to the build directory. -# If $path is not given, returns relative path to the root of the -# source tree from the build directory. -sub get_rel2builddir_path { - my $this=shift; - my $path=shift; - - if (defined $path) { - $path = File::Spec->catfile(Cwd::getcwd(), $path); - } - else { - $path = Cwd::getcwd(); - } - if ($this->get_builddir()) { - return File::Spec->abs2rel($path, Cwd::abs_path($this->get_builddir())); - } - return $path; -} - -sub _cd { - my ($this, $dir)=@_; - if (! $dh{NO_ACT}) { - verbose_print("cd $dir"); - chdir $dir or error("error: unable to chdir to $dir"); - } -} - -# Creates a build directory. -sub mkdir_builddir { - my $this=shift; - if ($this->get_builddir()) { - doit("mkdir", "-p", $this->get_builddir()); - } -} - -# Changes working directory the build directory (if needed), calls doit(@_) -# and changes working directory back to the source directory. -sub doit_in_builddir { - my $this=shift; - if ($this->get_builddir()) { - my $builddir = $this->get_builddir(); - my $sourcedir = $this->get_rel2builddir_path(); - $this->_cd($builddir); - doit(@_); - $this->_cd($sourcedir); - } - else { - doit(@_); - } - return 1; -} - -# In case of outside-source tree building, whole build directory -# gets wiped (if it exists) and 1 is returned. Otherwise, nothing -# is done and 0 is returned. -sub clean_builddir { - my $this=shift; - if ($this->get_builddir()) { - if (-d $this->get_builddir()) { - doit("rm", "-rf", $this->get_builddir()); - } - return 1; - } - return 0; -} - - -# Instance method that is called before performing any action (see below). -# Action name is passed as an argument. Derived classes overriding this -# method should also call SUPER implementation of it. -sub pre_action { - my $this=shift; - my ($action)=@_; -} - -# Instance method that is called after performing any action (see below). -# Action name is passed as an argument. Derived classes overriding this -# method should also call SUPER implementation of it. -sub post_action { - my $this=shift; - my ($action)=@_; -} - -# The instance methods below provide support for configuring, -# building, testing, install and cleaning source packages. -# In case of failure, the method may just error() out. -# -# These methods should be overriden by derived classes to -# implement buildsystem specific actions needed to build the -# source. Arbitary number of custom action arguments might be -# passed. Default implementations do nothing. -sub configure { - my $this=shift; -} - -sub build { - my $this=shift; -} - -sub test { - my $this=shift; -} - -# destdir parameter specifies where to install files. -sub install { - my $this=shift; - my $destdir=shift; -} - -sub clean { - my $this=shift; -} - -1; -- cgit v1.2.3