def handle_make_arguments(input_make_args, force_single_threaded_when_running_tests=False): """Special handling for make arguments. If force_single_threaded_when_running_tests is True, jobs flags are replaced with -j1, because tests cannot handle parallelization. If no job flags are present and there are none in the MAKEFLAGS environment variable, then make flags are set to the cpu_count, e.g. -j4 -l4. :param input_make_args: list of make arguments to be handled :type input_make_args: list :param force_single_threaded_when_running_tests: self explanatory :type force_single_threaded_when_running_tests: bool :returns: copied list of make arguments, potentially with some modifications :rtype: list """ make_args = list(input_make_args) # Get the values for the jobs flags which may be in the make args jobs_dict = extract_jobs_flags_values(' '.join(make_args)) jobs_args = extract_jobs_flags(' '.join(make_args)) if len(jobs_args) > 0: # Remove jobs flags from cli args if they're present make_args = re.sub(' '.join(jobs_args), '', ' '.join(make_args)).split() if force_single_threaded_when_running_tests: # force single threaded execution when running test since rostest does not support multiple parallel runs run_tests = [a for a in make_args if a.startswith('run_tests')] if run_tests: wide_log('Forcing "-j1" for running unit tests.') jobs_dict['jobs'] = 1 if job_server.gnu_make_enabled(): make_args.extend(job_server.gnu_make_args()) 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
def handle_make_arguments( input_make_args, force_single_threaded_when_running_tests=False): """Special handling for make arguments. If force_single_threaded_when_running_tests is True, jobs flags are replaced with -j1, because tests cannot handle parallelization. If no job flags are present and there are none in the MAKEFLAGS environment variable, then make flags are set to the cpu_count, e.g. -j4 -l4. :param input_make_args: list of make arguments to be handled :type input_make_args: list :param force_single_threaded_when_running_tests: self explanatory :type force_single_threaded_when_running_tests: bool :returns: copied list of make arguments, potentially with some modifications :rtype: list """ make_args = list(input_make_args) # Get the values for the jobs flags which may be in the make args jobs_dict = extract_jobs_flags_values(' '.join(make_args)) jobs_args = extract_jobs_flags(' '.join(make_args)) if len(jobs_args) > 0: # Remove jobs flags from cli args if they're present make_args = re.sub(' '.join(jobs_args), '', ' '.join(make_args)).split() if force_single_threaded_when_running_tests: # force single threaded execution when running test since rostest does not support multiple parallel runs run_tests = [a for a in make_args if a.startswith('run_tests')] if run_tests: wide_log('Forcing "-j1" for running unit tests.') jobs_dict['jobs'] = 1 if job_server.gnu_make_enabled(): make_args.extend(job_server.gnu_make_args()) 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