def __init__(self, files, exported_symbols_file, gccxml_config=None, optimize_queries=True, encoding='ascii'): """ :param files: list of files, declarations from them you want to export :type files: list of strings or :class:`parser.file_configuration_t` instances """ module_builder.module_builder_t.__init__(self, global_ns=None, encoding=encoding) self.global_ns = self.__parse_declarations(files, gccxml_config) self.global_ns.decls( recursive=True, allow_empty=True )._code_generator = decl_wrappers.CODE_GENERATOR_TYPES.CTYPES self.__blob2decl = binary_parsers.merge_information( self.global_ns, exported_symbols_file) self.__apply_defaults() self.__code_creator = None if optimize_queries: self.run_query_optimizer() self.__treat_char_ptr_as_binary_data = None self.__module_code_head = [] self.__module_code_tail = []
def __init__( self , files , exported_symbols_file , gccxml_config=None , optimize_queries=True , encoding='ascii' ): """ :param files: list of files, declarations from them you want to export :type files: list of strings or :class:`parser.file_configuration_t` instances """ module_builder.module_builder_t.__init__( self, global_ns=None, encoding=encoding ) self.global_ns = self.__parse_declarations( files, gccxml_config ) self.global_ns.decls(recursive=True, allow_empty=True)._code_generator = decl_wrappers.CODE_GENERATOR_TYPES.CTYPES self.__blob2decl = binary_parsers.merge_information( self.global_ns, exported_symbols_file ) self.__apply_defaults() self.__code_creator = None if optimize_queries: self.run_query_optimizer() self.__treat_char_ptr_as_binary_data = None self.__module_code_head = [] self.__module_code_tail = []
def dont_test_print( self ): """primary used for debugging""" symbols, parser = binary_parsers.merge_information( self.global_ns, self.so_file, runs_under_unittest=True ) for f in self.global_ns.calldefs( allow_empty=True, recursive=True ): print binary_parsers.format_decl( f, 'nm' ) for v in self.global_ns.variables( allow_empty=True, recursive=True ): print binary_parsers.format_decl( v, 'nm' )
def test_z_compare_parsers( self ): if 'nt' != os.name: return dsymbols, dparser = binary_parsers.merge_information( self.global_ns, self.dll_file, runs_under_unittest=True ) msymbols, mparser = binary_parsers.merge_information( self.global_ns, self.map_file, runs_under_unittest=True ) self.failUnless( len( dparser.loaded_symbols ) == len( mparser.loaded_symbols ) ) was_error = False for blob, decl in dsymbols.iteritems(): if blob not in msymbols: was_error = True print '\n%s could not be found in .map file' % binary_parsers.undecorate_blob( blob ) #~ self.failUnless( blob in msymbols, binary_parsers.undecorate_blob( blob ) ) else: mdecl = msymbols[ blob ] self.failUnless( mdecl is decl ) self.failUnless( was_error == False )
def dont_test_print(self): """primary used for debugging""" symbols, parser = binary_parsers.merge_information( self.global_ns, self.so_file, runs_under_unittest=True) for f in self.global_ns.calldefs(allow_empty=True, recursive=True): print(binary_parsers.format_decl(f, 'nm')) for v in self.global_ns.variables(allow_empty=True, recursive=True): print(binary_parsers.format_decl(v, 'nm'))
def test_z_compare_parsers(self): if 'nt' != os.name: return dsymbols, dparser = binary_parsers.merge_information( self.global_ns, self.dll_file, runs_under_unittest=True) msymbols, mparser = binary_parsers.merge_information( self.global_ns, self.map_file, runs_under_unittest=True) self.assertTrue( len(dparser.loaded_symbols) == len(mparser.loaded_symbols)) was_error = False for blob, decl in dsymbols.items(): if blob not in msymbols: was_error = True print('\n%s could not be found in .map file' % binary_parsers.undecorate_blob(blob)) # self.assertTrue( blob in msymbols, # binary_parsers.undecorate_blob( blob ) ) else: mdecl = msymbols[blob] self.assertTrue(mdecl is decl) self.assertTrue(was_error is False)
def __tester_impl(self, fname, expected_symbols): symbols, parser = binary_parsers.merge_information( self.global_ns, fname, runs_under_unittest=True) # this doesn't work reliably # self.assertTrue( # len(symbols) == expected_symbols, # "The expected symbols number(%d), # is different from the actual one(%d)" # % ( expected_symbols, len(symbols) ) ) self.assertTrue('identity' in symbols) msg = [] blob_names = set() for blob in parser.loaded_symbols: if isinstance(blob, tuple): blob = blob[0] if 'nt' == os.name: # TODO: find out where undecorate function is exposed on linux undname = binary_parsers.undecorate_blob(blob) if "`" in undname: continue blob_names.add(blob) decl_blob_names = set(symbols.keys()) issuperset = decl_blob_names.issuperset(blob_names) if not issuperset: common = decl_blob_names.intersection(blob_names) decl_blob_names.difference_update(common) blob_names.difference_update(common) if not self.known_issues.issubset(blob_names): blob_names.difference_update(self.known_issues) if sys.version_info[0] == 2 and sys.version_info[1] == 5: if 0 == len(decl_blob_names) and 0 == len(blob_names): return msg.append("decl_blob_names :") for i in decl_blob_names: msg.append('\t==>%s<==' % i) msg.append("blob_names :") for i in blob_names: msg.append('\t==>%s<==' % i) self.fail(os.linesep.join(msg))