]> git.rkrishnan.org Git - tahoe-lafs/tahoe-lafs.git/commitdiff
packaging: move to setuptools
authorBrian Warner <warner@lothar.com>
Wed, 12 Sep 2007 23:02:53 +0000 (16:02 -0700)
committerBrian Warner <warner@lothar.com>
Wed, 12 Sep 2007 23:02:53 +0000 (16:02 -0700)
Makefile
README
setup.py

index 34ee26af93fe959cd027321cf5c56b4e6aaa7be3..0459c84ffb62eaaefb3c9c15a9387448df7dc44a 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -55,43 +55,31 @@ TRIAL=$(PYTHON) -u "$(TRIALPATH)" --rterrors --reactor=$(REACTOR)
 show-instdir:
        @echo $(INSTDIR)/lib
 
-PP=PYTHONPATH=$(PYTHONPATH)
+#PP=PYTHONPATH=$(PYTHONPATH)
 
 .PHONY: make-version build
 make-version:
        $(PYTHON) misc/make-version.py "allmydata-tahoe" "src/allmydata/_version.py"
 
-build: make-version build-zfec build-foolscap build-simplejson
-       $(PP) $(PYTHON) ./setup.py $(EXTRA_SETUP_ARGS) install --prefix="$(INSTDIR)" --install-lib="$(INSTDIR)/lib" --install-scripts="$(INSTDIR)/bin"
+build: make-version
+       $(PP) $(PYTHON) ./setup.py build_ext -i
 
-build-zfec:
-       cd src/zfec &&  \
-       $(PP) $(PYTHON) ./setup.py $(EXTRA_SETUP_ARGS) install --single-version-externally-managed --prefix="$(INSTDIR)" --record="$(INSTDIR)/zfec_install.log" --install-lib="$(INSTDIR)/lib" --install-scripts="$(INSTDIR)/bin"
+# 'make install' will do the following:
+#   build+install tahoe (probably to /usr/lib/pythonN.N/site-packages)
 
-build-foolscap:
-       cd src/foolscap && \
-       $(PP) $(PYTHON) ./setup.py $(EXTRA_SETUP_ARGS) install --prefix="$(INSTDIR)" --record="$(INSTDIR)/foolscap_install.log" --install-lib="$(INSTDIR)/lib" --install-scripts="$(INSTDIR)/bin"
-
-build-simplejson:
-       cd src/simplejson && \
-       $(PP) $(PYTHON) ./setup.py $(EXTRA_SETUP_ARGS) install --single-version-externally-managed --prefix="$(INSTDIR)" --record="$(INSTDIR)/simplejson_install.log" --install-lib="$(INSTDIR)/lib" --install-scripts="$(INSTDIR)/bin"
-
-clean-zfec:
-       -cd src/zfec && $(PP) $(PYTHON) ./setup.py clean --all
-       rm -rf src/zfec/zfec.egg-info
-       rm -f src/zfec/setuptools-*.egg
-       find src/zfec -name '*.pyc' |xargs rm -f
-
-clean-simplejson:
-       -cd src/simplejson && $(PP) $(PYTHON) ./setup.py clean --all
-       rm -rf src/simplejson/simplejson.egg-info
-       rm -f src/simplejson/setuptools-*.egg
-       find src/simplejson -name '*.pyc' |xargs rm -f
-
-clean-foolscap:
-       -cd src/foolscap && $(PP) $(PYTHON) ./setup.py clean --all
-       find src/foolscap -name '*.pyc' |xargs rm -f
+# 'make install PREFIX=/usr/local/stow/tahoe-N.N' will do the following:
+#   build+install tahoe to the given PREFIX
 
+install: make-version
+ifdef PREFIX
+       mkdir -p $(PREFIX)
+       $(PP) $(PYTHON) ./setup.py install \
+           --single-version-externally-managed \
+           --prefix=$(PREFIX) --record=./tahoe.files
+else
+       $(PP) $(PYTHON) ./setup.py install \
+           --single-version-externally-managed
+endif
 
 
 # RUNNING
@@ -120,15 +108,15 @@ stop-introducer: build
 
 # TESTING
 
