~ubuntu-branches/ubuntu/precise/enigmail/precise-security

« back to all changes in this revision

Viewing changes to python/virtualenv/virtualenv_embedded/ez_setup.py

  • Committer: Package Import Robot
  • Author(s): Chris Coulson
  • Date: 2012-11-12 16:36:01 UTC
  • mfrom: (0.12.15)
  • Revision ID: package-import@ubuntu.com-20121112163601-t8e8skdfi3ni9iqp
Tags: 2:1.4.6-0ubuntu0.12.04.1
* New upstream release v1.4.6
  - see LP: #1080212 for USN information
* Drop unneeded patches
  - remove debian/patches/correct-version-number.diff
  - remove debian/patches/dont_register_cids_multiple_times.diff
  - update debian/patches/series
* Support building in an objdir
  - update debian/rules

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#!python
 
2
"""Bootstrap setuptools installation
 
3
 
 
4
If you want to use setuptools in your package's setup.py, just include this
 
5
file in the same directory with it, and add this to the top of your setup.py::
 
6
 
 
7
    from ez_setup import use_setuptools
 
8
    use_setuptools()
 
9
 
 
10
If you want to require a specific version of setuptools, set a download
 
11
mirror, or use an alternate download directory, you can do so by supplying
 
12
the appropriate options to ``use_setuptools()``.
 
13
 
 
14
This file can also be run as a script to install or upgrade setuptools.
 
15
"""
 
16
import sys
 
17
DEFAULT_VERSION = "0.6c11"
 
18
DEFAULT_URL     = "http://pypi.python.org/packages/%s/s/setuptools/" % sys.version[:3]
 
19
 
 
20
md5_data = {
 
21
    'setuptools-0.6b1-py2.3.egg': '8822caf901250d848b996b7f25c6e6ca',
 
22
    'setuptools-0.6b1-py2.4.egg': 'b79a8a403e4502fbb85ee3f1941735cb',
 
23
    'setuptools-0.6b2-py2.3.egg': '5657759d8a6d8fc44070a9d07272d99b',
 
24
    'setuptools-0.6b2-py2.4.egg': '4996a8d169d2be661fa32a6e52e4f82a',
 
25
    'setuptools-0.6b3-py2.3.egg': 'bb31c0fc7399a63579975cad9f5a0618',
 
26
    'setuptools-0.6b3-py2.4.egg': '38a8c6b3d6ecd22247f179f7da669fac',
 
27
    'setuptools-0.6b4-py2.3.egg': '62045a24ed4e1ebc77fe039aa4e6f7e5',
 
28
    'setuptools-0.6b4-py2.4.egg': '4cb2a185d228dacffb2d17f103b3b1c4',
 
29
    'setuptools-0.6c1-py2.3.egg': 'b3f2b5539d65cb7f74ad79127f1a908c',
 
30
    'setuptools-0.6c1-py2.4.egg': 'b45adeda0667d2d2ffe14009364f2a4b',
 
31
    'setuptools-0.6c10-py2.3.egg': 'ce1e2ab5d3a0256456d9fc13800a7090',
 
32
    'setuptools-0.6c10-py2.4.egg': '57d6d9d6e9b80772c59a53a8433a5dd4',
 
33
    'setuptools-0.6c10-py2.5.egg': 'de46ac8b1c97c895572e5e8596aeb8c7',
 
34
    'setuptools-0.6c10-py2.6.egg': '58ea40aef06da02ce641495523a0b7f5',
 
35
    'setuptools-0.6c11-py2.3.egg': '2baeac6e13d414a9d28e7ba5b5a596de',
 
36
    'setuptools-0.6c11-py2.4.egg': 'bd639f9b0eac4c42497034dec2ec0c2b',
 
37
    'setuptools-0.6c11-py2.5.egg': '64c94f3bf7a72a13ec83e0b24f2749b2',
 
38
    'setuptools-0.6c11-py2.6.egg': 'bfa92100bd772d5a213eedd356d64086',
 
39
    'setuptools-0.6c2-py2.3.egg': 'f0064bf6aa2b7d0f3ba0b43f20817c27',
 
40
    'setuptools-0.6c2-py2.4.egg': '616192eec35f47e8ea16cd6a122b7277',
 
41
    'setuptools-0.6c3-py2.3.egg': 'f181fa125dfe85a259c9cd6f1d7b78fa',
 
42
    'setuptools-0.6c3-py2.4.egg': 'e0ed74682c998bfb73bf803a50e7b71e',
 
43
    'setuptools-0.6c3-py2.5.egg': 'abef16fdd61955514841c7c6bd98965e',
 
44
    'setuptools-0.6c4-py2.3.egg': 'b0b9131acab32022bfac7f44c5d7971f',
 
45
    'setuptools-0.6c4-py2.4.egg': '2a1f9656d4fbf3c97bf946c0a124e6e2',
 
46
    'setuptools-0.6c4-py2.5.egg': '8f5a052e32cdb9c72bcf4b5526f28afc',
 
47
    'setuptools-0.6c5-py2.3.egg': 'ee9fd80965da04f2f3e6b3576e9d8167',
 
48
    'setuptools-0.6c5-py2.4.egg': 'afe2adf1c01701ee841761f5bcd8aa64',
 
49
    'setuptools-0.6c5-py2.5.egg': 'a8d3f61494ccaa8714dfed37bccd3d5d',
 
50
    'setuptools-0.6c6-py2.3.egg': '35686b78116a668847237b69d549ec20',
 
51
    'setuptools-0.6c6-py2.4.egg': '3c56af57be3225019260a644430065ab',
 
52
    'setuptools-0.6c6-py2.5.egg': 'b2f8a7520709a5b34f80946de5f02f53',
 
53
    'setuptools-0.6c7-py2.3.egg': '209fdf9adc3a615e5115b725658e13e2',
 
54
    'setuptools-0.6c7-py2.4.egg': '5a8f954807d46a0fb67cf1f26c55a82e',
 
55
    'setuptools-0.6c7-py2.5.egg': '45d2ad28f9750e7434111fde831e8372',
 
56
    'setuptools-0.6c8-py2.3.egg': '50759d29b349db8cfd807ba8303f1902',
 
57
    'setuptools-0.6c8-py2.4.egg': 'cba38d74f7d483c06e9daa6070cce6de',
 
58
    'setuptools-0.6c8-py2.5.egg': '1721747ee329dc150590a58b3e1ac95b',
 
59
    'setuptools-0.6c9-py2.3.egg': 'a83c4020414807b496e4cfbe08507c03',
 
60
    'setuptools-0.6c9-py2.4.egg': '260a2be2e5388d66bdaee06abec6342a',
 
61
    'setuptools-0.6c9-py2.5.egg': 'fe67c3e5a17b12c0e7c541b7ea43a8e6',
 
62
    'setuptools-0.6c9-py2.6.egg': 'ca37b1ff16fa2ede6e19383e7b59245a',
 
63
}
 
