use File::Spec;
use Debian::Debhelper::Dh_Lib;
-# Cache DEB_BUILD_GNU_TYPE value. Performance hit of multiple
-# invocations is noticable when listing build systems.
-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.
# Default build directory. Can be overriden in the derived
# class if really needed.
sub DEFAULT_BUILD_DIRECTORY {
- "obj-" . $DEB_BUILD_GNU_TYPE;
+ "obj-" . dpkg_architecture_value("DEB_HOST_GNU_TYPE");
}
# Constructs a new build system object. Named parameters:
# specified or empty, defaults to the current directory.
# - builddir - specifies build directory to use. Path is relative to the
# current (top) directory. If undef or empty,
-# DEFAULT_BUILD_DIRECTORY directory will be used.
+# DEFAULT_BUILD_DIRECTORY directory will be used.
+# - parallel - max number of parallel processes to be spawned for building
+# sources (-1 = unlimited; 1 = no parallel)
# Derived class can override the constructor to initialize common object
# parameters. Do NOT use constructor to execute commands or otherwise
# configure/setup build environment. There is absolutely no guarantee the
my $this = bless({ sourcedir => '.',
builddir => undef,
+ parallel => undef,
cwd => Cwd::getcwd() }, $class);
if (exists $opts{sourcedir}) {
if (exists $opts{builddir}) {
$this->_set_builddir($opts{builddir});
}
+ if (defined $opts{parallel}) {
+ $this->{parallel} = $opts{parallel};
+ }
return $this;
}
$builddir = File::Spec->catdir($this->{cwd}, $builddir);
}
elsif ($builddir =~ /\Q$this->{cwd}\E/) {
- $builddir = File::Spec::abs2rel($builddir, $this->{cwd});
+ $builddir = File::Spec->abs2rel($builddir, $this->{cwd});
}
# If build directory ends up the same as source directory, drop it
}
# This instance method is called to check if the build system is able
-# to auto build a source package. Additional argument $step 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.
+# to build a source package. It will be called during the build
+# system auto-selection process, inside the root directory of the debian
+# source package. The current build step is passed as an argument.
+# Return 0 if the source is not buildable, or a positive integer
+# otherwise.
#
-# This method is supposed to be called inside the source root directory.
-# Use $this->get_buildpath($path) method to get full path to the files
-# in the build directory.
+# Generally, it is enough to look for invariant unique build system
+# files shipped with clean source to determine if the source might
+# be buildable or not. However, if the build system is derived from
+# another other auto-buildable build system, this method
+# may also check if the source has already been built with this build
+# system partitially by looking for temporary files or other common
+# results the build system produces during the build process. The
+# latter checks must be unique to the current build system and must
+# be very unlikely to be true for either its parent or other build
+# systems. If it is determined that the source has already built
+# partitially with this build system, the value returned must be
+# greater than the one of the SUPER call.
sub check_auto_buildable {
my $this=shift;
- my ($step) = @_;
+ my ($step)=@_;
return 0;
}
my ($this, $path)=@_;
my @canon;
my $back=0;
- for my $comp (split(m%/+%, $path)) {
+ foreach my $comp (split(m%/+%, $path)) {
if ($comp eq '.') {
next;
}
return $dir;
}
+sub get_parallel {
+ my $this=shift;
+ return $this->{parallel};
+}
+
# When given a relative path to the build directory, converts it
# to the path that is relative to the source directory. If $path is
# not given, returns a path to the build directory that is relative