~ubuntu-branches/ubuntu/oneiric/emesene/oneiric-proposed

« back to all changes in this revision

Viewing changes to ez_setup.py

  • Committer: Bazaar Package Importer
  • Author(s): Devid Antonio Filoni
  • Date: 2011-03-03 14:49:13 UTC
  • mfrom: (1.1.9 upstream)
  • Revision ID: james.westby@ubuntu.com-20110303144913-0adl9cmw2s35lvzo
Tags: 2.0~git20110303-0ubuntu1
* New upstream git revision (LP: #728469).
* Remove debian/watch, debian/emesene.xpm, debian/install and
  debian/README.source files.
* Remove 21_svn2451_fix_avatar and 20_dont_build_own_libmimic patches.
* debian/control: modify python to python (>= 2.5) in Build-Depends field.
* debian/control: remove python-libmimic from Recommends field.
* debian/control: modify python-gtk2 (>= 2.10) to python-gtk2 (>= 2.12) in
  Depends field.
* debian/control: add python-appindicator and python-xmpp to Recommends
  field.
* debian/control: add python-papyon (>= 0.5.4) and python-webkit to Depends
  field.
* debian/control: update Description field.
* debian/control: add python-setuptools to Build-Depends field.
* debian/control: move python-dbus and python-notify to Depends field.
* Update debian/copyright file.
* Update debian/links file.
* debian/menu: update description field.
* Bump Standards-Version to 3.9.1.

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.6c2-py2.3.egg': 'f0064bf6aa2b7d0f3ba0b43f20817c27',
 
32
    'setuptools-0.6c2-py2.4.egg': '616192eec35f47e8ea16cd6a122b7277',
 
33
    'setuptools-0.6c3-py2.3.egg': 'f181fa125dfe85a259c9cd6f1d7b78fa',
 
34
    'setuptools-0.6c3-py2.4.egg': 'e0ed74682c998bfb73bf803a50e7b71e',
 
35
    'setuptools-0.6c3-py2.5.egg': 'abef16fdd61955514841c7c6bd98965e',
 
36
    'setuptools-0.6c4-py2.3.egg': 'b0b9131acab32022bfac7f44c5d7971f',
 
37
    'setuptools-0.6c4-py2.4.egg': '2a1f9656d4fbf3c97bf946c0a124e6e2',
 
38
    'setuptools-0.6c4-py2.5.egg': '8f5a052e32cdb9c72bcf4b5526f28afc',
 
39
    'setuptools-0.6c5-py2.3.egg': 'ee9fd80965da04f2f3e6b3576e9d8167',
 
40
    'setuptools-0.6c5-py2.4.egg': 'afe2adf1c01701ee841761f5bcd8aa64',
 
41
    'setuptools-0.6c5-py2.5.egg': 'a8d3f61494ccaa8714dfed37bccd3d5d',
 
42
    'setuptools-0.6c6-py2.3.egg': '35686b78116a668847237b69d549ec20',
 
43
    'setuptools-0.6c6-py2.4.egg': '3c56af57be3225019260a644430065ab',
 
44
    'setuptools-0.6c6-py2.5.egg': 'b2f8a7520709a5b34f80946de5f02f53',
 
45
    'setuptools-0.6c7-py2.3.egg': '209fdf9adc3a615e5115b725658e13e2',
 
46
    'setuptools-0.6c7-py2.4.egg': '5a8f954807d46a0fb67cf1f26c55a82e',
 
47
    'setuptools-0.6c7-py2.5.egg': '45d2ad28f9750e7434111fde831e8372',
 
48
    'setuptools-0.6c8-py2.3.egg': '50759d29b349db8cfd807ba8303f1902',
 
49
    'setuptools-0.6c8-py2.4.egg': 'cba38d74f7d483c06e9daa6070cce6de',
 
50
    'setuptools-0.6c8-py2.5.egg': '1721747ee329dc150590a58b3e1ac95b',
 
51
    'setuptools-0.6c9-py2.3.egg': 'a83c4020414807b496e4cfbe08507c03',
 
52
    'setuptools-0.6c9-py2.4.egg': '260a2be2e5388d66bdaee06abec6342a',
 
53
    'setuptools-0.6c9-py2.5.egg': 'fe67c3e5a17b12c0e7c541b7ea43a8e6',
 
54
    'setuptools-0.6c9-py2.6.egg': 'ca37b1ff16fa2ede6e19383e7b59245a',
 
55
    'setuptools-0.6c10-py2.3.egg': 'ce1e2ab5d3a0256456d9fc13800a7090',
 
56
    'setuptools-0.6c10-py2.4.egg': '57d6d9d6e9b80772c59a53a8433a5dd4',
 
57
    'setuptools-0.6c10-py2.5.egg': 'de46ac8b1c97c895572e5e8596aeb8c7',
 
58
    'setuptools-0.6c10-py2.6.egg': '58ea40aef06da02ce641495523a0b7f5',
 
59
    'setuptools-0.6c11-py2.3.egg': '2baeac6e13d414a9d28e7ba5b5a596de',
 
60
    'setuptools-0.6c11-py2.4.egg': 'bd639f9b0eac4c42497034dec2ec0c2b',
 
61
    'setuptools-0.6c11-py2.5.egg': '64c94f3bf7a72a13ec83e0b24f2749b2',
 
62
    'setuptools-0.6c11-py2.6.egg': 'bfa92100bd772d5a213eedd356d64086',
 
63
    'setuptools-0.6c11-py2.7.egg': 'fe1f997bc722265116870bc7919059ea',
 
64
}
 
