1 # -*- coding: utf-8 -*- 2 3 #------------------------------------------------------------------------- 4 # drawElements Quality Program utilities 5 # -------------------------------------- 6 # 7 # Copyright 2016 The Android Open Source Project 8 # 9 # Licensed under the Apache License, Version 2.0 (the "License"); 10 # you may not use this file except in compliance with the License. 11 # You may obtain a copy of the License at 12 # 13 # http://www.apache.org/licenses/LICENSE-2.0 14 # 15 # Unless required by applicable law or agreed to in writing, software 16 # distributed under the License is distributed on an "AS IS" BASIS, 17 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 18 # See the License for the specific language governing permissions and 19 # limitations under the License. 20 # 21 #------------------------------------------------------------------------- 22 23 import sys 24 from common import isTextFile 25 from fnmatch import fnmatch 26 27 LICENSE_APACHE2 = 0 28 LICENSE_MIT = 1 29 LICENSE_MULTIPLE = 2 30 LICENSE_UNKNOWN = 3 31 32 LICENSE_KEYS = [ 33 # \note Defined this way to avoid triggering license check error on this file 34 ("P" + "ermission is hereby granted, free of charge", LICENSE_MIT), 35 ("L" + "icensed under the Apache License, Version 2.0", LICENSE_APACHE2), 36 ] 37 38 SOURCE_FILES = ["*.py", "*.java", "*.c", "*.h", "*.cpp", "*.hpp"] 39 40 def readFile (file): 41 f = open(file, 'rb') 42 c = f.read() 43 f.close() 44 return c 45 46 def getFileLicense (file): 47 contents = readFile(file) 48 detected = LICENSE_UNKNOWN 49 50 for searchStr, license in LICENSE_KEYS: 51 if contents.find(searchStr) != -1: 52 if detected != LICENSE_UNKNOWN: 53 detected = LICENSE_MULTIPLE 54 else: 55 detected = license 56 57 return detected 58 59 def checkFileLicense (file): 60 license = getFileLicense(file) 61 62 if license == LICENSE_MIT: 63 print "%s: contains MIT license" % file 64 elif license == LICENSE_MULTIPLE: 65 print "%s: contains multiple licenses" % file 66 elif license == LICENSE_UNKNOWN: 67 print "%s: missing/unknown license" % file 68 69 return license == LICENSE_APACHE2 70 71 def isSourceFile (file): 72 for ptrn in SOURCE_FILES: 73 if fnmatch(file, ptrn): 74 return True 75 return False 76 77 def checkLicense (files): 78 error = False 79 for file in files: 80 if isTextFile(file) and isSourceFile(file): 81 if not checkFileLicense(file): 82 error = True 83 84 return not error 85