From: Zooko O'Whielacronx Date: Sat, 6 Dec 2008 00:30:54 +0000 (-0700) Subject: setup: attempt to remove the custom setuptools-ish logic in setup.py -- the result... X-Git-Tag: allmydata-tahoe-1.3.0~224 X-Git-Url: https://git.rkrishnan.org/specifications/components/com_hotproperty/rgr-080307.php?a=commitdiff_plain;h=b35d70b1f23f31044b583ba996a694cbae0732bb;p=tahoe-lafs%2Ftahoe-lafs.git setup: attempt to remove the custom setuptools-ish logic in setup.py -- the result works on my Windows box but doesn't yield a working ./bin/tahoe on Windows, and hasn't been tested yet on other platforms --- diff --git a/setup.cfg b/setup.cfg index cc4dd286..e25cca60 100644 --- a/setup.cfg +++ b/setup.cfg @@ -17,4 +17,10 @@ zip_ok=False # dependencies in the tahoe-deps/ directory. find_links=misc/dependencies tahoe-deps ../tahoe-deps - http://allmydata.org/trac/tahoe/wiki/Dependencies + http://192.168.1.126:3567/uri/URI:DIR2-RO:snrfwfxatrci35zdgjnzxxx2ke:unarxv347edtku3xzmefy4mcdmfngxzeb72iyqcadbjzjpczjx5a + +# http://sourceforge.net/project/showfiles.php?group_id=78018&package_id=79063 + + +# http://pypi.python.org/pypi/pywin32 + diff --git a/setup.py b/setup.py index 534feed6..778bb004 100644 --- a/setup.py +++ b/setup.py @@ -12,97 +12,60 @@ import os, re, sys, stat, subprocess ##### sys.path management -basedir = os.path.dirname(os.path.abspath(__file__)) -pyver = "python%d.%d" % (sys.version_info[:2]) -if sys.platform == "win32": - supportlib = os.path.join("support", "Lib", "site-packages") -else: - supportlib = os.path.join("support", "lib", pyver, "site-packages") -supportlib = os.path.join(basedir, supportlib) - -def add_tahoe_paths(): - """Modify sys.path and PYTHONPATH to include Tahoe and supporting libraries - - The first step towards building Tahoe is to run:: - - python setup.py build_tahoe - - which is the equivalent of:: - - mkdir -p $(BASEDIR)/support/lib/python2.5/site-packages - (or cygpath equivalent) - setup.py develop --multi-version --prefix=$(BASEDIR)/support - - This installs .eggs for any dependent libraries that aren't already - available on the system, into support/lib/pythonN.N/site-packages (or - support/Lib/site-packages on windows). It also adds an .egg-link for - Tahoe itself into the same directory. - - We add this directory to os.environ['PYTHONPATH'], so that any child - processes we spawn will be able to use these packages. - - When the setuptools site.py sees that supportlib in PYTHONPATH, it scans - through it for .egg and .egg-link entries, and adds them to sys.path . - Since python has already processed all the site.py files by the time we - get here, we perform this same sort of processing ourselves: this makes - tahoe (and dependency libraries) available to code within setup.py - itself. This is used by the 'setup.py trial' subcommand, which invokes - trial directly rather than spawning a subprocess (this is easier than - locating the 'trial' executable, especially when Twisted was installed as - a dependent library). +def pylibdir(prefixdir): + pyver = "python%d.%d" % (sys.version_info[:2]) + if sys.platform == "win32": + return os.path.join(prefixdir, "Lib", "site-packages") + else: + return os.path.join(prefixdir, "lib", pyver, "site-packages") - We'll need to add these .eggs to sys.path before importing anything that - isn't a part of stdlib. All the directories that we add this way are put - at the start of sys.path, so they will override anything that was present - on the system (and perhaps found lacking by the setuptools requirements - expressed in _auto_deps.py). - """ +basedir = os.path.dirname(os.path.abspath(__file__)) +supportlib = pylibdir(os.path.join(basedir, "support")) + +for i in range(len(sys.argv)): + arg = sys.argv[i] + if arg == "build_tahoe": + del sys.argv[i] + sys.argv.extend(["develop", "--prefix=support", "--script-dir=support/bin"]) + +for i in range(len(sys.argv)): + arg = sys.argv[i] + prefixdir = None + if arg.startswith("--prefix="): + prefixdir = arg[len("--prefix="):] + if arg == "--prefix": + if len(sys.argv) > i+1: + prefixdir = sys.argv[i+1] + + if prefixdir: + libdir = pylibdir(prefixdir) + try: + os.makedirs(libdir) + except EnvironmentError, le: + # Okay, maybe the dir was already there. + pass + sys.path.append(libdir) + pp = os.environ.get('PYTHONPATH','').split(os.pathsep) + pp.append(libdir) + os.environ['PYTHONPATH'] = os.pathsep.join(pp) + + if arg.startswith("build"): + # chmod +x bin/tahoe + bin_tahoe = os.path.join("bin", "tahoe") + old_mode = stat.S_IMODE(os.stat(bin_tahoe)[stat.ST_MODE]) + new_mode = old_mode | (stat.S_IXUSR | stat.S_IRUSR | + stat.S_IXGRP | stat.S_IRGRP | + stat.S_IXOTH | stat.S_IROTH ) + os.chmod(bin_tahoe, new_mode) - extra_syspath_items = [] - extra_pythonpath_items = [] - - extra_syspath_items.append(supportlib) - extra_pythonpath_items.append(supportlib) - - # Since we use setuptools to populate that directory, there will be a - # number of .egg and .egg-link entries there. Add all of them to - # sys.path, since that what the setuptools site.py would do if it - # encountered them at process start time. Without this step, the rest of - # this process would be unable to use the packages installed there. We - # don't need to add them to PYTHONPATH, since the site.py present there - # will add them when the child process starts up. - - if os.path.isdir(supportlib): - for fn in os.listdir(supportlib): - if fn.endswith(".egg"): - extra_syspath_items.append(os.path.join(supportlib, fn)) - - # We also add our src/ directory, since that's where all the Tahoe code - # lives. This matches what site.py does when it sees the .egg-link file - # that is written to the support dir by an invocation of our 'setup.py - # develop' command. - extra_syspath_items.append(os.path.join(basedir, "src")) - - # and we put an extra copy of everything from PYTHONPATH in front, so - # that it is possible to override the packages that setuptools downloads - # with alternate versions, by doing e.g. "PYTHONPATH=foo python setup.py - # trial" - oldpp = os.environ.get("PYTHONPATH", "").split(os.pathsep) - if oldpp == [""]: - # grr silly split() behavior - oldpp = [] - extra_syspath_items = oldpp + extra_syspath_items - - sys.path = extra_syspath_items + sys.path - - # We also provide it to any child processes we spawn, via - # os.environ["PYTHONPATH"] - os.environ["PYTHONPATH"] = os.pathsep.join(oldpp + extra_pythonpath_items) - -# add_tahoe_paths() must be called before use_setuptools() is called. I don't -# know why. If it isn't, then a later pkg_resources.requires(pycryptopp) call -# fails because an old version (in /usr/lib) was already loaded. -add_tahoe_paths() + if arg.startswith("install") or arg.startswith("develop"): + if sys.platform == "linux2": + # workaround for tahoe #229 / setuptools #17, on debian + sys.argv.extend(["--site-dirs", "/var/lib/python-support/python%d.%d" % (sys.version_info[:2])]) + elif sys.platform == "darwin": + # this probably only applies to leopard 10.5, possibly only 10.5.5 + sd = "/System/Library/Frameworks/Python.framework/Versions/%d.%d/Extras/lib/python" % (sys.version_info[:2]) + sys.argv.extend(["--site-dirs", sd]) try: from ez_setup import use_setuptools @@ -116,7 +79,7 @@ else: # as a result of being transitively depended on in a setup_requires, but # then are needed for the installed code to run, i.e. in an # install_requires. - use_setuptools(download_delay=0, min_version="0.6c8") + use_setuptools(download_delay=0, min_version="0.6c10dev") from setuptools import find_packages, setup from setuptools.command import sdist @@ -292,32 +255,7 @@ class BuildTahoe(Command): def finalize_options(self): pass def run(self): - # chmod +x bin/tahoe - bin_tahoe = os.path.join("bin", "tahoe") - old_mode = stat.S_IMODE(os.stat(bin_tahoe)[stat.ST_MODE]) - new_mode = old_mode | (stat.S_IXUSR | stat.S_IRUSR | - stat.S_IXGRP | stat.S_IRGRP | - stat.S_IXOTH | stat.S_IROTH ) - os.chmod(bin_tahoe, new_mode) - - # 'setup.py develop --multi-version --prefix SUPPORT' will complain if SUPPORTLIB is - # not on PYTHONPATH, because it thinks you are installing to a place - # that will not be searched at runtime (which is true, except that we - # add SUPPORTLIB to PYTHONPATH to run tests, etc). So set up - # PYTHONPATH now, then spawn a 'setup.py develop' command. Also, we - # have to create the directory ourselves. - if not os.path.isdir(supportlib): - os.makedirs(supportlib) - - # command = [sys.executable, "setup.py", "develop", "--multi-version", "--prefix", "support"] command = [sys.executable, "setup.py", "develop", "--prefix", "support"] - if sys.platform == "linux2": - # workaround for tahoe #229 / setuptools #17, on debian - command.extend(["--site-dirs", "/var/lib/python-support/" + pyver]) - elif sys.platform == "darwin": - # this probably only applies to leopard 10.5, possibly only 10.5.5 - sd = "/System/Library/Frameworks/Python.framework/Versions/2.5/Extras/lib/python" - command.extend(["--site-dirs", sd]) print "Command:", " ".join(command) rc = subprocess.call(command) if rc < 0: