#!/usr/bin/env python
#    Copyright 2015-2016 ARM Limited
#
# 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.
#
from setuptools import setup, find_packages


execfile("bart/version.py")

LONG_DESCRIPTION = """Behavioural Analysis involves the expressing the general
expectation of the state of the system while targeting a single or set of heuristics.
This is particularly helpful when there are large number of factors that can change
the behaviour of the system and testing all permutations of these input parameters
is impossible. In such a scenario an assertion of the final expectation can be
useful in managing performance and regression.

The Behavioural Analysis and Regression Toolkit is based on TRAPpy. The primary goal is
to assert behaviours using the FTrace output from the kernel
"""

REQUIRES = [
    "TRAPpy>=3.0",
]

setup(name='bart-py',
      version=__version__,
      license="Apache v2",
      author="ARM-BART",
      author_email="bart@arm.com",
      description="Behavioural Analysis and Regression Toolkit",
      long_description=LONG_DESCRIPTION,
      url="http://arm-software.github.io/bart",
      packages=find_packages(),
      include_package_data=True,
      classifiers=[
          "Development Status :: 5 - Production/Stable",
          "Environment :: Web Environment",
          "Environment :: Console",
          "License :: OSI Approved :: Apache Software License",
          "Operating System :: POSIX :: Linux",
          "Programming Language :: Python :: 2.7",
          # As we depend on trace data from the Linux Kernel/FTrace
          "Topic :: System :: Operating System Kernels :: Linux",
          "Topic :: Scientific/Engineering :: Visualization"
      ],
      install_requires=REQUIRES
      )
