#
# 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.
#

[tox]
envlist = py27,py35,py36,py37
skipsdist = True
minversion = ${TOX_VERSION}
skip_missing_interpreters = True
skip_install = True

[testenv]
# we ignore lots of errors/warnings we probably should not,
# but it will take a lot of effort to make the code PEP8 compliant...
commands = flake8 --count --show-source \
  ${CMAKE_SOURCE_DIR}/python \
  ${CMAKE_SOURCE_DIR}/console \
  ${CMAKE_SOURCE_DIR}/docs \
  ${CMAKE_SOURCE_DIR}/tests \
  ${CMAKE_SOURCE_DIR}/tools \
  ${CMAKE_SOURCE_DIR}/tools/qdstat \
  ${CMAKE_SOURCE_DIR}/tools/qdmanage \
  --ignore=E111,E114,E121,E122,E123,E124,E126,E127,E128,E129,E131,E201,E202,E203,E211,E221,E222,E225,E226,E228,E231,E241,E251,E261,E266,E265,E271,E272,E301,E302,E303,E305,E306,E401,E402,E501,E502,E701,E702,E703,E704,E711,E712,E713,E714,E731,E722,F401,F403,F405,F811,F841,H101,H102,H104,H201,H202,H234,H237,H238,H301,H306,H401,H403,H404,H405,W291,W292,W293,W391,W503,W504
deps = hacking>=1.1.0

# flake8 no longer supports python2.6
# [testenv:py26]
# basepython = python2.6

[testenv:py27]
basepython = python2.7

[testenv:py35]
basepython = python3.5

[testenv:py36]
basepython = python3.6

[testenv:py37]
basepython = python3.7

