mirror of
https://gitlab.gnome.org/GNOME/libxml2.git
synced 2024-12-24 21:33:51 +03:00
d046356030
* include/libxml/SAX.h include/libxml/globals.h include/libxml/parser.h include/libxml/parserInternals.h include/libxml/tree.h include/libxml/xmlerror.h HTMLparser.c SAX.c error.c globals.c nanoftp.c nanohttp.c parser.c parserInternals.c testDocbook.c testHTML.c testSAX.c tree.c uri.c xlink.c xmlmemory.c: Applied the last patches from Gary, cleanup, activated threading all user accessible global variables are now handled in globals.[ch] Still a bit rought but make tests passes with either --with-threads defined at configure time or not. * Makefile.am example/Makefile.am: added globals.[ch] and threads linking options Daniel
108 lines
4.4 KiB
Python
Executable File
108 lines
4.4 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 writeline(file, line=None):
|
|
if line:
|
|
file.write(line)
|
|
file.write(os.linesep)
|
|
|
|
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:
|
|
if line[-len(os.linesep):] == os.linesep:
|
|
line = line[:-len(os.linesep)]
|
|
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:
|
|
if line[-len(os.linesep):] == os.linesep:
|
|
line = line[:-len(os.linesep)]
|
|
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
|
|
if line[-len(os.linesep):] == os.linesep:
|
|
line = line[:-len(os.linesep)]
|
|
fields = string.split(line, ",")
|
|
# Update the header file
|
|
writeline(global_functions_hdr)
|
|
writeline(global_functions_hdr, "#ifdef LIBXML_THREAD_ENABLED")
|
|
global_functions_hdr.write("extern "+fields[0]+" *")
|
|
if len(fields) == 3:
|
|
global_functions_hdr.write("(*")
|
|
global_functions_hdr.write("__"+fields[1]+"(void)")
|
|
if len(fields) == 3:
|
|
global_functions_hdr.write(")"+fields[2])
|
|
writeline(global_functions_hdr,";")
|
|
writeline(global_functions_hdr,"#define "+fields[1]+" \\")
|
|
writeline(global_functions_hdr,"(*(__"+fields[1]+"()))")
|
|
writeline(global_functions_hdr,"#else")
|
|
if len(fields) == 3:
|
|
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")
|
|
# 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 len(fields) == 3:
|
|
global_functions_impl.write("(*")
|
|
global_functions_impl.write("__"+fields[1]+"(void)")
|
|
if len(fields) == 3:
|
|
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, "}")
|
|
# 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 */")
|