#!/usr/bin/env python3
#
# Copyright 2013 The Flutter Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
""" Parses manifest file and dumps it to json.
"""

import argparse
import json
import os
import sys
import hashlib

def main():
  parser = argparse.ArgumentParser()

  parser.add_argument(
      '--input', dest='file_path', action='store', required=True)
  parser.add_argument(
      '--clang-cpu', dest='clang_cpu', action='store', required=True)

  args = parser.parse_args()

  with open(args.file_path) as f:
    data = json.load(f)

  output = {}
  target = args.clang_cpu + '-fuchsia'

  for d in data:
    if target in d['target']:
      for runtime in d['runtime']:
        # key contains the soname and the cflags used to compile it.
        # this allows us to distinguish between different sanitizers
        # and experiments
        key = runtime['soname'] + ''.join(d['cflags'])
        md5 = hashlib.md5(key.encode()).hexdigest()
        hash_key = 'md5_%s' % md5
        # Uncomment this line to get the hash keys
        # print runtime['dist'], d['cflags'], hash_key
        output[hash_key] = os.path.dirname(runtime['dist'])

  print(json.dumps(output))

  return 0


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