blob: f71c297381f4ecdae89a46097bbd2baef0d607fa [file] [log] [blame]
# Copyright (c) 2006, 2009-2010, 2012-2014 LOGILAB S.A. (Paris, FRANCE) <[email protected]>
# Copyright (c) 2010 Julien Jehannet <[email protected]>
# Copyright (c) 2012 FELD Boris <[email protected]>
# Copyright (c) 2013 Benedikt Morbach <[email protected]>
# Copyright (c) 2013 T.Rzepka <[email protected]>
# Copyright (c) 2014-2020 Claudiu Popa <[email protected]>
# Copyright (c) 2014 Pedro Algarvio <[email protected]>
# Copyright (c) 2014 Brett Cannon <[email protected]>
# Copyright (c) 2014 Google, Inc.
# Copyright (c) 2014 Ricardo Gemignani <[email protected]>
# Copyright (c) 2015 Ionel Cristian Maries <[email protected]>
# Copyright (c) 2016 Florian Bruhin <[email protected]>
# Copyright (c) 2017 Hugo <[email protected]>
# Copyright (c) 2019-2021 Pierre Sassoulas <[email protected]>
# Copyright (c) 2019 Enji Cooper <[email protected]>
# Copyright (c) 2019 Hugo van Kemenade <[email protected]>
# Copyright (c) 2019 Ashley Whetter <[email protected]>
# Copyright (c) 2020 frostming <[email protected]>
# Copyright (c) 2020 Frost Ming <[email protected]>
# Copyright (c) 2020 hippo91 <[email protected]>
# Copyright (c) 2020 Damien Baty <[email protected]>
# Copyright (c) 2020 Bryce Guinta <[email protected]>
# Copyright (c) 2020 Ville Skyttä <[email protected]>
# Copyright (c) 2020 Anthony Sottile <[email protected]>
# Copyright (c) 2021 Marc Mueller <[email protected]>
# Licensed under the GPL: https://www.gnu.org/licenses/old-licenses/gpl-2.0.html
# For details: https://github.com/PyCQA/pylint/blob/master/COPYING
"""Generic Setup script, takes package info from __pkginfo__.py file."""
# pylint: disable=import-outside-toplevel,arguments-differ,ungrouped-imports,exec-used
import os
import sys
from distutils.command.build_py import build_py
from os.path import exists, isdir, join
from typing import Any, Dict
try:
from setuptools import setup
from setuptools.command import easy_install as easy_install_lib
from setuptools.command import install_lib # pylint: disable=unused-import
USE_SETUPTOOLS = 1
except ImportError:
from distutils.command import ( # noqa: F401; pylint: disable=unused-import
install_lib,
)
from distutils.core import setup
USE_SETUPTOOLS = 0
easy_install_lib = None
__docformat__ = "restructuredtext en"
base_dir = os.path.dirname(__file__)
__pkginfo__: Dict[str, Any] = {}
with open(os.path.join(base_dir, "pylint", "__pkginfo__.py")) as pkginfo_fp:
exec(pkginfo_fp.read(), __pkginfo__)
scripts = __pkginfo__.get("scripts", [])
data_files = __pkginfo__.get("data_files", None)
ext_modules = __pkginfo__.get("ext_modules", None)
install_requires = __pkginfo__.get("install_requires", None)
dependency_links = __pkginfo__.get("dependency_links", [])
extras_require = __pkginfo__.get("extras_require", {})
project_urls = __pkginfo__.get("project_urls", {})
readme_path = join(base_dir, "README.rst")
if exists(readme_path):
with open(readme_path, encoding="UTF-8") as stream:
long_description = stream.read()
else:
long_description = ""
needs_pytest = {"pytest", "test", "ptr"}.intersection(sys.argv)
pytest_runner = ["pytest-runner"] if needs_pytest else []
def ensure_scripts(linux_scripts):
"""Creates the proper script names required for each platform
(taken from 4Suite)
"""
from distutils import util
if util.get_platform()[:3] == "win":
return linux_scripts + [script + ".bat" for script in linux_scripts]
return linux_scripts
def get_packages(directory, prefix):
"""return a list of subpackages for the given directory"""
result = []
for package in os.listdir(directory):
absfile = join(directory, package)
if isdir(absfile):
if exists(join(absfile, "__init__.py")):
if prefix:
result.append(f"{prefix}.{package}")
else:
result.append(package)
result += get_packages(absfile, result[-1])
return result
def _filter_tests(files):
testdir = join("pylint", "test")
return [f for f in files if testdir not in f]
if easy_install_lib:
class easy_install(easy_install_lib.easy_install):
# override this since pip/easy_install attempt to byte compile
# test data files, some of them being syntactically wrong by design,
# and this scares the end-user
def byte_compile(self, files):
files = _filter_tests(files)
easy_install_lib.easy_install.byte_compile(self, files)
def install(**kwargs):
"""setup entry point"""
if USE_SETUPTOOLS:
if "--force-manifest" in sys.argv:
sys.argv.remove("--force-manifest")
packages = ["pylint"] + get_packages(join(base_dir, "pylint"), "pylint")
if USE_SETUPTOOLS:
if install_requires:
kwargs["install_requires"] = install_requires
kwargs["dependency_links"] = dependency_links
kwargs["entry_points"] = {
"console_scripts": [
"pylint = pylint:run_pylint",
"epylint = pylint:run_epylint",
"pyreverse = pylint:run_pyreverse",
"symilar = pylint:run_symilar",
]
}
kwargs["packages"] = packages
cmdclass = {"build_py": build_py}
if easy_install_lib:
cmdclass["easy_install"] = easy_install
return setup(
name="pylint",
version=__pkginfo__["version"],
license=__pkginfo__["license"],
description=__pkginfo__["description"],
long_description=long_description,
author=__pkginfo__["author"],
author_email=__pkginfo__["author_email"],
url=__pkginfo__["web"],
scripts=ensure_scripts(scripts),
classifiers=__pkginfo__["classifiers"],
data_files=data_files,
ext_modules=ext_modules,
cmdclass=cmdclass,
extras_require=extras_require,
test_suite="test",
python_requires="~=3.6",
setup_requires=pytest_runner,
tests_require=["pytest", "pytest-benchmark"],
project_urls=project_urls,
**kwargs,
)
if __name__ == "__main__":
install()