// Copyright (c) 2018, 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.

import 'dart:async';
import 'dart:io';

import 'package:analyzer_fe_comparison/comparison.dart';
import 'package:path/path.dart' as path;

/// Compares the analyzer and front_end behavior when compiling a package.
///
/// Currently hardcoded to use the package "analyzer".
main() async {
  var scriptPath = Platform.script.toFilePath();
  var sdkRepoPath =
      path.normalize(path.join(path.dirname(scriptPath), '..', '..', '..'));
  var buildPath = await _findBuildDir(sdkRepoPath, 'ReleaseX64');
  var dillPath = path.join(buildPath, 'vm_platform_strong.dill');
  var analyzerLibPath = path.join(sdkRepoPath, 'pkg', 'analyzer', 'lib');
  var packagesFilePath = path.join(sdkRepoPath, '.packages');
  compare(dillPath, analyzerLibPath, packagesFilePath);
}

Future<String> _findBuildDir(String sdkRepoPath, String targetName) async {
  for (var subdirName in ['out', 'xcodebuild']) {
    var candidatePath = path.join(sdkRepoPath, subdirName, targetName);
    if (await new Directory(candidatePath).exists()) {
      return candidatePath;
    }
  }
  throw new StateError('Cannot find build directory');
}
