Source code for schrodinger.application.jaguar.check_headers
[docs]def unwrap_lines(lines):
"""
The header files are generated with line wrapping, but here we assume that
only the comment fields (demarked by */ ... /*) are in practice wrapped.
This function then concatenates separate lines belonging to the same comment
into a single line.
"""
lines_unwrap = []
flag = 0
long_line = ""
for line in lines:
if "/*" in line:
if "*/" in line:
# comment line ends in a single line
lines_unwrap.append(format(line))
flag = 0
else:
# comment line continues onto additional lines
flag = 1
long_line = line
else:
if flag == 0:
# assume this is a complete line (no comment to wrap)
lines_unwrap.append(format(line))
else:
# expecting update from wrapped line
long_line = long_line + line
if "*/" in line:
lines_unwrap.append(format(long_line))
long_line = ""
flag = 0
return lines_unwrap
[docs]def strip_lines(lines):
lines_strip = []
for line in lines:
if line:
lines_strip.append(line)
return lines_strip
#-----------------------------------------------------------------------------
[docs]def main():
"""
Check auto-generated header files against reference files
with a .ref subscript
"""
for header in [
"mmjag_keywords.h", "mmjag_default.h", "mmjag_mopac_keywords.h",
"mmjag_mopac_default.h"
]:
print("Checking header: ", header)
# Auto-generated header file
new_header = header
new_file = open(new_header, "r")
# Reference header file
ref_header = header + ".ref"
ref_file = open(ref_header, "r")
new_lines = new_file.readlines()
ref_lines = ref_file.readlines()
print(("%s %d lines.") % (ref_header, len(ref_lines)))
print(("%s %d lines.") % (new_header, len(new_lines)))
print("Unwrapping and removing blank lines...")
# Unwrap wrapped lines
ref_unwrapped = unwrap_lines(ref_lines)
new_unwrapped = unwrap_lines(new_lines)
# Remove blank lines
ref_unwrapped = strip_lines(ref_unwrapped)
new_unwrapped = strip_lines(new_unwrapped)
print(("%s %d lines.") % (ref_header, len(ref_unwrapped)))
print(("%s %d lines.") % (new_header, len(new_unwrapped)))
print("Searching for differences...\n")
for i, new_line in enumerate(new_unwrapped):
try:
ref_line = ref_unwrapped[i]
except IndexError:
print("Headers have different lengths")
raise
if new_line != ref_line:
print(new_line)
print(ref_line)
raise ValueError(
"Headers differ beyond whitespace and wrapping")
print("All checks OK!")