#!/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',
  'harfbuzz-ng': 'third_party/harfbuzz-ng/BUILD.gn',
  'icu': 'third_party/icu/BUILD.gn',
  'libevent': 'base/third_party/libevent/BUILD.gn',
  'libjpeg': 'build/secondary/third_party/libjpeg_turbo/BUILD.gn',
  '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',
  're2': 'third_party/re2/BUILD.gn',
  'snappy': 'third_party/snappy/BUILD.gn',
  'yasm': 'third_party/yasm/yasm_assemble.gni',
  '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:]))
