# -*- coding: utf-8 -*- from argparse import Namespace, ArgumentParser from ..Cmd import Cmd class CmdLdflags(Cmd): # export def __init__(self) -> None: super().__init__('ldflags', help='ldflags') def add_arguments(self, parser: ArgumentParser) -> None: super().add_arguments(parser) parser.add_argument('module', nargs='*', help='Modules') parser.add_argument('--exclude', action='append', help='Exclude Modules', default=[]) parser.add_argument('-s', '--add-self', action='store_true', default=False, help='Include libflags of specified modules, too, not only their dependencies') # -L needs to contain more paths than libs linked with -l would require def __get_ldpathflags(self, names: list[str], exclude: list[str] = []) -> str: deps = self.app.get_modules_from_project_txt(names, ['pkg.requires.jw'], 'build', scope = 2, add_self=True, names_only=True) ret = [] for m in deps: if m in exclude: continue libname = self.app.get_libname([m]) if not len(libname): continue path = self.app.find_dir(m, ['/lib']) if not path: continue ret.append('-L' + path) if not ret: return None return(' '.join(ret)) def _run(self, args: Namespace) -> None: deps = self.app.get_modules_from_project_txt(args.module, ['pkg.requires.jw'], 'build', scope = 1, add_self=args.add_self, names_only=True) out = [] for m in reversed(deps): if m in args.exclude: continue libname = self.app.get_libname([m]) if len(libname): out.append('-l' + libname) if not out: return ldpathflags = self.__get_ldpathflags(args.module, args.exclude) if ldpathflags is not None: out.insert(0, ldpathflags) print(' '.join(out))