Index: third_party/libxml/src/build_glob.py |
diff --git a/third_party/libxml/src/build_glob.py b/third_party/libxml/src/build_glob.py |
new file mode 100755 |
index 0000000000000000000000000000000000000000..8855ec79872a266db2ba28fbc8be42ae9baedfd4 |
--- /dev/null |
+++ b/third_party/libxml/src/build_glob.py |
@@ -0,0 +1,122 @@ |
+#! /usr/bin/env python |
+### |
+# |
+# build_glob.py : Build the global_functions.h and global_functions.c |
+# files which are required to implement the user |
+# interface to global variables now that thread specific |
+# data (TSD) is used to emulate global state. |
+# |
+# See Copyright for the status of this software. |
+# Gary.Pennington@sun.com |
+### |
+import os, string |
+ |
+class globvar: |
+ def __init__(self, type, name): |
+ self.type=type |
+ self.name=name |
+ |
+def striplinesep(line): |
+ while line and line[-1] in ('\r','\n'): |
+ line = line[:-1] |
+ return line |
+ |
+def writeline(file, line=None): |
+ if line: |
+ file.write(line) |
+ file.write("\n") |
+ |
+if __name__ == "__main__": |
+ globals={} |
+ global_data=open("global.data").readlines() |
+ global_code=open("globals.c").readlines() |
+ global_hdr=open("include/libxml/globals.h").readlines() |
+ global_functions_hdr=open("include/libxml/globals.h", "w+") |
+ global_functions_impl=open("globals.c", "w+") |
+ |
+ # |
+ # Rebuild the beginning of the file up to the |
+ # Automatically generated string |
+ # |
+ for line in global_hdr: |
+ line = striplinesep(line) |
+ if line == " * Automatically generated by build_glob.py.": |
+ break |
+ writeline(global_functions_hdr, line) |
+ |
+ writeline(global_functions_hdr, " * Automatically generated by build_glob.py.") |
+ writeline(global_functions_hdr, " * Do not modify the previous line.") |
+ writeline(global_functions_hdr, " */") |
+ writeline(global_functions_hdr) |
+ |
+ for line in global_code: |
+ line = striplinesep(line) |
+ if line == " * Automatically generated by build_glob.py.": |
+ break |
+ writeline(global_functions_impl, line) |
+ |
+ writeline(global_functions_impl, " * Automatically generated by build_glob.py.") |
+ writeline(global_functions_impl, " * Do not modify the previous line.") |
+ writeline(global_functions_impl, " */") |
+ writeline(global_functions_impl) |
+ |
+ # Now process the data and write it to the appropriate output file |
+ for line in global_data: |
+ if line[0]=='#': |
+ continue |
+ line = striplinesep(line) |
+ fields = string.split(line, ",") |
+ # Update the header file |
+ writeline(global_functions_hdr) |
+ global_functions_hdr.write("extern "+fields[0]+" *") |
+ if fields[2]: |
+ global_functions_hdr.write("(*") |
+ global_functions_hdr.write("__"+fields[1]+"(void)") |
+ if fields[2]: |
+ global_functions_hdr.write(")"+fields[2]) |
+ writeline(global_functions_hdr,";") |
+ writeline(global_functions_hdr, "#ifdef LIBXML_THREAD_ENABLED") |
+ writeline(global_functions_hdr,"#define "+fields[1]+" \\") |
+ writeline(global_functions_hdr,"(*(__"+fields[1]+"()))") |
+ writeline(global_functions_hdr,"#else") |
+ if fields[2]: |
+ writeline(global_functions_hdr,"LIBXML_DLL_IMPORT extern "+fields[0]+" "+fields[1]+fields[2]+";") |
+ else: |
+ writeline(global_functions_hdr,"LIBXML_DLL_IMPORT extern "+fields[0]+" "+fields[1]+";") |
+ writeline(global_functions_hdr,"#endif") |
+ # set/get for per-thread global defaults |
+ if fields[3]: |
+ writeline(global_functions_hdr,fields[0]+" "+fields[1][:3]+"ThrDef"+fields[1][3:]+"("+fields[0]+" v);") |
+ # Update the implementation file |
+ writeline(global_functions_impl) |
+# writeline(global_functions_impl, "extern "+fields[0]+" "+fields[1]+";") |
+ writeline(global_functions_impl, "#undef\t"+fields[1]) |
+ writeline(global_functions_impl, fields[0]+" *") |
+ if fields[2]: |
+ global_functions_impl.write("(*") |
+ global_functions_impl.write("__"+fields[1]+"(void)") |
+ if fields[2]: |
+ writeline(global_functions_impl, ")[]") |
+ writeline(global_functions_impl, " {") |
+ writeline(global_functions_impl, " if (IS_MAIN_THREAD)") |
+ writeline(global_functions_impl, "\treturn (&"+fields[1]+");") |
+ writeline(global_functions_impl, " else") |
+ writeline(global_functions_impl, "\treturn (&xmlGetGlobalState()->"+fields[1]+");") |
+ writeline(global_functions_impl, "}") |
+ # set/get for per-thread global defaults |
+ if fields[3]: |
+ writeline(global_functions_impl,fields[0]+" "+fields[1][:3]+"ThrDef"+fields[1][3:]+"("+fields[0]+" v) {") |
+ writeline(global_functions_impl," "+fields[0]+" ret;"); |
+ writeline(global_functions_impl," xmlMutexLock(xmlThrDefMutex);") |
+ writeline(global_functions_impl," ret = "+fields[1][:3]+fields[1][3:]+"ThrDef;") |
+ writeline(global_functions_impl," "+fields[1][:3]+fields[1][3:]+"ThrDef = v;") |
+ writeline(global_functions_impl," xmlMutexUnlock(xmlThrDefMutex);") |
+ writeline(global_functions_impl," return ret;") |
+ writeline(global_functions_impl,"}") |
+ # Terminate the header file with appropriate boilerplate |
+ writeline(global_functions_hdr) |
+ writeline(global_functions_hdr, "#ifdef __cplusplus") |
+ writeline(global_functions_hdr, "}") |
+ writeline(global_functions_hdr, "#endif") |
+ writeline(global_functions_hdr) |
+ writeline(global_functions_hdr, "#endif /* __XML_GLOBALS_H */") |