#!/usr/bin/env python3
# SPDX-License-Identifier: GPL-2.0+
#
# This determines how many parallel tasks "make" is expecting, as it is
# not exposed via an special variables, reserves them all, runs a subprocess
# with PARALLELISM environment variable set, and releases the jobs back again.
#
# https://www.gnu.org/software/make/manual/html_node/POSIX-Jobserver.html#POSIX-Jobserver
from __future__ import print_function
import os, sys, errno
import subprocess

# Extract and prepare jobserver file descriptors from environment.
claim = 0
jobs = b""
try:
	# Fetch the make environment options.
	flags = os.environ['MAKEFLAGS']

	# Look for "--jobserver=R,W"
	# Note that GNU Make has used --jobserver-fds and --jobserver-auth
	# so this handles all of them.
	opts = [x for x in flags.split(" ") if x.startswith("--jobserver")]

	# Parse out R,W file descriptor numbers and set them nonblocking.
	fds = opts[0].split("=", 1)[1]
	reader, writer = [int(x) for x in fds.split(",", 1)]
	# Open a private copy of reader to avoid setting nonblocking
	# on an unexpecting process with the same reader fd.
	reader = os.open("/proc/self/fd/%d" % (reader),
			 os.O_RDONLY | os.O_NONBLOCK)

	# Read out as many jobserver slots as possible.
	while True:
		try:
			slot = os.read(reader, 8)
			jobs += slot
		except (OSError, IOError) as e:
			if e.errno == errno.EWOULDBLOCK:
				# Stop at the end of the jobserver queue.
				break
			# If something went wrong, give back the jobs.
			if len(jobs):
				os.write(writer, jobs)
			raise e
	# Add a bump for our caller's reserveration, since we're just going
	# to sit here blocked on our child.
	claim = len(jobs) + 1
except (KeyError, IndexError, ValueError, OSError, IOError) as e:
	# Any missing environment strings or bad fds should result in just
	# not being parallel.
	pass

# We can only claim parallelism if there was a jobserver (i.e. a top-level
# "-jN" argument) and there were no other failures. Otherwise leave out the
# environment variable and let the child figure out what is best.
if claim > 0:
	os.environ['PARALLELISM'] = '%d' % (claim)

rc = subprocess.call(sys.argv[1:])

# Return all the reserved slots.
if len(jobs):
	os.write(writer, jobs)

sys.exit(rc)
