# This Source Code Form is subject to the terms of the Mozilla Public # License, v. 2.0. If a copy of the MPL was not distributed with this file, # You can obtain one at http://mozilla.org/MPL/2.0/. import json FIRST_LINE = "// This file was generated by generate_thread_allows.py. DO NOT EDIT." def generate_allows(input_paths): """ This script reads in the ThreadAllows.txt and ThreadFileAllows.txt lists and generates a header file containing a two arrays of allowed threads. These can be the following formats: -Files which the checker should ignore These files either contain definitions of NS_NewNamedThread or use args which the plugin can't cast (such as func args). -Thread names which the checker should ignore Specifies which individual thread names to ignore. """ file_list = [] name_list = [] lines = set() for path in input_paths: with open(path) as file: lines.update(file.readlines()) for line in sorted(lines): """ We are assuming lines ending in .cpp, .h are files. Threads should NOT have names containing filenames. Please don't do that. """ line = line.strip() if line.endswith(".cpp") or line.endswith(".h"): file_list.append(line) else: name_list.append(line) file_list_s = ",\n ".join(json.dumps(elem) for elem in file_list) name_list_s = ",\n ".join(json.dumps(elem) for elem in name_list) output_string = ( FIRST_LINE + """ static const char *allow_thread_files[] = { %s }; static const char *allow_thread_names[] = { %s }; """ % (file_list_s, name_list_s) ) return output_string def generate_file(output, *input_paths): output.write(generate_allows(input_paths))