2026-05-27 18:28:10 +02:00
|
|
|
from argparse import ArgumentParser, Namespace
|
2025-11-16 17:31:16 +01:00
|
|
|
|
2026-05-27 18:28:10 +02:00
|
|
|
from .Cmd import Cmd, Parent
|
|
|
|
|
from .lib.templates import tmpl_render
|
2025-11-16 17:31:16 +01:00
|
|
|
|
|
|
|
|
|
2026-05-27 18:28:10 +02:00
|
|
|
class CmdCreatePkgConfig(Cmd): # export
|
2025-11-16 17:31:16 +01:00
|
|
|
|
2026-05-27 18:28:10 +02:00
|
|
|
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
|
2025-11-16 17:31:16 +01:00
|
|
|
|
|
|
|
|
def add_arguments(self, parser: ArgumentParser) -> None:
|
|
|
|
|
super().add_arguments(parser)
|
|
|
|
|
parser.add_argument('-F', '--project-descr-file', default=None)
|
|
|
|
|
parser.add_argument('-d', '--description', default=None)
|
|
|
|
|
parser.add_argument('-n', '--name', default=None)
|
|
|
|
|
parser.add_argument('-s', '--summary', default=None)
|
|
|
|
|
parser.add_argument('-p', '--prefix', default=None)
|
|
|
|
|
parser.add_argument('-v', '--version', default=None)
|
|
|
|
|
parser.add_argument('-c', '--cflags', default=None)
|
|
|
|
|
parser.add_argument('-l', '--libflags', default=None)
|
2026-05-27 18:28:10 +02:00
|
|
|
parser.add_argument('-r', '--requires-run', default=None)
|
|
|
|
|
parser.add_argument('-R', '--requires-build', default=None)
|
2025-11-16 17:31:16 +01:00
|
|
|
parser.add_argument('-V', '--variables', nargs='*')
|
|
|
|
|
|
2026-01-27 14:31:25 +01:00
|
|
|
async def _run(self, args: Namespace) -> None:
|
2026-05-27 18:28:10 +02:00
|
|
|
project_conf_var_keys = [
|
|
|
|
|
'description',
|
|
|
|
|
'summary',
|
|
|
|
|
'requires_run',
|
|
|
|
|
'requires_build',
|
|
|
|
|
]
|
|
|
|
|
merged: dict[str, str|None] = {}
|
2025-11-16 17:31:16 +01:00
|
|
|
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
|
|
|
|
|
|
2026-05-27 18:28:10 +02:00
|
|
|
contents = tmpl_render(
|
|
|
|
|
'pkg-config',
|
|
|
|
|
{
|
|
|
|
|
'prefix': args.prefix,
|
|
|
|
|
'name': args.name,
|
|
|
|
|
'description': merged['summary'],
|
|
|
|
|
'version': args.version,
|
|
|
|
|
},
|
|
|
|
|
)
|
2025-11-16 17:31:16 +01:00
|
|
|
|
|
|
|
|
if args.cflags is not None:
|
2026-05-27 18:28:10 +02:00
|
|
|
contents += f'Cflags: {args.cflags}\n'
|
2025-11-16 17:31:16 +01:00
|
|
|
if args.libflags is not None:
|
2026-05-27 18:28:10 +02:00
|
|
|
contents += f'Libs: {args.libflags}\n'
|
2025-11-16 17:31:16 +01:00
|
|
|
if merged['requires_run'] is not None:
|
2026-05-27 18:28:10 +02:00
|
|
|
contents += f'Requires: {self.__cleanup_requires(merged["requires_run"])}'
|
2025-11-16 17:31:16 +01:00
|
|
|
if merged['requires_build'] is not None:
|
2026-05-27 18:28:10 +02:00
|
|
|
contents += (
|
|
|
|
|
f'Requires.private: {self.__cleanup_requires(merged["requires_build"])}'
|
|
|
|
|
)
|
2025-11-16 17:31:16 +01:00
|
|
|
# not sure what to do with requires_devel
|
|
|
|
|
|
|
|
|
|
print(contents)
|