Project

General

Profile

Statistics
| Branch: | Revision:

root / env / lib / python2.7 / site-packages / distribute-0.6.19-py2.7.egg / setuptools / __init__.py @ 1a305335

History | View | Annotate | Download (3.66 KB)

1
"""Extensions to the 'distutils' for large or complex distributions"""
2
from setuptools.extension import Extension, Library
3
from setuptools.dist import Distribution, Feature, _get_unpatched
4
import distutils.core, setuptools.command
5
from setuptools.depends import Require
6
from distutils.core import Command as _Command
7
from distutils.util import convert_path
8
import os
9
import sys
10

    
11
__version__ = '0.6'
12
__all__ = [
13
    'setup', 'Distribution', 'Feature', 'Command', 'Extension', 'Require',
14
    'find_packages'
15
]
16

    
17
# This marker is used to simplify the process that checks is the
18
# setuptools package was installed by the Setuptools project
19
# or by the Distribute project, in case Setuptools creates
20
# a distribution with the same version.
21
#
22
# The distribute_setup script for instance, will check if this
23
# attribute is present to decide whether to reinstall the package
24
# or not.
25
_distribute = True
26

    
27
bootstrap_install_from = None
28

    
29
# If we run 2to3 on .py files, should we also convert docstrings?
30
# Default: yes; assume that we can detect doctests reliably
31
run_2to3_on_doctests = True
32
# Standard package names for fixer packages
33
lib2to3_fixer_packages = ['lib2to3.fixes']
34

    
35
def find_packages(where='.', exclude=()):
36
    """Return a list all Python packages found within directory 'where'
37

38
    'where' should be supplied as a "cross-platform" (i.e. URL-style) path; it
39
    will be converted to the appropriate local path syntax.  'exclude' is a
40
    sequence of package names to exclude; '*' can be used as a wildcard in the
41
    names, such that 'foo.*' will exclude all subpackages of 'foo' (but not
42
    'foo' itself).
43
    """
44
    out = []
45
    stack=[(convert_path(where), '')]
46
    while stack:
47
        where,prefix = stack.pop(0)
48
        for name in os.listdir(where):
49
            fn = os.path.join(where,name)
50
            if ('.' not in name and os.path.isdir(fn) and
51
                os.path.isfile(os.path.join(fn,'__init__.py'))
52
            ):
53
                out.append(prefix+name); stack.append((fn,prefix+name+'.'))
54
    for pat in list(exclude)+['ez_setup', 'distribute_setup']:
55
        from fnmatch import fnmatchcase
56
        out = [item for item in out if not fnmatchcase(item,pat)]
57
    return out
58

    
59
setup = distutils.core.setup
60

    
61
_Command = _get_unpatched(_Command)
62

    
63
class Command(_Command):
64
    __doc__ = _Command.__doc__
65

    
66
    command_consumes_arguments = False
67

    
68
    def __init__(self, dist, **kw):
69
        # Add support for keyword arguments
70
        _Command.__init__(self,dist)
71
        for k,v in kw.items():
72
            setattr(self,k,v)
73

    
74
    def reinitialize_command(self, command, reinit_subcommands=0, **kw):
75
        cmd = _Command.reinitialize_command(self, command, reinit_subcommands)
76
        for k,v in kw.items():
77
            setattr(cmd,k,v)    # update command with keywords
78
        return cmd
79

    
80
import distutils.core
81
distutils.core.Command = Command    # we can't patch distutils.cmd, alas
82

    
83
def findall(dir = os.curdir):
84
    """Find all files under 'dir' and return the list of full filenames
85
    (relative to 'dir').
86
    """
87
    all_files = []
88
    for base, dirs, files in os.walk(dir):
89
        if base==os.curdir or base.startswith(os.curdir+os.sep):
90
            base = base[2:]
91
        if base:
92
            files = [os.path.join(base, f) for f in files]
93
        all_files.extend(filter(os.path.isfile, files))
94
    return all_files
95

    
96
import distutils.filelist
97
distutils.filelist.findall = findall    # fix findall bug in distutils.
98

    
99
# sys.dont_write_bytecode was introduced in Python 2.6.
100
if ((hasattr(sys, "dont_write_bytecode") and sys.dont_write_bytecode) or
101
    (not hasattr(sys, "dont_write_bytecode") and os.environ.get("PYTHONDONTWRITEBYTECODE"))):
102
    _dont_write_bytecode = True
103
else:
104
    _dont_write_bytecode = False