1 #!/usr/bin/env python3 2 # 3 # Copyright (C) 2016 The Android Open Source Project 4 # 5 # Licensed under the Apache License, Version 2.0 (the "License"); 6 # you may not use this file except in compliance with the License. 7 # You may obtain a copy of the License at 8 # 9 # http://www.apache.org/licenses/LICENSE-2.0 10 # 11 # Unless required by applicable law or agreed to in writing, software 12 # distributed under the License is distributed on an "AS IS" BASIS, 13 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 # See the License for the specific language governing permissions and 15 # limitations under the License. 16 17 18 19 from os import listdir 20 from os.path import isfile, join as path_join 21 from subprocess import call 22 import argparse 23 24 def main(): 25 """this python program tries to build all hardware interfaces from a directory""" 26 27 args = parseArgs() 28 29 path = args.path 30 is_open_gl = args.g 31 32 success, failure = genFiles(path, is_open_gl) 33 34 print("Success: ", ", ".join(success)) 35 print("Failure: ", ", ".join(failure)) 36 37 ratio = len(success) / (len(success) + len(failure)) 38 39 print("%% success = %.2f" % (100 * ratio)) 40 41 def parseArgs(): 42 parser = argparse.ArgumentParser() 43 parser.add_argument("path", help="location of headers to parse", type=str) 44 parser.add_argument("-g", help="enable opengl specific parsing", action="store_true") 45 46 return parser.parse_args() 47 48 def genFiles(path, is_open_gl): 49 success = [] 50 failure = [] 51 52 for header in sorted(headers(path)): 53 fname = header[:-2] 54 55 command = ["c2hal", 56 "-r", "android.hardware:hardware/interfaces", 57 "-p", "android.hardware." + fname + "@1.0"] 58 59 if is_open_gl: 60 command += ["-g"] 61 62 command += [path_join(path, header)] 63 64 res = call(command) 65 66 if res == 0: 67 success += [header] 68 else: 69 failure += [header] 70 71 return success, failure 72 73 def headers(path): 74 """all .h files in a directory""" 75 for item in listdir(path): 76 if not isfile(path_join(path, item)): 77 continue 78 79 if not item.endswith(".h"): 80 continue 81 82 yield item 83 84 85 86 if __name__ == "__main__": 87 main()