# Copyright 2020 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

# This script gets default goma_dir for depot_tools goma.

import os
import sys


def main():
  gomacc = 'gomacc'
  candidates = []
  if sys.platform in ['win32', 'cygwin']:
    gomacc = 'gomacc.exe'

  for path in os.environ.get('PATH', '').split(os.pathsep):
    # normpath() required to strip trailing slash when present.
    if os.path.basename(os.path.normpath(path)) == 'depot_tools':
      candidates.append(os.path.join(path, '.cipd_bin'))

  for d in candidates:
    if os.path.isfile(os.path.join(d, gomacc)):
      sys.stdout.write(d)
      return 0
  # mb analyze step set use_goma=true, but goma_dir="",
  # and bot doesn't have goma in default locataion above.
  # to mitigate this, just use initial depot_tools path
  # or default path as before (if depot_tools doesn't exist
  # in PATH).
  # TODO(ukai): crbug.com/1073276: fix mb analyze step and make it hard error?
  if sys.platform in ['win32', 'cygwin']:
    sys.stdout.write('C:\\src\\goma\\goma-win64')
  elif 'GOMA_DIR' in os.environ:
    sys.stdout.write(os.environ.get('GOMA_DIR'))
  else:
    sys.stdout.write(os.path.join(os.environ.get('HOME', ''), 'goma'))
  return 0


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