#!/usr/bin/env python # # Copyright (C) 2021 The Android Open Source Project # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. """ Generate a set of signature patterns from the modular flags generated by a bootclasspath_fragment that can be used to select a subset of monolithic flags against which the modular flags can be compared. """ import argparse import csv def dict_reader(input): return csv.DictReader(input, delimiter=',', quotechar='|', fieldnames=['signature']) def produce_patterns_from_file(file): with open(file, 'r') as f: return produce_patterns_from_stream(f) def produce_patterns_from_stream(stream): patterns = [] allFlagsReader = dict_reader(stream) for row in allFlagsReader: signature = row['signature'] patterns.append(signature) return patterns def main(args): args_parser = argparse.ArgumentParser(description='Generate a set of signature patterns that select a subset of monolithic hidden API files.') args_parser.add_argument('--flags', help='The stub flags file which contains an entry for every dex member') args_parser.add_argument('--output', help='Generated signature prefixes') args = args_parser.parse_args(args) # Read in all the patterns into a list. patterns = produce_patterns_from_file(args.flags) # Write out all the patterns. with open(args.output, 'w') as outputFile: for pattern in patterns: outputFile.write(pattern) outputFile.write("\n") if __name__ == "__main__": main(sys.argv[1:])