#!/usr/bin/env python
# Copyright 2014 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.

import glob
import optparse
import os
import shutil
import subprocess
import sys


def reorder_imports(input_dir, output_dir, architecture):
    """Run swapimports.exe on the initial chrome.exe, and write to the output
  directory. Also copy over any related files that might be needed
  (pdbs, manifests etc.).
  """

    input_image = os.path.join(input_dir, 'chrome.exe')
    output_image = os.path.join(output_dir, 'chrome.exe')

    swap_exe = os.path.join(
        __file__,
        '..\\..\\..\\third_party\\syzygy\\binaries\\exe\\swapimport.exe')

    args = [
        swap_exe,
        '--input-image=%s' % input_image,
        '--output-image=%s' % output_image, '--overwrite', '--no-logo'
    ]

    if architecture == 'x64':
        args.append('--x64')

    args.append('chrome_elf.dll')

    subprocess.call(args)

    for fname in glob.iglob(os.path.join(input_dir, 'chrome.exe.*')):
        shutil.copy(fname, os.path.join(output_dir, os.path.basename(fname)))
    return 0


def main(argv):
    usage = 'reorder_imports.py -i <input_dir> -o <output_dir> -a <target_arch>'
    parser = optparse.OptionParser(usage=usage)
    parser.add_option(
        '-i', '--input', help='reorder chrome.exe in DIR', metavar='DIR')
    parser.add_option(
        '-o', '--output', help='write new chrome.exe to DIR', metavar='DIR')
    parser.add_option(
        '-a', '--arch', help='architecture of build (optional)', default='ia32')
    opts, args = parser.parse_args()

    if not opts.input or not opts.output:
        parser.error('Please provide and input and output directory')
    return reorder_imports(opts.input, opts.output, opts.arch)


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