#
# 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,py38
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,E741,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

[testenv:py38]
basepython = python3.8

