| 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) |