mirror of
https://gitlab.gnome.org/GNOME/libxml2.git
synced 2025-01-26 10:03:34 +03:00
eca472effe
This script generated parts of globals.c. Some adjustments are still needed to make it usable again.
123 lines
5.1 KiB
Python
Executable File
123 lines
5.1 KiB
Python
Executable File
#! /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("XMLPUBFUN "+fields[0]+" * XMLCALL ")
|
|
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,"XMLPUBVAR "+fields[0]+" "+fields[1]+fields[2]+";")
|
|
else:
|
|
writeline(global_functions_hdr,"XMLPUBVAR "+fields[0]+" "+fields[1]+";")
|
|
writeline(global_functions_hdr,"#endif")
|
|
# set/get for per-thread global defaults
|
|
if fields[3]:
|
|
writeline(global_functions_hdr,"XMLPUBFUN "+fields[0]+" XMLCALL "+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 */")
|