summaryrefslogtreecommitdiff
path: root/setup.py
diff options
context:
space:
mode:
authorEmile Anclin <emile.anclin@logilab.fr>2010-11-10 11:12:55 +0100
committerEmile Anclin <emile.anclin@logilab.fr>2010-11-10 11:12:55 +0100
commitf914935474845bda71e5cd7a685e3b73201a8d5b (patch)
treea8a32be15e5506958a4af7a4c8c3239dc7e0e8c2 /setup.py
parente92032fb31485a9bbf09ca42130547c5d69ba72b (diff)
downloadpylint-f914935474845bda71e5cd7a685e3b73201a8d5b.tar.gz
packaging : add py3k target; update setup.py and other files to make py3k packaging work
Diffstat (limited to 'setup.py')
-rw-r--r--setup.py163
1 files changed, 91 insertions, 72 deletions
diff --git a/setup.py b/setup.py
index 4a07641..bbf183a 100644
--- a/setup.py
+++ b/setup.py
@@ -1,75 +1,87 @@
#!/usr/bin/env python
+# -*- coding: utf-8 -*-
# pylint: disable=W0404,W0622,W0704,W0613
+# copyright 2003-2010 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
+# 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/>.
"""Generic Setup script, takes package info from __pkginfo__.py file.
-
-:copyright: 2003-2010 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
-:contact: http://www.logilab.fr/ -- mailto:contact@logilab.fr
-:license: General Public License version 2 - http://www.gnu.org/licenses
"""
__docformat__ = "restructuredtext en"
import os
import sys
import shutil
-from os.path import isdir, exists, join, walk
-
-# FIXME : setup.py doesn't work with setuptools so we use distutils
+from os.path import isdir, exists, join
try:
if os.environ.get('NO_SETUPTOOLS'):
raise ImportError()
from setuptools import setup
+ from setuptools.command import install_lib
USE_SETUPTOOLS = 1
except ImportError:
from distutils.core import setup
+ from distutils.command import install_lib
USE_SETUPTOOLS = 0
-#assert USE_SETUPTOOLS
+
sys.modules.pop('__pkginfo__', None)
# import required features
-from __pkginfo__ import modname, version, license, description, long_desc, \
- web, author, author_email, classifiers
+from __pkginfo__ import modname, version, license, description, \
+ web, author, author_email
# import optional features
-try:
- from __pkginfo__ import distname
-except ImportError:
- distname = modname
-try:
- from __pkginfo__ import scripts
-except ImportError:
- scripts = []
-try:
- from __pkginfo__ import install_requires
-except ImportError:
- install_requires = None
+import __pkginfo__
+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', [])
STD_BLACKLIST = ('CVS', '.svn', '.hg', 'debian', 'dist', 'build')
IGNORED_EXTENSIONS = ('.pyc', '.pyo', '.elc', '~')
+if exists('README'):
+ long_description = open('README').read()
+else:
+ long_description = ''
def ensure_scripts(linux_scripts):
- """
- Creates the proper script names required for each platform
+ """Creates the proper script names required for each platform
(taken from 4Suite)
"""
from distutils import util
if util.get_platform()[:3] == 'win':
- scripts_ = linux_scripts + [script + '.bat'
- for script in linux_scripts]
+ scripts_ = [script + '.bat' for script in linux_scripts]
else:
scripts_ = linux_scripts
return scripts_
-
def get_packages(directory, prefix):
- """return a list of subpackages for the given directory
- """
+ """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 exists(join(absfile, '__init__.py')) or \
+ package in ('test', 'tests'):
if prefix:
result.append('%s.%s' % (prefix, package))
else:
@@ -77,65 +89,72 @@ def get_packages(directory, prefix):
result += get_packages(absfile, result[-1])
return result
-def export(from_dir, to_dir,
- blacklist=STD_BLACKLIST,
- ignore_ext=IGNORED_EXTENSIONS):
- """make a mirror of from_dir in to_dir, omitting directories and files
- listed in the black list
+EMPTY_FILE = '''"""generated file, don't modify or your data will be lost"""
+try:
+ __import__('pkg_resources').declare_namespace(__name__)
+except ImportError:
+ pass
+'''
+
+class MyInstallLib(install_lib.install_lib):
+ """extend install_lib command to handle package __init__.py and
+ include_dirs variable if necessary
"""
- def make_mirror(arg, directory, fnames):
- """walk handler"""
- for norecurs in blacklist:
- try:
- fnames.remove(norecurs)
- except ValueError:
- pass
- for filename in fnames:
- # don't include binary files
- if filename[-4:] in ignore_ext:
- continue
- if filename[-1] == '~':
- continue
- src = join(directory, filename)
- dest = to_dir + src[len(from_dir):]
- print >> sys.stderr, src, '->', dest
- if os.path.isdir(src):
- if not exists(dest):
- os.mkdir(dest)
+ 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)
+ stream = open(product_init, 'w')
+ stream.write(EMPTY_FILE)
+ stream.close()
+ # manually install included directories if any
+ if include_dirs:
+ if subpackage_of:
+ base = join(subpackage_of, modname)
else:
- if exists(dest):
- os.remove(dest)
- shutil.copy2(src, dest)
- try:
- os.mkdir(to_dir)
- except OSError, ex:
- # file exists ?
- import errno
- if ex.errno != errno.EEXIST:
- raise
- walk(from_dir, make_mirror, None)
-
+ base = modname
+ for directory in include_dirs:
+ dest = join(self.install_dir, base, directory)
+ shutil.rmtree(dest, ignore_errors=True)
+ shutil.copytree(directory, dest)
def install(**kwargs):
"""setup entry point"""
- kwargs['package_dir'] = {modname : '.'}
- packages = [modname] + get_packages(os.getcwd(), modname)
if USE_SETUPTOOLS:
- if install_requires:
- kwargs['install_requires'] = install_requires
if '--force-manifest' in sys.argv:
sys.argv.remove('--force-manifest')
+ # 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)
+ if USE_SETUPTOOLS and install_requires:
+ kwargs['install_requires'] = install_requires
+ kwargs['dependency_links'] = dependency_links
kwargs['packages'] = packages
return setup(name = distname,
version = version,
license = license,
description = description,
- long_description = long_desc,
+ long_description = long_description,
author = author,
author_email = author_email,
url = web,
- classifiers = classifiers,
scripts = ensure_scripts(scripts),
+ data_files = data_files,
+ ext_modules = ext_modules,
+ cmdclass = {'install_lib': MyInstallLib},
**kwargs
)