Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(683)

Side by Side Diff: build/protoc_java.py

Issue 580343002: Add proto_java_library to gn (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 # Copyright (c) 2012 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be 3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file. 4 # found in the LICENSE file.
5 5
6 """Generate java source files from protobuf files. 6 """Generate java source files from protobuf files.
7 7
8 Usage: 8 Usage:
9 protoc_java.py {protoc} {proto_path} {java_out} {stamp_file} {proto_files} 9 protoc_java.py --protoc={protoc} --proto-dir={proto_path} {proto_files}
nyquist 2014/09/22 21:25:16 I think you mean proto-path instead of proto-dir.
cjhopman 2014/09/26 23:39:10 Now that we are using an OptionParser I don't thin
10 10
11 This is a helper file for the genproto_java action in protoc_java.gypi. 11 This is a helper file for the genproto_java action in protoc_java.gypi.
12 12
13 It performs the following steps: 13 It performs the following steps:
nyquist 2014/09/22 21:25:16 These do not exactly match the steps below, but ma
cjhopman 2014/09/26 23:39:10 Done.
14 1. Deletes all old sources (ensures deleted classes are not part of new jars). 14 1. Deletes all old sources (ensures deleted classes are not part of new jars).
15 2. Creates source directory. 15 2. Creates source directory.
16 3. Generates Java files using protoc. 16 3. Generates Java files using protoc.
17 4. Creates a new stamp file. 17 4. Creates a new stamp file.
18 """ 18 """
19 19
20 import os 20 import os
21 import optparse
21 import shutil 22 import shutil
22 import subprocess 23 import subprocess
23 import sys 24 import sys
24 25
26 sys.path.append(os.path.join(os.path.dirname(__file__), "android", "gyp"))
27 from util import build_utils
28
25 def main(argv): 29 def main(argv):
26 if len(argv) < 5: 30 parser = optparse.OptionParser()
27 usage() 31 build_utils.AddDepfileOption(parser)
32 parser.add_option("--protoc", help="Path to protoc binary.")
33 parser.add_option("--proto-path", help="Path to proto directory.")
34 parser.add_option("--java-out-dir",
35 help="Path to output directory for java files.")
36 parser.add_option("--srcjar", help="Path to output srcjar.")
37 parser.add_option("--stamp", help="File to touch on success.")
38 options, args = parser.parse_args(argv)
39
40 build_utils.CheckOptions(options, parser, ['protoc', 'proto_path'])
41 if not options.java_out_dir and not options.srcjar:
42 print 'One of --java-out-dir or --srcjar must be specified.'
28 return 1 43 return 1
29 44
30 protoc_path, proto_path, java_out, stamp_file = argv[1:5] 45 with build_utils.TempDir() as temp_dir:
31 proto_files = argv[5:] 46 # Specify arguments to the generator.
47 generator_args = ['optional_field_style=reftypes',
48 'store_unknown_fields=true']
49 out_arg = '--javanano_out=' + ','.join(generator_args) + ':' + temp_dir
50 # Generate Java files using protoc.
51 build_utils.CheckOutput(
52 [options.protoc, '--proto_path', options.proto_path, out_arg]
53 + args)
32 54
33 # Delete all old sources. 55 if options.java_out_dir:
34 if os.path.exists(java_out): 56 build_utils.DeleteDirectory(options.java_out_dir)
35 shutil.rmtree(java_out) 57 shutil.copytree(temp_dir, options.java_out_dir)
58 else:
59 build_utils.ZipDir(options.srcjar, temp_dir)
36 60
37 # Create source directory. 61 if options.depfile:
nyquist 2014/09/22 21:25:16 Should depfile be specified as a parser option?
cjhopman 2014/09/26 23:39:10 It's added by AddDepfileOption above
38 os.makedirs(java_out) 62 build_utils.WriteDepfile(
63 options.depfile,
64 args + [options.protoc] + build_utils.GetPythonDependencies())
39 65
40 # Specify arguments to the generator. 66 if options.stamp:
41 generator_args = ['optional_field_style=reftypes', 67 build_utils.Touch(options.stamp)
42 'store_unknown_fields=true']
43 out_arg = '--javanano_out=' + ','.join(generator_args) + ':' + java_out
44
45 # Generate Java files using protoc.
46 ret = subprocess.call(
47 [protoc_path, '--proto_path', proto_path, out_arg] + proto_files)
48
49 if ret == 0:
50 # Create a new stamp file.
51 with file(stamp_file, 'a'):
52 os.utime(stamp_file, None)
53
54 return ret
55
56 def usage():
57 print(__doc__);
58 68
59 if __name__ == '__main__': 69 if __name__ == '__main__':
60 sys.exit(main(sys.argv)) 70 sys.exit(main(sys.argv[1:]))
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698