text: #!/usr/bin/env python
  # Copyright (c) 2012 Google Inc. All rights reserved.
  # Use of this source code is governed by a BSD-style license that can be
  # found in the LICENSE file.
  
  
  """Argument-less script to select what to run on the buildbots."""
  
  
  import os
  import shutil
  import subprocess
  import sys
  
  
  if sys.platform in ['win32', 'cygwin']:
    EXE_SUFFIX = '.exe'
  else:
    EXE_SUFFIX = ''
  
  
  BUILDBOT_DIR = os.path.dirname(os.path.abspath(__file__))
  TRUNK_DIR = os.path.dirname(BUILDBOT_DIR)
  ROOT_DIR = os.path.dirname(TRUNK_DIR)
  OUT_DIR = os.path.join(TRUNK_DIR, 'out')
  
  
  def GypTestFormat(title, format=None, msvs_version=None):
    """Run the gyp tests for a given format, emitting annotator tags.
  
    See annotator docs at:
      https://sites.google.com/a/chromium.org/dev/developers/testing/chromium-build-infrastructure/buildbot-annotations
    Args:
      format: gyp format to test.
    Returns:
      0 for sucesss, 1 for failure.
    """
    if not format:
      format = title
  
    print '@@@BUILD_STEP ' + title + '@@@'
    sys.stdout.flush()
    env = os.environ.copy()
    # TODO(bradnelson): remove this when this issue is resolved:
    #     http://code.google.com/p/chromium/issues/detail?id=108251
    if format == 'ninja':
      env['NOGOLD'] = '1'
    if msvs_version:
      env['GYP_MSVS_VERSION'] = msvs_version
    retcode = subprocess.call(' '.join(
        [sys.executable, 'trunk/gyptest.py',
         '--all',
         '--passed',
         '--format', format,
         '--chdir', 'trunk',
         '--path', '../scons']),
        cwd=ROOT_DIR, env=env, shell=True)
    if retcode:
      # Emit failure tag, and keep going.
      print '@@@STEP_FAILURE@@@'
      return 1
    return 0
  
  
  def GypBuild():
    # Dump out/ directory.
    print '@@@BUILD_STEP cleanup@@@'
    print 'Removing %s...' % OUT_DIR
    shutil.rmtree(OUT_DIR, ignore_errors=True)
    print 'Done.'
  
    retcode = 0
    if sys.platform.startswith('linux'):
      retcode += GypTestFormat('ninja')
      retcode += GypTestFormat('scons')
      retcode += GypTestFormat('make')
    elif sys.platform == 'darwin':
      retcode += GypTestFormat('ninja')
      retcode += GypTestFormat('xcode')
      retcode += GypTestFormat('make')
    elif sys.platform == 'win32':
      retcode += GypTestFormat('ninja')
      retcode += GypTestFormat('msvs-2008', format='msvs', msvs_version='2008')
      if os.environ['BUILDBOT_BUILDERNAME'] == 'gyp-win64':
        retcode += GypTestFormat('msvs-2010', format='msvs', msvs_version='2010')
    else:
      raise Exception('Unknown platform')
    if retcode:
      # TODO(bradnelson): once the annotator supports a postscript (section for
      #     after the build proper that could be used for cumulative failures),
      #     use that instead of this. This isolates the final return value so
      #     that it isn't misattributed to the last stage.
      print '@@@BUILD_STEP failures@@@'
      sys.exit(retcode)
  
  
  if __name__ == '__main__':
    GypBuild()
  