Landmines support to ease clobbering builds

Landmines is a feature used in Chromium that makes it possible to
clobber the build output directory when needed. Example scenarios
are when compiler/tool/infrastructure changes require a full rebuild.
This is mainly to ease clobbering on all bots, but will also ensure
developers don't have to waste time on figuring out what's wrong
(or rely on reading PSA e-mails announcing when such manual action
is required).

This CL depends on https://codereview.chromium.org/1407733002/
being landed and rolled into DEPS first.

BUG=5077
R=kjellander@chromium.org, machenbach@chromium.org

Review URL: https://codereview.webrtc.org/1402923003 .

Cr-Commit-Position: refs/heads/master@{#10287}
diff --git a/.gitignore b/.gitignore
index 7822910..5b932c1 100644
--- a/.gitignore
+++ b/.gitignore
@@ -29,6 +29,7 @@
 .cproject
 .gdb_history
 .gdbinit
+.landmines
 .metadata
 .project
 .pydevproject
@@ -176,4 +177,3 @@
 /webrtc/video_engine/test/android/obj
 /x86-generic_out/
 /xcodebuild
-
diff --git a/DEPS b/DEPS
index bd2d0b0..a61126a 100644
--- a/DEPS
+++ b/DEPS
@@ -71,6 +71,21 @@
     'action': ['python', 'src/setup_links.py'],
   },
   {
+    # This clobbers when necessary (based on get_landmines.py). It should be
+    # an early hook but it will need to be run after syncing Chromium and
+    # setting up the links, so the script actually exists.
+    'name': 'landmines',
+    'pattern': '.',
+    'action': [
+        'python',
+        'src/build/landmines.py',
+        '--landmine-scripts',
+        'src/webrtc/build/get_landmines.py',
+        '--src-dir',
+        'src',
+    ],
+  },
+  {
      # Pull sanitizer-instrumented third-party libraries if requested via
      # GYP_DEFINES. This could be done as part of sync_chromium.py above
      # but then we would need to run all the Chromium hooks each time,
diff --git a/webrtc/build/get_landmines.py b/webrtc/build/get_landmines.py
new file mode 100755
index 0000000..91b3e25
--- /dev/null
+++ b/webrtc/build/get_landmines.py
@@ -0,0 +1,50 @@
+#!/usr/bin/env python
+# Copyright (c) 2015 The WebRTC project authors. All Rights Reserved.
+#
+# Use of this source code is governed by a BSD-style license
+# that can be found in the LICENSE file in the root of the source
+# tree. An additional intellectual property rights grant can be found
+# in the file PATENTS.  All contributing project authors may
+# be found in the AUTHORS file in the root of the source tree.
+
+"""
+This file emits the list of reasons why a particular build needs to be clobbered
+(or a list of 'landmines').
+"""
+
+import os
+import sys
+
+script_dir = os.path.dirname(os.path.realpath(__file__))
+checkout_root = os.path.abspath(os.path.join(script_dir, os.pardir, os.pardir))
+sys.path.insert(0, os.path.join(checkout_root, 'build'))
+import landmine_utils
+
+
+builder = landmine_utils.builder
+distributor = landmine_utils.distributor
+gyp_defines = landmine_utils.gyp_defines
+gyp_msvs_version = landmine_utils.gyp_msvs_version
+platform = landmine_utils.platform
+
+
+def print_landmines():
+  """
+  ALL LANDMINES ARE EMITTED FROM HERE.
+  """
+  # DO NOT add landmines as part of a regular CL. Landmines are a last-effort
+  # bandaid fix if a CL that got landed has a build dependency bug and all bots
+  # need to be cleaned up. If you're writing a new CL that causes build
+  # dependency problems, fix the dependency problems instead of adding a
+  # landmine.
+  # See the Chromium version in src/build/get_landmines.py for usage examples.
+  pass
+
+
+def main():
+  print_landmines()
+  return 0
+
+
+if __name__ == '__main__':
+  sys.exit(main())