64
 
 
65
import sys, os
 
66
try: from hashlib import md5
 
67
except ImportError: from md5 import md5
 
68
 
 
69
def _validate_md5(egg_name, data):
 
70
    if egg_name in md5_data:
 
71
        digest = md5(data).hexdigest()
 
72
        if digest != md5_data[egg_name]:
 
73
            print >>sys.stderr, (
 
74
                "md5 validation of %s failed!  (Possible download problem?)"
 
75
                % egg_name
 
76
            )
 
77
            sys.exit(2)
 
78
    return data
 
79
 
 
80
def use_setuptools(
 
81
    version=DEFAULT_VERSION, download_base=DEFAULT_URL, to_dir=os.curdir,
 
82
    download_delay=15
 
83
):
 
84
    """Automatically find/download setuptools and make it available on sys.path
 
85
 
 
86
    `version` should be a valid setuptools version number that is available
 
87
    as an egg for download under the `download_base` URL (which should end with
 
88
    a '/').  `to_dir` is the directory where setuptools will be downloaded, if
 
89
    it is not already available.  If `download_delay` is specified, it should
 
90
    be the number of seconds that will be paused before initiating a download,
 
91
    should one be required.  If an older version of setuptools is installed,
 
92
    this routine will print a message to ``sys.stderr`` and raise SystemExit in
 
93
    an attempt to abort the calling script.
 
94
    """
 
95
    was_imported = 'pkg_resources' in sys.modules or 'setuptools' in sys.modules
 
96
    def do_download():
 
97
        egg = download_setuptools(version, download_base, to_dir, download_delay)
 
98
        sys.path.insert(0, egg)
 
99
        import setuptools; setuptools.bootstrap_install_from = egg
 
100
    try:
 
101
        import pkg_resources
 
102
    except ImportError:
 
103
        return do_download()       
 
104
    try:
 
105
        pkg_resources.require("setuptools>="+version); return
 
106
    except pkg_resources.VersionConflict:
 
107
        e = sys.exc_info()[1]
 
108
        if was_imported:
 
109
            print >>sys.stderr, (
 
110
            "The required version of setuptools (>=%s) is not available, and\n"
 
111
            "can't be installed while this script is running. Please install\n"
 
112
            " a more recent version first, using 'easy_install -U setuptools'."
 
113
            "\n\n(Currently using %r)"
 
114
            ) % (version, e.args[0])
 
115
            sys.exit(2)
 
116
    except pkg_resources.DistributionNotFound:
 
117
        pass
 
118
 
 
119
    del pkg_resources, sys.modules['pkg_resources']    # reload ok
 
120
    return do_download()
 
121
 
 
122
def download_setuptools(
 
123
    version=DEFAULT_VERSION, download_base=DEFAULT_URL, to_dir=os.curdir,
 
124
    delay = 15
 
125
):
 
126
    """Download setuptools from a specified location and return its filename
 
127
 
 
128
    `version` should be a valid setuptools version number that is available
 
129
    as an egg for download under the `download_base` URL (which should end
 
130
    with a '/'). `to_dir` is the directory where the egg will be downloaded.
 
131
    `delay` is the number of seconds to pause before an actual download attempt.
 
132
    """
 
133
    import urllib2, shutil
 
