Axe automated header generation.

Reasoning:
 - implementation was unsound -- broke down when I added a fairly
   basic macro definition expanding to a struct initializer in a *.c
   file.

 - made it way too easy (e.g. via otherwise totally innocuous git
   commands) to end up with timestamps such that it always ran
   MakeHeader.py but never used its output, leading to overbuild noise
   when running what should be a null 'make'.

 - but mostly: it's just an awkward way of dealing with C code.
This commit is contained in:
Zev Weiss
2019-12-21 01:09:25 -08:00
parent 7734dfe55d
commit a1a027b9bd
153 changed files with 2 additions and 2040 deletions

View File

@ -1,104 +0,0 @@
#!/usr/bin/env @PYTHON@
import os, sys, io
try:
from StringIO import StringIO
except ImportError:
StringIO = io.StringIO
ANY=1
COPY=2
SKIP=3
SKIPONE=4
state = ANY
static = 0
file = io.open(sys.argv[1], "r", encoding="utf-8")
name = sys.argv[1][:-2]
out = StringIO()
selfheader = '#include "' + name + '.h"'
out.write( "/* Do not edit this file. It was automatically generated. */\n" )
out.write( "\n" )
out.write( "#ifndef HEADER_" + os.path.basename(name) + "\n")
out.write( "#define HEADER_" + os.path.basename(name) + "\n")
is_blank = False
for line in file.readlines():
line = line[:-1]
if state == ANY:
if line == '/*{':
state = COPY
elif line == selfheader:
pass
elif line.find("#include") == 0:
pass
elif line.find("htop - ") == 0 and line[-2:] == ".c":
out.write(line[:-2] + ".h\n")
elif line.find("static ") != -1:
if line[-1] == "{":
state = SKIP
static = 1
else:
state = SKIPONE
elif len(line) > 1:
static = 0
equals = line.find(" = ")
if line[-3:] == "= {":
out.write( "extern " + line[:-4] + ";\n" )
state = SKIP
elif equals != -1:
out.write("extern " + line[:equals] + ";\n" )
elif line.startswith("typedef struct"):
state = SKIP
elif line[-1] == "{":
out.write("extern " + line[:-2].replace("inline ", "") + ";\n")
state = SKIP
elif line[-1] == ";":
out.write("extern " + line + "\n")
else:
out.write( line + "\n")
is_blank = False
elif line == "":
if not is_blank:
out.write( line + "\n")
is_blank = True
else:
out.write( line + "\n")
is_blank = False
elif state == COPY:
is_blank = False
if line == "}*/":
state = ANY
else:
out.write( line + "\n")
elif state == SKIP:
is_blank = False
if len(line) >= 1 and line[0] == "}":
if static == 1:
state = SKIPONE
else:
state = ANY
static = 0
elif state == SKIPONE:
is_blank = False
state = ANY
out.write( "\n" )
out.write( "#endif\n" )
# only write a new .h file if something changed.
# This prevents a lot of recompilation during development
out.seek(0)
try:
with io.open(name + ".h", "r", encoding="utf-8") as orig:
origcontents = orig.readlines()
except:
origcontents = ""
if origcontents != out.readlines():
with io.open(name + ".h", "w", encoding="utf-8") as new:
print("Writing "+name+".h")
new.write(out.getvalue())
out.close()