#!/usr/bin/env python
# vim: tabstop=4 shiftwidth=4 softtabstop=4

# Copyright 2010 United States Government as represented by the
# Administrator of the National Aeronautics and Space Administration.
# All Rights Reserved.
#
#    Licensed 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.

import setuptools

from tempest.openstack.common import setup as common_setup

requires = common_setup.parse_requirements()
depend_links = common_setup.parse_dependency_links()

setuptools.setup(name='tempest',
                 version="2012.2",
                 description='Integration test tools',
                 author='OpenStack',
                 author_email='openstack-qa@lists.launchpad.net',
                 url='http://www.openstack.org/',
                 classifiers=['Environment :: OpenStack',
                              'Intended Audience :: Information Technology',
                              'Intended Audience :: System Administrators',
                              'Intended Audience :: Developers',
                              'License :: OSI Approved :'
                              ': Apache Software License',
                              'Operating System :: POSIX :: Linux',
                              'Programming Language :: Python',
                              'Programming Language :: Python :: 2',
                              'Programming Language :: Python :: 2.7', ],
                 cmdclass=common_setup.get_cmdclass(),
                 packages=setuptools.find_packages(exclude=['bin']),
                 install_requires=requires,
                 dependency_links=depend_links,
                 include_package_data=True,
                 test_suite='nose.collector',
                 setup_requires=['setuptools_git>=0.4'],
                 scripts=['bin/tempest'],
                 py_modules=[])
