15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#!python
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# This file was obtained from:
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#   http://peak.telecommunity.com/dist/ez_setup.py
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# on 2011/1/21.
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)"""Bootstrap setuptools installation
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)If you want to use setuptools in your package's setup.py, just include this
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)file in the same directory with it, and add this to the top of your setup.py::
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    from ez_setup import use_setuptools
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    use_setuptools()
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)If you want to require a specific version of setuptools, set a download
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)mirror, or use an alternate download directory, you can do so by supplying
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)the appropriate options to ``use_setuptools()``.
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)This file can also be run as a script to install or upgrade setuptools.
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)"""
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import sys
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DEFAULT_VERSION = "0.6c11"
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DEFAULT_URL     = "http://pypi.python.org/packages/%s/s/setuptools/" % sys.version[:3]
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)md5_data = {
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'setuptools-0.6b1-py2.3.egg': '8822caf901250d848b996b7f25c6e6ca',
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'setuptools-0.6b1-py2.4.egg': 'b79a8a403e4502fbb85ee3f1941735cb',
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'setuptools-0.6b2-py2.3.egg': '5657759d8a6d8fc44070a9d07272d99b',
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'setuptools-0.6b2-py2.4.egg': '4996a8d169d2be661fa32a6e52e4f82a',
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'setuptools-0.6b3-py2.3.egg': 'bb31c0fc7399a63579975cad9f5a0618',
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'setuptools-0.6b3-py2.4.egg': '38a8c6b3d6ecd22247f179f7da669fac',
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'setuptools-0.6b4-py2.3.egg': '62045a24ed4e1ebc77fe039aa4e6f7e5',
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'setuptools-0.6b4-py2.4.egg': '4cb2a185d228dacffb2d17f103b3b1c4',
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'setuptools-0.6c1-py2.3.egg': 'b3f2b5539d65cb7f74ad79127f1a908c',
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'setuptools-0.6c1-py2.4.egg': 'b45adeda0667d2d2ffe14009364f2a4b',
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'setuptools-0.6c10-py2.3.egg': 'ce1e2ab5d3a0256456d9fc13800a7090',
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'setuptools-0.6c10-py2.4.egg': '57d6d9d6e9b80772c59a53a8433a5dd4',
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'setuptools-0.6c10-py2.5.egg': 'de46ac8b1c97c895572e5e8596aeb8c7',
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'setuptools-0.6c10-py2.6.egg': '58ea40aef06da02ce641495523a0b7f5',
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'setuptools-0.6c11-py2.3.egg': '2baeac6e13d414a9d28e7ba5b5a596de',
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'setuptools-0.6c11-py2.4.egg': 'bd639f9b0eac4c42497034dec2ec0c2b',
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'setuptools-0.6c11-py2.5.egg': '64c94f3bf7a72a13ec83e0b24f2749b2',
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'setuptools-0.6c11-py2.6.egg': 'bfa92100bd772d5a213eedd356d64086',
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'setuptools-0.6c2-py2.3.egg': 'f0064bf6aa2b7d0f3ba0b43f20817c27',
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'setuptools-0.6c2-py2.4.egg': '616192eec35f47e8ea16cd6a122b7277',
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'setuptools-0.6c3-py2.3.egg': 'f181fa125dfe85a259c9cd6f1d7b78fa',
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'setuptools-0.6c3-py2.4.egg': 'e0ed74682c998bfb73bf803a50e7b71e',
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'setuptools-0.6c3-py2.5.egg': 'abef16fdd61955514841c7c6bd98965e',
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'setuptools-0.6c4-py2.3.egg': 'b0b9131acab32022bfac7f44c5d7971f',
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'setuptools-0.6c4-py2.4.egg': '2a1f9656d4fbf3c97bf946c0a124e6e2',
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'setuptools-0.6c4-py2.5.egg': '8f5a052e32cdb9c72bcf4b5526f28afc',
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'setuptools-0.6c5-py2.3.egg': 'ee9fd80965da04f2f3e6b3576e9d8167',
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'setuptools-0.6c5-py2.4.egg': 'afe2adf1c01701ee841761f5bcd8aa64',
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'setuptools-0.6c5-py2.5.egg': 'a8d3f61494ccaa8714dfed37bccd3d5d',
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'setuptools-0.6c6-py2.3.egg': '35686b78116a668847237b69d549ec20',
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'setuptools-0.6c6-py2.4.egg': '3c56af57be3225019260a644430065ab',
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'setuptools-0.6c6-py2.5.egg': 'b2f8a7520709a5b34f80946de5f02f53',
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'setuptools-0.6c7-py2.3.egg': '209fdf9adc3a615e5115b725658e13e2',
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'setuptools-0.6c7-py2.4.egg': '5a8f954807d46a0fb67cf1f26c55a82e',
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'setuptools-0.6c7-py2.5.egg': '45d2ad28f9750e7434111fde831e8372',
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'setuptools-0.6c8-py2.3.egg': '50759d29b349db8cfd807ba8303f1902',
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'setuptools-0.6c8-py2.4.egg': 'cba38d74f7d483c06e9daa6070cce6de',
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'setuptools-0.6c8-py2.5.egg': '1721747ee329dc150590a58b3e1ac95b',
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'setuptools-0.6c9-py2.3.egg': 'a83c4020414807b496e4cfbe08507c03',
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'setuptools-0.6c9-py2.4.egg': '260a2be2e5388d66bdaee06abec6342a',
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'setuptools-0.6c9-py2.5.egg': 'fe67c3e5a17b12c0e7c541b7ea43a8e6',
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'setuptools-0.6c9-py2.6.egg': 'ca37b1ff16fa2ede6e19383e7b59245a',
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import sys, os
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)try: from hashlib import md5
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)except ImportError: from md5 import md5
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def _validate_md5(egg_name, data):
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if egg_name in md5_data:
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        digest = md5(data).hexdigest()
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        if digest != md5_data[egg_name]:
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            print >>sys.stderr, (
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                "md5 validation of %s failed!  (Possible download problem?)"
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                % egg_name
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            )
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            sys.exit(2)
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return data
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def use_setuptools(
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    version=DEFAULT_VERSION, download_base=DEFAULT_URL, to_dir=os.curdir,
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    download_delay=15
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)):
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    """Automatically find/download setuptools and make it available on sys.path
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    `version` should be a valid setuptools version number that is available
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    as an egg for download under the `download_base` URL (which should end with
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    a '/').  `to_dir` is the directory where setuptools will be downloaded, if
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    it is not already available.  If `download_delay` is specified, it should
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    be the number of seconds that will be paused before initiating a download,
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    should one be required.  If an older version of setuptools is installed,
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    this routine will print a message to ``sys.stderr`` and raise SystemExit in
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    an attempt to abort the calling script.
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    """
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    was_imported = 'pkg_resources' in sys.modules or 'setuptools' in sys.modules
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    def do_download():
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        egg = download_setuptools(version, download_base, to_dir, download_delay)
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        sys.path.insert(0, egg)
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        import setuptools; setuptools.bootstrap_install_from = egg
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    try:
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        import pkg_resources
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    except ImportError:
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        return do_download()
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    try:
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        pkg_resources.require("setuptools>="+version); return
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    except pkg_resources.VersionConflict, e:
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        if was_imported:
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            print >>sys.stderr, (
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "The required version of setuptools (>=%s) is not available, and\n"
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "can't be installed while this script is running. Please install\n"
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            " a more recent version first, using 'easy_install -U setuptools'."
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "\n\n(Currently using %r)"
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            ) % (version, e.args[0])
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            sys.exit(2)
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    except pkg_resources.DistributionNotFound:
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        pass
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    del pkg_resources, sys.modules['pkg_resources']    # reload ok
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return do_download()
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def download_setuptools(
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    version=DEFAULT_VERSION, download_base=DEFAULT_URL, to_dir=os.curdir,
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    delay = 15
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)):
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    """Download setuptools from a specified location and return its filename
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    `version` should be a valid setuptools version number that is available
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    as an egg for download under the `download_base` URL (which should end
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    with a '/'). `to_dir` is the directory where the egg will be downloaded.
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    `delay` is the number of seconds to pause before an actual download attempt.
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    """
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    import urllib2, shutil
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    egg_name = "setuptools-%s-py%s.egg" % (version,sys.version[:3])
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    url = download_base + egg_name
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    saveto = os.path.join(to_dir, egg_name)
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    src = dst = None
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if not os.path.exists(saveto):  # Avoid repeated downloads
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        try:
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            from distutils import log
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            if delay:
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                log.warn("""
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)---------------------------------------------------------------------------
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)This script requires setuptools version %s to run (even to display
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)help).  I will attempt to download it for you (from
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)%s), but
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)you may need to enable firewall access for this script first.
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)I will start the download in %d seconds.
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)(Note: if this machine does not have network access, please obtain the file
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   %s
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)and place it in this directory before rerunning this script.)
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)---------------------------------------------------------------------------""",
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                    version, download_base, delay, url
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                ); from time import sleep; sleep(delay)
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            log.warn("Downloading %s", url)
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            src = urllib2.urlopen(url)
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            # Read/write all in one block, so we don't create a corrupt file
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            # if the download is interrupted.
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            data = _validate_md5(egg_name, src.read())
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            dst = open(saveto,"wb"); dst.write(data)
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        finally:
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            if src: src.close()
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            if dst: dst.close()
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return os.path.realpath(saveto)
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def main(argv, version=DEFAULT_VERSION):
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    """Install or upgrade setuptools and EasyInstall"""
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    try:
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        import setuptools
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    except ImportError:
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        egg = None
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        try:
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            egg = download_setuptools(version, delay=0)
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            sys.path.insert(0,egg)
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            from setuptools.command.easy_install import main
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            return main(list(argv)+[egg])   # we're done here
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        finally:
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            if egg and os.path.exists(egg):
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                os.unlink(egg)
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    else:
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        if setuptools.__version__ == '0.0.1':
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            print >>sys.stderr, (
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "You have an obsolete version of setuptools installed.  Please\n"
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "remove it from your system entirely before rerunning this script."
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            )
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            sys.exit(2)
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    req = "setuptools>="+version
2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    import pkg_resources
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    try:
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        pkg_resources.require(req)
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    except pkg_resources.VersionConflict:
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        try:
2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            from setuptools.command.easy_install import main
2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        except ImportError:
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            from easy_install import main
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        main(list(argv)+[download_setuptools(delay=0)])
2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        sys.exit(0) # try to force an exit
2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    else:
2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        if argv:
2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            from setuptools.command.easy_install import main
2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            main(argv)
2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        else:
2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            print "Setuptools version",version,"or greater has been installed."
2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            print '(Run "ez_setup.py -U setuptools" to reinstall or upgrade.)'
2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def update_md5(filenames):
2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    """Update our built-in md5 registry"""
2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    import re
2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    for name in filenames:
2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        base = os.path.basename(name)
2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        f = open(name,'rb')
2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        md5_data[base] = md5(f.read()).hexdigest()
2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        f.close()
2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    data = ["    %r: %r,\n" % it for it in md5_data.items()]
2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    data.sort()
2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    repl = "".join(data)
2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    import inspect
2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    srcfile = inspect.getsourcefile(sys.modules[__name__])
2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    f = open(srcfile, 'rb'); src = f.read(); f.close()
2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    match = re.search("\nmd5_data = {\n([^}]+)}", src)
2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if not match:
2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        print >>sys.stderr, "Internal error!"
2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        sys.exit(2)
2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    src = src[:match.start(1)] + repl + src[match.end(1):]
2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    f = open(srcfile,'w')
2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    f.write(src)
2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    f.close()
2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)if __name__=='__main__':
2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if len(sys.argv)>2 and sys.argv[1]=='--md5update':
2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        update_md5(sys.argv[2:])
2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    else:
2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        main(sys.argv[1:])
284