Add virtualenv build script for local development.
authorMark Friedenbach <mark@monetize.io>
Wed, 24 Oct 2012 14:56:10 +0000 (07:56 -0700)
committerMark Friedenbach <mark@monetize.io>
Wed, 24 Oct 2012 17:35:04 +0000 (10:35 -0700)
Add a configure script and Makefile that build out an isolated virtualenv environment with the packages needed for running p2pool. Useful for local development or automated deployment.

.gitignore
Makefile [new file with mode: 0644]
conf/requirements.development.pip [new file with mode: 0644]
conf/requirements.production.pip [new file with mode: 0644]
conf/requirements.testing.pip [new file with mode: 0644]
configure [new file with mode: 0755]

index 4f3027c..02338b8 100644 (file)
@@ -5,3 +5,8 @@
 /litecoin_scrypt/build/
 /_trial_temp/
 /_trial_temp.lock
+Makefile.local
+.cache/
+.pkg/
+.coverage
+build/
diff --git a/Makefile b/Makefile
new file mode 100644 (file)
index 0000000..759ac81
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,99 @@
+# === makefile ------------------------------------------------------------===
+
+ROOT=$(shell pwd)
+CACHE_ROOT=${ROOT}/.cache
+PKG_ROOT=${ROOT}/.pkg
+
+-include Makefile.local
+
+.PHONY: all
+all: ${PKG_ROOT}/.stamp-h
+
+.PHONY: check
+check: all
+       "${PKG_ROOT}"/bin/coverage run "${PKG_ROOT}"/bin/trial p2pool
+       "${PKG_ROOT}"/bin/coverage xml -o build/report/coverage.xml
+
+.PHONY: run
+run: all
+       "${PKG_ROOT}"/bin/python run_p2pool.py
+
+.PHONY: shell
+shell: all
+       "${PKG_ROOT}"/bin/ipython
+
+.PHONY: mostlyclean
+mostlyclean:
+       -rm -rf build
+       -rm -rf .coverage
+
+.PHONY: clean
+clean: mostlyclean
+       -rm -rf "${PKG_ROOT}"
+
+.PHONY: distclean
+distclean: clean
+       -rm -rf "${CACHE_ROOT}"
+
+.PHONY: maintainer-clean
+maintainer-clean: distclean
+       @echo 'This command is intended for maintainers to use; it'
+       @echo 'deletes files that may need special tools to rebuild.'
+
+.PHONY: dist
+dist:
+
+# ===--------------------------------------------------------------------===
+
+${CACHE_ROOT}/virtualenv/virtualenv-1.8.2.tar.gz:
+       mkdir -p ${CACHE_ROOT}/virtualenv
+       sh -c "cd ${CACHE_ROOT}/virtualenv && curl -O http://pypi.python.org/packages/source/v/virtualenv/virtualenv-1.8.2.tar.gz"
+
+${PKG_ROOT}/.stamp-h: conf/requirements*.pip ${CACHE_ROOT}/virtualenv/virtualenv-1.8.2.tar.gz
+       # Because build and run-time dependencies are not thoroughly tracked,
+       # it is entirely possible that rebuilding the development environment
+       # on top of an existing one could result in a broken build. For the
+       # sake of consistency and preventing unnecessary, difficult-to-debug
+       # problems, the entire development environment is rebuilt from scratch
+       # everytime this make target is selected.
+       ${MAKE} clean
+       
+       # The ``${PKG_ROOT}`` directory, if it exists, is removed by the
+       # ``clean`` target. The PyPI cache is nonexistant if this is a freshly
+       # checked-out repository, or if the ``distclean`` target has been run.
+       # This might cause problems with build scripts executed later which
+       # assume their existence, so they are created now if they don't
+       # already exist.
+       mkdir -p "${PKG_ROOT}"
+       mkdir -p "${CACHE_ROOT}"/pypi
+       
+       # ``virtualenv`` is used to create a separate Python installation for
+       # this project in ``${PKG_ROOT}``.
+       tar \
+         -C "${CACHE_ROOT}"/virtualenv --gzip \
+         -xf "${CACHE_ROOT}"/virtualenv/virtualenv-1.8.2.tar.gz
+       python "${CACHE_ROOT}"/virtualenv/virtualenv-1.8.2/virtualenv.py \
+         --clear \
+         --distribute \
+         --never-download \
+         --prompt="(p2pool) " \
+         "${PKG_ROOT}"
+       -rm -rf "${CACHE_ROOT}"/virtualenv/virtualenv-1.8.2
+       
+       # readline is installed here to get around a bug on Mac OS X which is
+       # causing readline to not build properly if installed from pip.
+       "${PKG_ROOT}"/bin/easy_install readline
+       
+       # pip is used to install Python dependencies for this project.
+       for reqfile in conf/requirements*.pip; do \
+         "${PKG_ROOT}"/bin/python "${PKG_ROOT}"/bin/pip install \
+           --download-cache="${CACHE_ROOT}"/pypi \
+           -r $$reqfile; \
+       done
+       
+       # All done!
+       touch "${PKG_ROOT}"/.stamp-h
+
+# ===--------------------------------------------------------------------===
+# End of File
+# ===--------------------------------------------------------------------===
diff --git a/conf/requirements.development.pip b/conf/requirements.development.pip
new file mode 100644 (file)
index 0000000..a2db122
--- /dev/null
@@ -0,0 +1,3 @@
+ipdb==0.7
+ipython==0.13.1
+readline>=6.2.4.1
diff --git a/conf/requirements.production.pip b/conf/requirements.production.pip
new file mode 100644 (file)
index 0000000..a316196
--- /dev/null
@@ -0,0 +1,2 @@
+Twisted>=12.2.0
+argparse>=1.2.1
diff --git a/conf/requirements.testing.pip b/conf/requirements.testing.pip
new file mode 100644 (file)
index 0000000..d04ace9
--- /dev/null
@@ -0,0 +1,3 @@
+coverage==3.5.3
+unittest-xml-reporting==1.4.1
+unittest2==0.5.1
diff --git a/configure b/configure
new file mode 100755 (executable)
index 0000000..0e8f6ad
--- /dev/null
+++ b/configure
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+# === configure -----------------------------------------------------------===
+
+touch Makefile.local
+
+# ===--------------------------------------------------------------------===
+# End of File
+# ===--------------------------------------------------------------------===