#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Copyright 2018 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

"""Wrapper of pkg-config command line to format output for gn.

Parses the pkg-config output and format it into json,
so that it can be used in GN files easily.

Usage:
  pkg-config_wrapper.py pkg-config pkg1 pkg2 ...

Specifically, this script does not expect any additional flags.
"""

from __future__ import print_function

import json
import shlex
import sys
import subprocess


def get_shell_output(cmd):
  """Run |cmd| and return output as a list."""
  output = subprocess.check_output(cmd, encoding='utf-8')
  return shlex.split(output)


def main(argv):
  cflags = get_shell_output(argv + ['--cflags'])
  libs = []
  lib_dirs = []
  ldflags = []
  for ldflag in get_shell_output(argv + ['--libs']):
    if ldflag.startswith('-l'):
      # Strip -l.
      libs.append(ldflag[2:])
    elif ldflag.startswith('-L'):
      # Strip -L.
      lib_dirs.append(ldflag[2:])
    else:
      ldflags.append(ldflag)

  # Set sort_keys=True for stabilization.
  result = {
      'cflags': cflags,
      'libs': libs,
      'lib_dirs': lib_dirs,
      'ldflags': ldflags,
  }
  json.dump(result, sys.stdout, sort_keys=True)


if __name__ == '__main__':
  sys.exit(main(sys.argv[1:]))
