// Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

library dart2js.profile_many;

import 'dart:async';

import 'package:compiler/src/dart2js.dart' as cmdline

const String USAGE = """
Usage: dart2js_profile_many.dart [OPTIONS] [FILES]

Invokes dart2js separately for each file using the given options.
This is for profiling multiple compilations in the Dart Observatory.
""";

printUsage() {
  print(USAGE);
}

void main(List<String> args) {
  List options = [];
  List files = [];

  for (String arg in args) {
    if (arg.startsWith('-')) {
      options.add(arg);
    } else {
      files.add(arg);
    }
  }

  if (files.length == 0) {
    printUsage();
    return;
  }

  cmdline.exitFunc = (code) {
    throw "Exit with code $code";
  };

  Future.forEach(files, (String file) {
    List subargs = [];
    subargs.addAll(options);
    subargs.add(file);
    return cmdline.compilerMain(subargs).catchError((e) {});
  }).then((_) {
    print("Done");
  });
}
