X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=Debian%2FDebhelper%2FBuildsystem.pm;h=763baa9d1773d40957c87f11122fc094cf632034;hb=1b1b37221fe9d69bd23b61e33df53cc54991457b;hp=62c45b5d3a2ce8b0dfd42056262f8c6ec3039d63;hpb=86b14713761d1794c6fe6d90558db65dfba654ce;p=debhelper.git diff --git a/Debian/Debhelper/Buildsystem.pm b/Debian/Debhelper/Buildsystem.pm index 62c45b5..763baa9 100644 --- a/Debian/Debhelper/Buildsystem.pm +++ b/Debian/Debhelper/Buildsystem.pm @@ -12,10 +12,6 @@ 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 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. @@ -38,7 +34,7 @@ sub DESCRIPTION { # 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_BUILD_GNU_TYPE"); } # Constructs a new build system object. Named parameters: @@ -47,7 +43,9 @@ sub DEFAULT_BUILD_DIRECTORY { # 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 @@ -58,6 +56,7 @@ sub new { my $this = bless({ sourcedir => '.', builddir => undef, + parallel => undef, cwd => Cwd::getcwd() }, $class); if (exists $opts{sourcedir}) { @@ -71,6 +70,9 @@ sub new { if (exists $opts{builddir}) { $this->_set_builddir($opts{builddir}); } + if (defined $opts{parallel}) { + $this->{parallel} = $opts{parallel}; + } return $this; } @@ -90,7 +92,7 @@ sub _set_builddir { $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 @@ -103,18 +105,27 @@ sub _set_builddir { } # 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; } @@ -154,7 +165,7 @@ sub canonpath { my ($this, $path)=@_; my @canon; my $back=0; - for my $comp (split(m%/+%, $path)) { + foreach my $comp (split(m%/+%, $path)) { if ($comp eq '.') { next; } @@ -243,6 +254,11 @@ sub get_source_rel2builddir { 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