mirror of
https://github.com/GNOME/libxml2.git
synced 2025-02-23 18:29:14 +08:00
* 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
108 lines
4.3 KiB
Python
Executable File
108 lines
4.3 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,"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 */")
|