[ASMXYGEN] Add debug mode to compare generated stuff

git-svn-id: svn://kolibrios.org@9402 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
Magomed Kostoev (mkostoevr) 2021-12-05 15:21:39 +00:00
parent bdebc82262
commit e259e30fbf

View File

@ -3,6 +3,8 @@ import os
import argparse
import sys
import pickle
import hashlib
import difflib
# fasm keywords
keywords = [
@ -322,6 +324,16 @@ class AsmReader(AsmReaderFetchingIdentifiers):
def __init__(self, file):
super().__init__(file)
def append_file(full_path, contents):
if debug_mode:
if full_path not in output_files:
output_files[full_path] = ""
output_files[full_path] += contents
else:
f = open(full_path, "a")
f.write(contents)
f.close()
class AsmElement:
def __init__(self, location, name, comment):
global warnings
@ -373,10 +385,9 @@ class AsmElement:
created_files.append(full_path)
# Create directories need for the file
os.makedirs(os.path.dirname(full_path), exist_ok=True)
f = open(full_path, "a")
contents = ''.join([i if ord(i) < 128 else '?' for i in contents])
f.write(contents)
f.close()
append_file(full_path, contents)
class AsmVariable(AsmElement):
def __init__(self, location, name, comment, type, init):
@ -1009,6 +1020,7 @@ if __name__ == "__main__":
parser.add_argument("--stats", help="Print symbol stats", action="store_true")
parser.add_argument("--nowarn", help="Do not write warnings file", action="store_true")
parser.add_argument("--noemit", help="Do not emit doxygen files (for testing)", action="store_true")
parser.add_argument("--debug", help="Show hashes of files (for testing)", action="store_true")
args = parser.parse_args()
doxygen_src_path = args.o if args.o else 'docs/doxygen'
clean_generated_stuff = args.clean
@ -1016,13 +1028,13 @@ if __name__ == "__main__":
print_stats = args.stats
enable_warnings = not args.nowarn
noemit = args.noemit
debug_mode = args.debug
# Variables, functions, labels, macros, structure types
elements = []
created_files = []
kernel_files = []
output_files = {} # If --debug then all the files are written here
# Load remembered list of symbols
if os.path.isfile('asmxygen.elements.pickle'):
@ -1092,3 +1104,18 @@ if __name__ == "__main__":
if enable_warnings:
open('asmxygen.txt', "w", encoding = "utf-8").write(warnings)
if debug_mode:
hash_per_file = ""
for file in output_files:
h = hashlib.sha1(bytes(output_files[file], "ascii")).hexdigest()
hash_per_file += f"{file}: {h}\n"
if not os.path.exists("asmxygen_hash_per_file.txt"):
open("asmxygen_hash_per_file.txt", "w").write(hash_per_file)
print("NEW")
else:
reference_hash_per_file = open("asmxygen_hash_per_file.txt").read()
if reference_hash_per_file != hash_per_file:
print(''.join(difflib.ndiff(reference_hash_per_file, hash_per_file)))
else:
print("SUCCESS")