]> git.rkrishnan.org Git - tahoe-lafs/tahoe-lafs.git/blob - src/allmydata/_auto_deps.py
Drop-upload frontend, rerecorded for 1.9 beta (and correcting a minor mistake). Inclu...
[tahoe-lafs/tahoe-lafs.git] / src / allmydata / _auto_deps.py
1 # Note: please minimize imports in this file. In particular, do not import
2 # any module from Tahoe-LAFS or its dependencies, and do not import any
3 # modules at all at global level. That includes setuptools and pkg_resources.
4 # It is ok to import modules from the Python Standard Library if they are
5 # always available, or the import is protected by try...except ImportError.
6
7 install_requires = [
8     # we require newer versions of setuptools (actually
9     # zetuptoolz) to build, but can handle older versions to run
10     "setuptools >= 0.6c6",
11
12     "zfec >= 1.1.0",
13
14     # Feisty has simplejson 1.4
15     "simplejson >= 1.4",
16
17     # zope.interface 3.6.4 is incompatible with Nevow.
18     # These are the versions packaged in major versions of Debian or Ubuntu, or in pkgsrc.
19     "zope.interface == 3.3.1, == 3.5.3, == 3.6.1",
20
21     # On Windows we need at least Twisted 9.0 to avoid an indirect dependency on pywin32.
22     # On Linux we need at least Twisted 10.1.0 for inotify support used by the drop-upload
23     # frontend.
24     # We also need Twisted 10.1 for the FTP frontend in order for Twisted's FTP server to
25     # support asynchronous close.
26     "Twisted >= 10.1.0",
27
28     # foolscap < 0.5.1 had a performance bug which spent
29     # O(N**2) CPU for transferring large mutable files
30     # of size N.
31     # foolscap < 0.6 is incompatible with Twisted 10.2.0.
32     # foolscap 0.6.1 quiets a DeprecationWarning.
33     # pyOpenSSL is required by foolscap for it (foolscap) to provide secure
34     # connections. Foolscap doesn't reliably declare this dependency in a
35     # machine-readable way, so we need to declare a dependency on pyOpenSSL
36     # ourselves. Tahoe-LAFS doesn't *really* depend directly on pyOpenSSL,
37     # so if something changes in the relationship between foolscap and
38     # pyOpenSSL, such as foolscap requiring a specific version of pyOpenSSL,
39     # or foolscap switching from pyOpenSSL to a different crypto library, we
40     # need to update this declaration here.
41     "foolscap >= 0.6.1",
42     "pyOpenSSL",
43
44     "Nevow >= 0.6.0",
45
46     # Needed for SFTP. pyasn1 is needed by twisted.conch in Twisted >= 9.0.
47     # pycrypto 2.2 doesn't work due to https://bugs.launchpad.net/pycrypto/+bug/620253
48     "pycrypto == 2.0.1, == 2.1.0, >= 2.3",
49     "pyasn1 >= 0.0.8a",
50
51     # http://www.voidspace.org.uk/python/mock/
52     "mock",
53
54     # Will be needed to test web apps, but not yet. See #1001.
55     #"windmill >= 1.3",
56 ]
57
58 # Includes some indirect dependencies, but does not include allmydata.
59 # These are in the order they should be listed by --version, etc.
60 package_imports = [
61     # package name      module name
62     ('foolscap',        'foolscap'),
63     ('pycryptopp',      'pycryptopp'),
64     ('zfec',            'zfec'),
65     ('Twisted',         'twisted'),
66     ('Nevow',           'nevow'),
67     ('zope.interface',  'zope.interface'),
68     ('python',          None),
69     ('platform',        None),
70     ('pyOpenSSL',       'OpenSSL'),
71     ('simplejson',      'simplejson'),
72     ('pycrypto',        'Crypto'),
73     ('pyasn1',          'pyasn1'),
74     ('mock',            'mock'),
75 ]
76
77 def require_more():
78     import platform, sys
79
80     if platform.machine().lower() in ['i386', 'x86', 'i686', 'x86_64', 'amd64', '']:
81         # pycryptopp v0.5.20 fixes bugs in SHA-256 and AES on x86 or amd64
82         # (from Crypto++ revisions 470, 471, 480, 492).  The '' is there
83         # in case platform.machine is broken and this is actually an x86
84         # or amd64 machine.
85         install_requires.append("pycryptopp >= 0.5.20")
86     else:
87         # pycryptopp v0.5.13 had a new bundled version of Crypto++
88         # (v5.6.0) and a new bundled version of setuptools (although that
89         # shouldn't make any difference to users of pycryptopp).
90         install_requires.append("pycryptopp >= 0.5.14")
91
92     # Sqlite comes built into Python >= 2.5, and is provided by the "pysqlite"
93     # distribution for Python 2.4.
94     try:
95         import sqlite3
96         sqlite3 # hush pyflakes
97         package_imports.append(('sqlite3', 'sqlite3'))
98     except ImportError:
99         # pysqlite v2.0.5 was shipped in Ubuntu 6.06 LTS "dapper" and Nexenta NCP 1.
100         install_requires.append("pysqlite >= 2.0.5")
101         package_imports.append(('pysqlite', 'pysqlite2.dbapi2'))
102
103     # Don't try to get the version number of setuptools in frozen builds, because
104     # that triggers 'site' processing that causes failures. Note that frozen
105     # builds still (unfortunately) import pkg_resources in .tac files, so the
106     # entry for setuptools in install_requires above isn't conditional.
107     if not hasattr(sys, 'frozen'):
108         package_imports.append(('setuptools', 'setuptools'))
109
110 require_more()
111
112 deprecation_messages = [
113     "the sha module is deprecated; use the hashlib module instead",
114     "object.__new__\(\) takes no parameters",
115     "The popen2 module is deprecated.  Use the subprocess module.",
116     "the md5 module is deprecated; use hashlib instead",
117     "twisted.web.error.NoResource is deprecated since Twisted 9.0.  See twisted.web.resource.NoResource.",
118     "the sets module is deprecated",
119 ]
120
121 deprecation_imports = [
122     'nevow',
123     'twisted.persisted.sob',
124     'twisted.python.filepath',
125     'Crypto.Hash.SHA',
126 ]