def rename_ext(fpath, interpreter, current_pub_version=None): """Add multiarch triplet, etc. Return new name. This method is invoked for all .so files in public or private directories. """ # current_pub_version - version parsed from dist-packages (True if unversioned) # i.e. if it's not None - it's a public dist-packages directory path, fname = fpath.rsplit('/', 1) if current_pub_version is not None and islink(fpath): # replace symlinks with extensions in dist-packages directory dstfpath = fpath links = set() while islink(dstfpath): links.add(dstfpath) dstfpath = join(path, os.readlink(dstfpath)) if exists(dstfpath) and '.so.' in split(dstfpath)[-1]: # rename .so.$FOO symlinks, remove other ones for lpath in links: log.info('removing symlink: %s', lpath) os.remove(lpath) log.info('renaming %s to %s', dstfpath, fname) os.rename(dstfpath, fpath) if MULTIARCH_DIR_TPL.match(fpath): # ignore /lib/i386-linux-gnu/, /usr/lib/x86_64-kfreebsd-gnu/, etc. return fpath new_fn = interpreter.check_extname(fname, current_pub_version) if new_fn: # TODO: what about symlinks pointing to this file new_fpath = join(path, new_fn) if exists(new_fpath): log.warn('destination file exist, ' 'cannot rename %s to %s', fname, new_fn) else: log.info('renaming %s to %s', fname, new_fn) os.rename(fpath, new_fpath) return new_fpath return fpath
def rename_ext(self, fpath): """Add multiarch triplet, etc. Return new name. This method is invoked for all .so files in public or private directories. """ path, fname = fpath.rsplit('/', 1) if self.current_dir_is_public and islink(fpath): # replace symlinks with extensions in dist-packages directory dstfpath = fpath links = set() while islink(dstfpath): links.add(dstfpath) dstfpath = join(path, os.readlink(dstfpath)) if exists(dstfpath) and '.so.' in split(dstfpath)[-1]: # rename .so.$FOO symlinks, remove other ones for lpath in links: log.info('removing symlink: %s', lpath) os.remove(lpath) log.info('renaming %s to %s', dstfpath, fname) os.rename(dstfpath, fpath) if MULTIARCH_DIR_TPL.match(fpath): # ignore /lib/i386-linux-gnu/, /usr/lib/x86_64-kfreebsd-gnu/, etc. return fpath new_fn = self.interpreter.check_extname(fname, self.current_pub_version) if new_fn: # TODO: what about symlinks pointing to this file new_fpath = join(path, new_fn) if exists(new_fpath): log.warn('destination file exist, ' 'cannot rename %s to %s', fname, new_fn) else: log.info('renaming %s to %s', fname, new_fn) os.rename(fpath, new_fpath) return new_fpath return fpath