mirror of
https://gitlab.gnome.org/GNOME/libxml2.git
synced 2025-08-01 10:06:59 +03:00
started integrating the core of the thread support not activated yet but
* Makefile.am include/libxml/Makefile.am include/libxml/globals.h globals.c include/libxml/threads.h threads.c build_glob.py global.data xmlcatalog.c acconfig.h configure.in: started integrating the core of the thread support not activated yet but half integrated. The code should still compile and work anyway. Daniel
This commit is contained in:
107
build_glob.py
Executable file
107
build_glob.py
Executable file
@ -0,0 +1,107 @@
|
||||
#! /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,"extern "+fields[0]+" "+fields[1]+fields[2]+";")
|
||||
else:
|
||||
writeline(global_functions_hdr,"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 (&get_glob_struct()->"+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 */")
|
Reference in New Issue
Block a user