| #!/usr/bin/env python | 
 | # | 
 | # Copyright (C) 2012 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. | 
 |  | 
 | import sys | 
 | import os | 
 |  | 
 | try: | 
 |   from hashlib import sha1 | 
 | except ImportError: | 
 |   from sha import sha as sha1 | 
 |  | 
 | if len(sys.argv) < 2: | 
 |   sys.exit(0) | 
 |  | 
 | build_info = {} | 
 | f = open(sys.argv[1]) | 
 | for line in f: | 
 |   line = line.strip() | 
 |   if line.startswith("require"): | 
 |     key, value = line.split()[1].split("=", 1) | 
 |     build_info[key] = value | 
 | f.close() | 
 |  | 
 | bad = False | 
 |  | 
 | for item in sys.argv[2:]: | 
 |   key, fn = item.split(":", 1) | 
 |  | 
 |   values = build_info.get(key, None) | 
 |   if not values: | 
 |     continue | 
 |   values = values.split("|") | 
 |  | 
 |   f = open(fn, "rb") | 
 |   digest = sha1(f.read()).hexdigest() | 
 |   f.close() | 
 |  | 
 |   versions = {} | 
 |   try: | 
 |     f = open(fn + ".sha1") | 
 |   except IOError: | 
 |     if not bad: print | 
 |     print "*** Error opening \"%s.sha1\"; can't verify %s" % (fn, key) | 
 |     bad = True | 
 |     continue | 
 |   for line in f: | 
 |     line = line.strip() | 
 |     if not line or line.startswith("#"): continue | 
 |     h, v = line.split() | 
 |     versions[h] = v | 
 |  | 
 |   if digest not in versions: | 
 |     if not bad: print | 
 |     print "*** SHA-1 hash of \"%s\" doesn't appear in \"%s.sha1\"" % (fn, fn) | 
 |     bad = True | 
 |     continue | 
 |  | 
 |   if versions[digest] not in values: | 
 |     if not bad: print | 
 |     print "*** \"%s\" is version %s; not any %s allowed by \"%s\"." % ( | 
 |         fn, versions[digest], key, sys.argv[1]) | 
 |     bad = True | 
 |  | 
 | if bad: | 
 |   print | 
 |   sys.exit(1) |