diff options
author | 2023-09-27 11:26:58 +0900 | |
---|---|---|
committer | 2023-10-05 10:27:43 +0900 | |
commit | 3df5f50e1a8334775cba0e1a40d8d2b28e42ba42 (patch) | |
tree | 036d9668055aac804bdd15c68076757e328d5a06 /scripts/conv_linker_config.py | |
parent | 4cbd49810c41722556ad5154ea920f3e4da72c01 (diff) |
Do not allow a module exists both in provideLibs and requireLibs
There was an issue that a library installed in the system with stub is
manually marked as requireLibs, so it created link to the self (system)
namespace from linkerconfig. This change checks from conv_linker_config
if there is any common module in provideLibs and requireLibs before
write result to output path.
Bug: 298333253
Test: Build failed when the common module is not removed.
Change-Id: I855dfc3484bb6c1fec24d498703c4a2a805913c0
Diffstat (limited to 'scripts/conv_linker_config.py')
-rw-r--r-- | scripts/conv_linker_config.py | 38 |
1 files changed, 30 insertions, 8 deletions
diff --git a/scripts/conv_linker_config.py b/scripts/conv_linker_config.py index c6aa3d0dc..c6e6e306f 100644 --- a/scripts/conv_linker_config.py +++ b/scripts/conv_linker_config.py @@ -62,8 +62,8 @@ def Proto(args): if args.source: for input in args.source.split(':'): pb.MergeFrom(LoadJsonMessage(input)) - with open(args.output, 'wb') as f: - f.write(pb.SerializeToString()) + + ValidateAndWriteAsPbFile(pb, args.output) def Print(args): @@ -90,8 +90,8 @@ def SystemProvide(args): for item in installed_libraries: if item not in getattr(pb, 'provideLibs'): getattr(pb, 'provideLibs').append(item) - with open(args.output, 'wb') as f: - f.write(pb.SerializeToString()) + + ValidateAndWriteAsPbFile(pb, args.output) def Append(args): @@ -106,8 +106,8 @@ def Append(args): else: setattr(pb, args.key, args.value) - with open(args.output, 'wb') as f: - f.write(pb.SerializeToString()) + ValidateAndWriteAsPbFile(pb, args.output) + def Merge(args): @@ -116,8 +116,7 @@ def Merge(args): with open(other, 'rb') as f: pb.MergeFromString(f.read()) - with open(args.out, 'wb') as f: - f.write(pb.SerializeToString()) + ValidateAndWriteAsPbFile(pb, args.output) def Validate(args): @@ -151,6 +150,29 @@ def Validate(args): sys.exit(f'Unknown type: {args.type}') +def ValidateAndWriteAsPbFile(pb, output_path): + ValidateConfiguration(pb) + with open(output_path, 'wb') as f: + f.write(pb.SerializeToString()) + + +def ValidateConfiguration(pb): + """ + Validate if the configuration is valid to be used as linker configuration + """ + + # Validate if provideLibs and requireLibs have common module + provideLibs = set(getattr(pb, 'provideLibs')) + requireLibs = set(getattr(pb, 'requireLibs')) + + intersectLibs = provideLibs.intersection(requireLibs) + + if intersectLibs: + for lib in intersectLibs: + print(f'{lib} exists both in requireLibs and provideLibs', file=sys.stderr) + sys.exit(1) + + def GetArgParser(): parser = argparse.ArgumentParser() subparsers = parser.add_subparsers() |