From 0aa4853e41e5fee8e1fd4de3e1f108e56da09f95 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Wed, 22 Jul 2026 11:57:02 +0200 Subject: [PATCH 1/2] dlopen-notes: allow multi values for --rpm-fileattr= In actual use under rpm, the program will need to be called for each attribute type separately, because this is what the rpm fileattr protocol requires. But for debugging, it's very convenient to generate all deps at the same time, e.g. with echo build/some-binary | dlopen-notes --rpm-fileattr={Recommends,Requires,Suggests} Allow this, but don't advertise it in help. --- dlopen-notes.py | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/dlopen-notes.py b/dlopen-notes.py index 27d55f6..d8d242c 100755 --- a/dlopen-notes.py +++ b/dlopen-notes.py @@ -199,7 +199,7 @@ def rpm_fileattr_generator(args): fileattr = Priority[level].rpm_name() - if fileattr != args.rpm_fileattr: + if fileattr not in args.rpm_fileattr: continue if first: @@ -276,7 +276,10 @@ def make_parser(): ) p.add_argument( '--rpm-fileattr', + type=lambda s: s.split(','), + action='extend', metavar='TYPE', + default=[], help='Run as rpm fileattr generator for TYPE dependencies', ) p.add_argument( @@ -314,11 +317,11 @@ def parse_args(): and args.features is None and args.rpm_requires is None and args.rpm_recommends is None - and args.rpm_fileattr is None): + and not args.rpm_fileattr): # Make --raw the default if no action is specified. args.raw = True - if args.rpm_fileattr is not None: + if args.rpm_fileattr: if (args.filenames or args.raw or args.features is not None @@ -326,7 +329,7 @@ def parse_args(): or args.rpm_recommends): raise ValueError('--rpm-generate cannot be combined with most options') - if args.rpm_fileattr is None and not args.filenames: + if not args.rpm_fileattr and not args.filenames: raise ValueError('At least one positional FILENAME parameter is required') return args @@ -334,7 +337,7 @@ def parse_args(): if __name__ == '__main__': args = parse_args() - if args.rpm_fileattr is not None: + if args.rpm_fileattr: sys.exit(rpm_fileattr_generator(args)) elffiles = [ELFFileReader(filename) for filename in args.filenames] From 48bc3da3bf320bfaa8098b49378436dafdb6a091 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Wed, 22 Jul 2026 12:02:28 +0200 Subject: [PATCH 2/2] dlopen-notes: verify the --rpm-fileattr args Previously we'd just not emit anything for unknown types. Let's be nice to the user and check that the arg makes sense. --- dlopen-notes.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/dlopen-notes.py b/dlopen-notes.py index d8d242c..b0fde32 100755 --- a/dlopen-notes.py +++ b/dlopen-notes.py @@ -101,6 +101,10 @@ def rpm_name(self): return 'Requires' raise ValueError + @classmethod + def rpm_names(cls): + return [o.rpm_name() for o in cls] + def group_by_feature(elffiles): features = {} @@ -332,6 +336,10 @@ def parse_args(): if not args.rpm_fileattr and not args.filenames: raise ValueError('At least one positional FILENAME parameter is required') + for attr in args.rpm_fileattr: + if attr not in Priority.rpm_names(): + raise ValueError(f'Bad --rpm-fileattr argument {attr}') + return args if __name__ == '__main__':