| Index: .gn
|
| diff --git a/.gn b/.gn
|
| index 2f343e07f5acde756ebbc298969c36f3c54688a1..16c1c38df0670cdb55374ef01db7a13471ca1491 100644
|
| --- a/.gn
|
| +++ b/.gn
|
| @@ -139,7 +139,65 @@ check_targets = [
|
|
|
| # These are the list of GN files that run exec_script. This whitelist exists
|
| # to force additional review for new uses of exec_script, which is strongly
|
| -# discouraged except for gypi_to_gn calls.
|
| +# discouraged.
|
| +#
|
| +# GYPI_TO_GN
|
| +#
|
| +# Most of these entries are for gypi_to_gn calls. We should not be adding new
|
| +# calls to this script in the build (see //build/gypi_to_gn.py for detailed
|
| +# advice). The only time you should be editing this list for gypi_to_gn
|
| +# purposes is when moving an existing call to a different place.
|
| +#
|
| +# PLEASE READ
|
| +#
|
| +# You should almost never need to add new exec_script calls. exec_script is
|
| +# slow, especially on Windows, and can cause confusing effects. Although
|
| +# individually each call isn't slow or necessarily very confusing, at the scale
|
| +# of our repo things get out of hand quickly. By strongly pushing back on all
|
| +# additions, we keep the build fast and clean. If you think you need to add a
|
| +# new call, please consider:
|
| +#
|
| +# - Do not use a script to check for the existance of a file or directory to
|
| +# enable a different mode. Instead, use GN build args to enable or disable
|
| +# functionality and set options. An example is checking for a file in the
|
| +# src-internal repo to see if the corresponding src-internal feature should
|
| +# be enabled. There are several things that can go wrong with this:
|
| +#
|
| +# - It's mysterious what causes some things to happen. Although in many cases
|
| +# such behavior can be conveniently automatic, GN optimizes for explicit
|
| +# and obvious behavior so people can more easily diagnose problems.
|
| +#
|
| +# - The user can't enable a mode for one build and not another. With GN build
|
| +# args, the user can choose the exact configuration of multiple builds
|
| +# using one checkout. But implicitly basing flags on the state of the
|
| +# checkout, this functionality is broken.
|
| +#
|
| +# - It's easy to get stale files. If for example the user edits the gclient
|
| +# to stop checking out src-internal (or any other optional thing), it's
|
| +# easy to end up with stale files still mysteriously triggering build
|
| +# conditions that are no longer appropriate (yes, this happens in real
|
| +# life).
|
| +#
|
| +# - Do not use a script to iterate files in a directory (glob):
|
| +#
|
| +# - This has the same "stale file" problem as the above discussion. Various
|
| +# operations can leave untracked files in the source tree which can cause
|
| +# surprising effects.
|
| +#
|
| +# - It becomes impossible to use "git grep" to find where a certain file is
|
| +# referenced. This operation is very common and people really do get
|
| +# confused when things aren't listed.
|
| +#
|
| +# - It's easy to screw up. One common case is a build-time script that packs
|
| +# up a directory. The author notices that the script isn't re-run when the
|
| +# directory is updated, so adds a glob so all the files are listed as
|
| +# inputs. This seems to work great... until a file is deleted. When a
|
| +# file is deleted, all the inputs the glob lists will still be up-to-date
|
| +# and no command-lines will have been changed. The action will not be
|
| +# re-run and the build will be broken. It is possible to get this correct
|
| +# using glob, and it's possible to mess it up without glob, but globs make
|
| +# this situation much easier to create. if the build always lists the
|
| +# files and passes them to a script, it will always be correct.
|
| exec_script_whitelist = [
|
| "//android_webview/BUILD.gn",
|
| "//ash/BUILD.gn",
|
|
|