'Extract a bdist_wininst to the directories an egg would use'

def exe_to_egg(self, dist_filename, egg_tmp):

    prefixes = get_exe_prefixes(dist_filename)
    to_compile = []
    native_libs = []
    top_level = {}
    def process(src, dst):
        s = src.lower()
        for (old, new) in prefixes:
            if s.startswith(old):
                src = (new + src[len(old):])
                parts = src.split('/')
                dst = os.path.join(egg_tmp, *parts)
                dl = dst.lower()
                if (dl.endswith('.pyd') or dl.endswith('.dll')):
                    parts[(-1)] = bdist_egg.strip_module(parts[(-1)])
                    top_level[os.path.splitext(parts[0])[0]] = 1
                    native_libs.append(src)
                elif (dl.endswith('.py') and (old != 'SCRIPTS/')):
                    top_level[os.path.splitext(parts[0])[0]] = 1
                    to_compile.append(dst)
                return dst
        if (not src.endswith('.pth')):
            log.warn("WARNING:    can't    process    %s", src)
        return None
    unpack_archive(dist_filename, egg_tmp, process)
    stubs = []
    for res in native_libs:
        if res.lower().endswith('.pyd'):
            parts = res.split('/')
            resource = parts[(-1)]
            parts[(-1)] = (bdist_egg.strip_module(parts[(-1)]) + '.py')
            pyfile = os.path.join(egg_tmp, *parts)
            to_compile.append(pyfile)
            stubs.append(pyfile)
            bdist_egg.write_stub(resource, pyfile)
    self.byte_compile(to_compile)
    bdist_egg.write_safety_flag(os.path.join(egg_tmp, 'EGG-INFO'), bdist_egg.analyze_egg(egg_tmp, stubs))
    for name in ('top_level', 'native_libs'):
        if locals()[name]:
            txt = os.path.join(egg_tmp, 'EGG-INFO', (name + '.txt'))
            if (not os.path.exists(txt)):
                f = open(txt, 'w')
                f.write(('\n'.join(locals()[name]) + '\n'))
                f.close()