-.PHONY: test-all test test-foolscap test-figleaf figleaf-output
+.PHONY: test-all test test-figleaf figleaf-output
 
 # you can use 'make test TEST=allmydata.test.test_introducer' to run just
 # test_introducer. TEST=allmydata.test.test_client.Basic.test_permute works
 # too.
-TEST=allmydata zfec
+TEST=allmydata
 REPORTER=
 
-test-all: test-foolscap test
+test-all: test
 
 # use 'make test REPORTER=--reporter=bwverbose' from buildbot, to supress the
 # ansi color sequences
@@ -136,12 +124,6 @@ test-all: test-foolscap test
 test: build
        $(PP) $(TRIAL) $(REPORTER) $(TEST)
 
-# foolscap tests need to be run in their own source dir, so that the paths to
-# the .pyc files are correct (since some of the foolscap tests depend upon
-# stack traces having actual source code in them, and they don't when the
-# tests are run from the 'instdir' that the tahoe makefile uses).
-test-foolscap:
-       cd src/foolscap && PYTHONPATH=$(ORIGPYTHONPATH) $(TRIAL) $(REPORTER) foolscap
 
 test-figleaf: build
        find $(INSTDIR) -name '*.pyc' |xargs rm
@@ -156,7 +138,7 @@ figleaf-output:
 # coverage-html/index.html
 
 .PHONY: upload-figleaf .figleaf.el pyflakes count-lines check-memory
-.PHONY: clean clean-zfec clean-simplejson clean-foolscap
+.PHONY: clean
 
 # 'upload-figleaf' is meant to be run with an UPLOAD_TARGET=host:/dir setting
 ifdef UPLOAD_TARGET
@@ -211,18 +193,13 @@ test-clean:
        find . |grep -v allfiles.tmp |sort >allfiles.tmp.new
        diff allfiles.tmp.old allfiles.tmp.new
 
-clean: clean-zfec clean-foolscap clean-simplejson
+clean:
        rm -rf build
        rm -f debian
        rm -rf instdir
-       rm -f `find src/allmydata -name '*.so'`
-       rm -f src/allmydata/_version.py
+       rm -f `find src/allmydata -name '*.so' -or -name '*.pyc'`
+       rm -rf allmydata_tahoe.egg-info
 
-install: 
-       cd src/zfec && python ./setup.py install && cd ../..
-       cd src/foolscap && python ./setup.py install && cd ../..
-       cd src/simplejson && python ./setup.py install && cd ../..
-       python ./setup.py install
 
 
 # DEBIAN PACKAGING
@@ -245,7 +222,7 @@ deb-edgy:
        $(MAKE) deb-ARCH ARCH=edgy TAHOE_ARCH=feisty
 # etch uses the feisty control files for now
 deb-etch:
-       $(MAKE) deb-ARCH ARCH=etch FOOLSCAP_ARCH=sid TAHOE_ARCH=feisty
+       $(MAKE) deb-ARCH ARCH=etch TAHOE_ARCH=feisty
 
 # we know how to handle the following debian architectures
 KNOWN_DEBIAN_ARCHES := sid feisty edgy etch
@@ -260,9 +237,6 @@ is-known-debian-arch:
        /bin/true
 endif
 
-ifndef FOOLSCAP_ARCH
-FOOLSCAP_ARCH=$(ARCH)
-endif
 ifndef TAHOE_ARCH
 TAHOE_ARCH=$(ARCH)
 endif
diff --git a/README b/README
index fb1bed8aca2aba7f7ae2fd92bbabe6764e23bf87..cfb060e45e60034db64938643e7b800d30b43ea5 100644 (file)
--- a/README
+++ b/README
@@ -118,15 +118,6 @@ gcc make python-dev python-twisted python-nevow python-pyopenssl".
    Feedback with details of other builds is greatly appreciated)
 
 
-Tahoe uses a few additional libraries which are included in this source
-distribution for convenience. These will be automatically built when you type
-'make', but if you have separate installations of them you may wish to modify
-the makefile to use those in preference to the included versions. They
-include Foolscap (a secure remote-object-invocation library) and zfec
-(erasure coding). There are also pieces of PyCrypto copied into
-allmydata.Crypto, modified to provide a faster CTR-mode API.
-
-
 BUILDING:
 
  Just type 'make' in the top-level tahoe directory.  This works on Windows
