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

Side by Side Diff: components/domain_reliability/bake_in_configs.py

Issue 1430043002: Support script response files in GN. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: review comment, random build fix Created 5 years, 1 month 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
« no previous file with comments | « components/domain_reliability/BUILD.gn ('k') | tools/gn/action_target_generator.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # Copyright 2014 The Chromium Authors. All rights reserved. 2 # Copyright 2014 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 6
7 """Takes the JSON files in components/domain_reliability/baked_in_configs and 7 """Takes the JSON files in components/domain_reliability/baked_in_configs and
8 encodes their contents as an array of C strings that gets compiled in to Chrome 8 encodes their contents as an array of C strings that gets compiled in to Chrome
9 and loaded at runtime.""" 9 and loaded at runtime."""
10 10
11 11
12 import ast 12 import ast
13 import json 13 import json
14 import optparse
14 import os 15 import os
16 import shlex
15 import sys 17 import sys
16 18
17 19
18 # A whitelist of domains that the script will accept when baking configs in to 20 # A whitelist of domains that the script will accept when baking configs in to
19 # Chrome, to ensure incorrect ones are not added accidentally. Subdomains of 21 # Chrome, to ensure incorrect ones are not added accidentally. Subdomains of
20 # whitelist entries are also allowed (e.g. maps.google.com, ssl.gstatic.com). 22 # whitelist entries are also allowed (e.g. maps.google.com, ssl.gstatic.com).
21 DOMAIN_WHITELIST = ( 23 DOMAIN_WHITELIST = (
22 '2mdn.net', 24 '2mdn.net',
23 'admob.biz', 25 'admob.biz',
24 'admob.co.in', 26 'admob.co.in',
(...skipping 443 matching lines...) Expand 10 before | Expand all | Expand 10 after
468 """ 470 """
469 471
470 472
471 def read_json_files_from_gypi(gypi_file): 473 def read_json_files_from_gypi(gypi_file):
472 with open(gypi_file, 'r') as f: 474 with open(gypi_file, 'r') as f:
473 gypi_text = f.read() 475 gypi_text = f.read()
474 json_files = ast.literal_eval(gypi_text)['variables']['baked_in_configs'] 476 json_files = ast.literal_eval(gypi_text)['variables']['baked_in_configs']
475 return json_files 477 return json_files
476 478
477 479
480 def read_json_files_from_file(list_file):
481 with open(list_file, 'r') as f:
482 list_text = f.read()
483 return shlex.split(list_text)
484
485
478 def domain_is_whitelisted(domain): 486 def domain_is_whitelisted(domain):
479 return any(domain == e or domain.endswith('.' + e) for e in DOMAIN_WHITELIST) 487 return any(domain == e or domain.endswith('.' + e) for e in DOMAIN_WHITELIST)
480 488
481 489
482 def quote_and_wrap_text(text, width=79, prefix=' "', suffix='"'): 490 def quote_and_wrap_text(text, width=79, prefix=' "', suffix='"'):
483 max_length = width - len(prefix) - len(suffix) 491 max_length = width - len(prefix) - len(suffix)
484 output = prefix 492 output = prefix
485 line_length = 0 493 line_length = 0
486 for c in text: 494 for c in text:
487 if c == "\"": 495 if c == "\"":
488 c = "\\\"" 496 c = "\\\""
489 elif c == "\n": 497 elif c == "\n":
490 c = "\\n" 498 c = "\\n"
491 elif c == "\\": 499 elif c == "\\":
492 c = "\\\\" 500 c = "\\\\"
493 if line_length + len(c) > max_length: 501 if line_length + len(c) > max_length:
494 output += suffix + "\n" + prefix 502 output += suffix + "\n" + prefix
495 line_length = 0 503 line_length = 0
496 output += c 504 output += c
497 line_length += len(c) 505 line_length += len(c)
498 output += suffix 506 output += suffix
499 return output 507 return output
500 508
501 509
502 def main(): 510 def main():
503 if len(sys.argv) != 4: 511 parser = optparse.OptionParser(usage="bake_in_configs.py [options]")
504 print >> sys.stderr, (('Usage: %s <JSON pathname base directory> ' + 512 parser.add_option("", "--output", metavar="FILE",
505 '<input .gypi file> <output .cpp file>') % 513 help="[Required] Name of the .cc file to write.")
506 sys.argv[0]) 514
507 print >> sys.stderr, sys.modules[__name__].__doc__ 515 # For response file reading.
516 parser.add_option("", "--file-list", metavar="FILE",
517 help="File containing whitespace separated names of "
518 "the baked in configs files.")
519
520 # For .gypi file reading.
521 parser.add_option("", "--gypi-file", metavar="FILE",
522 help=".gypi file containing baked_in_configs variable.")
523 parser.add_option("", "--gypi-relative-to", metavar="PATH",
524 help="Directory the baked_in_configs in the --gypi-file"
525 "are relative to.""")
526
527 opts, args = parser.parse_args()
528
529 if not opts.output:
530 print >> sys.stderr, "--output argument required"
508 return 1 531 return 1
509 json_path = sys.argv[1]
510 gypi_file = sys.argv[2]
511 cpp_file = sys.argv[3]
512 532
513 json_files = read_json_files_from_gypi(gypi_file) 533 if opts.gypi_file:
514 json_files = [ os.path.join(json_path, f) for f in json_files ] 534 # .gypi-style input.
515 json_files = [ os.path.normpath(f) for f in json_files ] 535 if not opts.gypi_relative_to:
536 print >> sys.stderr, "--gypi-relative-to is required with --gypi-file"
537 return 1
538 json_files = read_json_files_from_gypi(opts.gypi_file)
539 json_files = [ os.path.join(opts.gypi_relative_to, f) for f in json_files ]
540 json_files = [ os.path.normpath(f) for f in json_files ]
541 elif opts.file_list:
542 # Regular file list input.
543 json_files = read_json_files_from_file(opts.file_list)
544 else:
545 print >> sys.stderr, "Either --file-list or --gypi-file is required."
546 return 1
516 547
517 cpp_code = CC_HEADER 548 cpp_code = CC_HEADER
518 found_invalid_config = False 549 found_invalid_config = False
519 550
520 for json_file in json_files: 551 for json_file in json_files:
521 with open(json_file, 'r') as f: 552 with open(json_file, 'r') as f:
522 json_text = f.read() 553 json_text = f.read()
523 try: 554 try:
524 config = json.loads(json_text) 555 config = json.loads(json_text)
525 except ValueError, e: 556 except ValueError, e:
(...skipping 16 matching lines...) Expand all
542 573
543 cpp_code += " // " + json_file + ":\n" 574 cpp_code += " // " + json_file + ":\n"
544 cpp_code += quote_and_wrap_text(dumped_json_text) + ",\n" 575 cpp_code += quote_and_wrap_text(dumped_json_text) + ",\n"
545 cpp_code += "\n" 576 cpp_code += "\n"
546 577
547 cpp_code += CC_FOOTER 578 cpp_code += CC_FOOTER
548 579
549 if found_invalid_config: 580 if found_invalid_config:
550 return 1 581 return 1
551 582
552 with open(cpp_file, 'wb') as f: 583 with open(opts.output, 'wb') as f:
553 f.write(cpp_code) 584 f.write(cpp_code)
554 585
555 return 0 586 return 0
556 587
557 588
558 if __name__ == '__main__': 589 if __name__ == '__main__':
559 sys.exit(main()) 590 sys.exit(main())
OLDNEW
« no previous file with comments | « components/domain_reliability/BUILD.gn ('k') | tools/gn/action_target_generator.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698