|  | # Copyright 2018 The Chromium Authors. All rights reserved. | 
|  | # Use of this source code is governed by a BSD-style license that can be | 
|  | # found in the LICENSE file. | 
|  |  | 
|  | # Creates a group() that lists Python sources as |data|. | 
|  | # Having such targets serves two purposes: | 
|  | # 1) Causes files to be included in runtime_deps, so that they are uploaded to | 
|  | #    swarming when running tests remotely. | 
|  | # 2) Causes "gn analyze" to know about all Python inputs so that tests will be | 
|  | #    re-run when relevant Python files change. | 
|  | # | 
|  | # All non-trivial Python scripts should use a "pydeps" file to track their | 
|  | # sources. To create a .pydep file for a target in //example: | 
|  | # | 
|  | #   build/print_python_deps.py \ | 
|  | #       --root example \ | 
|  | #       --output example/$target_name.pydeps \ | 
|  | #       path/to/your/script.py | 
|  | # | 
|  | # Keep the .pydep file up-to-date by adding to //PRESUBMIT.py under one of: | 
|  | #     _ANDROID_SPECIFIC_PYDEPS_FILES, _GENERIC_PYDEPS_FILES | 
|  | # | 
|  | # Variables | 
|  | #   pydeps_file: Path to .pydeps file to read sources from (optional). | 
|  | #   data: Additional files to include in data. E.g. non-.py files needed by the | 
|  | #         library, or .py files that are conditionally / lazily imported. | 
|  | # | 
|  | # Example | 
|  | #   python_library("my_library_py") { | 
|  | #      pydeps_file = "my_library.pydeps" | 
|  | #      data = [ "foo.dat" ] | 
|  | #   } | 
|  | template("python_library") { | 
|  | group(target_name) { | 
|  | forward_variables_from(invoker, | 
|  | [ | 
|  | "data_deps", | 
|  | "deps", | 
|  | "testonly", | 
|  | "visibility", | 
|  | ]) | 
|  |  | 
|  | if (defined(invoker.pydeps_file)) { | 
|  | _py_files = read_file(invoker.pydeps_file, "list lines") | 
|  |  | 
|  | # Filter out comments. | 
|  | set_sources_assignment_filter([ "#*" ]) | 
|  | sources = _py_files | 
|  |  | 
|  | # Even though the .pydep file is not used at runtime, it must be added | 
|  | # so that "gn analyze" will mark the target as changed when .py files | 
|  | # are removed but none are added or modified. | 
|  | data = sources + [ invoker.pydeps_file ] | 
|  | } else { | 
|  | data = [] | 
|  | } | 
|  | if (defined(invoker.data)) { | 
|  | data += invoker.data | 
|  | } | 
|  | } | 
|  | } |