@@ -138,7 +129,7 @@ BUILDING:
  If the desired version of 'python' is not already on your PATH, then type
  'make PYTHON=/path/to/your/preferred/python'.
 
- 'make test-all' runs the unit test suites.  (This can take a long time on
+ 'make test' runs the unit test suites.  (This can take a long time on
  slow computers.  There are a lot of tests and some of them do a lot of
  public-key cryptography.)
 
@@ -165,34 +156,32 @@ Running-In-Place Way.  Choose one:
   directory to construct a debian package named 'allmydata-tahoe' which you
   can then install with dpkg.
 
- The Python Way:
-
-  Just run make install.  (This works on cygwin and Windows, too.)
+ The Setuptools Way:
 
-  In case you want to configure the location or other install options you can
-  learn how it is done here:
+  Just run 'python setup.py install'. This will compile and install the Tahoe
+  code to a system-specific standard location (somewhere inside /usr/lib/ on
+  unix). It will also acquire and install many of the necessary dependencies
+  in the same place. (The dependency-checking can handle foolscap and zfec,
+  but you are still responsible for ensuring that twisted, nevow, and
+  pyopenssl are installed).
 
-  The Python Way is to execute "setup.py install" for each Python package.
+  To install it to a non-standard location, learn about the
+  "--single-version-externally-managed" flag, and visit
+  http://allmydata.org/trac/tahoe/wiki/Installing .
 
-  You'll need to run "setup.py install" four separate times, one for each of
-  the four subpackages (allmydata, foolscap, simplejson, and zfec).
+ The easy_install Way:
 
-    for PACKAGE in zfec foolscap simplejson; do
-      cd src/${PACKAGE} && python setup.py install && cd ../..
-    done
-
-    # the tahoe subpackage's setup.py script is in the root directory
-    PACKAGE=tahoe
-    python setup.py install
+  Tahoe is registered with the Python Package Index (PyPI), so the
+  'easy_install' tool can download and install it for you. Just type
+  'easy_install allmydata-tahoe' from any shell. That will download the most
+  recent Tahoe source tarball, unpack it in a temporary directory, install it
+  to the standard location, then download and install any easy_install-able
+  dependencies (like zfec and foolscap) that you need.
 
  The Running-In-Place Way:
 
-  The Running-In-Place Way is to add a directory to your PYTHONPATH.
-
-  To run from a source tree (without installing first) just build it
-  (i.e. type 'make'), which will put all the necessary libraries into a local
-  directory named "./instdir/lib", which you can then add to your 
-  PYTHONPATH .  It will put executables into "./instdir/bin".
+  You can use Tahoe without installing it. Once you've built Tahoe then you
+  can execute "./bin/allmydata-tahoe".
 
 
 TESTING THAT IT IS PROPERLY INSTALLED
index 50aeccb9d563417503d2ff33114b4cf18702cdcd..fcf76029c71a796d523c2836aa4029fc18a171c2 100644 (file)
--- a/setup.py
+++ b/setup.py
@@ -21,7 +21,7 @@
 # http://allmydata.com/.
 
 import re, os.path
-from distutils.core import Extension, setup
+from setuptools import Extension, setup
 
 trove_classifiers=[
     "Development Status :: 3 - Alpha", 
@@ -95,6 +95,17 @@ setup(name='allmydata-tahoe',
       package_data={ 'allmydata': ['web/*.xhtml', 'web/*.html', 'web/*.css'] },
       classifiers=trove_classifiers,
       test_suite="allmydata.test",
+      install_requires=["zfec >= 1.0.3",
+                        "foolscap >= 0.1.6", "simplejson", "nevow"],
+      dependency_links=["http://allmydata.org/trac/tahoe/wiki/Dependencies",
+                        #  this form is used when the unpacked source
+                        #  distribution is copied into our tree:
+                        #"file:misc/dependencies/zfec-1.0.2/"
+                        #  and this form is used when we provide a tarball
+                        #"file:misc/dependencies/zfec-1.0.2.tar.gz",
+                        # The file: URL can start with either 'misc' or
+                        # './misc' to get a relative path.
+                        ],
       ext_modules=[
           Extension("allmydata.Crypto.Cipher.AES",
                     include_dirs=["src/allmydata/Crypto"],