summaryrefslogtreecommitdiff
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
commit74834e81bf42f446f4d99f0fe43b9bf471a3f748 (patch)
treec06e6c0886c61d2790dde0bf336dc788c9877e02
parent44b654850d4bbb8d78dcdf907d6b81c5b7720da9 (diff)
downloadpylint-git-74834e81bf42f446f4d99f0fe43b9bf471a3f748.tar.gz
packaging : add py3k target; update setup.py and other files to make py3k packaging work
-rw-r--r--README3
-rw-r--r--debian.py3k/control37
-rwxr-xr-xdebian.py3k/rules70
-rw-r--r--debian.py3k/source/format1
-rw-r--r--setup.py163
5 files changed, 201 insertions, 73 deletions
diff --git a/README b/README
index f466282c5..1fb72b510 100644
--- a/README
+++ b/README
@@ -45,8 +45,9 @@ http://lists.logilab.org/pipermail/python-projects/
Contributors
------------
-* Sylvain Thénault: main author / maintainer
+* Sylvain Thenault: main author / maintainer
* Alexandre Fayolle: TkInter gui, documentation, debian support
+* Emile Anclin: maintainer
* Mads Kiilerich: various patches
* Brian van den Broek: windows installation documentation
* Amaury Forgeot d'Arc: patch to check names imported from a module
diff --git a/debian.py3k/control b/debian.py3k/control
new file mode 100644
index 000000000..41bd23b4d
--- /dev/null
+++ b/debian.py3k/control
@@ -0,0 +1,37 @@
+Source: pylint
+Section: python
+Priority: optional
+Maintainer: Python Applications Packaging Team <python-apps-team@lists.alioth.debian.org>
+Uploaders: Sylvain Thénault <sylvain.thenault@logilab.fr>, Alexandre Fayolle <afayolle@debian.org>, Sandro Tosi <morph@debian.org>
+Build-Depends: debhelper (>= 5.0.38), python3
+Build-Depends-Indep: python-support
+Standards-Version: 3.8.1
+XS-Python-Version: all
+Homepage: http://www.logilab.org/project/pylint
+Vcs-Svn: svn://svn.debian.org/svn/python-apps/packages/pylint/trunk/
+Vcs-Browser: http://svn.debian.org/viewsvn/python-apps/packages/pylint/trunk/
+
+Package: pylint3
+Architecture: all
+Depends: ${python:Depends}, ${misc:Depends}, python3-logilab-common (>= 0.52.1), python3-logilab-astng (>= 0.20.4)
+Recommends: python3-tk
+XB-Python-Version: ${python:Versions}
+Description: python code static checker and UML diagram generator
+ Pylint is a Python source code analyzer which looks for programming
+ errors, helps enforcing a coding standard and sniffs for some code
+ smells (as defined in Martin Fowler's Refactoring book)
+ .
+ Pylint can be seen as another PyChecker since nearly all tests you
+ can do with PyChecker can also be done with Pylint. However, Pylint
+ offers some more features, like checking length of lines of code,
+ checking if variable names are well-formed according to your coding
+ standard, or checking if declared interfaces are truly implemented,
+ and much more.
+ .
+ Additionally, it is possible to write plugins to add your own checks.
+ .
+ The included command pyreverse generates UML class and package
+ diagrams.
+ .
+ The recommended python-tk package is only for using the pylint-gui
+ script.
diff --git a/debian.py3k/rules b/debian.py3k/rules
new file mode 100755
index 000000000..d4ae43dc8
--- /dev/null
+++ b/debian.py3k/rules
@@ -0,0 +1,70 @@
+#!/usr/bin/make -f
+# Sample debian/rules that uses debhelper.
+# GNU copyright 1997 to 1999 by Joey Hess.
+#
+# adapted by Logilab for automatic generation by debianize
+# (part of the devtools project, http://www.logilab.org/projects/devtools)
+#
+# Copyright (c) 2003-2008 LOGILAB S.A. (Paris, FRANCE).
+# http://www.logilab.fr/ -- mailto:contact@logilab.fr
+
+# Uncomment this to turn on verbose mode.
+#export DH_VERBOSE=1
+
+PACKAGE:=$(shell grep Package debian/control | cut -d ' ' -f2)
+
+
+include /usr/share/python/python.mk
+
+build: build-stamp
+
+build-stamp:
+ dh_testdir
+ touch build-stamp
+
+clean:
+ dh_testdir
+ dh_testroot
+
+ NO_SETUPTOOLS=1 python setup.py clean
+ [ ! -d build ] || rm -rf build
+ find . -name "*.pyc" -delete
+ dh_clean build-stamp
+
+
+install: build
+ dh_testdir
+ dh_testroot
+ dh_clean -k
+ dh_installdirs
+
+ NO_SETUPTOOLS=1 python3 setup.py -q install --no-compile \
+ --root=$(CURDIR)/debian/$(PACKAGE)/ \
+ ${py_setup_install_args}
+ find $(CURDIR)/debian/$(PACKAGE)/usr/lib/python*/*-packages/ ! -path "*/test/*py" -name "*py" -exec 2to3-3.1 -wn {} \;
+
+ # remove test directory
+ rm -rf debian/$(PACKAGE)/usr/lib/python*/*-packages/pylint/test
+
+# Build architecture-independent files here.
+binary-indep: build install
+ dh_testdir
+ dh_testroot
+ dh_install -i
+ dh_pysupport -i
+ dh_installchangelogs -i ChangeLog
+ dh_installexamples -i
+ dh_installdocs -i README
+ dh_installman -i
+ dh_link -i
+ dh_compress -i -X.py -X.ini -X.xml -Xtest/
+ dh_fixperms -i
+ dh_installdeb -i
+ dh_gencontrol -i
+ dh_md5sums -i
+ dh_builddeb -i
+
+binary-arch:
+
+binary: binary-indep
+.PHONY: build clean binary binary-indep binary-arch
diff --git a/debian.py3k/source/format b/debian.py3k/source/format
new file mode 100644
index 000000000..163aaf8d8
--- /dev/null
+++ b/debian.py3k/source/format
@@ -0,0 +1 @@
+3.0 (quilt)
diff --git a/setup.py b/setup.py
index 4a076413b..bbf183af2 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
)