65
 
 
66
import sys, os
 
67
try: from hashlib import md5
 
68
except ImportError: from md5 import md5
 
69
 
 
70
def _validate_md5(egg_name, data):
 
71
    if egg_name in md5_data:
 
72
        digest = md5(data).hexdigest()
 
73
        if digest != md5_data[egg_name]:
 
74
            print >>sys.stderr, (
 
75
                "md5 validation of %s failed!  (Possible download problem?)"
 
76
                % egg_name
 
77
            )
 
78
            sys.exit(2)
 
79
    return data
 
80
 
 
81
def use_setuptools(
 
82
    version=DEFAULT_VERSION, download_base=DEFAULT_URL, to_dir=os.curdir,
 
83
    download_delay=15
 
84
):
 
85
    """Automatically find/download setuptools and make it available on sys.path
 
86
 
 
87
    `version` should be a valid setuptools version number that is available
 
88
    as an egg for download under the `download_base` URL (which should end with
 
89
    a '/').  `to_dir` is the directory where setuptools will be downloaded, if
 
90
    it is not already available.  If `download_delay` is specified, it should
 
91
    be the number of seconds that will be paused before initiating a download,
 
92
    should one be required.  If an older version of setuptools is installed,
 
93
    this routine will print a message to ``sys.stderr`` and raise SystemExit in
 
94
    an attempt to abort the calling script.
 
95
    """
 
96
    was_imported = 'pkg_resources' in sys.modules or 'setuptools' in sys.modules
 
97
    def do_download():
 
98
        egg = download_setuptools(version, download_base, to_dir, download_delay)
 
99
        sys.path.insert(0, egg)
 
100
        import setuptools; setuptools.bootstrap_install_from = egg
 
101
    try:
 
102
        import pkg_resources
 
103
    except ImportError:
 
104
        return do_download()       
 
105
    try:
 
106
        pkg_resources.require("setuptools>="+version); return
 
107
    except pkg_resources.VersionConflict, e:
 
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
        else:
 
117
            del pkg_resources, sys.modules['pkg_resources']    # reload ok
 
118
            return do_download()
 
119
    except pkg_resources.DistributionNotFound:
 
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
 
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