summaryrefslogtreecommitdiffstats
path: root/scripts/MakeHeader.py.in
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/MakeHeader.py.in')
-rwxr-xr-xscripts/MakeHeader.py.in104
1 files changed, 104 insertions, 0 deletions
diff --git a/scripts/MakeHeader.py.in b/scripts/MakeHeader.py.in
new file mode 100755
index 00000000..9da6685a
--- /dev/null
+++ b/scripts/MakeHeader.py.in
@@ -0,0 +1,104 @@
+#!/usr/bin/env @PYTHON@
+import os, sys, string, 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()