This is starting to make sense. The code section that I have been suspecting in make 4.1 (which is the only place that resets the job_slots to 1) is...
#ifndef WINDOWS32 #ifdef HAVE_FCNTL # define FD_OK(_f) ((fcntl ((_f), F_GETFD) != -1) || (errno != EBADF)) #else # define FD_OK(_f) 1 #endif /* Create a duplicate pipe, that will be closed in the SIGCHLD handler. If this fails with EBADF, the parent has closed the pipe on us because it didn't think we were a submake. If so, print a warning then default to -j1. */ else if (!FD_OK (job_fds[0]) || !FD_OK (job_fds[1]) || (job_rfd = dup (job_fds[0])) < 0) { if (errno != EBADF) pfatal_with_name (_("dup jobserver")); O (error, NILF, _("warning: jobserver unavailable: using -j1. Add '+' to parent make rule.")); job_slots = 1; job_fds[0] = job_fds[1] = -1; } #endif whereas the same code section in make 3.82 (which doesn't show this bug) is... /* Create a duplicate pipe, that will be closed in the SIGCHLD handler. If this fails with EBADF, the parent has closed the pipe on us because it didn't think we were a submake. If so, print a warning then default to -j1. */ else if ((job_rfd = dup (job_fds[0])) < 0) { if (errno != EBADF) pfatal_with_name (_("dup jobserver")); error (NILF, _("warning: jobserver unavailable: using -j1. Add `+' to parent make rule.")); job_slots = 1; } So only make 4.1 is executing the fnctl() calls via the FD_OK macro. Perhaps we can hack around this by causing HAVE_FCNTL to be undefined in the fink make 4.1 build? On Tue, Oct 20, 2015 at 8:20 PM, Jack Howarth <howarth.at.f...@gmail.com> wrote: > So far my testing on 10.12 suggests that the trigger for the > regression in using fink make 4.1 under 10.12 is due to the flock() usage > in Services.pm. The most reliable reproducer of this regression on my > system has been the InfoTest of libcurl4 which always fails in the > compilation of the test suite under make 4.1. Using the following hack... > > --- Services.pm.orig 2015-10-20 20:06:57.000000000 -0400 > +++ Services.pm 2015-10-20 20:09:39.000000000 -0400 > @@ -1756,11 +1756,11 @@ > } > > my $mode = $exclusive ? LOCK_EX : LOCK_SH; > - if (flock $lockfile_FH, $mode | LOCK_NB) { > - return wantarray ? ($lockfile_FH, 0) : $lockfile_FH; > - } else { > +# if (flock $lockfile_FH, $mode | LOCK_NB) { > +# return wantarray ? ($lockfile_FH, 0) : $lockfile_FH; > +# } else { > # Maybe the system doesn't support locking? > - if ($! == EOPNOTSUPP || $! == ENOLCK) { > +# if ($! == EOPNOTSUPP || $! == ENOLCK) { > require Fink::Config; > if (!defined $Fink::Config::config || > !$Fink::Config::config->get_option("LockWarning", 0)) { > @@ -1772,7 +1772,7 @@ > if defined $Fink::Config::config; > } > return ($lockfile_FH, 0); > - } > +# } > > return (wantarray ? (0, 0) : 0) if $no_block; > > @@ -1808,7 +1808,7 @@ > close $lockfile_FH; > return wantarray ? (0, 0) : 0; > } > - } > +# } > } > > =item dpkg_lockwait > > to avoid the flock() calls in perl suppresses the failure under make 4.1 > on 10.12. > >
------------------------------------------------------------------------------
_______________________________________________ Fink-devel mailing list Fink-devel@lists.sourceforge.net List archive: http://news.gmane.org/gmane.os.apple.fink.devel Subscription management: https://lists.sourceforge.net/lists/listinfo/fink-devel