summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZaheer Abbas Merali <zaheerm@gentoo.org>2006-09-28 14:42:07 +0000
committerZaheer Abbas Merali <zaheerm@gentoo.org>2006-09-28 14:42:07 +0000
commite67638cdd723ac20c276616a3177e566aee4359a (patch)
tree3e4023ec9cd690d4d28b0fd87fd4ab5db9cef677 /dev-python/pychecker
parent915resolution and vbetool, needed for macbook (diff)
downloadzaheerm-master.tar.gz
zaheerm-master.tar.bz2
zaheerm-master.zip
pychecker with thomas's patchesHEADmaster
svn path=/; revision=11
Diffstat (limited to 'dev-python/pychecker')
-rw-r--r--dev-python/pychecker/Manifest36
-rw-r--r--dev-python/pychecker/files/digest-pychecker-0.8.173
-rw-r--r--dev-python/pychecker/files/digest-pychecker-0.8.17-r13
-rw-r--r--dev-python/pychecker/files/pychecker-0.8.17.std_lib.patch70
-rw-r--r--dev-python/pychecker/files/pychecker.blacklist.patch18
-rw-r--r--dev-python/pychecker/files/pychecker.classObject__name__.patch32
-rw-r--r--dev-python/pychecker/files/pychecker.getModules.patch175
-rw-r--r--dev-python/pychecker/files/pychecker.lambda-assign.patch29
-rw-r--r--dev-python/pychecker/metadata.xml5
-rw-r--r--dev-python/pychecker/pychecker-0.8.17-r1.ebuild35
10 files changed, 406 insertions, 0 deletions
diff --git a/dev-python/pychecker/Manifest b/dev-python/pychecker/Manifest
new file mode 100644
index 0000000..862586d
--- /dev/null
+++ b/dev-python/pychecker/Manifest
@@ -0,0 +1,36 @@
+AUX pychecker-0.8.17.std_lib.patch 2490 RMD160 78b1b6eac84d714c79a6aed17dbf6cb5f79fbad0 SHA1 367b0f11495de017d9911c77170ba2844a9b77ff SHA256 c8b8a35aade83e4bd2f872f1ee6425472ccc41d878239b24eaf4556aecabbc1b
+MD5 6c6d84af4a32c699ef84905d25dcd2bf files/pychecker-0.8.17.std_lib.patch 2490
+RMD160 78b1b6eac84d714c79a6aed17dbf6cb5f79fbad0 files/pychecker-0.8.17.std_lib.patch 2490
+SHA256 c8b8a35aade83e4bd2f872f1ee6425472ccc41d878239b24eaf4556aecabbc1b files/pychecker-0.8.17.std_lib.patch 2490
+AUX pychecker.blacklist.patch 888 RMD160 495718b4fb43684df9869fd3277d095085a094f9 SHA1 3075af44fae6bf8d37fd6ea1fe6bdbbe1c90f205 SHA256 04944a98de7e7b6f792ceabe958fa210998da56c766b4348375b8c81807cb1e0
+MD5 5e1c356eb5ac31c2dce6b8e34c225b3b files/pychecker.blacklist.patch 888
+RMD160 495718b4fb43684df9869fd3277d095085a094f9 files/pychecker.blacklist.patch 888
+SHA256 04944a98de7e7b6f792ceabe958fa210998da56c766b4348375b8c81807cb1e0 files/pychecker.blacklist.patch 888
+AUX pychecker.classObject__name__.patch 1342 RMD160 809055c32e94cdb27871cb4a642cd782f0c576bd SHA1 3a97169e3fa1365fe83a181fbea3e6138aaa35b6 SHA256 798e25a6d92b66afadf527a5f7b91097df9d1138c311a8566f02ccf9e26f980f
+MD5 9c7277afbe60b7933cf11676c9b10b24 files/pychecker.classObject__name__.patch 1342
+RMD160 809055c32e94cdb27871cb4a642cd782f0c576bd files/pychecker.classObject__name__.patch 1342
+SHA256 798e25a6d92b66afadf527a5f7b91097df9d1138c311a8566f02ccf9e26f980f files/pychecker.classObject__name__.patch 1342
+AUX pychecker.getModules.patch 6996 RMD160 0ea527b45f1dbf54903b02aaa6ff1317417e58ae SHA1 c01c6359083be92e510fbf2e3b0185f14c46d4e7 SHA256 9e73e4b047dff938a6054cf7481654b966e07d6560fc362d2a382f92d037bf47
+MD5 8a868e69240740a94928b2aff723b7f6 files/pychecker.getModules.patch 6996
+RMD160 0ea527b45f1dbf54903b02aaa6ff1317417e58ae files/pychecker.getModules.patch 6996
+SHA256 9e73e4b047dff938a6054cf7481654b966e07d6560fc362d2a382f92d037bf47 files/pychecker.getModules.patch 6996
+AUX pychecker.lambda-assign.patch 1572 RMD160 aa9bbcc821a588d875ef27d1c284cd56d44530ab SHA1 b573a54d2f9a6d72f4d142f09b79cd0196c65080 SHA256 81d4a72bcd21e33db16859d652fe1e3498ba801671198781e3f33048292c03c3
+MD5 da7279076308e7f02ffb735a56bcce7c files/pychecker.lambda-assign.patch 1572
+RMD160 aa9bbcc821a588d875ef27d1c284cd56d44530ab files/pychecker.lambda-assign.patch 1572
+SHA256 81d4a72bcd21e33db16859d652fe1e3498ba801671198781e3f33048292c03c3 files/pychecker.lambda-assign.patch 1572
+DIST pychecker-0.8.17.tar.gz 130689 RMD160 16a83bcbd45b14fd5fb786e7a8ce52c7ecc87eb6 SHA1 0adde984d4275a0e80e35d08c6f5c6a6a9131a05 SHA256 7ee4ea2fc02151196590cdef6073302dd61156503ee242a68a3c8aff50e86e52
+EBUILD pychecker-0.8.17-r1.ebuild 1106 RMD160 d19e390ef74358155f8371c19b0ee77fb1e0468e SHA1 2e1c3c040296c1ec40d506b0ab4d401a63161ed1 SHA256 82c0a6e4e0e4875b686227e9cd7c2cda679dd4b83ce5f2705ae80fe489d789ab
+MD5 5c2d2635e277d2df4ee21938db6a2fbd pychecker-0.8.17-r1.ebuild 1106
+RMD160 d19e390ef74358155f8371c19b0ee77fb1e0468e pychecker-0.8.17-r1.ebuild 1106
+SHA256 82c0a6e4e0e4875b686227e9cd7c2cda679dd4b83ce5f2705ae80fe489d789ab pychecker-0.8.17-r1.ebuild 1106
+MISC ChangeLog 4088 RMD160 7fecbbc53c875d9f1b4b06c0d0e0570d4132ac15 SHA1 2b2144f3249ba11b33e49aa5c704a2aa345f0d45 SHA256 762ac0c7ec07931e1a3278297379a989815508e8bd9842252be06c96b88ed779
+MD5 0dfc95e8615a0bb38f3d3d7b7854762c ChangeLog 4088
+RMD160 7fecbbc53c875d9f1b4b06c0d0e0570d4132ac15 ChangeLog 4088
+SHA256 762ac0c7ec07931e1a3278297379a989815508e8bd9842252be06c96b88ed779 ChangeLog 4088
+MISC metadata.xml 159 RMD160 900a8c55d7a7d2f6312594769aaf941bf9e99c7f SHA1 c8e604d56dae898258b5254d78cfeac0b981e288 SHA256 9f01104d3484792496faff4805eed0ecea2352a897151f3397d49a13800037b4
+MD5 71c4638c9c88af75b58e5f5cb54fe008 metadata.xml 159
+RMD160 900a8c55d7a7d2f6312594769aaf941bf9e99c7f metadata.xml 159
+SHA256 9f01104d3484792496faff4805eed0ecea2352a897151f3397d49a13800037b4 metadata.xml 159
+MD5 071a0b6298f5a49b0f16c2c795a5ad4b files/digest-pychecker-0.8.17-r1 250
+RMD160 9eb405210684d6b25d2b56c4e2a0523d6a3d7a6a files/digest-pychecker-0.8.17-r1 250
+SHA256 2b642676a65b445e35a4a54168583a91a5402c3001f1f2c62a0dadc975ca7baa files/digest-pychecker-0.8.17-r1 250
diff --git a/dev-python/pychecker/files/digest-pychecker-0.8.17 b/dev-python/pychecker/files/digest-pychecker-0.8.17
new file mode 100644
index 0000000..4105c36
--- /dev/null
+++ b/dev-python/pychecker/files/digest-pychecker-0.8.17
@@ -0,0 +1,3 @@
+MD5 9d2a2d62b368ce503830f830a89bd230 pychecker-0.8.17.tar.gz 130689
+RMD160 16a83bcbd45b14fd5fb786e7a8ce52c7ecc87eb6 pychecker-0.8.17.tar.gz 130689
+SHA256 7ee4ea2fc02151196590cdef6073302dd61156503ee242a68a3c8aff50e86e52 pychecker-0.8.17.tar.gz 130689
diff --git a/dev-python/pychecker/files/digest-pychecker-0.8.17-r1 b/dev-python/pychecker/files/digest-pychecker-0.8.17-r1
new file mode 100644
index 0000000..4105c36
--- /dev/null
+++ b/dev-python/pychecker/files/digest-pychecker-0.8.17-r1
@@ -0,0 +1,3 @@
+MD5 9d2a2d62b368ce503830f830a89bd230 pychecker-0.8.17.tar.gz 130689
+RMD160 16a83bcbd45b14fd5fb786e7a8ce52c7ecc87eb6 pychecker-0.8.17.tar.gz 130689
+SHA256 7ee4ea2fc02151196590cdef6073302dd61156503ee242a68a3c8aff50e86e52 pychecker-0.8.17.tar.gz 130689
diff --git a/dev-python/pychecker/files/pychecker-0.8.17.std_lib.patch b/dev-python/pychecker/files/pychecker-0.8.17.std_lib.patch
new file mode 100644
index 0000000..5ddb59c
--- /dev/null
+++ b/dev-python/pychecker/files/pychecker-0.8.17.std_lib.patch
@@ -0,0 +1,70 @@
+Index: pychecker-0.8.17/pychecker/warn.py
+===================================================================
+--- pychecker-0.8.17.orig/pychecker/warn.py
++++ pychecker-0.8.17/pychecker/warn.py
+@@ -391,16 +391,26 @@ def getBlackList(moduleList) :
+ pass
+ return blacklist
+
+-def getStandardLibrary() :
++def getStandardLibraries() :
++ """
++ Return a list of standard libraries.
++
++ @rtype: list of str or None
++ """
+ if cfg().ignoreStandardLibrary :
+ try :
+ from distutils import sysconfig
+
+- std_lib = sysconfig.get_python_lib()
+- path = os.path.split(std_lib)
+- if path[1] == 'site-packages' :
+- std_lib = path[0]
+- return std_lib
++ std_libs = [
++ sysconfig.get_python_lib(plat_specific=0),
++ sysconfig.get_python_lib(plat_specific=1)
++ ]
++ ret = []
++ for std_lib in std_libs:
++ path = os.path.split(std_lib)
++ if path[1] == 'site-packages' :
++ ret.append(path[0])
++ return ret
+ except ImportError :
+ return None
+
+@@ -409,12 +419,20 @@ def normalize_path(path):
+
+ def removeWarnings(warnings, blacklist, std_lib, cfg):
+ if std_lib is not None:
+- std_lib = normalize_path(std_lib)
++ std_lib = [normalize_path(p) for p in std_lib]
+ for index in range(len(warnings)-1, -1, -1) :
+ filename = normalize_path(warnings[index].file)
+- if filename in blacklist or (std_lib is not None and
+- utils.startswith(filename, std_lib)) :
++ if filename in blacklist:
+ del warnings[index]
++ elif std_lib:
++ found = False
++ for path in std_lib:
++ if utils.startswith(filename, path) :
++ del warnings[index]
++ found = True
++ break
++ if found:
++ continue
+ elif cfg.only:
+ # ignore files not specified on the cmd line if requested
+ if os.path.abspath(filename) not in cfg.files:
+@@ -721,7 +739,7 @@ def find(moduleList, initialCfg, suppres
+
+ std_lib = None
+ if cfg().ignoreStandardLibrary :
+- std_lib = getStandardLibrary()
++ std_lib = getStandardLibraries()
+ return removeWarnings(warnings, getBlackList(cfg().blacklist), std_lib,
+ cfg())
+
diff --git a/dev-python/pychecker/files/pychecker.blacklist.patch b/dev-python/pychecker/files/pychecker.blacklist.patch
new file mode 100644
index 0000000..f78f173
--- /dev/null
+++ b/dev-python/pychecker/files/pychecker.blacklist.patch
@@ -0,0 +1,18 @@
+Index: pychecker/pychecker/checker.py
+===================================================================
+--- pychecker.orig/pychecker/checker.py
++++ pychecker/pychecker/checker.py
+@@ -262,9 +262,10 @@ class Class :
+ self.module = sys.modules.get(modname)
+ if not self.module:
+ self.module = module
+- sys.stderr.write("warning: couldn't find real module "
+- "for class %s (module name: %s)\n"
+- % (self.classObject, modname))
++ if modname not in cfg().blacklist:
++ sys.stderr.write("warning: couldn't find real module "
++ "for class %s (module name: %s)\n"
++ % (self.classObject, modname))
+ self.ignoreAttrs = 0
+ self.methods = {}
+ self.members = { '__class__': types.ClassType,
diff --git a/dev-python/pychecker/files/pychecker.classObject__name__.patch b/dev-python/pychecker/files/pychecker.classObject__name__.patch
new file mode 100644
index 0000000..83bfc0e
--- /dev/null
+++ b/dev-python/pychecker/files/pychecker.classObject__name__.patch
@@ -0,0 +1,32 @@
+? classObject__name__.patch
+Index: pychecker/checker.py
+===================================================================
+--- pychecker/checker.py.orig
++++ pychecker/checker.py
+@@ -248,6 +248,17 @@ class Class :
+ if mo:
+ modname = ".".join(mo.group(1).split(".")[:-1])
+
++ # zope.interface for example has Provides and Declaration that
++ # look a lot like class objects but do not have __name__
++ if hasattr(self.classObject, '__name__'):
++ self.classObject__name__ = self.classObject.__name__
++ else:
++ if modname not in cfg().blacklist:
++ sys.stderr.write("warning: no __name__ attribute "
++ "for class %s (module name: %s)\n"
++ % (self.classObject, modname))
++ self.classObject__name__ = name
++
+ self.module = sys.modules.get(modname)
+ if not self.module:
+ self.module = module
+@@ -329,7 +340,7 @@ class Class :
+ self.cleanupMemberRefs()
+ # add standard methods
+ for methodName in ('__class__',) :
+- self.addMethod(methodName, classObject.__name__)
++ self.addMethod(methodName, self.classObject__name__)
+
+ def addMembers(self, classObject) :
+ if not cfg().onlyCheckInitForMembers :
diff --git a/dev-python/pychecker/files/pychecker.getModules.patch b/dev-python/pychecker/files/pychecker.getModules.patch
new file mode 100644
index 0000000..3a33ebb
--- /dev/null
+++ b/dev-python/pychecker/files/pychecker.getModules.patch
@@ -0,0 +1,175 @@
+Index: pychecker/pychecker/checker.py
+===================================================================
+--- pychecker.orig/pychecker/checker.py
++++ pychecker/pychecker/checker.py
+@@ -99,7 +99,7 @@ def _flattenList(list) :
+ return new_list
+
+ def getModules(arg_list) :
+- "Returns a list of module names that can be imported"
++ "Returns a list of (module names, dirPath) that can be imported"
+
+ new_arguments = []
+ for arg in arg_list :
+@@ -116,6 +116,7 @@ def getModules(arg_list) :
+
+ modules = []
+ for arg in _flattenList(new_arguments) :
++ arg_dir = None # actual modules will not give us a dir to load from
+ # is it a .py file?
+ for suf, suflen in zip(PY_SUFFIXES, PY_SUFFIX_LENS):
+ if len(arg) > suflen and arg[-suflen:] == suf:
+@@ -125,10 +126,12 @@ def getModules(arg_list) :
+ continue
+
+ module_name = os.path.basename(arg)[:-suflen]
+- if arg_dir not in sys.path :
+- sys.path.insert(0, arg_dir)
++ # THOMAS: this breaks loading two .py files with same name
++ # from different dirs; we would always get the first one
++ #if arg_dir not in sys.path :
++ # sys.path.insert(0, arg_dir)
+ arg = module_name
+- modules.append(arg)
++ modules.append((arg, arg_dir))
+
+ return modules
+
+@@ -161,11 +164,13 @@ def _q_find_module(p, path):
+ if os.path.exists(f):
+ return _q_file(file(f)), f, ('.ptl', 'U', 1)
+
+-def _findModule(name) :
++def _findModule(name, moduleDir=None) :
+ """Returns the result of an imp.find_module(), ie, (file, filename, smt)
+ name can be a module or a package name. It is *not* a filename."""
+
+ path = sys.path[:]
++ if moduleDir:
++ path.insert(0, moduleDir)
+ packages = string.split(name, '.')
+ for p in packages :
+ # smt = (suffix, mode, type)
+@@ -235,8 +240,9 @@ def _getClassTokens(c) :
+ class Class :
+ "Class to hold all information about a class"
+
+- def __init__(self, name, module) :
++ def __init__(self, name, pcmodule) :
+ self.name = name
++ module = pcmodule.module
+ self.classObject = getattr(module, name)
+
+ modname = getattr(self.classObject, '__module__', None)
+@@ -260,7 +266,9 @@ class Class :
+ self.classObject__name__ = name
+
+ self.module = sys.modules.get(modname)
+- if not self.module:
++ # if the pcmodule has moduleDir, it means we processed it before,
++ # and deleted it from sys.modules
++ if not self.module and not pcmodule.moduleDir:
+ self.module = module
+ if modname not in cfg().blacklist:
+ sys.stderr.write("warning: couldn't find real module "
+@@ -497,8 +505,13 @@ def _getPyFile(filename):
+ class PyCheckerModule :
+ "Class to hold all information for a module"
+
+- def __init__(self, moduleName, check = 1) :
++ def __init__(self, moduleName, check = 1, moduleDir=None) :
++ """
++ @param moduleDir: if specified, the directory where the module can
++ be loaded from
++ """
+ self.moduleName = moduleName
++ self.moduleDir = moduleDir
+ self.variables = {}
+ self.functions = {}
+ self.classes = {}
+@@ -508,7 +521,12 @@ class PyCheckerModule :
+ self.main_code = None
+ self.module = None
+ self.check = check
+- _allModules[moduleName] = self
++ # FIXME: to make sure we have separate dict entries for different files
++ # with the same module name, we fudge in the moduleDir
++ __name = moduleName
++ if moduleDir:
++ __name = moduleName + moduleDir
++ _allModules[__name] = self
+
+ def __str__(self) :
+ return self.moduleName
+@@ -528,7 +546,9 @@ class PyCheckerModule :
+ c.addMembers(classObject)
+
+ def addClass(self, name) :
+- self.classes[name] = c = Class(name, self.module)
++ #self.classes[name] = c = Class(name, self.module)
++ # give ourselves, so Class has more context
++ self.classes[name] = c = Class(name, self)
+ try:
+ objName = utils.safestr(c.classObject)
+ except TypeError:
+@@ -558,16 +578,19 @@ class PyCheckerModule :
+ filename = self.module.__file__
+ except AttributeError :
+ filename = self.moduleName
++ if self.moduleDir:
++ filename = self.moduleDir + ': ' + filename
+ return _getPyFile(filename)
+
+ def load(self):
+ try :
+- # there's no need to reload modules we already have
+- module = sys.modules.get(self.moduleName)
+- if module :
+- if not _allModules[self.moduleName].module :
+- return self._initModule(module)
+- return 1
++ # there's no need to reload modules we already have if no moduleDir
++ if not self.moduleDir:
++ module = sys.modules.get(self.moduleName)
++ if module :
++ if not _allModules[self.moduleName].module :
++ return self._initModule(module)
++ return 1
+
+ return self._initModule(self.setupMainCode())
+ except (SystemExit, KeyboardInterrupt) :
+@@ -627,9 +650,19 @@ class PyCheckerModule :
+ return 1
+
+ def setupMainCode(self) :
+- file, filename, smt = _findModule(self.moduleName)
++ file, filename, smt = _findModule(self.moduleName, self.moduleDir)
+ # FIXME: if the smt[-1] == imp.PKG_DIRECTORY : load __all__
++ # HACK: to make sibling imports work, we add self.moduleDir to sys.path
++ # temporarily, and remove it later
++ if self.moduleDir:
++ oldsyspath = sys.path[:]
++ sys.path.insert(0, self.moduleDir)
+ module = imp.load_module(self.moduleName, file, filename, smt)
++ if self.moduleDir:
++ sys.path = oldsyspath
++ # to make sure that subsequent modules with the same moduleName
++ # do not persist, and getting their namespace clobbered, delete it
++ del sys.modules[self.moduleName]
+ self._setupMainCode(file, filename, module)
+ return module
+
+@@ -736,10 +769,10 @@ def processFiles(files, cfg = None, pre_
+
+ warnings = []
+ utils.initConfig(_cfg)
+- for moduleName in getModules(files) :
++ for file, (moduleName, moduleDir) in zip(files, getModules(files)) :
+ if callable(pre_process_cb) :
+- pre_process_cb(moduleName)
+- module = PyCheckerModule(moduleName)
++ pre_process_cb("%s (%s)" % (moduleName, file))
++ module = PyCheckerModule(moduleName, moduleDir=moduleDir)
+ if not module.load() :
+ w = Warning(module.filename(), 1,
+ msgs.Internal("NOT PROCESSED UNABLE TO IMPORT"))
diff --git a/dev-python/pychecker/files/pychecker.lambda-assign.patch b/dev-python/pychecker/files/pychecker.lambda-assign.patch
new file mode 100644
index 0000000..0a8bb1e
--- /dev/null
+++ b/dev-python/pychecker/files/pychecker.lambda-assign.patch
@@ -0,0 +1,29 @@
+Index: pychecker/pychecker/CodeChecks.py
+===================================================================
+--- pychecker.orig/pychecker/CodeChecks.py
++++ pychecker/pychecker/CodeChecks.py
+@@ -144,7 +144,10 @@ def _checkBuiltin(code, loadValue, argCo
+ (func_name == 'getattr' and argCount == 2)):
+ arg2 = code.stack[-argCount + 1]
+ if arg2.const:
+- code.addWarning(msgs.USES_CONST_ATTR % func_name)
++ # lambda with setattr and const is a common way of setting
++ # attributes, so allow it
++ if code.func.function.func_name != '<lambda>':
++ code.addWarning(msgs.USES_CONST_ATTR % func_name)
+
+ if kwArgs:
+ _validateKwArgs(code, info, func_name, kwArgs)
+@@ -395,7 +398,11 @@ def _handleFunctionCall(codeSource, code
+ name = utils.safestr(loadValue.data)
+ if type(loadValue.data) == types.TupleType :
+ name = string.join(loadValue.data, '.')
+- code.addWarning(msgs.USING_NONE_RETURN_VALUE % name)
++ # lambda with setattr is a common way of setting
++ # attributes, so allow it
++ if name != 'setattr' \
++ or code.func.function.func_name != '<lambda>':
++ code.addWarning(msgs.USING_NONE_RETURN_VALUE % name)
+
+ code.stack = code.stack[:funcIndex] + [ returnValue ]
+ code.functionsCalled[funcName] = loadValue
diff --git a/dev-python/pychecker/metadata.xml b/dev-python/pychecker/metadata.xml
new file mode 100644
index 0000000..de483c5
--- /dev/null
+++ b/dev-python/pychecker/metadata.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+<herd>python</herd>
+</pkgmetadata>
diff --git a/dev-python/pychecker/pychecker-0.8.17-r1.ebuild b/dev-python/pychecker/pychecker-0.8.17-r1.ebuild
new file mode 100644
index 0000000..3377caa
--- /dev/null
+++ b/dev-python/pychecker/pychecker-0.8.17-r1.ebuild
@@ -0,0 +1,35 @@
+# Copyright 1999-2006 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/dev-python/pychecker/pychecker-0.8.17.ebuild,v 1.1 2006/02/08 09:03:36 lucass Exp $
+
+inherit distutils
+
+DESCRIPTION="tool for finding common bugs in python source code"
+SRC_URI="mirror://sourceforge/pychecker/${P}.tar.gz"
+HOMEPAGE="http://pychecker.sourceforge.net/"
+SLOT="0"
+KEYWORDS="~alpha ~amd64 ~ia64 ~ppc ~sparc ~x86"
+LICENSE="BSD"
+IUSE=""
+DEPEND="virtual/python"
+DOCS="pycheckrc TODO"
+
+src_compile() {
+ epatch ${FILESDIR}/pychecker-0.8.17.std_lib.patch
+ epatch ${FILESDIR}/pychecker.blacklist.patch
+ epatch ${FILESDIR}/pychecker.classObject__name__.patch
+ epatch ${FILESDIR}/pychecker.getModules.patch
+ epatch ${FILESDIR}/pychecker.lambda-assign.patch
+
+ distutils_src_compile
+}
+
+src_install() {
+ distutils_src_install
+ sed -i -e "s|${D}|/|" "${D}/usr/bin/pychecker"
+
+ distutils_python_version
+ local destdir="${D}/usr/lib/python${PYVER}/site-packages/${PN}"
+ rm ${destdir}/{COPYRIGHT,README,VERSION,CHANGELOG}
+ rm ${destdir}/{KNOWN_BUGS,MAINTAINERS,TODO}
+}