#!/usr/bin/env python

# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License. See LICENSE in the project root
# for license information.

import os
import os.path
import subprocess
import sys

pure = None
if '--pure' in sys.argv:
    pure = True
    sys.argv.remove('--pure')
elif '--universal' in sys.argv:
    pure = True
elif '--abi' in sys.argv:
    pure = False
    sys.argv.remove('--abi')


from setuptools import setup  # noqa
import versioneer  # noqa

sys.path.insert(0, os.path.join(os.path.dirname(os.path.abspath(__file__)), 'src'))
import ptvsd  # noqa
import ptvsd._vendored  # noqa
del sys.path[0]


PYDEVD_ROOT = ptvsd._vendored.project_root('pydevd')
PTVSD_ROOT = os.path.dirname(os.path.abspath(ptvsd.__file__))


def get_buildplatform():
    if '-p' in sys.argv:
        return sys.argv[sys.argv.index('-p') + 1]
    return None

def cython_build():
    print('Compiling extension modules (set SKIP_CYTHON_BUILD=1 to omit)')
    subprocess.call([
        sys.executable,
        os.path.join(PYDEVD_ROOT, 'setup_cython.py'),
        'build_ext',
        '-i',
    ])


def iter_vendored_files():
    # Add pydevd files as data files for this package. They are not
    # treated as a package of their own, because we don't actually
    # want to provide pydevd - just use our own copy internally.
    for project in ptvsd._vendored.list_all():
        for filename in ptvsd._vendored.iter_packaging_files(project):
            yield filename


with open('DESCRIPTION.md', 'r') as fh:
    long_description = fh.read()


try:
    from wheel.bdist_wheel import bdist_wheel as _bdist_wheel

    class bdist_wheel(_bdist_wheel):
        def finalize_options(self):
            _bdist_wheel.finalize_options(self)
            self.root_is_pure = pure

except ImportError:
    bdist_wheel = None

if __name__ == '__main__':
    if not os.getenv('SKIP_CYTHON_BUILD'):
        cython_build()

    cmds = versioneer.get_cmdclass()
    cmds['bdist_wheel'] = bdist_wheel

    extras = {}
    platforms = get_buildplatform()
    if platforms is not None:
        extras['platforms'] = platforms

    setup(
        name='ptvsd',
        version=versioneer.get_version(),
        description='Remote debugging server for Python support in Visual Studio and Visual Studio Code', # noqa
        long_description=long_description,
        long_description_content_type='text/markdown',
        license='MIT',
        author='Microsoft Corporation',
        author_email='ptvshelp@microsoft.com',
        url='https://aka.ms/ptvs',
        python_requires='>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*',
        classifiers=[
            'Development Status :: 5 - Production/Stable',
            'Programming Language :: Python :: 2.7',
            'Programming Language :: Python :: 3.4',
            'Programming Language :: Python :: 3.5',
            'Programming Language :: Python :: 3.6',
            'Programming Language :: Python :: 3.7',
            'Topic :: Software Development :: Debuggers',
            'Operating System :: OS Independent',
            'License :: OSI Approved :: Eclipse Public License 2.0 (EPL-2.0)',
            'License :: OSI Approved :: MIT License',
        ],
        package_dir={'': 'src'},
        packages=[
            'ptvsd',
            'ptvsd._vendored',
        ],
        package_data={
            'ptvsd': ['ThirdPartyNotices.txt'],
            'ptvsd._vendored': list(iter_vendored_files()),
        },
        cmdclass=cmds,
        **extras
    )
