summaryrefslogtreecommitdiffstats
path: root/third_party/libwebrtc/build/config/python.gni
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/libwebrtc/build/config/python.gni')
-rw-r--r--third_party/libwebrtc/build/config/python.gni161
1 files changed, 161 insertions, 0 deletions
diff --git a/third_party/libwebrtc/build/config/python.gni b/third_party/libwebrtc/build/config/python.gni
new file mode 100644
index 0000000000..2dfb7e9270
--- /dev/null
+++ b/third_party/libwebrtc/build/config/python.gni
@@ -0,0 +1,161 @@
+# 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)) {
+ # Read and filter out comments.
+ _pydeps_lines = read_file(invoker.pydeps_file, "list lines")
+ _pydeps_entries = filter_exclude(_pydeps_lines, [ "#*" ])
+
+ # Dependencies are listed relative to the pydeps file directory, but data
+ # parameter expects paths that are relative to the current BUILD.gn
+ _script_dir = get_path_info(invoker.pydeps_file, "dir")
+ _rebased_pydeps_entries = rebase_path(_pydeps_entries, ".", _script_dir)
+
+ # 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 = _rebased_pydeps_entries + [ invoker.pydeps_file ]
+ } else {
+ data = []
+ }
+ if (defined(invoker.data)) {
+ data += invoker.data
+ }
+ }
+}
+
+# A template used for actions that execute a Python script, which has an
+# associated .pydeps file. In other words:
+#
+# - This is very similar to just an action(), except that |script| must point
+# to a Python script (e.g. "//build/.../foo.py") that has a corresponding
+# .pydeps file in the source tree (e.g. "//build/.../foo.pydeps").
+#
+# - The .pydeps file contains a list of python dependencies (imports really)
+# and is generated _manually_ by using a command like:
+#
+# build/print_python_deps.py --inplace build/android/gyp/foo.py
+#
+# Example
+# action_with_pydeps("create_foo") {
+# script = "myscript.py"
+# args = [...]
+# }
+template("action_with_pydeps") {
+ action(target_name) {
+ # Ensure that testonly and visibility are forwarded
+ # explicitly, since this performs recursive scope lookups, which is
+ # required to ensure their definition from scopes above the caller are
+ # properly handled. All other variables are forwarded with "*", which
+ # doesn't perform recursive lookups at all. See https://crbug.com/862232
+ forward_variables_from(invoker,
+ [
+ "testonly",
+ "visibility",
+ ])
+ forward_variables_from(invoker,
+ "*",
+ [
+ "testonly",
+ "visibility",
+ ])
+
+ # Read and filter out comments.
+ # Happens every time the template is instantiated, but benchmarking shows no
+ # perceivable impact on overall 'gn gen' speed.
+ _pydeps_file = invoker.script + "deps"
+
+ _pydeps_lines =
+ read_file(_pydeps_file, "list lines") # https://crbug.com/1102058
+ _pydeps_entries = filter_exclude(_pydeps_lines, [ "#*" ])
+
+ if (!defined(inputs)) {
+ inputs = []
+ }
+
+ # Dependencies are listed relative to the script directory, but inputs
+ # expects paths that are relative to the current BUILD.gn
+ _script_dir = get_path_info(_pydeps_file, "dir")
+ inputs += rebase_path(_pydeps_entries, ".", _script_dir)
+ }
+}
+
+template("action_foreach_with_pydeps") {
+ action_foreach(target_name) {
+ # Ensure that testonly and visibility are forwarded
+ # explicitly, since this performs recursive scope lookups, which is
+ # required to ensure their definition from scopes above the caller are
+ # properly handled. All other variables are forwarded with "*", which
+ # doesn't perform recursive lookups at all. See https://crbug.com/862232
+ forward_variables_from(invoker,
+ [
+ "testonly",
+ "visibility",
+ ])
+ forward_variables_from(invoker,
+ "*",
+ [
+ "testonly",
+ "visibility",
+ ])
+
+ # Read and filter out comments.
+ # Happens every time the template is instantiated, but benchmarking shows no
+ # perceivable impact on overall 'gn gen' speed.
+ if (defined(invoker.deps_file)) {
+ _pydeps_file = invoker.deps_file
+ } else {
+ _pydeps_file = invoker.script + "deps"
+ }
+ _pydeps_lines = read_file(_pydeps_file, "list lines")
+ _pydeps_entries = filter_exclude(_pydeps_lines, [ "#*" ])
+
+ if (!defined(inputs)) {
+ inputs = []
+ }
+
+ # Dependencies are listed relative to the script directory, but inputs
+ # expects paths that are relative to the current BUILD.gn
+ _script_dir = get_path_info(script, "dir")
+ inputs += rebase_path(_pydeps_entries, ".", _script_dir)
+ }
+}