Пример #1
0
 def __init__(self, path, basedir='', buffer=''):
     Magic.__init__(self, path, basedir)
     fullpath = basedir + path
     self.contents['stripped'] = elf.stripped(fullpath)
     if self.__class__ is ELF:
         # ar doesn't deal with hasDebug or RPATH
         try:
             self.contents['hasDebug'] = elf.hasDebug(fullpath)
         except elf.error:
             pass
         try:
             self.contents['RPATH'] = elf.getRPATH(fullpath)
         except elf.error:
             pass
         try:
             self.contents['Type'] = elf.getType(fullpath)
         except elf.error:
             pass
     try:
         requires, provides = elf.inspect(fullpath)
         # Filter None abi flags
         requires = [
             x for x in requires if x[0] != 'abi' or x[2][0] is not None
         ]
         self.contents['requires'] = requires
         self.contents['provides'] = provides
         for req in requires:
             if req[0] == 'abi':
                 self.contents['abi'] = req[1:]
                 self.contents['isnset'] = req[2][1]
         for prov in provides:
             if prov[0] == 'soname':
                 self.contents['soname'] = prov[1]
     except elf.error:
         pass
Пример #2
0
 def __init__(self, path, basedir='', buffer=''):
     Magic.__init__(self, path, basedir)
     fullpath = basedir+path
     self.contents['stripped'] = elf.stripped(fullpath)
     if self.__class__ is ELF:
         # ar doesn't deal with hasDebug or RPATH
         try:
             self.contents['hasDebug'] = elf.hasDebug(fullpath)
         except elf.error: pass
         try:
             self.contents['RPATH'] = elf.getRPATH(fullpath)
         except elf.error: pass
         try:
             self.contents['Type'] = elf.getType(fullpath)
         except elf.error: pass
     try:
         requires, provides = elf.inspect(fullpath)
         # Filter None abi flags
         requires = [ x for x in requires
                      if x[0] != 'abi' or x[2][0] is not None ]
         self.contents['requires'] = requires
         self.contents['provides'] = provides
         for req in requires:
             if req[0] == 'abi':
                 self.contents['abi'] = req[1:]
                 self.contents['isnset'] = req[2][1]
         for prov in provides:
             if prov[0] == 'soname':
                 self.contents['soname'] = prov[1]
     except elf.error: pass
Пример #3
0
def rpmExpandMacro(val):
    if getattr(rpm, '_rpm', ''):
        rawRpmModulePath = rpm._rpm.__file__
    else:
        rawRpmModulePath = rpm.__file__
    sonames = [ x[1] for x in elf.inspect(rawRpmModulePath)[0]
                    if x[0] == 'soname']
    rpmLibs = [ x for x in sonames if re.match('librpm[-\.].*so', x) ]
    assert(len(rpmLibs) == 1)
    librpm = ctypes.CDLL(rpmLibs[0])
    librpm.expandMacros.argtypes = (c_void_p, c_void_p, c_void_p, c_long)
    librpm.expandMacros.restype = c_int

    buf = ctypes.create_string_buffer(val, len(val) * 100)
    rc = librpm.expandMacros(None, None, buf, len(buf))
    if rc != 0:
        raise RuntimeError("failed to expand RPM macro %r" % (val,))
    return buf.value
Пример #4
0
def rpmExpandMacro(val):
    if getattr(rpm, '_rpm', ''):
        rawRpmModulePath = rpm._rpm.__file__
    else:
        rawRpmModulePath = rpm.__file__
    sonames = [
        x[1] for x in elf.inspect(rawRpmModulePath)[0] if x[0] == 'soname'
    ]
    rpmLibs = [x for x in sonames if re.match('librpm[-\.].*so', x)]
    assert (len(rpmLibs) == 1)
    librpm = ctypes.CDLL(rpmLibs[0])
    librpm.expandMacros.argtypes = (c_void_p, c_void_p, c_void_p, c_long)
    librpm.expandMacros.restype = c_int

    buf = ctypes.create_string_buffer(val, len(val) * 100)
    rc = librpm.expandMacros(None, None, buf, len(buf))
    if rc != 0:
        raise RuntimeError("failed to expand RPM macro %r" % (val, ))
    return buf.value