| 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 */")
|
|
|