1*3ac0a46fSAndroid Build Coastguard Worker#!/usr/bin/env python3 2*3ac0a46fSAndroid Build Coastguard Worker# Copyright 2022 The PDFium Authors 3*3ac0a46fSAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license that can be 4*3ac0a46fSAndroid Build Coastguard Worker# found in the LICENSE file. 5*3ac0a46fSAndroid Build Coastguard Worker"""Verifies libcxx_revision entries are in sync. 6*3ac0a46fSAndroid Build Coastguard Worker 7*3ac0a46fSAndroid Build Coastguard WorkerDEPS and buildtools/deps_revisions.gni both have libcxx_revision entries. 8*3ac0a46fSAndroid Build Coastguard WorkerCheck that they are in sync. 9*3ac0a46fSAndroid Build Coastguard Worker""" 10*3ac0a46fSAndroid Build Coastguard Worker 11*3ac0a46fSAndroid Build Coastguard Workerimport re 12*3ac0a46fSAndroid Build Coastguard Workerimport sys 13*3ac0a46fSAndroid Build Coastguard Worker 14*3ac0a46fSAndroid Build Coastguard Worker 15*3ac0a46fSAndroid Build Coastguard Workerdef _ExtractRevisionFromFile(path, regex): 16*3ac0a46fSAndroid Build Coastguard Worker """Gets the revision by reading path and searching the lines using regex.""" 17*3ac0a46fSAndroid Build Coastguard Worker data = open(path, 'rb').read().splitlines() 18*3ac0a46fSAndroid Build Coastguard Worker revision = None 19*3ac0a46fSAndroid Build Coastguard Worker for line in data: 20*3ac0a46fSAndroid Build Coastguard Worker match = regex.match(line) 21*3ac0a46fSAndroid Build Coastguard Worker if not match: 22*3ac0a46fSAndroid Build Coastguard Worker continue 23*3ac0a46fSAndroid Build Coastguard Worker if revision: 24*3ac0a46fSAndroid Build Coastguard Worker return None 25*3ac0a46fSAndroid Build Coastguard Worker revision = match.group(1) 26*3ac0a46fSAndroid Build Coastguard Worker return revision 27*3ac0a46fSAndroid Build Coastguard Worker 28*3ac0a46fSAndroid Build Coastguard Worker 29*3ac0a46fSAndroid Build Coastguard Workerdef _GetDepsLibcxxRevision(deps_path): 30*3ac0a46fSAndroid Build Coastguard Worker """Gets the libcxx_revision from DEPS.""" 31*3ac0a46fSAndroid Build Coastguard Worker regex = re.compile(b"^ 'libcxx_revision': '(.*)',$") 32*3ac0a46fSAndroid Build Coastguard Worker return _ExtractRevisionFromFile(deps_path, regex) 33*3ac0a46fSAndroid Build Coastguard Worker 34*3ac0a46fSAndroid Build Coastguard Worker 35*3ac0a46fSAndroid Build Coastguard Workerdef _GetBuildtoolsLibcxxRevision(buildtools_deps_path): 36*3ac0a46fSAndroid Build Coastguard Worker """Gets the libcxx_revision from buildtools/deps_revisions.gni.""" 37*3ac0a46fSAndroid Build Coastguard Worker regex = re.compile(b'^ libcxx_revision = "(.*)"$') 38*3ac0a46fSAndroid Build Coastguard Worker return _ExtractRevisionFromFile(buildtools_deps_path, regex) 39*3ac0a46fSAndroid Build Coastguard Worker 40*3ac0a46fSAndroid Build Coastguard Worker 41*3ac0a46fSAndroid Build Coastguard Workerdef main(): 42*3ac0a46fSAndroid Build Coastguard Worker if len(sys.argv) != 3: 43*3ac0a46fSAndroid Build Coastguard Worker print('Wrong number of arguments') 44*3ac0a46fSAndroid Build Coastguard Worker return 0 45*3ac0a46fSAndroid Build Coastguard Worker 46*3ac0a46fSAndroid Build Coastguard Worker deps_path = sys.argv[1] 47*3ac0a46fSAndroid Build Coastguard Worker deps_revision = _GetDepsLibcxxRevision(deps_path) 48*3ac0a46fSAndroid Build Coastguard Worker if not deps_revision: 49*3ac0a46fSAndroid Build Coastguard Worker print('Cannot parse', deps_path) 50*3ac0a46fSAndroid Build Coastguard Worker return 0 51*3ac0a46fSAndroid Build Coastguard Worker 52*3ac0a46fSAndroid Build Coastguard Worker buildtools_deps_path = sys.argv[2] 53*3ac0a46fSAndroid Build Coastguard Worker buildtools_revision = _GetBuildtoolsLibcxxRevision(buildtools_deps_path) 54*3ac0a46fSAndroid Build Coastguard Worker if not buildtools_revision: 55*3ac0a46fSAndroid Build Coastguard Worker print('Cannot parse', buildtools_deps_path) 56*3ac0a46fSAndroid Build Coastguard Worker return 0 57*3ac0a46fSAndroid Build Coastguard Worker 58*3ac0a46fSAndroid Build Coastguard Worker if deps_revision != buildtools_revision: 59*3ac0a46fSAndroid Build Coastguard Worker print('libcxx_revision mismatch between %s and %s: %s vs. %s' % 60*3ac0a46fSAndroid Build Coastguard Worker (deps_path, buildtools_deps_path, deps_revision, buildtools_revision)) 61*3ac0a46fSAndroid Build Coastguard Worker return 0 62*3ac0a46fSAndroid Build Coastguard Worker 63*3ac0a46fSAndroid Build Coastguard Worker 64*3ac0a46fSAndroid Build Coastguard Workerif __name__ == '__main__': 65*3ac0a46fSAndroid Build Coastguard Worker sys.exit(main()) 66