softlink_libs.py 文件源码

python
阅读 34 收藏 0 点赞 0 评论 0

项目:SoCFoundationFlow 作者: mattaw 项目源码 文件源码
def run(self):
        bld = self.generator.bld
        linked=[]
        target_paths = []
        for g in bld.groups:
            for tgen in g:
                # FIXME it might be better to check if there is a link_task (getattr?)
                target_paths += [tgen.path.get_bld().bldpath()]
                linked += [t.outputs[0].bldpath()
                    for t in getattr(tgen, 'tasks', [])
                    if t.__class__.__name__ in
                    ['cprogram', 'cshlib', 'cxxprogram', 'cxxshlib']]
        lib_list = []
        if len(linked):
            cmd = [self.env.LDD] + linked
            # FIXME add DYLD_LIBRARY_PATH+PATH for osx+win32
            ldd_env = {'LD_LIBRARY_PATH': ':'.join(target_paths + self.env.LIBPATH)}
            # FIXME the with syntax will not work in python 2
            with tmpfile() as result:
                self.exec_command(cmd, env=ldd_env, stdout=result)
                result.seek(0)
                for line in result.readlines():
                    words = line.split()
                    if len(words) < 3 or words[1] != '=>': continue
                    lib = words[2]
                    if lib == 'not': continue
                    if any([lib.startswith(p) for p in
                            [bld.bldnode.abspath(), '('] +
                            self.env.SOFTLINK_EXCLUDE]):
                        continue
                    if not isabs(lib):
                        continue
                    lib_list.append(lib)
            lib_list = sorted(set(lib_list))
        self.outputs[0].write(linesep.join(lib_list + self.env.DYNAMIC_LIBS))
        return 0
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号