2006-04-26 10:48:09 +00:00
|
|
|
#!/usr/bin/env python
|
2010-11-10 10:12:55 +00:00
|
|
|
# -*- coding: utf-8 -*-
|
2010-04-19 09:18:08 +00:00
|
|
|
# pylint: disable=W0404,W0622,W0704,W0613
|
2013-12-22 22:41:57 +00:00
|
|
|
# copyright 2003-2013 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
|
2010-11-10 10:12:55 +00:00
|
|
|
# contact http://www.logilab.fr/ -- mailto:contact@logilab.fr
|
|
|
|
#
|
|
|
|
# This file is part of pylint.
|
|
|
|
#
|
|
|
|
# pylint is free software: you can redistribute it and/or modify it under
|
|
|
|
# the terms of the GNU Lesser General Public License as published by the Free
|
|
|
|
# Software Foundation, either version 2.1 of the License, or (at your option) any
|
|
|
|
# later version.
|
|
|
|
#
|
|
|
|
# pylint is distributed in the hope that it will be useful, but WITHOUT
|
|
|
|
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
|
|
|
# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
|
|
|
|
# details.
|
|
|
|
#
|
|
|
|
# You should have received a copy of the GNU Lesser General Public License along
|
|
|
|
# with pylint. If not, see <http://www.gnu.org/licenses/>.
|
2009-01-21 09:03:41 +00:00
|
|
|
"""Generic Setup script, takes package info from __pkginfo__.py file.
|
|
|
|
"""
|
2014-08-29 16:26:11 +00:00
|
|
|
from __future__ import absolute_import, print_function
|
2009-01-21 09:03:41 +00:00
|
|
|
__docformat__ = "restructuredtext en"
|
2006-04-26 10:48:09 +00:00
|
|
|
|
|
|
|
import os
|
|
|
|
import sys
|
|
|
|
import shutil
|
2010-11-10 10:12:55 +00:00
|
|
|
from os.path import isdir, exists, join
|
2009-03-19 16:14:52 +00:00
|
|
|
|
2009-03-24 14:15:18 +00:00
|
|
|
try:
|
|
|
|
if os.environ.get('NO_SETUPTOOLS'):
|
|
|
|
raise ImportError()
|
|
|
|
from setuptools import setup
|
2015-01-12 09:02:04 +00:00
|
|
|
from setuptools.command import easy_install as easy_install_lib
|
2010-11-10 10:12:55 +00:00
|
|
|
from setuptools.command import install_lib
|
2009-03-24 14:15:18 +00:00
|
|
|
USE_SETUPTOOLS = 1
|
2009-06-11 13:29:43 +00:00
|
|
|
except ImportError:
|
2009-03-24 14:15:18 +00:00
|
|
|
from distutils.core import setup
|
2010-11-10 10:12:55 +00:00
|
|
|
from distutils.command import install_lib
|
2009-03-24 14:15:18 +00:00
|
|
|
USE_SETUPTOOLS = 0
|
2015-01-12 09:02:04 +00:00
|
|
|
easy_install_lib = None
|
2010-11-10 10:12:55 +00:00
|
|
|
|
2014-08-29 15:16:29 +00:00
|
|
|
from distutils.command.build_py import build_py
|
2010-12-06 12:29:56 +00:00
|
|
|
|
2009-03-24 14:15:18 +00:00
|
|
|
sys.modules.pop('__pkginfo__', None)
|
2010-11-19 16:18:58 +00:00
|
|
|
# import optional features
|
|
|
|
__pkginfo__ = __import__("__pkginfo__")
|
2006-04-26 10:48:09 +00:00
|
|
|
# import required features
|
2010-11-10 10:12:55 +00:00
|
|
|
from __pkginfo__ import modname, version, license, description, \
|
2014-02-26 08:23:42 +00:00
|
|
|
web, author, author_email, classifiers
|
2010-11-19 16:18:58 +00:00
|
|
|
|
2010-11-10 10:12:55 +00:00
|
|
|
distname = getattr(__pkginfo__, 'distname', modname)
|
|
|
|
scripts = getattr(__pkginfo__, 'scripts', [])
|
|
|
|
data_files = getattr(__pkginfo__, 'data_files', None)
|
|
|
|
subpackage_of = getattr(__pkginfo__, 'subpackage_of', None)
|
|
|
|
include_dirs = getattr(__pkginfo__, 'include_dirs', [])
|
|
|
|
ext_modules = getattr(__pkginfo__, 'ext_modules', None)
|
|
|
|
install_requires = getattr(__pkginfo__, 'install_requires', None)
|
|
|
|
dependency_links = getattr(__pkginfo__, 'dependency_links', [])
|
2009-01-21 09:03:41 +00:00
|
|
|
|
|
|
|
STD_BLACKLIST = ('CVS', '.svn', '.hg', 'debian', 'dist', 'build')
|
|
|
|
|
|
|
|
IGNORED_EXTENSIONS = ('.pyc', '.pyo', '.elc', '~')
|
2006-04-26 10:48:09 +00:00
|
|
|
|
2010-11-10 10:12:55 +00:00
|
|
|
if exists('README'):
|
2014-10-01 06:54:37 +00:00
|
|
|
with open('README') as stream:
|
|
|
|
long_description = stream.read()
|
2010-11-10 10:12:55 +00:00
|
|
|
else:
|
|
|
|
long_description = ''
|
2006-04-26 10:48:09 +00:00
|
|
|
|
|
|
|
def ensure_scripts(linux_scripts):
|
2010-11-10 10:12:55 +00:00
|
|
|
"""Creates the proper script names required for each platform
|
2006-04-26 10:48:09 +00:00
|
|
|
(taken from 4Suite)
|
|
|
|
"""
|
|
|
|
from distutils import util
|
|
|
|
if util.get_platform()[:3] == 'win':
|
2010-12-09 12:42:10 +00:00
|
|
|
return linux_scripts + [script + '.bat' for script in linux_scripts]
|
|
|
|
return linux_scripts
|
2006-04-26 10:48:09 +00:00
|
|
|
|
|
|
|
def get_packages(directory, prefix):
|
2010-11-10 10:12:55 +00:00
|
|
|
"""return a list of subpackages for the given directory"""
|
2006-04-26 10:48:09 +00:00
|
|
|
result = []
|
|
|
|
for package in os.listdir(directory):
|
|
|
|
absfile = join(directory, package)
|
|
|
|
if isdir(absfile):
|
2012-07-26 09:37:55 +00:00
|
|
|
if exists(join(absfile, '__init__.py')):
|
2006-04-26 10:48:09 +00:00
|
|
|
if prefix:
|
|
|
|
result.append('%s.%s' % (prefix, package))
|
|
|
|
else:
|
|
|
|
result.append(package)
|
|
|
|
result += get_packages(absfile, result[-1])
|
|
|
|
return result
|
|
|
|
|
2010-11-10 10:12:55 +00:00
|
|
|
EMPTY_FILE = '''"""generated file, don't modify or your data will be lost"""
|
|
|
|
try:
|
|
|
|
__import__('pkg_resources').declare_namespace(__name__)
|
|
|
|
except ImportError:
|
|
|
|
pass
|
|
|
|
'''
|
|
|
|
|
2015-01-12 09:02:04 +00:00
|
|
|
def _filter_tests(files):
|
|
|
|
testdir = join('pylint', 'test')
|
|
|
|
return [f for f in files if testdir not in f]
|
|
|
|
|
|
|
|
|
2010-11-10 10:12:55 +00:00
|
|
|
class MyInstallLib(install_lib.install_lib):
|
2013-06-19 14:43:48 +00:00
|
|
|
"""extend install_lib command to handle package __init__.py and
|
2010-11-10 10:12:55 +00:00
|
|
|
include_dirs variable if necessary
|
2006-04-26 10:48:09 +00:00
|
|
|
"""
|
2010-11-10 10:12:55 +00:00
|
|
|
def run(self):
|
|
|
|
"""overridden from install_lib class"""
|
|
|
|
install_lib.install_lib.run(self)
|
|
|
|
# create Products.__init__.py if needed
|
|
|
|
if subpackage_of:
|
|
|
|
product_init = join(self.install_dir, subpackage_of, '__init__.py')
|
|
|
|
if not exists(product_init):
|
|
|
|
self.announce('creating %s' % product_init)
|
2014-10-26 20:30:46 +00:00
|
|
|
with open(product_init, 'w') as stream:
|
|
|
|
stream.write(EMPTY_FILE)
|
2010-11-10 10:12:55 +00:00
|
|
|
# manually install included directories if any
|
|
|
|
if include_dirs:
|
|
|
|
if subpackage_of:
|
|
|
|
base = join(subpackage_of, modname)
|
2006-04-26 10:48:09 +00:00
|
|
|
else:
|
2010-11-10 10:12:55 +00:00
|
|
|
base = modname
|
|
|
|
for directory in include_dirs:
|
|
|
|
dest = join(self.install_dir, base, directory)
|
2013-06-19 14:43:48 +00:00
|
|
|
if sys.version_info >= (3, 0):
|
2014-11-28 19:09:45 +00:00
|
|
|
exclude = set(['invalid_encoded_data*',
|
2014-12-04 14:53:42 +00:00
|
|
|
'unknown_encoding*'])
|
2013-06-19 14:43:48 +00:00
|
|
|
else:
|
|
|
|
exclude = set()
|
2010-11-10 10:12:55 +00:00
|
|
|
shutil.rmtree(dest, ignore_errors=True)
|
2014-09-30 18:15:47 +00:00
|
|
|
shutil.copytree(directory, dest,
|
|
|
|
ignore=shutil.ignore_patterns(*exclude))
|
2013-06-19 14:43:48 +00:00
|
|
|
if sys.version_info >= (3, 0):
|
|
|
|
# process manually python file in include_dirs (test data)
|
2013-12-22 22:41:57 +00:00
|
|
|
# pylint: disable=no-name-in-module
|
2013-10-03 18:45:00 +00:00
|
|
|
from distutils.util import run_2to3
|
2014-08-29 15:16:29 +00:00
|
|
|
print(('running 2to3 on', dest))
|
2013-10-03 18:45:00 +00:00
|
|
|
run_2to3([dest])
|
2010-04-19 09:22:40 +00:00
|
|
|
|
2014-04-18 12:57:46 +00:00
|
|
|
# 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):
|
2015-01-12 09:02:04 +00:00
|
|
|
files = _filter_tests(files)
|
2014-04-18 12:57:46 +00:00
|
|
|
install_lib.install_lib.byte_compile(self, files)
|
2012-09-14 11:25:22 +00:00
|
|
|
|
2015-01-12 09:02:04 +00:00
|
|
|
|
|
|
|
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)
|
|
|
|
|
|
|
|
|
2006-04-26 10:48:09 +00:00
|
|
|
def install(**kwargs):
|
|
|
|
"""setup entry point"""
|
2009-03-09 09:55:20 +00:00
|
|
|
if USE_SETUPTOOLS:
|
|
|
|
if '--force-manifest' in sys.argv:
|
|
|
|
sys.argv.remove('--force-manifest')
|
2010-11-10 10:12:55 +00:00
|
|
|
# install-layout option was introduced in 2.5.3-1~exp1
|
|
|
|
elif sys.version_info < (2, 5, 4) and '--install-layout=deb' in sys.argv:
|
|
|
|
sys.argv.remove('--install-layout=deb')
|
|
|
|
if subpackage_of:
|
|
|
|
package = subpackage_of + '.' + modname
|
|
|
|
kwargs['package_dir'] = {package : '.'}
|
|
|
|
packages = [package] + get_packages(os.getcwd(), package)
|
|
|
|
if USE_SETUPTOOLS:
|
|
|
|
kwargs['namespace_packages'] = [subpackage_of]
|
|
|
|
else:
|
|
|
|
kwargs['package_dir'] = {modname : '.'}
|
|
|
|
packages = [modname] + get_packages(os.getcwd(), modname)
|
2012-09-14 11:25:22 +00:00
|
|
|
if USE_SETUPTOOLS:
|
|
|
|
if install_requires:
|
|
|
|
kwargs['install_requires'] = install_requires
|
|
|
|
kwargs['dependency_links'] = dependency_links
|
|
|
|
kwargs['entry_points'] = {'console_scripts': [
|
2014-07-25 15:23:37 +00:00
|
|
|
'pylint = pylint:run_pylint',
|
|
|
|
'pylint-gui = pylint:run_pylint_gui',
|
|
|
|
'epylint = pylint:run_epylint',
|
|
|
|
'pyreverse = pylint:run_pyreverse',
|
|
|
|
'symilar = pylint:run_symilar',
|
|
|
|
]}
|
2006-04-26 10:48:09 +00:00
|
|
|
kwargs['packages'] = packages
|
2015-01-12 09:02:04 +00:00
|
|
|
cmdclass = {'install_lib': MyInstallLib,
|
|
|
|
'build_py': build_py}
|
|
|
|
if easy_install:
|
|
|
|
cmdclass['easy_install'] = easy_install
|
2013-12-22 22:41:57 +00:00
|
|
|
return setup(name=distname,
|
|
|
|
version=version,
|
|
|
|
license=license,
|
|
|
|
description=description,
|
|
|
|
long_description=long_description,
|
|
|
|
author=author,
|
|
|
|
author_email=author_email,
|
|
|
|
url=web,
|
|
|
|
scripts=ensure_scripts(scripts),
|
2014-02-26 08:23:42 +00:00
|
|
|
classifiers=classifiers,
|
2013-12-22 22:41:57 +00:00
|
|
|
data_files=data_files,
|
|
|
|
ext_modules=ext_modules,
|
2015-01-12 09:02:04 +00:00
|
|
|
cmdclass=cmdclass,
|
2013-12-22 22:41:57 +00:00
|
|
|
**kwargs)
|
2010-04-19 09:22:40 +00:00
|
|
|
|
2014-07-25 15:23:37 +00:00
|
|
|
if __name__ == '__main__':
|
2006-04-26 10:48:09 +00:00
|
|
|
install()
|