#!/usr/bin/env python
# Copyright 2016 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

"""
Replaces GN files in tree with files from here that
make the build use system libraries.
"""

from __future__ import print_function

import argparse
import os
import shutil
import sys


REPLACEMENTS = {
  'ffmpeg': 'third_party/ffmpeg/BUILD.gn',
  'flac': 'third_party/flac/BUILD.gn',
  'fontconfig': 'third_party/fontconfig/BUILD.gn',
  'freetype': 'build/config/freetype/freetype.gni',
  'harfbuzz-ng': 'third_party/harfbuzz-ng/harfbuzz.gni',
  'icu': 'third_party/icu/BUILD.gn',
  'libdrm': 'third_party/libdrm/BUILD.gn',
  'libevent': 'base/third_party/libevent/BUILD.gn',
  'libjpeg': 'third_party/libjpeg.gni',
  'libpng': 'third_party/libpng/BUILD.gn',
  'libvpx': 'third_party/libvpx/BUILD.gn',
  'libwebp': 'third_party/libwebp/BUILD.gn',
  'libxml': 'third_party/libxml/BUILD.gn',
  'libxslt': 'third_party/libxslt/BUILD.gn',
  'openh264': 'third_party/openh264/BUILD.gn',
  'opus': 'third_party/opus/BUILD.gn',
  're2': 'third_party/re2/BUILD.gn',
  'snappy': 'third_party/snappy/BUILD.gn',
  'zlib': 'third_party/zlib/BUILD.gn',
}


def DoMain(argv):
  my_dirname = os.path.dirname(__file__)
  source_tree_root = os.path.abspath(
    os.path.join(my_dirname, '..', '..', '..'))

  parser = argparse.ArgumentParser()
  parser.add_argument('--system-libraries', nargs='*', default=[])
  parser.add_argument('--undo', action='store_true')

  args = parser.parse_args(argv)

  handled_libraries = set()
  for lib, path in REPLACEMENTS.items():
    if lib not in args.system_libraries:
      continue
    handled_libraries.add(lib)

    if args.undo:
      # Restore original file, and also remove the backup.
      # This is meant to restore the source tree to its original state.
      os.rename(os.path.join(source_tree_root, path + '.orig'),
                os.path.join(source_tree_root, path))
    else:
      # Create a backup copy for --undo.
      shutil.copyfile(os.path.join(source_tree_root, path),
                      os.path.join(source_tree_root, path + '.orig'))

      # Copy the GN file from directory of this script to target path.
      shutil.copyfile(os.path.join(my_dirname, '%s.gn' % lib),
                      os.path.join(source_tree_root, path))

  unhandled_libraries = set(args.system_libraries) - handled_libraries
  if unhandled_libraries:
    print('Unrecognized system libraries requested: %s' % ', '.join(
        sorted(unhandled_libraries)), file=sys.stderr)
    return 1

  return 0


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