Skip to content

Commit

Permalink
jobserver: a few refinements / fixes
Browse files Browse the repository at this point in the history
- Simplifying context summary to not show jobserver args as "additional
  make args"
- Fixing failure to parse '-j N' where there is a space separating the
  '-j' and 'N'
  • Loading branch information
jbohren committed Apr 1, 2015
1 parent c0ae6e0 commit e881f0e
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 18 deletions.
38 changes: 21 additions & 17 deletions catkin_tools/argument_parsing.py
Original file line number Diff line number Diff line change
Expand Up @@ -212,15 +212,17 @@ def extract_jobs_flags(mflags):
:param mflags: string of space separated make arguments
:type mflags: str
:returns: space separated list of make jobs flags
:rtype: str
:returns: list of make jobs flags
:rtype: list
"""
regex = r'(?:^|\s)(-?(?:j|l)(?:\s*[0-9]+|\s|$))' + \
r'|' + \
r'(?:^|\s)((?:--)?(?:jobs|load-average)(?:(?:=|\s+)[0-9]+|(?:\s|$)))'
matches = re.findall(regex, mflags) or []
matches = [m[0] or m[1] for m in matches]
return ' '.join([m.strip() for m in matches]) if matches else None
filtered_flags = [m.strip() for m in matches] if matches else []

return filtered_flags


def handle_make_arguments(
Expand Down Expand Up @@ -253,10 +255,13 @@ def handle_make_arguments(
wide_log('Forcing "-j1" for running unit tests.')
jobs_dict['jobs'] = 1

if 'jobs' in jobs_dict:
make_args.append('-j{0}'.format(jobs_dict['jobs']))
if 'load-average' in jobs_dict:
make_args.append('-l{0}'.format(jobs_dict['load-average']))
if len(jobs_dict) == 0:
make_args.extend(jobserver_arguments())
else:
if 'jobs' in jobs_dict:
make_args.append('-j{0}'.format(jobs_dict['jobs']))
if 'load-average' in jobs_dict:
make_args.append('-l{0}'.format(jobs_dict['load-average']))

return make_args

Expand Down Expand Up @@ -285,17 +290,17 @@ def configure_make_args(make_args, use_internal_make_jobserver):
'load-average': 1}

# Get MAKEFLAGS from environment
makeflags_jobs_flags = extract_jobs_flags(os.environ.get('MAKEFLAGS', '')) or []
makeflags_jobs_flags = extract_jobs_flags(os.environ.get('MAKEFLAGS', ''))
using_makeflags_jobs_flags = len(makeflags_jobs_flags) > 0
jobs_flags.update(extract_jobs_flags_values(''.join(makeflags_jobs_flags)))
jobs_flags.update(extract_jobs_flags_values(' '.join(makeflags_jobs_flags)))

# Extract make jobs flags (these override MAKEFLAGS)
cli_jobs_flags = extract_jobs_flags(''.join(make_args)) or []
cli_jobs_flags = extract_jobs_flags(' '.join(make_args))
using_cli_flags = len(cli_jobs_flags) > 0
jobs_flags.update(extract_jobs_flags_values(''.join(cli_jobs_flags)))
jobs_flags.update(extract_jobs_flags_values(' '.join(cli_jobs_flags)))
if cli_jobs_flags:
# Remove jobs flags from cli args if they're present
make_args = re.sub(cli_jobs_flags, '', ' '.join(make_args)).split()
make_args = re.sub(' '.join(cli_jobs_flags), '', ' '.join(make_args)).split()

# Instantiate a jobserver
if use_internal_make_jobserver:
Expand All @@ -305,7 +310,7 @@ def configure_make_args(make_args, use_internal_make_jobserver):

# If the jobserver is supported
if jobserver_supported():
jobs_args = jobserver_arguments()
jobs_args = []
else:
jobs_args = cli_jobs_flags.split()

Expand All @@ -331,11 +336,10 @@ def argument_preprocessor(args):
args, cmake_args, make_args, catkin_make_args = extract_make_args(args)

# Extract make jobs flags (these override MAKEFLAGS later on)
jobs_flags = extract_jobs_flags(' '.join(args)) or ''
jobs_args = jobs_flags.split()
if jobs_flags:
jobs_args = extract_jobs_flags(' '.join(args))
if jobs_args:
# Remove jobs flags from cli args if they're present
args = re.sub(jobs_flags, '', ' '.join(args)).split()
args = re.sub(' '.join(jobs_args), '', ' '.join(args)).split()

extras = {
'cmake_args': cmake_args,
Expand Down
4 changes: 3 additions & 1 deletion catkin_tools/make_jobserver.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@


class _MakeJobServer:

"""
This class implements a GNU make job server.
"""
Expand Down Expand Up @@ -159,9 +160,11 @@ def _release(self):


class _MakeJob:

"""
Context manager representing a jobserver job.
"""

def __enter__(self):
if _MakeJobServer._singleton is not None:
_MakeJobServer._singleton._obtain()
Expand Down Expand Up @@ -285,4 +288,3 @@ def set_jobserver_max_mem(max_mem):

if _MakeJobServer._singleton:
_MakeJobServer._singleton._set_max_mem(max_mem)

0 comments on commit e881f0e

Please sign in to comment.