VirtualBox

source: vbox/trunk/src/libs/libxml2-2.9.14/build_glob.py@ 103314

最後變更 在這個檔案從103314是 95312,由 vboxsync 提交於 2 年 前

libs/{curl,libxml2}: OSE export fixes, bugref:8515

  • 屬性 svn:eol-style 設為 native
  • 屬性 svn:executable 設為 *
檔案大小: 5.1 KB
 
1#! /usr/bin/env python
2###
3#
4# build_glob.py : Build the global_functions.h and global_functions.c
5# files which are required to implement the user
6# interface to global variables now that thread specific
7# data (TSD) is used to emulate global state.
8#
9# See Copyright for the status of this software.
10# [email protected]
11###
12import os, string
13
14class globvar:
15 def __init__(self, type, name):
16 self.type=type
17 self.name=name
18
19def striplinesep(line):
20 while line and line[-1] in ('\r','\n'):
21 line = line[:-1]
22 return line
23
24def writeline(file, line=None):
25 if line:
26 file.write(line)
27 file.write("\n")
28
29if __name__ == "__main__":
30 globals={}
31 global_data=open("global.data").readlines()
32 global_code=open("globals.c").readlines()
33 global_hdr=open("include/libxml/globals.h").readlines()
34 global_functions_hdr=open("include/libxml/globals.h", "w+")
35 global_functions_impl=open("globals.c", "w+")
36
37 #
38 # Rebuild the beginning of the file up to the
39 # Automatically generated string
40 #
41 for line in global_hdr:
42 line = striplinesep(line)
43 if line == " * Automatically generated by build_glob.py.":
44 break
45 writeline(global_functions_hdr, line)
46
47 writeline(global_functions_hdr, " * Automatically generated by build_glob.py.")
48 writeline(global_functions_hdr, " * Do not modify the previous line.")
49 writeline(global_functions_hdr, " */")
50 writeline(global_functions_hdr)
51
52 for line in global_code:
53 line = striplinesep(line)
54 if line == " * Automatically generated by build_glob.py.":
55 break
56 writeline(global_functions_impl, line)
57
58 writeline(global_functions_impl, " * Automatically generated by build_glob.py.")
59 writeline(global_functions_impl, " * Do not modify the previous line.")
60 writeline(global_functions_impl, " */")
61 writeline(global_functions_impl)
62
63 # Now process the data and write it to the appropriate output file
64 for line in global_data:
65 if line[0]=='#':
66 continue
67 line = striplinesep(line)
68 fields = string.split(line, ",")
69 # Update the header file
70 writeline(global_functions_hdr)
71 global_functions_hdr.write("extern "+fields[0]+" *")
72 if fields[2]:
73 global_functions_hdr.write("(*")
74 global_functions_hdr.write("__"+fields[1]+"(void)")
75 if fields[2]:
76 global_functions_hdr.write(")"+fields[2])
77 writeline(global_functions_hdr,";")
78 writeline(global_functions_hdr, "#ifdef LIBXML_THREAD_ENABLED")
79 writeline(global_functions_hdr,"#define "+fields[1]+" \\")
80 writeline(global_functions_hdr,"(*(__"+fields[1]+"()))")
81 writeline(global_functions_hdr,"#else")
82 if fields[2]:
83 writeline(global_functions_hdr,"LIBXML_DLL_IMPORT extern "+fields[0]+" "+fields[1]+fields[2]+";")
84 else:
85 writeline(global_functions_hdr,"LIBXML_DLL_IMPORT extern "+fields[0]+" "+fields[1]+";")
86 writeline(global_functions_hdr,"#endif")
87 # set/get for per-thread global defaults
88 if fields[3]:
89 writeline(global_functions_hdr,fields[0]+" "+fields[1][:3]+"ThrDef"+fields[1][3:]+"("+fields[0]+" v);")
90 # Update the implementation file
91 writeline(global_functions_impl)
92# writeline(global_functions_impl, "extern "+fields[0]+" "+fields[1]+";")
93 writeline(global_functions_impl, "#undef\t"+fields[1])
94 writeline(global_functions_impl, fields[0]+" *")
95 if fields[2]:
96 global_functions_impl.write("(*")
97 global_functions_impl.write("__"+fields[1]+"(void)")
98 if fields[2]:
99 writeline(global_functions_impl, ")[]")
100 writeline(global_functions_impl, " {")
101 writeline(global_functions_impl, " if (IS_MAIN_THREAD)")
102 writeline(global_functions_impl, "\treturn (&"+fields[1]+");")
103 writeline(global_functions_impl, " else")
104 writeline(global_functions_impl, "\treturn (&xmlGetGlobalState()->"+fields[1]+");")
105 writeline(global_functions_impl, "}")
106 # set/get for per-thread global defaults
107 if fields[3]:
108 writeline(global_functions_impl,fields[0]+" "+fields[1][:3]+"ThrDef"+fields[1][3:]+"("+fields[0]+" v) {")
109 writeline(global_functions_impl," "+fields[0]+" ret;");
110 writeline(global_functions_impl," xmlMutexLock(xmlThrDefMutex);")
111 writeline(global_functions_impl," ret = "+fields[1][:3]+fields[1][3:]+"ThrDef;")
112 writeline(global_functions_impl," "+fields[1][:3]+fields[1][3:]+"ThrDef = v;")
113 writeline(global_functions_impl," xmlMutexUnlock(xmlThrDefMutex);")
114 writeline(global_functions_impl," return ret;")
115 writeline(global_functions_impl,"}")
116 # Terminate the header file with appropriate boilerplate
117 writeline(global_functions_hdr)
118 writeline(global_functions_hdr, "#ifdef __cplusplus")
119 writeline(global_functions_hdr, "}")
120 writeline(global_functions_hdr, "#endif")
121 writeline(global_functions_hdr)
122 writeline(global_functions_hdr, "#endif /* __XML_GLOBALS_H */")
注意: 瀏覽 TracBrowser 來幫助您使用儲存庫瀏覽器

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette