#!/usr/bin/env python
# Copyright 2014 the V8 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.

"""
This file emits the list of reasons why a particular build needs to be clobbered
(or a list of 'landmines').
"""

# for py2/py3 compatibility
from __future__ import print_function

import os
import sys

sys.path.insert(0, os.path.abspath(
  os.path.join(os.path.dirname(__file__), '..', 'build')))

import get_landmines as build_get_landmines


def print_landmines():  # pylint: disable=invalid-name
  """
  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.
  print('Need to clobber after ICU52 roll.')
  print('Landmines test.')
  print('Activating MSVS 2013.')
  print('Revert activation of MSVS 2013.')
  print('Activating MSVS 2013 again.')
  print('Clobber after ICU roll.')
  print('Moar clobbering...')
  print('Remove build/android.gypi')
  print('Cleanup after windows ninja switch attempt.')
  print('Switching to pinned msvs toolchain.')
  print('Clobbering to hopefully resolve problem with mksnapshot')
  print('Clobber after ICU roll.')
  print('Clobber after Android NDK update.')
  print('Clober to fix windows build problems.')
  print('Clober again to fix windows build problems.')
  print('Clobber to possibly resolve failure on win-32 bot.')
  print('Clobber for http://crbug.com/668958.')
  build_get_landmines.print_landmines()
  return 0


def main():
  print_landmines()
  return 0


if __name__ == '__main__':
  sys.exit(main())
