aboutsummaryrefslogtreecommitdiffhomepage
path: root/internalize_scripts.py
diff options
context:
space:
mode:
authorGravatar ridiculousfish <corydoras@ridiculousfish.com>2012-01-02 17:02:30 -0800
committerGravatar ridiculousfish <corydoras@ridiculousfish.com>2012-01-02 17:02:30 -0800
commit6abf3db13ef2f2cce5a238e40c497a56d5e9b7a9 (patch)
tree9a57839f6f5ab91b8c9552e484c31a4fb06118b8 /internalize_scripts.py
parent99000e68b71468ce2c10674cc4cad5e0ce244167 (diff)
Added internalize_scripts.py in preparation for ending reliance on "standard" scripts in /usr/local/share
Diffstat (limited to 'internalize_scripts.py')
-rwxr-xr-xinternalize_scripts.py92
1 files changed, 92 insertions, 0 deletions
diff --git a/internalize_scripts.py b/internalize_scripts.py
new file mode 100755
index 00000000..8b447aa0
--- /dev/null
+++ b/internalize_scripts.py
@@ -0,0 +1,92 @@
+#!/usr/bin/python
+
+import string, sys, os.path
+
+escapes = {}
+escapes['\a'] = r'\a'
+escapes['\b'] = r'\b'
+escapes['\f'] = r'\f'
+escapes['\n'] = r'\n'
+escapes['\r'] = r'\r'
+#escapes['\t'] = r'\t'
+# Let's replace tabs with four spaces
+# so the text looks nicely indented in the C source
+escapes['\t'] = r' '
+escapes['\v'] = r'\v'
+# escapes['\''] = r'\''
+escapes['\"'] = r'\"'
+escapes['\\'] = r'\\'
+
+def escape(c):
+ if c in escapes:
+ return escapes[c]
+ elif c not in string.printable:
+ return "\\x%x" % ord(c)
+ else:
+ return c
+
+def stringize(line):
+ newline = '"'
+ for c in line:
+ newline += escape(c)
+ newline += '"'
+ return newline
+
+class cfunc:
+ def __init__(self, name, lines):
+ self.name = name
+ self.lines = lines
+
+ def cdef(self):
+ result = ""
+ result += "static const char * const %s = \n\t" % self.cfunc_name()
+ result += '\n\t'.join(self.lines)
+ result += ';\n'
+ return result
+
+ def cfunc_name(self):
+ munged_name = string.replace(self.name, '-', '_')
+ return "function_%s" % munged_name
+
+funcs = []
+for file in sys.argv[1:]:
+ fd = open(file, 'r')
+ newlines = []
+ for line in fd:
+ newlines.append(stringize(line))
+ fd.close()
+ name = os.path.basename(file)
+ name, ext = os.path.splitext(name)
+ funcs.append(cfunc(name, newlines))
+
+# Sort our functions by name
+funcs.sort(key=cfunc.cfunc_name)
+
+# Output our header
+fd = open('builtin_scripts.h', 'w')
+fd.write('/* This file is generated by internalize_scripts.py */\n\n')
+fd.write("""struct builtin_script_t {
+ const char *name;
+ const char *def;
+};""")
+
+fd.write('\n')
+fd.write('\n')
+fd.write('extern const struct builtin_script_t builtin_scripts[%d];\n' % len(funcs))
+fd.write('\n')
+fd.close()
+
+# Output the function definitions
+fd = open('builtin_scripts.cpp', 'w')
+fd.write('/* This file is generated by internalize_scripts.py */\n\n')
+fd.write('#include "builtin_scripts.h"\n\n')
+for func in funcs:
+ fd.write(func.cdef())
+ fd.write('\n')
+
+# Output the refs
+func_refs = ["{%s, %s}" % (stringize(func.name), func.cfunc_name()) for func in funcs]
+fd.write('const struct builtin_script_t builtin_scripts[%d] =\n' % len(funcs))
+fd.write('{\n\t')
+fd.write(',\n\t'.join(func_refs))
+fd.write('\n};\n')