134
    egg_name = "setuptools-%s-py%s.egg" % (version,sys.version[:3])
 
135
    url = download_base + egg_name
 
136
    saveto = os.path.join(to_dir, egg_name)
 
137
    src = dst = None
 
138
    if not os.path.exists(saveto):  # Avoid repeated downloads
 
139
        try:
 
140
            from distutils import log
 
141
            if delay:
 
142
                log.warn("""
 
143
---------------------------------------------------------------------------
 
144
This script requires setuptools version %s to run (even to display
 
145
help).  I will attempt to download it for you (from
 
146
%s), but
 
147
you may need to enable firewall access for this script first.
 
148
I will start the download in %d seconds.
 
149
 
 
150
(Note: if this machine does not have network access, please obtain the file
 
151
 
 
152
   %s
 
153
 
 
154
and place it in this directory before rerunning this script.)
 
155
---------------------------------------------------------------------------""",
 
156
                    version, download_base, delay, url
 
157
                ); from time import sleep; sleep(delay)
 
158
            log.warn("Downloading %s", url)
 
159
            src = urllib2.urlopen(url)
 
160
            # Read/write all in one block, so we don't create a corrupt file
 
161
            # if the download is interrupted.
 
162
            data = _validate_md5(egg_name, src.read())
 
163
            dst = open(saveto,"wb"); dst.write(data)
 
164
        finally:
 
165
            if src: src.close()
 
166
            if dst: dst.close()
 
167
    return os.path.realpath(saveto)
 
168
 
 
169
 
 
170
 
 
171
 
 
172
 
 
173
 
 
174
 
 
175
 
 
176
 
 
177
 
 
178
 
 
179
 
 
180
 
 
181
 
 
182
 
 
183
 
 
184
 
 
185
 
 
186
 
 
187
 
 
188
 
 
189
 
 
190
 
 
191
 
 
192
 
 
193
 
 
194
 
 
195
 
 
196
 
 
197
 
 
198
 
 
199
 
 
200
 
 
201
 
 
202
 
 
203
 
 
204
def main(argv, version=DEFAULT_VERSION):
 
205
    """Install or upgrade setuptools and EasyInstall"""
 
206
    try:
 
207
        import setuptools
 
208
    except ImportError:
 
209
        egg = None
 
210
        try:
 
211
            egg = download_setuptools(version, delay=0)
 
212
            sys.path.insert(0,egg)
 
213
            from setuptools.command.easy_install import main
 
214
            return main(list(argv)+[egg])   # we're done here
 
215
        finally:
 
216
            if egg and os.path.exists(egg):
 
217
                os.unlink(egg)
 
218
    else:
 
219
        if setuptools.__version__ == '0.0.1':
 
220
            print >>sys.stderr, (
 
221
            "You have an obsolete version of setuptools installed.  Please\n"
 
222
            "remove it from your system entirely before rerunning this script."
 
223
            )
 
224
            sys.exit(2)
 
225
 
 
226
    req = "setuptools>="+version
 
227
    import pkg_resources
 
228
    try:
 
229
        pkg_resources.require(req)
 
230
    except pkg_resources.VersionConflict:
 
231
        try:
 
232
            from setuptools.command.easy_install import main
 
233
        except ImportError:
 
234
            from easy_install import main
 
235
        main(list(argv)+[download_setuptools(delay=0)])
 
236
        sys.exit(0) # try to force an exit
 
237
    else:
 
238
        if argv:
 
239
            from setuptools.command.easy_install import main
 
240
            main(argv)
 
241
        else:
 
242
            print("Setuptools version",version,"or greater has been installed.")
 
243
            print('(Run "ez_setup.py -U setuptools" to reinstall or upgrade.)')
 
244
 
 
245
def update_md5(filenames):
 
246
    """Update our built-in md5 registry"""
 
247
 
 
248
    import re
 
249
 
 
250
    for name in filenames:
 
251
        base = os.path.basename(name)
 
252
        f = open(name,'rb')
 
253
        md5_data[base] = md5(f.read()).hexdigest()
 
254
        f.close()
 
255
 
 
256
    data = ["    %r: %r,\n" % it for it in md5_data.items()]
 
257
    data.sort()
 
258
    repl = "".join(data)
 
259
 
 
260
    import inspect
 
261
    srcfile = inspect.getsourcefile(sys.modules[__name__])
 
262
    f = open(srcfile, 'rb'); src = f.read(); f.close()
 
263
 
 
264
    match = re.search("\nmd5_data = {\n([^}]+)}", src)
 
265
    if not match:
 
266
        print >>sys.stderr, "Internal error!"
 
267
        sys.exit(2)
 
268
 
 
269
    src = src[:match.start(1)] + repl + src[match.end(1):]
 
270
    f = open(srcfile,'w')
 
271
    f.write(src)
 
272
    f.close()
 
273
 
 
274
 
 
275
if __name__=='__main__':
 
276
    if len(sys.argv)>2 and sys.argv[1]=='--md5update':
 
277
        update_md5(sys.argv[2:])
 
278
    else:
 
279
        main(sys.argv[1:])
 
280
 
 
281
 
 
282
 
 
283
 
 
284
 
 
285