#!python
""" Copy, relink library dependencies for wheel

Overwrites the wheel in-place by default
"""
# vim: ft=python
from __future__ import division, print_function, absolute_import

import os
from os.path import join as pjoin, basename, exists, expanduser
import sys

from optparse import OptionParser, Option

from delocate import delocate_wheel, __version__

def main():
    parser = OptionParser(
        usage="%s WHEEL_FILENAME\n\n" % sys.argv[0] + __doc__,
        version="%prog " + __version__)
    parser.add_option(
        Option("-L", "--lib-sdir",
               action="store", type='string', default='.dylibs',
               help="Subdirectory in packages to store copied libraries"))
    parser.add_option(
        Option("-w", "--wheel-dir",
               action="store", type='string',
               help="Directory to store delocated wheels (default is to "
               "overwrite input)"))
    parser.add_option(
        Option("-v", "--verbose",
               action="store_true",
               help="Show libraries copied during fix"))
    (opts, wheels) = parser.parse_args()
    if len(wheels) < 1:
        parser.print_help()
        sys.exit(1)
    multi = len(wheels) > 1
    if opts.wheel_dir:
        wheel_dir = expanduser(opts.wheel_dir)
        if not exists(wheel_dir):
            os.makedirs(wheel_dir)
    else:
        wheel_dir = None
    for wheel in wheels:
        if multi or opts.verbose:
            print('Fixing: ' + wheel)
        if wheel_dir:
            out_wheel = pjoin(wheel_dir, basename(wheel))
        else:
            out_wheel = wheel
        copied = delocate_wheel(wheel, out_wheel, lib_sdir=opts.lib_sdir)
        if opts.verbose and len(copied):
            print("Copied to package {0} directory:".format(opts.lib_sdir))
            copy_lines = ['  ' + name for name in sorted(copied)]
            print('\n'.join(copy_lines))


if __name__ == '__main__':
    main()
