[CalendarServer-changes] [4608] CalendarServer/branches/egg-info-351
source_changes at macosforge.org
source_changes at macosforge.org
Tue Oct 20 11:26:38 PDT 2009
Revision: 4608
http://trac.macosforge.org/projects/calendarserver/changeset/4608
Author: glyph at apple.com
Date: 2009-10-20 11:26:37 -0700 (Tue, 20 Oct 2009)
Log Message:
-----------
tremendous overkill for what I'm trying to do here, but now I at least understand what 'run' is all about.
Modified Paths:
--------------
CalendarServer/branches/egg-info-351/run
CalendarServer/branches/egg-info-351/support/runlib.sh
CalendarServer/branches/egg-info-351/test
Added Paths:
-----------
CalendarServer/branches/egg-info-351/support/pystuff.sh
Modified: CalendarServer/branches/egg-info-351/run
===================================================================
--- CalendarServer/branches/egg-info-351/run 2009-10-20 16:02:48 UTC (rev 4607)
+++ CalendarServer/branches/egg-info-351/run 2009-10-20 18:26:37 UTC (rev 4608)
@@ -34,712 +34,6 @@
wd="$(cd "$(dirname "$0")" && pwd)";
-source support/runlib.sh
+. support/runlib.sh
-##
-# Command line
-##
-
- verbose="";
- do_get="true";
- do_setup="true";
- do_run="true";
- force_setup="false";
-disable_setup="false";
- print_path="false";
- install="";
- daemonize="-X";
- kill="false";
- restart="false";
- plugin_name="caldav";
- service_type="Combined";
- read_key="";
- profile="";
- reactor="";
-
-if [ -z "${CALENDARSERVER_CACHE_DEPS-}" ]; then
- cache_deps="${wd}/.dependencies";
-else
- cache_deps="${CALENDARSERVER_CACHE_DEPS}";
-fi;
-
-while getopts 'hvgsfnpdkrK:i:I:t:S:P:R:' option; do
- case "$option" in
- '?') usage; ;;
- 'h') usage -; exit 0; ;;
- 'v') verbose="-v"; ;;
- 'f') force_setup="true"; ;;
- 'k') kill="true"; ;;
- 'r') restart="true"; ;;
- 'd') daemonize=""; ;;
- 'P') plugin_name="${OPTARG}"; ;;
- 'R') reactor="-R ${OPTARG}"; ;;
- 't') service_type="${OPTARG}"; ;;
- 'K') read_key="${OPTARG}"; ;;
- 'S') profile="--profiler cprofile -p ${OPTARG}"; ;;
- 'g') do_get="true" ; do_setup="false"; do_run="false"; ;;
- 's') do_get="true" ; do_setup="true" ; do_run="false"; ;;
- 'p') do_get="false"; do_setup="false"; do_run="false"; print_path="true"; ;;
- 'i') do_get="true" ; do_setup="true" ; do_run="false"; install="${OPTARG}"; install_flag="--root="; ;;
- 'I') do_get="true" ; do_setup="true" ; do_run="false"; install="${wd}/build/dst"; install_flag="--root="; install_home="${OPTARG}"; ;;
- esac;
-done;
-shift $((${OPTIND} - 1));
-
-if [ $# != 0 ]; then usage "Unrecognized arguments:" "$@"; fi;
-
-##
-# Set up paths
-##
-
-py_version ()
-{
- local python="$1"; shift;
- echo "$("${python}" -c "from distutils.sysconfig import get_python_version; print get_python_version()")";
-}
-
-try_python ()
-{
- local python="$1"; shift;
-
- if [ -z "${python}" ]; then return 1; fi;
-
- if ! type "${python}" > /dev/null 2>&1; then return 1; fi;
- local py_version="$(py_version "${python}")";
- if [ "${py_version/./}" -lt "25" ]; then return 1; fi;
-
- return 0;
-}
-
-for v in "" "2.6" "2.5"; do
- for p in \
- "${PYTHON:=}" \
- "python${v}" \
- "/usr/local/bin/python${v}" \
- "/usr/local/python/bin/python${v}" \
- "/usr/local/python${v}/bin/python${v}" \
- "/opt/bin/python${v}" \
- "/opt/python/bin/python${v}" \
- "/opt/python${v}/bin/python${v}" \
- "/Library/Frameworks/Python.framework/Versions/${v}/bin/python" \
- "/opt/local/bin/python${v}" \
- "/sw/bin/python${v}" \
- ;
- do
- if try_python "${p}"; then python="${p}"; break; fi;
- done;
- if [ -n "${python:-}" ]; then break; fi;
-done;
-
-if [ -z "${python:-}" ]; then
- echo "No suitable python found. Python 2.5 is required.";
- exit 1;
-fi;
-
-if [ -z "${caldav:-}" ]; then
- caldav="${wd}";
-fi;
-
-if [ -z "${caldavd_wrapper_command:-}" ]; then
- if [ "$(uname -s)" == "Darwin" ] && [ "$(uname -r | cut -d . -f 1)" -ge 9 ]; then
- caldavd_wrapper_command="launchctl bsexec /";
- else
- caldavd_wrapper_command="";
- fi;
-fi;
-
- top="$(cd "${caldav}/.." && pwd -L)"
-patches="${caldav}/lib-patches";
-twisted="${top}/Twisted";
- dav="${twisted}/twisted/web2/dav"
-
-if [ -z "${config:-}" ]; then
- config="${wd}/conf/caldavd-dev.plist";
-fi;
-
-conf_read_key ()
-{
- local key="$1"; shift;
-
- # FIXME: This only works for simple values (no arrays, dicts)
- tr '\n' ' ' < "${config}" \
- | xpath "/plist/dict/*[preceding-sibling::key[1]='${key}'" 2> /dev/null \
- | sed -n 's|^<[^<][^<]*>\([^<]*\)</[^<][^<]*>.*$|\1|p';
-}
-
-if [ -n "${read_key}" ]; then
- conf_read_key "${read_key}";
- exit $?;
-fi;
-
-if "${kill}" || "${restart}"; then
- pidfile="$(conf_read_key "PIDFile")";
- if [ ! -r "${pidfile}" ]; then
- echo "Unreadable PID file: ${pidfile}";
- exit 1;
- fi;
- pid="$(cat "${pidfile}" | head -1)";
- if [ -z "${pid}" ]; then
- echo "No PID in PID file: ${pidfile}";
- exit 1;
- fi;
- echo "Killing process ${pid}";
- kill -TERM "${pid}";
- if ! "${restart}"; then
- exit 0;
- fi;
-fi;
-
-if [ -z "${PYTHONPATH:-}" ]; then
- user_python_path="";
-else
- user_python_path=":${PYTHONPATH}";
-fi;
-
- py_platform="$("${python}" -c "from distutils.util import get_platform; print get_platform()")";
- py_version="$(py_version "${python}")";
-py_platform_libdir="lib.${py_platform}-${py_version}";
-
-if [ -n "${install}" ] && ! echo "${install}" | grep '^/' > /dev/null; then
- install="$(pwd)/${install}";
-fi;
-
-svn_uri_base="$(svn info "${caldav}" --xml 2> /dev/null | sed -n 's|^.*<root>\(.*\)</root>.*$|\1|p')";
-
-if [ -z "${svn_uri_base}" ]; then
- svn_uri_base="http://svn.calendarserver.org/repository/calendarserver";
-fi;
-
-export PYTHONPATH="${caldav}";
-
-# Find a command that can hash up a string for us
-if type -t openssl > /dev/null; then
- hash="hash"; hash () { openssl dgst -md5; }
-elif type -t md5 > /dev/null; then
- hash="md5";
-elif type -t md5sum > /dev/null; then
- hash="md5sum";
-elif type -t cksum > /dev/null; then
- hash="hash"; hash () { cksum | cut -f 1 -d " "; }
-elif type -t sum > /dev/null; then
- hash="hash"; hash () { sum | cut -f 1 -d " "; }
-else
- hash="";
-fi;
-
-##
-# Routines
-##
-
-run () {
- if "${print_path}"; then
- echo "${PYTHONPATH}";
- exit 0;
- fi;
-
- echo "";
- echo "Using ${python} as Python";
-
- if "${do_run}"; then
- if [ ! -f "${config}" ]; then
- echo "";
- echo "Missing config file: ${config}";
- echo "You might want to start by copying the test configuration:";
- echo "";
- echo " cp conf/caldavd-test.plist conf/caldavd-dev.plist";
- echo "";
- exit 1;
- fi;
-
- cd "${wd}";
- if [ ! -d "${wd}/logs" ]; then
- mkdir "${wd}/logs";
- fi;
-
- echo "";
- echo "Starting server...";
- exec ${caldavd_wrapper_command} \
- "${caldav}/bin/caldavd" ${daemonize} \
- -f "${config}" \
- -T "${twisted}/bin/twistd" \
- -P "${plugin_name}" \
- -t "${service_type}" \
- ${reactor} \
- ${profile};
- cd /;
- fi;
-}
-
-apply_patches () {
- local name="$1"; shift;
- local path="$1"; shift;
-
- if [ -d "${patches}/${name}" ]; then
- echo "";
- echo "Applying patches to ${name} in ${path}...";
-
- cd "${path}";
- find "${patches}/${name}" \
- -type f \
- -name '*.patch' \
- -print \
- -exec patch -p0 --forward -i '{}' ';';
- cd /;
-
- fi;
-
- echo ""
- echo "Removing build directory ${path}/build..."
- rm -rf "${path}/build";
- echo "Removing pyc files from ${path}..."
- find "${path}" -type f -name '*.pyc' -print0 | xargs -0 rm -f;
-}
-
-www_get () {
- if ! "${do_get}"; then return 0; fi;
-
- local name="$1"; shift;
- local path="$1"; shift;
- local url="$1"; shift;
-
- if "${force_setup}" || [ ! -d "${path}" ]; then
- local ext="$(echo "${url}" | sed 's|^.*\.\([^.]*\)$|\1|')";
-
- case "${ext}" in
- gz|tgz) decompress="gzip -d -c"; ;;
- bz2) decompress="bzip2 -d -c"; ;;
- tar) decompress="cat"; ;;
- *)
- echo "Unknown extension: ${ext}";
- exit 1;
- ;;
- esac;
-
- echo "";
-
- if [ -n "${cache_deps}" ] && [ -n "${hash}" ]; then
- mkdir -p "${cache_deps}";
-
- cache_file="${cache_deps}/${name}-$(echo "${url}" | "${hash}")-$(basename "${url}")";
-
- if [ ! -f "${cache_file}" ]; then
- echo "Downloading ${name}...";
- curl -L "${url}" -o "${cache_file}";
- fi;
-
- echo "Unpacking ${name} from cache...";
- get () { cat "${cache_file}"; }
- else
- echo "Downloading ${name}...";
- get () { curl -L "${url}"; }
- fi;
-
- rm -rf "${path}";
- cd "$(dirname "${path}")";
- get | ${decompress} | tar -xvf -;
- apply_patches "${name}" "${path}";
- cd /;
- fi;
-}
-
-svn_get () {
- if ! "${do_get}"; then return 0; fi;
-
- local name="$1"; shift;
- local path="$1"; shift;
- local uri="$1"; shift;
- local revision="$1"; shift;
-
- if [ -d "${path}" ]; then
- local wc_uri="$(svn info --xml "${path}" 2> /dev/null | sed -n 's|^.*<url>\(.*\)</url>.*$|\1|p')";
-
- if "${force_setup}"; then
- # Verify that we have a working copy checked out from the correct URI
- if [ "${wc_uri}" != "${uri}" ]; then
- echo "";
- echo "Current working copy (${path}) is from the wrong URI: ${wc_uri} != ${uri}";
- rm -rf "${path}";
- svn_get "${name}" "${path}" "${uri}" "${revision}";
- return $?;
- fi;
-
- echo "";
-
- echo "Reverting ${name}...";
- svn revert -R "${path}";
-
- echo "Updating ${name}...";
- svn update -r "${revision}" "${path}";
-
- apply_patches "${name}" "${path}";
- else
- if ! "${print_path}"; then
- # Verify that we have a working copy checked out from the correct URI
- if [ "${wc_uri}" != "${uri}" ]; then
- echo "";
- echo "Current working copy (${path}) is from the wrong URI: ${wc_uri} != ${uri}";
- echo "Performing repository switch for ${name}...";
- svn switch -r "${revision}" "${uri}" "${path}";
-
- apply_patches "${name}" "${path}";
- else
- local svnversion="$(svnversion "${path}")";
- if [ "${svnversion%%[M:]*}" != "${revision}" ]; then
- echo "";
- echo "Updating ${name}...";
- svn update -r "${revision}" "${path}";
-
- apply_patches "${name}" "${path}";
- fi;
- fi;
- fi;
- fi;
- else
- echo "";
-
- checkout () {
- echo "Checking out ${name}...";
- svn checkout -r "${revision}" "${uri}@${revision}" "${path}";
- }
-
- if [ "${revision}" != "HEAD" ] && [ -n "${cache_deps}" ] && [ -n "${hash}" ]; then
- local cache_file="${cache_deps}/${name}-$(echo "${uri}" | "${hash}")@r${revision}.tgz";
-
- mkdir -p "${cache_deps}";
-
- if [ -f "${cache_file}" ]; then
- echo "Unpacking ${name} from cache...";
- mkdir -p "${path}";
- tar -C "${path}" -xvzf "${cache_file}";
- else
- checkout;
- echo "Caching ${name}...";
- tar -C "${path}" -cvzf "${cache_file}" .;
- fi;
- else
- checkout;
- fi;
-
- apply_patches "${name}" "${path}";
- fi;
-}
-
-py_build () {
- local name="$1"; shift;
- local path="$1"; shift;
- local optional="$1"; shift;
-
- if "${do_setup}"; then
- echo "";
- echo "Building ${name}...";
- cd "${path}";
- if ! "${python}" ./setup.py -q build --build-lib "build/${py_platform_libdir}" "$@"; then
- if "${optional}"; then
- echo "WARNING: ${name} failed to build.";
- echo "WARNING: ${name} is not required to run the server; continuing without it.";
- else
- return $?;
- fi;
- fi;
- cd /;
- fi;
-}
-
-py_install () {
- local name="$1"; shift;
- local path="$1"; shift;
-
- if [ -n "${install}" ]; then
- echo "";
- echo "Installing ${name}...";
- cd "${path}";
- "${python}" ./setup.py install "${install_flag}${install}";
- cd /;
- fi;
-}
-
-py_have_module () {
- local module="$1"; shift;
-
- PYTHONPATH="" "${python}" -c "import ${module}" > /dev/null 2>&1;
-}
-
-##
-# Download and set up dependancies
-##
-
-#
-# Zope Interface
-#
-
-if ! py_have_module zope.interface; then
- zope="${top}/zope.interface-3.3.0";
-
- www_get "Zope Interface" "${zope}" http://www.zope.org/Products/ZopeInterface/3.3.0/zope.interface-3.3.0.tar.gz;
- py_build "Zope Interface" "${zope}" false;
- py_install "Zope Interface" "${zope}";
-
- export PYTHONPATH="${PYTHONPATH}:${zope}/build/${py_platform_libdir}";
-fi;
-
-#
-# PyXML
-#
-
-if ! py_have_module xml.dom.ext; then
- xml="${top}/PyXML-0.8.4";
-
- www_get "PyXML" "${xml}" http://internap.dl.sourceforge.net/sourceforge/pyxml/PyXML-0.8.4.tar.gz;
- py_build "PyXML" "${xml}" false;
- py_install "PyXML" "${xml}";
-
- export PYTHONPATH="${PYTHONPATH}:${xml}/build/${py_platform_libdir}";
-fi;
-
-#
-# PyOpenSSL
-#
-
-if ! py_have_module OpenSSL; then
- ssl="${top}/pyOpenSSL-0.7";
-
- www_get "PyOpenSSL" "${ssl}" http://pypi.python.org/packages/source/p/pyOpenSSL/pyOpenSSL-0.7.tar.gz;
- py_build "PyOpenSSL" "${ssl}" false;
- py_install "PyOpenSSL" "${ssl}";
-
- export PYTHONPATH="${PYTHONPATH}:${ssl}/build/${py_platform_libdir}";
-fi;
-
-#
-# PyKerberos
-#
-
-if type krb5-config > /dev/null; then
- if ! py_have_module kerberos; then
- kerberos="${top}/PyKerberos";
-
- svn_get "PyKerberos" "${kerberos}" "${svn_uri_base}/PyKerberos/trunk" 4241;
- py_build "PyKerberos" "${kerberos}" false; # FIXME: make optional
- py_install "PyKerberos" "${kerberos}";
-
- export PYTHONPATH="${PYTHONPATH}:${kerberos}/build/${py_platform_libdir}";
- fi;
-fi;
-
-#
-# PyOpenDirectory
-#
-
-if [ "$(uname -s)" == "Darwin" ]; then
- if ! py_have_module opendirectory; then
- opendirectory="${top}/PyOpenDirectory";
-
- svn_get "PyOpenDirectory" "${opendirectory}" "${svn_uri_base}/PyOpenDirectory/trunk" 4106;
- py_build "PyOpenDirectory" "${opendirectory}" false;
- py_install "PyOpenDirectory" "${opendirectory}";
-
- export PYTHONPATH="${PYTHONPATH}:${opendirectory}/build/${py_platform_libdir}";
- fi;
-fi;
-
-#
-# xattr
-#
-
-if ! py_have_module xattr; then
- xattr="${top}/xattr";
-
- svn_get "xattr" "${xattr}" http://svn.red-bean.com/bob/xattr/releases/xattr-0.5 1013;
- py_build "xattr" "${xattr}" false;
- py_install "xattr" "${xattr}";
-
- export PYTHONPATH="${PYTHONPATH}:${xattr}/build/${py_platform_libdir}";
-fi;
-
-#
-# select26
-#
-
-if [ "${py_version}" != "${py_version##2.5}" ] && ! py_have_module select26; then
- select26="${top}/select26-0.1a3"
-
- www_get "select26" "${select26}" http://pypi.python.org/packages/source/s/select26/select26-0.1a3.tar.gz;
- py_build "select26" "${select26}" true;
- py_install "select26" "${select26}";
-
- export PYTHONPATH="${PYTHONPATH}:${select26}/build/${py_platform_libdir}";
-fi;
-
-if ! type memcached >& /dev/null; then
- #
- # libevent
- #
- libevent="${top}/libevent-1.4.8-stable"
-
- www_get "libevent" "${libevent}" http://monkey.org/~provos/libevent-1.4.8-stable.tar.gz
-
- if "${do_setup}" && (
- "${force_setup}" || [ ! -d "${libevent}/_root" ]
- ); then
- echo "";
- echo "Building libevent...";
- cd "${libevent}";
- ./configure --prefix="${libevent}/_root";
- make;
- make install;
- fi;
-
- export LD_LIBRARY_PATH="${LD_LIBRARY_PATH:-}:${libevent}/_root/lib";
- export DYLD_LIBRARY_PATH="${DYLD_LIBRARY_PATH:-}:${libevent}/_root/lib";
-
- #
- # memcached
- #
- memcached="${top}/memcached-1.2.6"
-
- www_get "memcached" "${memcached}" http://www.danga.com/memcached/dist/memcached-1.2.6.tar.gz;
-
- if "${do_setup}" && (
- "${force_setup}" || [ ! -d "${memcached}/_root" ]
- ); then
- echo "";
- echo "Building memcached...";
- cd "${memcached}";
- ./configure --prefix="${memcached}/_root" \
- --with-libevent="${libevent}/_root" \
- --enable-threads;
- make;
- make install;
- fi;
-
- export PATH="${PATH}:${top}/memcached-1.2.6/_root/bin";
-fi;
-
-#
-# Twisted
-#
-
-case "${USER}" in
- wsanchez)
- proto="svn+ssh";
- ;;
- *)
- proto="svn";
- ;;
-esac;
-svn_uri="${proto}://svn.twistedmatrix.com/svn/Twisted/branches/dav-take-two-3081-4";
-svn_get "Twisted" "${twisted}" "${svn_uri}" 26969;
-
-# No py_build step, since we tend to do edit Twisted, we want the sources in
-# PYTHONPATH, not a build directory.
-
-py_install "Twisted" "${twisted}";
-
-export PYTHONPATH="${PYTHONPATH}:${twisted}";
-
-# twisted.web2 doesn't get installed by default
-if [ -n "${install}" ]; then
- echo "";
- echo "Installing Twisted.web2...";
- cd "${twisted}";
- "${python}" ./twisted/web2/topfiles/setup.py install "${install_flag}${install}";
- cd /;
-fi;
-
-#
-# dateutil
-#
-
-if ! py_have_module dateutil; then
- dateutil="${top}/python-dateutil-1.4.1";
-
- www_get "dateutil" "${dateutil}" http://www.labix.org/download/python-dateutil/python-dateutil-1.4.1.tar.gz;
- py_install "dateutil" "${dateutil}";
-
- export PYTHONPATH="${PYTHONPATH}:${dateutil}";
-fi;
-
-#
-# vobject
-#
-
-vobject="${top}/vobject";
-
-case "${USER}" in
- cyrusdaboo)
- base="svn+ssh://cdaboo@svn.osafoundation.org/svn";
- ;;
- *)
- base="http://svn.osafoundation.org";
- ;;
-esac;
-svn_uri="${base}/vobject/trunk";
-svn_get "vObject" "${vobject}" "${svn_uri}" 212;
-
-py_install "vObject" "${vobject}";
-
-export PYTHONPATH="${PYTHONPATH}:${vobject}";
-
-#
-# PyDirector
-#
-
-if ! py_have_module pydirector; then
- pydirector="${top}/pydirector-1.0.0";
- www_get "PyDirector" "${pydirector}" http://internap.dl.sourceforge.net/sourceforge/pythondirector/pydirector-1.0.0.tar.gz;
- py_build "PyDirector" "${pydirector}" false;
- py_install "PyDirector" "${pydirector}";
-
- export PYTHONPATH="${PYTHONPATH}:${pydirector}/build/${py_platform_libdir}";
-fi;
-
-#
-# CalDAVTester
-#
-
-caldavtester="${top}/CalDAVTester";
-
-svn_get "CalDAVTester" "${caldavtester}" "${svn_uri_base}/CalDAVTester/trunk" 4517;
-
-#
-# PyFlakes
-#
-
-pyflakes="${top}/Pyflakes";
-
-svn_get "Pyflakes" "${pyflakes}" http://divmod.org/svn/Divmod/trunk/Pyflakes 17198;
-
-#
-# Calendar Server
-#
-
-py_install "Calendar Server" "${caldav}";
-
-##
-# Do home install
-# This is a hack, but it's needed because installing with --home doesn't work for python-dateutil.
-##
-
-if [ -n "${install_home:-}" ]; then
- py_prefix="$("${python}" -c "import sys; print sys.prefix;")";
- py_libdir="$("${python}" -c "from distutils.sysconfig import get_python_lib; print get_python_lib(1);")";
-
- install -d "${install_home}";
- install -d "${install_home}/bin";
- install -d "${install_home}/conf";
- install -d "${install_home}/lib/python";
-
- rsync -av "${install}${py_prefix}/bin/" "${install_home}/bin/";
- rsync -av "${install}${py_libdir}/" "${install_home}/lib/python/";
- rsync -av "${install}${py_prefix}/caldavd/" "${install_home}/caldavd/";
-
- rm -rf "${install}";
-fi;
-
-##
-# Run the server
-##
-
-export PYTHONPATH="${PYTHONPATH}${user_python_path}";
-
-run;
+run_main
Added: CalendarServer/branches/egg-info-351/support/pystuff.sh
===================================================================
--- CalendarServer/branches/egg-info-351/support/pystuff.sh (rev 0)
+++ CalendarServer/branches/egg-info-351/support/pystuff.sh 2009-10-20 18:26:37 UTC (rev 4608)
@@ -0,0 +1,90 @@
+# -*- sh-basic-offset: 2 -*-
+
+# Echo the major.minor version of the given Python interpreter.
+
+py_version () {
+ local python="$1"; shift;
+ echo "$("${python}" -c "from distutils.sysconfig import get_python_version; print get_python_version()")";
+}
+
+# Test if a particular python interpreter is available, given the full path to
+# that interpreter.
+
+try_python () {
+ local python="$1"; shift;
+
+ if [ -z "${python}" ]
+ then
+ return 1
+ fi
+ if ! type "${python}" > /dev/null 2>&1
+ then
+ return 1
+ fi
+
+ local py_version="$(py_version "${python}")"
+ if [ "${py_version/./}" -lt "25" ]
+ then
+ return 1
+ fi
+ return 0
+}
+
+
+# Detect which version of Python to use, then print out which one was detected.
+
+detect_python_version () {
+ for v in "" "2.6" "2.5"
+ do
+ for p in \
+ "${PYTHON:=}" \
+ "python${v}" \
+ "/usr/local/bin/python${v}" \
+ "/usr/local/python/bin/python${v}" \
+ "/usr/local/python${v}/bin/python${v}" \
+ "/opt/bin/python${v}" \
+ "/opt/python/bin/python${v}" \
+ "/opt/python${v}/bin/python${v}" \
+ "/Library/Frameworks/Python.framework/Versions/${v}/bin/python" \
+ "/opt/local/bin/python${v}" \
+ "/sw/bin/python${v}" \
+ ;
+ do
+ if try_python "${p}"
+ then
+ echo "${p}"
+ return 0
+ fi
+ done
+ done
+ return 1
+}
+
+# Detect if the given Python module is installed in the system Python configuration.
+py_have_module () {
+ local module="$1"; shift;
+ PYTHONPATH="" "${python}" -c "import ${module}" > /dev/null 2>&1;
+}
+
+# Detect which python to use, and store it in the 'python' variable, as well as
+# setting up variables related to version and build configuration.
+
+init_pystuff () {
+ python="$(detect_python_version)"
+
+ if [ -z "${python:-}" ]
+ then
+ echo "No suitable python found. Python 2.5 is required."
+ exit 1
+ else
+ echo "Using ${python} as Python";
+ fi
+
+ py_platform="$("${python}" -c "from distutils.util import get_platform; print get_platform()")";
+ py_version="$(py_version "${python}")";
+ py_platform_libdir="lib.${py_platform}-${py_version}";
+ py_prefix="$("${python}" -c "import sys; print sys.prefix;")";
+ py_libdir="$("${python}" -c "from distutils.sysconfig import get_python_lib; print get_python_lib(1);")";
+}
+
+init_pystuff
Modified: CalendarServer/branches/egg-info-351/support/runlib.sh
===================================================================
--- CalendarServer/branches/egg-info-351/support/runlib.sh 2009-10-20 16:02:48 UTC (rev 4607)
+++ CalendarServer/branches/egg-info-351/support/runlib.sh 2009-10-20 18:26:37 UTC (rev 4608)
@@ -1,33 +1,746 @@
+#! /bin/bash
+# -*- sh-basic-offset: 2 -*-
-usage ()
+##
+# Copyright (c) 2005-2009 Apple Inc. All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+##
+
+. support/pystuff.sh
+
+# Echo the usage for the main 'run' script, then exit with an error.
+usage () {
+ program="$(basename "$0")";
+
+ if [ "${1--}" != "-" ]
+ then
+ echo "$@"
+ echo
+ fi
+
+ echo "Usage: ${program} [-hvgsfnpdkrR] [-K key] [-iI dst] [-t type] [-S statsdirectory] [-P plugin]";
+ echo "Options:";
+ echo " -h Print this help and exit";
+ echo " -v Be verbose";
+ echo " -g Get dependencies only; don't run setup or run the server.";
+ echo " -s Run setup only; don't run server";
+ echo " -f Force setup to run";
+ echo " -n Do not run setup";
+ echo " -p Print PYTHONPATH value for server and exit";
+ echo " -d Run caldavd as a daemon";
+ echo " -k Stop caldavd";
+ echo " -r Restart caldavd";
+ echo " -K Print value of configuration key and exit";
+ echo " -i Perform a system install into dst; implies -s";
+ echo " -I Perform a home install into dst; implies -s";
+ echo " -t Select the server process type (Master, Slave or Combined) [${service_type}]";
+ echo " -S Write a pstats object for each process to the given directory when the server is stopped.";
+ echo " -P Select the twistd plugin name [${plugin_name}]";
+ echo " -R Twisted Reactor plugin to execute [${reactor}]";
+
+ if [ "${1-}" == "-" ]
+ then
+ return 0
+ fi
+ exit 64
+}
+
+# Provide a default value: if the variable named by the first argument is
+# empty, set it to the default in the second argument.
+conditional_set () {
+ local var="$1"; shift
+ local default="$1"; shift
+ if [ -z "$(eval echo "\${${var}:-}")" ]
+ then
+ eval "${var}=\${default:-}"
+ fi
+}
+
+parse_run_options () {
+ while getopts 'hvgsfnpdkrK:i:I:t:S:P:R:' option
+ do
+ case "$option" in
+ '?')
+ usage
+ ;;
+ 'h')
+ usage -
+ exit 0
+ ;;
+ 'v')
+ verbose="-v"
+ ;;
+ 'f')
+ force_setup="true"
+ ;;
+ 'k')
+ kill="true"
+ ;;
+ 'r')
+ restart="true"
+ ;;
+ 'd')
+ daemonize=""
+ ;;
+ 'P')
+ plugin_name="${OPTARG}"
+ ;;
+ 'R')
+ reactor="-R ${OPTARG}"
+ ;;
+ 't')
+ service_type="${OPTARG}"
+ ;;
+ 'K')
+ read_key="${OPTARG}"
+ ;;
+ 'S')
+ profile="--profiler cprofile -p ${OPTARG}"
+ ;;
+ 'g')
+ do_get="true"
+ do_setup="false"
+ do_run="false"
+ ;;
+ 's')
+ do_get="true"
+ do_setup="true"
+ do_run="false"
+ ;;
+ 'p')
+ do_get="false"
+ do_setup="false"
+ do_run="false"
+ print_path="true"
+ ;;
+ 'i')
+ do_get="true"
+ do_setup="true"
+ do_run="false"
+ install="${OPTARG}"
+ install_flag="--root="
+ ;;
+ 'I')
+ do_get="true"
+ do_setup="true"
+ do_run="false"
+ install="${wd}/build/dst"
+ install_flag="--root="
+ install_home="${OPTARG}"
+ ;;
+ esac
+ done
+ shift $((${OPTIND} - 1))
+ if [ $# != 0 ]
+ then
+ usage "Unrecognized arguments:" "$@"
+ fi
+}
+
+conf_read_key ()
{
- program="$(basename "$0")";
+ local key="$1"; shift;
- if [ "${1--}" != "-" ]; then echo "$@"; echo; fi;
+ # FIXME: This only works for simple values (no arrays, dicts)
+ tr '\n' ' ' < "${config}" \
+ | xpath "/plist/dict/*[preceding-sibling::key[1]='${key}'" 2> /dev/null \
+ | sed -n 's|^<[^<][^<]*>\([^<]*\)</[^<][^<]*>.*$|\1|p';
+}
- echo "Usage: ${program} [-hvgsfnpdkrR] [-K key] [-iI dst] [-t type] [-S statsdirectory] [-P plugin]";
- echo "Options:";
- echo " -h Print this help and exit";
- echo " -v Be verbose";
- echo " -g Get dependencies only; don't run setup or run the server.";
- echo " -s Run setup only; don't run server";
- echo " -f Force setup to run";
- echo " -n Do not run setup";
- echo " -p Print PYTHONPATH value for server and exit";
- echo " -d Run caldavd as a daemon";
- echo " -k Stop caldavd";
- echo " -r Restart caldavd";
- echo " -K Print value of configuration key and exit";
- echo " -i Perform a system install into dst; implies -s";
- echo " -I Perform a home install into dst; implies -s";
- echo " -t Select the server process type (Master, Slave or Combined) [${service_type}]";
- echo " -S Write a pstats object for each process to the given directory when the server is stopped.";
- echo " -P Select the twistd plugin name [${plugin_name}]";
- echo " -R Twisted Reactor plugin to execute [${reactor}]";
+# Initialize all the global state required to use this library.
+init_runlib () {
- if [ "${1-}" == "-" ]
+ verbose="";
+ do_get="true";
+ do_setup="true";
+ do_run="true";
+ force_setup="false";
+ disable_setup="false";
+ print_path="false";
+ install="";
+ daemonize="-X";
+ kill="false";
+ restart="false";
+ plugin_name="caldav";
+ service_type="Combined";
+ read_key="";
+ profile="";
+ reactor="";
+
+ # These variables are defaults for things which might be configured by
+ # environment; only set them if they're un-set.
+ conditional_set wd "$(pwd)"
+ conditional_set config "${wd}/conf/caldavd-dev.plist"
+ conditional_set caldav "${wd}"
+
+ if [ -z "${CALENDARSERVER_CACHE_DEPS-}" ]
+ then
+ cache_deps="${wd}/.dependencies"
+ else
+ cache_deps="${CALENDARSERVER_CACHE_DEPS}"
+ fi
+
+ if [ -z "${caldavd_wrapper_command:-}" ]
+ then
+ if [ "$(uname -s)" == "Darwin" ] && [ "$(uname -r | cut -d . -f 1)" -ge 9 ]
then
- return 0
+ caldavd_wrapper_command="launchctl bsexec /"
+ else
+ caldavd_wrapper_command=""
fi
- exit 64
+ fi
+
+ top="$(cd "${caldav}/.." && pwd -L)"
+ patches="${caldav}/lib-patches";
+ twisted="${top}/Twisted";
+ dav="${twisted}/twisted/web2/dav"
+
+ # Find a command that can hash up a string for us
+ if type -t openssl > /dev/null
+ then
+ hash="hash"
+ hash () {
+ openssl dgst -md5
+ }
+ elif type -t md5 > /dev/null
+ then
+ hash="md5"
+ elif type -t md5sum > /dev/null
+ then
+ hash="md5sum"
+ elif type -t cksum > /dev/null
+ then
+ hash="hash"
+ hash () { cksum | cut -f 1 -d " "; }
+ elif type -t sum > /dev/null
+ then
+ hash="hash"
+ hash () { sum | cut -f 1 -d " "; }
+ else
+ hash=""
+ fi
+
+
+ if [ -n "${install}" ] && ! echo "${install}" | grep '^/' > /dev/null; then
+ install="$(pwd)/${install}";
+ fi;
+
+ svn_uri_base="$(svn info "${caldav}" --xml 2> /dev/null | sed -n 's|^.*<root>\(.*\)</root>.*$|\1|p')";
+
+ conditional_set svn_uri_base "http://svn.calendarserver.org/repository/calendarserver"
}
+
+# The main-point of the 'run' script: parse all options, decide what to do,
+# then do it.
+
+run_main () {
+ parse_run_options "$@"
+
+ # If we've been asked to read a configuration key, just read it and exit.
+ if [ -n "${read_key}" ]
+ then
+ conf_read_key "${read_key}"
+ exit $?
+ fi
+
+ if "${kill}" || "${restart}"
+ then
+ pidfile="$(conf_read_key "PIDFile")"
+ if [ ! -r "${pidfile}" ]
+ then
+ echo "Unreadable PID file: ${pidfile}"
+ exit 1
+ fi
+ pid="$(cat "${pidfile}" | head -1)"
+ if [ -z "${pid}" ]
+ then
+ echo "No PID in PID file: ${pidfile}"
+ exit 1
+ fi
+ echo "Killing process ${pid}"
+ kill -TERM "${pid}"
+ if ! "${restart}"
+ then
+ exit 0
+ fi
+ fi
+
+ # Prepare to set up PYTHONPATH et. al.
+ if [ -z "${PYTHONPATH:-}" ]
+ then
+ user_python_path=""
+ else
+ user_python_path=":${PYTHONPATH}"
+ fi
+
+ export PYTHONPATH="${caldav}";
+
+ # About to do something for real; let's enumerate (and depending on options,
+ # possibly download and/or install) the dependencies.
+ dependencies
+
+ # If we're installing, install the calendar server itself.
+ py_install "Calendar Server" "${caldav}"
+
+ if [ -n "${install_home:-}" ]
+ then
+ do_home_install
+ fi
+
+ # Finish setting up PYTHONPATH (put the user's original path at the *end* so
+ # that CalendarServer takes precedence).
+
+ export PYTHONPATH="${PYTHONPATH}${user_python_path}";
+
+ # Finally, run the server.
+ run
+}
+
+
+# This is a hack, but it's needed because installing with --home doesn't work
+# for python-dateutil.
+do_home_install () {
+ install -d "${install_home}";
+ install -d "${install_home}/bin";
+ install -d "${install_home}/conf";
+ install -d "${install_home}/lib/python";
+
+ rsync -av "${install}${py_prefix}/bin/" "${install_home}/bin/";
+ rsync -av "${install}${py_libdir}/" "${install_home}/lib/python/";
+ rsync -av "${install}${py_prefix}/caldavd/" "${install_home}/caldavd/";
+
+ rm -rf "${install}";
+}
+
+
+apply_patches () {
+ local name="$1"; shift;
+ local path="$1"; shift;
+
+ if [ -d "${patches}/${name}" ]; then
+ echo "";
+ echo "Applying patches to ${name} in ${path}...";
+
+ cd "${path}";
+ find "${patches}/${name}" \
+ -type f \
+ -name '*.patch' \
+ -print \
+ -exec patch -p0 --forward -i '{}' ';';
+ cd /;
+
+ fi;
+
+ echo ""
+ echo "Removing build directory ${path}/build..."
+ rm -rf "${path}/build";
+ echo "Removing pyc files from ${path}..."
+ find "${path}" -type f -name '*.pyc' -print0 | xargs -0 rm -f;
+}
+
+
+www_get () {
+ if ! "${do_get}"; then return 0; fi;
+
+ local name="$1"; shift;
+ local path="$1"; shift;
+ local url="$1"; shift;
+
+ if "${force_setup}" || [ ! -d "${path}" ]; then
+ local ext="$(echo "${url}" | sed 's|^.*\.\([^.]*\)$|\1|')";
+
+ case "${ext}" in
+ gz|tgz) decompress="gzip -d -c"; ;;
+ bz2) decompress="bzip2 -d -c"; ;;
+ tar) decompress="cat"; ;;
+ *)
+ echo "Unknown extension: ${ext}";
+ exit 1;
+ ;;
+ esac;
+
+ echo "";
+
+ if [ -n "${cache_deps}" ] && [ -n "${hash}" ]
+ then
+ mkdir -p "${cache_deps}";
+
+ cache_file="${cache_deps}/${name}-$(echo "${url}" | "${hash}")-$(basename "${url}")";
+
+ if [ ! -f "${cache_file}" ]
+ then
+ echo "Downloading ${name}...";
+ curl -L "${url}" -o "${cache_file}";
+ fi;
+
+ echo "Unpacking ${name} from cache...";
+ get () { cat "${cache_file}"; }
+ else
+ echo "Downloading ${name}...";
+ get () { curl -L "${url}"; }
+ fi
+
+ rm -rf "${path}";
+ cd "$(dirname "${path}")";
+ get | ${decompress} | tar -xvf -;
+ apply_patches "${name}" "${path}";
+ cd /;
+ fi;
+}
+
+
+# If do_get is turned on, check a name out from SVN.
+svn_get () {
+ if ! "${do_get}"; then return 0; fi;
+
+ local name="$1"; shift;
+ local path="$1"; shift;
+ local uri="$1"; shift;
+ local revision="$1"; shift;
+
+ if [ -d "${path}" ]; then
+ local wc_uri="$(svn info --xml "${path}" 2> /dev/null | sed -n 's|^.*<url>\(.*\)</url>.*$|\1|p')";
+
+ if "${force_setup}"; then
+ # Verify that we have a working copy checked out from the correct URI
+ if [ "${wc_uri}" != "${uri}" ]; then
+ echo "";
+ echo "Current working copy (${path}) is from the wrong URI: ${wc_uri} != ${uri}";
+ rm -rf "${path}";
+ svn_get "${name}" "${path}" "${uri}" "${revision}";
+ return $?;
+ fi;
+
+ echo "";
+
+ echo "Reverting ${name}...";
+ svn revert -R "${path}";
+
+ echo "Updating ${name}...";
+ svn update -r "${revision}" "${path}";
+
+ apply_patches "${name}" "${path}";
+ else
+ if ! "${print_path}"; then
+ # Verify that we have a working copy checked out from the correct URI
+ if [ "${wc_uri}" != "${uri}" ]; then
+ echo "";
+ echo "Current working copy (${path}) is from the wrong URI: ${wc_uri} != ${uri}";
+ echo "Performing repository switch for ${name}...";
+ svn switch -r "${revision}" "${uri}" "${path}";
+
+ apply_patches "${name}" "${path}";
+ else
+ local svnversion="$(svnversion "${path}")";
+ if [ "${svnversion%%[M:]*}" != "${revision}" ]; then
+ echo "";
+ echo "Updating ${name}...";
+ svn update -r "${revision}" "${path}";
+
+ apply_patches "${name}" "${path}";
+ fi;
+ fi;
+ fi;
+ fi;
+ else
+ echo "";
+
+ checkout () {
+ echo "Checking out ${name}...";
+ svn checkout -r "${revision}" "${uri}@${revision}" "${path}";
+ }
+
+ if [ "${revision}" != "HEAD" ] && [ -n "${cache_deps}" ] && [ -n "${hash}" ]; then
+ local cache_file="${cache_deps}/${name}-$(echo "${uri}" | "${hash}")@r${revision}.tgz";
+
+ mkdir -p "${cache_deps}";
+
+ if [ -f "${cache_file}" ]; then
+ echo "Unpacking ${name} from cache...";
+ mkdir -p "${path}";
+ tar -C "${path}" -xvzf "${cache_file}";
+ else
+ checkout;
+ echo "Caching ${name}...";
+ tar -C "${path}" -cvzf "${cache_file}" .;
+ fi;
+ else
+ checkout;
+ fi;
+
+ apply_patches "${name}" "${path}";
+ fi;
+}
+
+
+run () {
+ if "${print_path}"; then
+ echo "${PYTHONPATH}";
+ exit 0;
+ fi;
+
+ echo "";
+ echo "Using ${python} as Python";
+
+ if "${do_run}"; then
+ if [ ! -f "${config}" ]; then
+ echo "";
+ echo "Missing config file: ${config}";
+ echo "You might want to start by copying the test configuration:";
+ echo "";
+ echo " cp conf/caldavd-test.plist conf/caldavd-dev.plist";
+ echo "";
+ exit 1;
+ fi;
+
+ cd "${wd}";
+ if [ ! -d "${wd}/logs" ]; then
+ mkdir "${wd}/logs";
+ fi;
+
+ echo "";
+ echo "Starting server...";
+ exec ${caldavd_wrapper_command} \
+ "${caldav}/bin/caldavd" ${daemonize} \
+ -f "${config}" \
+ -T "${twisted}/bin/twistd" \
+ -P "${plugin_name}" \
+ -t "${service_type}" \
+ ${reactor} \
+ ${profile};
+ cd /;
+ fi;
+}
+
+
+py_build () {
+ local name="$1"; shift;
+ local path="$1"; shift;
+ local optional="$1"; shift;
+
+ if "${do_setup}"; then
+ echo "";
+ echo "Building ${name}...";
+ cd "${path}";
+ if ! "${python}" ./setup.py -q build --build-lib "build/${py_platform_libdir}" "$@"; then
+ if "${optional}"; then
+ echo "WARNING: ${name} failed to build.";
+ echo "WARNING: ${name} is not required to run the server; continuing without it.";
+ else
+ return $?;
+ fi;
+ fi;
+ cd /;
+ fi;
+}
+
+py_install () {
+ local name="$1"; shift;
+ local path="$1"; shift;
+
+ if [ -n "${install}" ]; then
+ echo "";
+ echo "Installing ${name}...";
+ cd "${path}";
+ "${python}" ./setup.py install "${install_flag}${install}";
+ cd /;
+ fi;
+}
+
+
+# Declare a dependency on a Python project.
+
+py_dependency () {
+
+ # args
+ local name="$1"; shift # the name of the package (for display)
+ local module="$1"; shift # the name of the python module.
+ local distribution="$1"; shift # the name of the directory to put the distribution into.
+ local get_type="$1"; shift # what protocol should be used?
+ local get_uri="$1"; shift # what URL should be fetched?
+ local optional="$1"; shift # is this dependency optional?
+ local override_system="$1"; shift # do I need to get this dependency even if
+ # the system already has it?
+ local inplace="$1"; shift # do development in-place; don't run setup.py to
+ # build, and instead add the source directory
+ # directly to sys.path. twisted and vobject are
+ # developed often enough that this is convenient.
+ local skip_egg="$1"; shift # skip even the 'egg_info' step, because nothing
+ # needs to be built.
+ local revision="$1"; shift # what revision to check out (for SVN dependencies)
+ # end args
+
+ local srcdir="${top}/${distribution}"
+
+ if "${override_system}" || ! py_have_module "${module}"
+ then
+ "${get_type}_get" "${name}" "${srcdir}" "${get_uri}" "${revision}"
+ if "${inplace}"
+ then
+ if "${override_system}" && ! "${skip_egg}"
+ then
+ echo
+ echo "${name} overrides system, building egg only"
+ cd "${srcdir}"
+ "${python}" ./setup.py egg_info
+ cd /
+ fi
+ else
+ py_build "${name}" "${srcdir}" "${optional}"
+ fi
+ py_install "${name}" "${srcdir}"
+ fi
+
+ if "$inplace"
+ then
+ local add_path="${srcdir}"
+ else
+ local add_path="${srcdir}/build/${py_platform_libdir}"
+ fi
+ export PYTHONPATH="${PYTHONPATH}:${add_path}"
+}
+
+
+# Declare a dependency on a C project built with autotools.
+
+c_dependency () {
+ local name="$1"; shift
+ local path="$1"; shift
+ local uri="$1"; shift
+ # Extra arguments are processed below, as arguments to './configure'.
+
+ srcdir="${top}/${path}"
+
+ www_get "${name}" "${srcdir}" "${uri}"
+
+ if "${do_setup}" && (
+ "${force_setup}" || [ ! -d "${srcdir}/_root" ])
+ then
+ echo ""
+ echo "Building ${name}..."
+ cd "${srcdir}"
+ ./configure --prefix="${srcdir}/_root" "$@"
+ make
+ make install
+ fi
+
+ export PATH="${PATH}:${srcdir}/_root/bin"
+ export C_INCLUDE_PATH="${C_INCLUDE_PATH:-}:${srcdir}/_root/include"
+ export LD_LIBRARY_PATH="${LD_LIBRARY_PATH:-}:${srcdir}/_root/lib"
+ export DYLD_LIBRARY_PATH="${DYLD_LIBRARY_PATH:-}:${srcdir}/_root/lib"
+}
+
+
+# Enumerate all the dependencies with c_dependency and py_dependency; depending
+# on options parsed by parse_run_options and on-disk state, this may do as
+# little as update the PATH, DYLD_LIBRARY_PATH, LD_LIBRARY_PATH and PYTHONPATH,
+# or, it may do as much as download and install all dependencies.
+
+dependencies () {
+
+ # Dependencies compiled from C source code
+ local le="libevent-1.4.8-stable"
+ c_dependency "libevent" "${le}" \
+ "http://monkey.org/~provos/libevent-1.4.8-stable.tar.gz"
+ c_dependency "memcached" "memcached-1.2.6" \
+ "http://www.danga.com/memcached/dist/memcached-1.2.6.tar.gz" \
+ --enable-threads --with-libevent="${top}/${le}/_root"
+
+ # Python dependencies
+ py_dependency "Zope Interface" "zope.interface" "zope.interface-3.3.0" \
+ "www" "http://www.zope.org/Products/ZopeInterface/3.3.0/zope.interface-3.3.0.tar.gz" \
+ false false false false 0
+ py_dependency "PyXML" "xml.dom.ext" "PyXML-0.8.4" \
+ "www" "http://internap.dl.sourceforge.net/sourceforge/pyxml/PyXML-0.8.4.tar.gz" \
+ false false false false 0
+ py_dependency "PyOpenSSL" "OpenSSL" "pyOpenSSL-0.7" \
+ "www" "http://pypi.python.org/packages/source/p/pyOpenSSL/pyOpenSSL-0.7.tar.gz" \
+ false false false false 0
+ if type krb5-config > /dev/null
+ then
+ py_dependency "PyKerberos" "kerberos" "PyKerberos" \
+ "svn" "${svn_uri_base}/PyKerberos/trunk" \
+ false false false false 4241
+ fi
+ if [ "$(uname -s)" == "Darwin" ]
+ then
+ py_dependency "PyOpenDirectory" "opendirectory" "PyOpenDirectory" \
+ "svn" "${svn_uri_base}/PyOpenDirectory/trunk" \
+ false false false false 4106
+ fi
+ py_dependency "xattr" "xattr" "xattr" \
+ "svn" "http://svn.red-bean.com/bob/xattr/releases/xattr-0.5" \
+ false false false false 1013
+ if [ "${py_version}" != "${py_version##2.5}" ] && ! py_have_module select26
+ then
+ py_dependency "select26" "select26" "select26" \
+ "www" "http://pypi.python.org/packages/source/s/select26/select26-0.1a3.tar.gz" \
+ true false false false 0
+ fi
+
+ case "${USER}" in
+ wsanchez)
+ proto="svn+ssh"
+ ;;
+ *)
+ proto="svn"
+ ;;
+ esac
+
+ py_dependency "Twisted" "twisted" "Twisted" \
+ "svn" "${proto}://svn.twistedmatrix.com/svn/Twisted/branches/dav-take-two-3081-4" \
+ false true true false 26969
+
+ # twisted.web2 doesn't get installed by default, so in the install phase
+ # let's make sure it does.
+ if [ -n "${install}" ]
+ then
+ echo "";
+ echo "Installing Twisted.web2...";
+ cd "${twisted}";
+ "${python}" ./twisted/web2/topfiles/setup.py install "${install_flag}${install}";
+ cd /;
+ fi
+
+ py_dependency "dateutil" "dateutil" "python-dateutil-1.4.1" \
+ "www" "http://www.labix.org/download/python-dateutil/python-dateutil-1.4.1.tar.gz" \
+ false false false false 0
+
+ case "${USER}" in
+ cyrusdaboo)
+ base="svn+ssh://cdaboo@svn.osafoundation.org/svn"
+ ;;
+ *)
+ base="http://svn.osafoundation.org"
+ ;;
+ esac
+
+ # XXX actually vObject should be imported in-place.
+ py_dependency "vObject" "vobject" "vobject" \
+ "svn" "${base}/vobject/trunk" \
+ false true true true 212
+
+ py_dependency "PyDirector" "pydirector" "pydirector-1.0.0" \
+ "www" http://internap.dl.sourceforge.net/sourceforge/pythondirector/pydirector-1.0.0.tar.gz \
+ false false false false 0
+
+ # Tool dependencies. The code itself doesn't depend on these, but you probably want them.
+ svn_get "CalDAVTester" "${top}/CalDAVTester" "${svn_uri_base}/CalDAVTester/trunk" 4517
+ svn_get "Pyflakes" "${top}/Pyflakes" http://divmod.org/svn/Divmod/trunk/Pyflakes 17198
+ echo 'Dependencies done.'
+}
+
+
+# Actually do the initialization, once all functions are defined.
+init_runlib
Modified: CalendarServer/branches/egg-info-351/test
===================================================================
--- CalendarServer/branches/egg-info-351/test 2009-10-20 16:02:48 UTC (rev 4607)
+++ CalendarServer/branches/egg-info-351/test 2009-10-20 18:26:37 UTC (rev 4608)
@@ -19,57 +19,15 @@
set -e
set -u
- random="--random=$(date "+%s")";
- no_colour="";
-until_fail="";
- coverage="";
+wd="$(cd "$(dirname "$0")" && pwd -L)"
-py_version ()
-{
- local python="$1"; shift
- echo "$("${python}" -c "from distutils.sysconfig import get_python_version; print get_python_version()")";
-}
+. support/pystuff.sh
-try_python ()
-{
- local python="$1"; shift
+random="--random=$(date "+%s")";
+no_colour="";
+until_fail="";
+coverage="";
- if [ -z "${python}" ]; then return 1; fi;
-
- if ! type "${python}" > /dev/null 2>&1; then return 1; fi;
- local py_version="$(py_version "${python}")";
- if [ "${py_version/./}" -lt "24" ]; then return 1; fi;
-
- return 0;
-}
-
-for v in "" "2.6" "2.5"; do
- for p in \
- "${PYTHON:=}" \
- "python${v}" \
- "/usr/local/bin/python${v}" \
- "/usr/local/python/bin/python${v}" \
- "/usr/local/python${v}/bin/python${v}" \
- "/opt/bin/python${v}" \
- "/opt/python/bin/python${v}" \
- "/opt/python${v}/bin/python${v}" \
- "/Library/Frameworks/Python.framework/Versions/${v}/bin/python" \
- "/opt/local/bin/python${v}" \
- "/sw/bin/python${v}" \
- ;
- do
- if try_python "${p}"; then python="${p}"; break; fi;
- done;
- if [ -n "${python:-}" ]; then break; fi;
-done;
-
-if [ -z "${python:-}" ]; then
- echo "No suitable python found.";
- exit 1;
-else
- echo "Using ${python} as Python";
-fi;
-
usage ()
{
program="$(basename "$0")";
@@ -102,7 +60,6 @@
done;
shift $((${OPTIND} - 1));
- wd="$(cd "$(dirname "$0")" && pwd -L)";
twisted="$(cd "${wd}/.." && pwd -L)/Twisted";
export PYTHONPATH="$("${wd}/run" -p)";
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20091020/28e7a0fc/attachment-0001.html>
More information about the calendarserver-changes
mailing list