#!/usr/bin/python3 # Complete file list producer v0.7 # Written by ProjectRevoTPP import os from glob import glob import sys def holecount(file): with open(file, 'r', encoding = 'utf-8') as infile: contents = infile.readlines() asm_count = 0 for i, line in enumerate(contents): if(line.count("GLOBAL_ASM") > 0 and (i + 1 == len(contents) or contents[i+1].count("#endif") == 0)): asm_count += 1 return asm_count def noncount(file): with open(file, 'r', encoding = 'utf-8') as infile: contents = infile.readlines() noncount = 0 for i, line in enumerate(contents): if(line.count("NON_") > 0): noncount += 1 return noncount def holecount_all(src): for subdir, dirs, files in os.walk(src): for filename in files: filepath = subdir + os.sep + filename if(not filename.endswith('.c')): continue holes = holecount(filepath) nonmatches = noncount(filepath) if(holes > 0 and nonmatches > 0): print(filename, holes, nonmatches) return 1 # get file encoding type def get_encoding_type(file): with open(file, 'rb') as f: rawdata = f.read() return detect(rawdata)['encoding'] outfile = open(sys.argv[1], "w") outfile.write("# This file is auto-generated. DO NOT MODIFY!\n\n") outfile.write("SAFE_C_FILES := \\\n") for directory in os.walk("src"): for filename in glob(os.path.join(directory[0], "*.c")): infile = open(filename, "r", encoding="ascii", errors="surrogateescape") # Open content. contents = infile.read() # Set the counts. nonm_count = contents.count("NON_MATCHING") noneq_count = contents.count("NON_EQUIVALENT") global_asm_count = contents.count("GLOBAL_ASM") # NOTE: As of now there is no distinction between unattempted files and unfinished ones. if nonm_count + noneq_count == global_asm_count : outfile.write(" build/us/") outfile.write(os.path.splitext(filename)[0]) outfile.write(".o \\\n") infile.close() outfile.close()