• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#!/usr/bin/env python
2# Copyright (C) 2019 The Android Open Source Project
3#
4# Licensed under the Apache License, Version 2.0 (the "License");
5# you may not use this file except in compliance with the License.
6# You may obtain a copy of the License at
7#
8#      http://www.apache.org/licenses/LICENSE-2.0
9#
10# Unless required by applicable law or agreed to in writing, software
11# distributed under the License is distributed on an "AS IS" BASIS,
12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13# See the License for the specific language governing permissions and
14# limitations under the License.
15"""Script to wrap protoc execution.
16
17This script exists to work-around the bad depfile generation by protoc when
18generating descriptors."""
19
20from __future__ import print_function
21import argparse
22import os
23import sys
24import subprocess
25import tempfile
26
27from codecs import open
28
29
30def main():
31  parser = argparse.ArgumentParser()
32  parser.add_argument('--descriptor_set_out', default=None)
33  parser.add_argument('--dependency_out', default=None)
34  parser.add_argument('protoc')
35  args, remaining = parser.parse_known_args()
36
37  if args.dependency_out and args.descriptor_set_out:
38    with tempfile.NamedTemporaryFile() as t:
39      custom = [
40          '--descriptor_set_out', args.descriptor_set_out, '--dependency_out',
41          t.name
42      ]
43      subprocess.check_call([args.protoc] + custom + remaining)
44
45      dependency_data = t.read().decode('utf-8')
46
47    with open(args.dependency_out, 'w', encoding='utf-8') as f:
48      f.write(args.descriptor_set_out + ":")
49      f.write(dependency_data)
50  else:
51    subprocess.check_call(sys.argv[1:])
52
53
54if __name__ == '__main__':
55  sys.exit(main())
56