[CalendarServer-changes] [4616] CalendarServer/branches/egg-info-351

source_changes at macosforge.org source_changes at macosforge.org
Tue Oct 20 14:23:25 PDT 2009


Revision: 4616
          http://trac.macosforge.org/projects/calendarserver/changeset/4616
Author:   glyph at apple.com
Date:     2009-10-20 14:23:24 -0700 (Tue, 20 Oct 2009)
Log Message:
-----------
rename things to be a little more reasonable

Modified Paths:
--------------
    CalendarServer/branches/egg-info-351/run
    CalendarServer/branches/egg-info-351/test

Added Paths:
-----------
    CalendarServer/branches/egg-info-351/support/build.sh
    CalendarServer/branches/egg-info-351/support/py.sh

Removed Paths:
-------------
    CalendarServer/branches/egg-info-351/support/pystuff.sh
    CalendarServer/branches/egg-info-351/support/runlib.sh

Modified: CalendarServer/branches/egg-info-351/run
===================================================================
--- CalendarServer/branches/egg-info-351/run	2009-10-20 21:13:29 UTC (rev 4615)
+++ CalendarServer/branches/egg-info-351/run	2009-10-20 21:23:24 UTC (rev 4616)
@@ -34,6 +34,6 @@
 
 wd="$(cd "$(dirname "$0")" && pwd)";
 
-. support/runlib.sh;
+. support/build.sh;
 
 run_main "$@";

Copied: CalendarServer/branches/egg-info-351/support/build.sh (from rev 4615, CalendarServer/branches/egg-info-351/support/runlib.sh)
===================================================================
--- CalendarServer/branches/egg-info-351/support/build.sh	                        (rev 0)
+++ CalendarServer/branches/egg-info-351/support/build.sh	2009-10-20 21:23:24 UTC (rev 4616)
@@ -0,0 +1,663 @@
+#! /bin/bash
+# -*- sh-basic-offset: 2 -*-
+
+##
+# 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/py.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 ()
+{
+  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';
+}
+
+# Initialize all the global state required to use this library.
+init_build () {
+
+        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
+      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";
+
+  # 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_build;

Copied: CalendarServer/branches/egg-info-351/support/py.sh (from rev 4615, CalendarServer/branches/egg-info-351/support/pystuff.sh)
===================================================================
--- CalendarServer/branches/egg-info-351/support/py.sh	                        (rev 0)
+++ CalendarServer/branches/egg-info-351/support/py.sh	2009-10-20 21:23:24 UTC (rev 4616)
@@ -0,0 +1,102 @@
+#! /bin/bash
+# -*- sh-basic-offset: 2 -*-
+
+##
+# 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.
+##
+
+# 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_py () {
+  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_py;

Deleted: CalendarServer/branches/egg-info-351/support/pystuff.sh
===================================================================
--- CalendarServer/branches/egg-info-351/support/pystuff.sh	2009-10-20 21:13:29 UTC (rev 4615)
+++ CalendarServer/branches/egg-info-351/support/pystuff.sh	2009-10-20 21:23:24 UTC (rev 4616)
@@ -1,102 +0,0 @@
-#! /bin/bash
-# -*- sh-basic-offset: 2 -*-
-
-##
-# 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.
-##
-
-# 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;

Deleted: CalendarServer/branches/egg-info-351/support/runlib.sh
===================================================================
--- CalendarServer/branches/egg-info-351/support/runlib.sh	2009-10-20 21:13:29 UTC (rev 4615)
+++ CalendarServer/branches/egg-info-351/support/runlib.sh	2009-10-20 21:23:24 UTC (rev 4616)
@@ -1,663 +0,0 @@
-#! /bin/bash
-# -*- sh-basic-offset: 2 -*-
-
-##
-# 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 ()
-{
-  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';
-}
-
-# Initialize all the global state required to use this library.
-init_runlib () {
-
-        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
-      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";
-
-  # 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 21:13:29 UTC (rev 4615)
+++ CalendarServer/branches/egg-info-351/test	2009-10-20 21:23:24 UTC (rev 4616)
@@ -21,7 +21,7 @@
 
 wd="$(cd "$(dirname "$0")" && pwd -L)";
 
-. support/pystuff.sh;
+. support/py.sh;
 
 random="--random=$(date "+%s")";
 no_colour="";
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20091020/a990e61e/attachment-0001.html>


More information about the calendarserver-changes mailing list