mirror of
https://github.com/xzeldon/htop.git
synced 2025-07-12 12:14:36 +03:00
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:
@ -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()
|
Reference in New Issue
Block a user