]> git.donarmstrong.com Git - debhelper.git/blobdiff - Debian/Debhelper/Dh_Lib.pm
split get_make_jobserver_status into two functions
[debhelper.git] / Debian / Debhelper / Dh_Lib.pm
index 602b77fbc012f97dae29b069c279f2ea64d12390..ac0d8ab4a05f7ea6f7aa317b8202b7471ab60bec 100644 (file)
@@ -16,7 +16,7 @@ use vars qw(@ISA @EXPORT %dh);
            &compat &addsubstvar &delsubstvar &excludefile &package_arch
            &is_udeb &udeb_filename &debhelper_script_subst &escape_shell
            &inhibit_log &load_log &write_log &dpkg_architecture_value
-           &sourcepackage &get_make_jobserver_status);
+           &sourcepackage &is_make_jobserver_unavailable &clean_makeflags);
 
 my $max_compat=7;
 
@@ -794,44 +794,35 @@ sub debhelper_script_subst {
        }
 }
 
-# A helper subroutine for detecting (based on MAKEFLAGS) if make jobserver 
-# is enabled, if it is available or MAKEFLAGS contains "jobs" option.
-# It returns current status (jobserver, jobserver-unavailable or jobs-N where
-# N is number of jobs, 0 if infinite) and MAKEFLAGS cleaned up from 
-# job control options.
-sub get_make_jobserver_status {
-       my $jobsre = qr/(?:^|\s)(?:(?:-j\s*|--jobs(?:=|\s+))(\d+)?|--jobs)\b/;
-       my $status = "";
-       my $makeflags;
+# Checks if make's jobserver is enabled via MAKEFLAGS, but
+# the FD used to communicate with it is actually not available.
+sub is_make_jobserver_unavailable {
+       if (exists $ENV{MAKEFLAGS} && 
+           $ENV{MAKEFLAGS} =~ /(?:^|\s)--jobserver-fds=(\d+)/) {
+               if (!open(my $in, "<&$1")) {
+                       return 1; # unavailable
+               }
+               else {
+                       close $in;
+                       return 0; # available
+               }
+       }
+
+       return; # no jobserver specified
+}
 
+# Cleans out job control options from MAKEFLAGS.
+sub clean_makeflags {
        if (exists $ENV{MAKEFLAGS}) {
-               $makeflags = $ENV{MAKEFLAGS};
-               if ($makeflags =~ /(?:^|\s)--jobserver-fds=(\d+)/) {
-                       $status = "jobserver";
-                       if (!open(my $in, "<&", "$1")) {
-                               # Job server is unavailable
-                               $status .= "-unavailable";
-                       }
-                       else {
-                               close $in;
-                       }
-                       # Clean makeflags up
-                       $makeflags =~ s/(?:^|\s)--jobserver-fds=\S+//g;
-                       $makeflags =~ s/(?:^|\s)-j\b//g;
+               if ($ENV{MAKEFLAGS} =~ /(?:^|\s)--jobserver-fds=(\d+)/) {
+                       $ENV{MAKEFLAGS} =~ s/(?:^|\s)--jobserver-fds=\S+//g;
+                       $ENV{MAKEFLAGS} =~ s/(?:^|\s)-j\b//g;
                }
-               elsif (my @m = ($makeflags =~ /$jobsre/g)) {
-                       # Job count is specified in MAKEFLAGS. Whenever make reads it, a new
-                       # jobserver will be started. Job count returned is 0 if infinite.
-                       $status = "jobs-" . (defined $m[$#m] ? $m[$#m] : "0");
-                       # Clean makeflags up from "jobs" option(s)
-                       $makeflags =~ s/$jobsre//g;
+               else {
+                       $ENV{MAKEFLAGS} =~ s/(?:^|\s)(?:(?:-j\s*|--jobs(?:=|\s+))(\d+)?|--jobs)\b//g;
                }
+               delete $ENV{MAKEFLAGS} if $ENV{MAKEFLAGS} =~ /^\s*$/;
        }
-       if ($status) {
-               # MAKEFLAGS could be unset if it is empty
-               $makeflags = undef if $makeflags =~ /^\s*$/;
-       }
-       return wantarray ? ($status, $makeflags) : $status;
 }
 
 1