OLD | NEW |
1 #! /usr/bin/python | 1 #! /usr/bin/python |
2 # -*- coding: utf-8 -*- | 2 # -*- coding: utf-8 -*- |
3 # | 3 # |
4 # Copyright (C) 2011-2014, International Business Machines | 4 # Copyright (C) 2011-2015, International Business Machines |
5 # Corporation and others. All Rights Reserved. | 5 # Corporation and others. All Rights Reserved. |
6 # | 6 # |
7 # file name: depstest.py | 7 # file name: depstest.py |
8 # | 8 # |
9 # created on: 2011may24 | 9 # created on: 2011may24 |
10 | 10 |
11 """ICU dependency tester. | 11 """ICU dependency tester. |
12 | 12 |
13 This probably works only on Linux. | 13 This probably works only on Linux. |
14 | 14 |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
53 stdout=subprocess.PIPE).communicate()[0] | 53 stdout=subprocess.PIPE).communicate()[0] |
54 obj_imports = set() | 54 obj_imports = set() |
55 obj_exports = set() | 55 obj_exports = set() |
56 for line in nm_result.splitlines(): | 56 for line in nm_result.splitlines(): |
57 fields = line.split("|") | 57 fields = line.split("|") |
58 if len(fields) == 1: continue | 58 if len(fields) == 1: continue |
59 name = fields[0].strip() | 59 name = fields[0].strip() |
60 # Ignore symbols like '__cxa_pure_virtual', | 60 # Ignore symbols like '__cxa_pure_virtual', |
61 # 'vtable for __cxxabiv1::__si_class_type_info' or | 61 # 'vtable for __cxxabiv1::__si_class_type_info' or |
62 # 'DW.ref.__gxx_personality_v0'. | 62 # 'DW.ref.__gxx_personality_v0'. |
63 if name.startswith("__cxa") or "__cxxabi" in name or "__gxx" in name: | 63 # '__dso_handle' belongs to __cxa_atexit(). |
| 64 if (name.startswith("__cxa") or "__cxxabi" in name or "__gxx" in name or |
| 65 name == "__dso_handle"): |
64 _ignored_symbols.add(name) | 66 _ignored_symbols.add(name) |
65 continue | 67 continue |
66 type = fields[2].strip() | 68 type = fields[2].strip() |
67 if type == "U": | 69 if type == "U": |
68 obj_imports.add(name) | 70 obj_imports.add(name) |
69 else: | 71 else: |
70 obj_exports.add(name) | 72 obj_exports.add(name) |
71 _symbols_to_files[name] = lib_obj_name | 73 _symbols_to_files[name] = lib_obj_name |
72 # Is this a vtable? E.g., "vtable for icu_49::ByteSink". | 74 # Is this a vtable? E.g., "vtable for icu_49::ByteSink". |
73 if name.startswith("vtable for icu"): | 75 if name.startswith("vtable for icu"): |
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
187 if _ignored_symbols: | 189 if _ignored_symbols: |
188 print "Info: ignored symbols:\n%s" % sorted(_ignored_symbols) | 190 print "Info: ignored symbols:\n%s" % sorted(_ignored_symbols) |
189 if not _return_value: | 191 if not _return_value: |
190 print "OK: Specified and actual dependencies match." | 192 print "OK: Specified and actual dependencies match." |
191 else: | 193 else: |
192 print "Error: There were errors, please fix them and re-run. Processing may
have terminated abnormally." | 194 print "Error: There were errors, please fix them and re-run. Processing may
have terminated abnormally." |
193 return _return_value | 195 return _return_value |
194 | 196 |
195 if __name__ == "__main__": | 197 if __name__ == "__main__": |
196 sys.exit(main()) | 198 sys.exit(main()) |
OLD | NEW |