#!/usr/bin/env python
# Copyright (C) 2013 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

from optparse import OptionParser
import re
from subprocess import check_call, CalledProcessError, Popen, PIPE

MAIN = ['//:classpath']
PAT = re.compile(r'"(//.*?)" -> "//bucklets/tools:download_file"')

opts = OptionParser()
opts.add_option('--src', action='store_true')
args, _ = opts.parse_args()

targets = set()

p = Popen(['buck', 'audit', 'classpath', '--dot'] + MAIN, stdout = PIPE)
for line in p.stdout:
  m = PAT.search(line)
  if m:
    n = m.group(1)
    if args.src and n.endswith('__download_bin'):
      n = n[:-13] + 'src'
    targets.add(n)
r = p.wait()
if r != 0:
  exit(r)

try:
  check_call(['buck', 'build'] + sorted(targets))
except CalledProcessError as err:
  exit(1)
