| OLD | NEW |
| 1 # Copyright 2013 The Chromium Authors. All rights reserved. | 1 # Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
| 3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
| 4 | 4 |
| 5 import ast | 5 import ast |
| 6 import contextlib | 6 import contextlib |
| 7 import fnmatch | 7 import fnmatch |
| 8 import json | 8 import json |
| 9 import os | 9 import os |
| 10 import pipes | 10 import pipes |
| (...skipping 405 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 416 def AddDepfileOption(parser): | 416 def AddDepfileOption(parser): |
| 417 # TODO(agrieve): Get rid of this once we've moved to argparse. | 417 # TODO(agrieve): Get rid of this once we've moved to argparse. |
| 418 if hasattr(parser, 'add_option'): | 418 if hasattr(parser, 'add_option'): |
| 419 func = parser.add_option | 419 func = parser.add_option |
| 420 else: | 420 else: |
| 421 func = parser.add_argument | 421 func = parser.add_argument |
| 422 func('--depfile', | 422 func('--depfile', |
| 423 help='Path to depfile. Must be specified as the action\'s first output.') | 423 help='Path to depfile. Must be specified as the action\'s first output.') |
| 424 | 424 |
| 425 | 425 |
| 426 def WriteDepfile(path, dependencies): | 426 def WriteDepfile(depfile_path, first_gn_output, inputs=None, add_pydeps=True): |
| 427 MakeDirectory(os.path.dirname(path)) | 427 assert depfile_path != first_gn_output # http://crbug.com/646165 |
| 428 with open(path, 'w') as depfile: | 428 inputs = inputs or [] |
| 429 depfile.write(path) | 429 if add_pydeps: |
| 430 inputs = GetPythonDependencies() + inputs |
| 431 MakeDirectory(os.path.dirname(depfile_path)) |
| 432 # Ninja does not support multiple outputs in depfiles. |
| 433 with open(depfile_path, 'w') as depfile: |
| 434 depfile.write(first_gn_output.replace(' ', '\\ ')) |
| 430 depfile.write(': ') | 435 depfile.write(': ') |
| 431 depfile.write(' '.join(dependencies)) | 436 depfile.write(' '.join(i.replace(' ', '\\ ') for i in inputs)) |
| 432 depfile.write('\n') | 437 depfile.write('\n') |
| 433 | 438 |
| 434 | 439 |
| 435 def ExpandFileArgs(args): | 440 def ExpandFileArgs(args): |
| 436 """Replaces file-arg placeholders in args. | 441 """Replaces file-arg placeholders in args. |
| 437 | 442 |
| 438 These placeholders have the form: | 443 These placeholders have the form: |
| 439 @FileArg(filename:key1:key2:...:keyn) | 444 @FileArg(filename:key1:key2:...:keyn) |
| 440 | 445 |
| 441 The value of such a placeholder is calculated by reading 'filename' as json. | 446 The value of such a placeholder is calculated by reading 'filename' as json. |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 517 if stamp_file: | 522 if stamp_file: |
| 518 output_paths += [stamp_file] | 523 output_paths += [stamp_file] |
| 519 | 524 |
| 520 def on_stale_md5(changes): | 525 def on_stale_md5(changes): |
| 521 args = (changes,) if pass_changes else () | 526 args = (changes,) if pass_changes else () |
| 522 function(*args) | 527 function(*args) |
| 523 if python_deps is not None: | 528 if python_deps is not None: |
| 524 all_depfile_deps = list(python_deps) | 529 all_depfile_deps = list(python_deps) |
| 525 if depfile_deps: | 530 if depfile_deps: |
| 526 all_depfile_deps.extend(depfile_deps) | 531 all_depfile_deps.extend(depfile_deps) |
| 527 WriteDepfile(options.depfile, all_depfile_deps) | 532 WriteDepfile(options.depfile, output_paths[0], all_depfile_deps, |
| 533 add_pydeps=False) |
| 528 if stamp_file: | 534 if stamp_file: |
| 529 Touch(stamp_file) | 535 Touch(stamp_file) |
| 530 | 536 |
| 531 md5_check.CallAndRecordIfStale( | 537 md5_check.CallAndRecordIfStale( |
| 532 on_stale_md5, | 538 on_stale_md5, |
| 533 record_path=record_path, | 539 record_path=record_path, |
| 534 input_paths=input_paths, | 540 input_paths=input_paths, |
| 535 input_strings=input_strings, | 541 input_strings=input_strings, |
| 536 output_paths=output_paths, | 542 output_paths=output_paths, |
| 537 force=force, | 543 force=force, |
| 538 pass_changes=True) | 544 pass_changes=True) |
| 539 | 545 |
| OLD | NEW |