| Doug Zongker | 9296f09 | 2012-03-20 16:42:22 -0700 | [diff] [blame] | 1 | #!/usr/bin/env python | 
|  | 2 | # | 
|  | 3 | # Copyright (C) 2012 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 | import sys | 
|  | 18 | import os | 
|  | 19 |  | 
|  | 20 | try: | 
|  | 21 | from hashlib import sha1 | 
|  | 22 | except ImportError: | 
|  | 23 | from sha import sha as sha1 | 
|  | 24 |  | 
| Doug Zongker | 8f3670b | 2012-03-21 10:01:01 -0700 | [diff] [blame] | 25 | if len(sys.argv) < 2: | 
|  | 26 | sys.exit(0) | 
|  | 27 |  | 
| Doug Zongker | 9296f09 | 2012-03-20 16:42:22 -0700 | [diff] [blame] | 28 | build_info = {} | 
|  | 29 | f = open(sys.argv[1]) | 
|  | 30 | for line in f: | 
|  | 31 | line = line.strip() | 
|  | 32 | if line.startswith("require"): | 
|  | 33 | key, value = line.split()[1].split("=", 1) | 
|  | 34 | build_info[key] = value | 
|  | 35 | f.close() | 
|  | 36 |  | 
|  | 37 | bad = False | 
|  | 38 |  | 
|  | 39 | for item in sys.argv[2:]: | 
|  | 40 | key, fn = item.split(":", 1) | 
|  | 41 |  | 
|  | 42 | values = build_info.get(key, None) | 
|  | 43 | if not values: | 
|  | 44 | continue | 
|  | 45 | values = values.split("|") | 
|  | 46 |  | 
|  | 47 | f = open(fn, "rb") | 
|  | 48 | digest = sha1(f.read()).hexdigest() | 
|  | 49 | f.close() | 
|  | 50 |  | 
|  | 51 | versions = {} | 
|  | 52 | try: | 
|  | 53 | f = open(fn + ".sha1") | 
|  | 54 | except IOError: | 
|  | 55 | if not bad: print | 
|  | 56 | print "*** Error opening \"%s.sha1\"; can't verify %s" % (fn, key) | 
|  | 57 | bad = True | 
|  | 58 | continue | 
|  | 59 | for line in f: | 
|  | 60 | line = line.strip() | 
|  | 61 | if not line or line.startswith("#"): continue | 
|  | 62 | h, v = line.split() | 
|  | 63 | versions[h] = v | 
|  | 64 |  | 
|  | 65 | if digest not in versions: | 
|  | 66 | if not bad: print | 
|  | 67 | print "*** SHA-1 hash of \"%s\" doesn't appear in \"%s.sha1\"" % (fn, fn) | 
|  | 68 | bad = True | 
|  | 69 | continue | 
|  | 70 |  | 
|  | 71 | if versions[digest] not in values: | 
|  | 72 | if not bad: print | 
|  | 73 | print "*** \"%s\" is version %s; not any %s allowed by \"%s\"." % ( | 
|  | 74 | fn, versions[digest], key, sys.argv[1]) | 
|  | 75 | bad = True | 
|  | 76 |  | 
|  | 77 | if bad: | 
|  | 78 | print | 
|  | 79 | sys.exit(1) |