#
# 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 ${CMAKE_SOURCE_DIR}/python ${CMAKE_SOURCE_DIR}/console ${CMAKE_SOURCE_DIR}/docs ${CMAKE_SOURCE_DIR}/tests ${CMAKE_SOURCE_DIR}/tools --show-source --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,E401,E402,E501,E502,E701,E702,E703,E704,E711,E712,E713,E714,E731,F401,F403,F405,F811,F841,H101,H102,H104,H201,H202,H234,H237,H238,H301,H306,H401,H403,H404,H405,W291,W292,W293,W391,W503
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

