#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

# Always prefer setuptools over distutils
from setuptools import setup


setup(
    name='singa',

    version='${PACKAGE_VERSION}',

    description='A General Deep Learning System',

    url='https://github.com/apache/incubator-singa',

    author='Apache SINGA (incubating)',
    author_email='dev@singa.incubator.apache.org',

    license='Apache 2',

    classifiers=[
        #   3 - Alpha
        #   4 - Beta
        #   5 - Production/Stable
        'Development Status :: 3 - Alpha',

        'Intended Audience :: Developers',
        'Topic :: Deep Learning System ',

        'License :: Apache License',

        # Specify the Python versions you support here. In particular, ensure
        # that you indicate whether you support Python 2, Python 3 or both.
        #'Programming Language :: Python :: 2',
        #'Programming Language :: Python :: 2.6',
        #'Programming Language :: Python :: 2.7',
        'Programming Language :: Python :: 3',
        ],

    keywords='deep learning singa apache',

    packages=['rafiki', 'singa', 'singa.proto'],

    # py_modules=["singa"],

    #install_requires=[
    #    'numpy>=1.11.0',
    #    'protobuf==3.6.1',
    #    'unittest-xml-reporting',
    #    'flask>=0.10.1',
    #    'flask_cors>=3.0.2',
    #    'pillow>=2.3.0',
    #    'future',
    #    'tqdm',
    #    'openblas==0.2.19',
    #    'glog==0.3.4',
    #    ],

    #List additional groups of dependencies here (e.g. development
    #dependencies). You can install these using the following syntax,
    #for example:
    #$ pip install -e .[dev,test]
    #extras_require={
    #   'dev': ['check-manifest'],
    #   'test': ['coverage'],
    #},

    #If there are data files included in your packages that need to be
    #installed, specify them here.  If using Python 2.6 or less, then these
    #have to be included in MANIFEST.in as well.

    package_data={
        'singa': ['_singa_wrap.so'],
    },

    #Although 'package_data' is the preferred approach, in some case you may
    #need to place data files outside of your packages. See:
    #http://docs.python.org/3.4/distutils/setupscript.html#installing-additional-files # noqa
    #In this case, 'data_file' will be installed into '<sys.prefix>/my_data'
    #data_files=[('my_data', ['data/data_file'])],

    #To provide executable scripts, use entry points in preference to the
    #"scripts" keyword. Entry points provide cross-platform support and allow
    #pip to create the appropriate form of executable for the target platform.

    entry_points={
        'console_scripts': [
            'singa=singa.command:main',
        ],
    },
)
