diff --git a/src/python/jw/pkg/cmds/projects/CmdCreatePkgConfig.py b/src/python/jw/pkg/cmds/projects/CmdCreatePkgConfig.py index fe21bcbd..2dd6e2a5 100644 --- a/src/python/jw/pkg/cmds/projects/CmdCreatePkgConfig.py +++ b/src/python/jw/pkg/cmds/projects/CmdCreatePkgConfig.py @@ -1,15 +1,30 @@ -# -*- coding: utf-8 -*- +from argparse import ArgumentParser, Namespace -import textwrap -from argparse import Namespace, ArgumentParser +from .Cmd import Cmd, Parent +from .lib.templates import tmpl_render -from ..Cmd import Cmd -from ..CmdProjects import CmdProjects -class CmdCreatePkgConfig(Cmd): # export +class CmdCreatePkgConfig(Cmd): # export - def __init__(self, parent: CmdProjects) -> None: - super().__init__(parent, 'create-pkg-config', help='Generate a pkg-config file for a module') + def __init__(self, parent: Parent) -> None: + super().__init__(parent, + 'create-pkg-config', + help='Generate a pkg-config file for a module') + + @staticmethod + def __cleanup_requires(string: str) -> str: + import re + + regexes = [ + (r'^ +', ''), + (r'([ \t]|$)+', ', '), + (r', $', ''), + (r', $', ''), + (r' *,* *([<>=]+) *,* *', r' \1 '), + ] + for patt, replacement in regexes: + string = re.sub(patt, replacement, string) + return string def add_arguments(self, parser: ArgumentParser) -> None: super().add_arguments(parser) @@ -21,38 +36,44 @@ class CmdCreatePkgConfig(Cmd): # export parser.add_argument('-v', '--version', default=None) parser.add_argument('-c', '--cflags', default=None) parser.add_argument('-l', '--libflags', default=None) - parser.add_argument('-r', '--requires_run', default=None) - parser.add_argument('-R', '--requires_build', default=None) + parser.add_argument('-r', '--requires-run', default=None) + parser.add_argument('-R', '--requires-build', default=None) parser.add_argument('-V', '--variables', nargs='*') async def _run(self, args: Namespace) -> None: - project_conf_var_keys = ['description', 'summary', 'requires_run', 'requires_build'] - merged: dict[str, str] = {} + project_conf_var_keys = [ + 'description', + 'summary', + 'requires_run', + 'requires_build', + ] + merged: dict[str, str|None] = {} for key in project_conf_var_keys: val = getattr(args, key) if val is not None and args.project_descr_file: val = self.app.get_value(args.name, key, None) merged[key] = val - contents = textwrap.dedent(f"""\ - prefix={args.prefix} - exec_prefix={{prefix}} - includedir={{prefix}}/include - libdir={{exec_prefix}}/lib - - Name: {args.name} - Description: {merged['summary']} - Version: {args.version} - """) + contents = tmpl_render( + 'pkg-config', + { + 'prefix': args.prefix, + 'name': args.name, + 'description': merged['summary'], + 'version': args.version, + }, + ) if args.cflags is not None: - contents += f"Cflags: {args.cflags}\n" + contents += f'Cflags: {args.cflags}\n' if args.libflags is not None: - contents += f"Libs: {args.libflags}\n" + contents += f'Libs: {args.libflags}\n' if merged['requires_run'] is not None: - contents += f"Requires: {cleanup_requires(merged['requires_run'])}" + contents += f'Requires: {self.__cleanup_requires(merged["requires_run"])}' if merged['requires_build'] is not None: - contents += f"Requires.private: {cleanup_requires(merged['requires_build'])}" + contents += ( + f'Requires.private: {self.__cleanup_requires(merged["requires_build"])}' + ) # not sure what to do with requires_devel print(contents)