<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[12439] CalendarServer/trunk</title>
</head>
<body>
<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; }
#msg dl a { font-weight: bold}
#msg dl a:link { color:#fc3; }
#msg dl a:active { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.calendarserver.org//changeset/12439">12439</a></dd>
<dt>Author</dt> <dd>wsanchez@apple.com</dd>
<dt>Date</dt> <dd>2014-01-23 17:46:22 -0800 (Thu, 23 Jan 2014)</dd>
</dl>
<h3>Log Message</h3>
<pre>New build tools.</pre>
<h3>Modified Paths</h3>
<ul>
<li><a href="#CalendarServertrunkgitignore">CalendarServer/trunk/.gitignore</a></li>
<li><a href="#CalendarServertrunkbintrial">CalendarServer/trunk/bin/trial</a></li>
<li><a href="#CalendarServertrunkbintwistd">CalendarServer/trunk/bin/twistd</a></li>
<li><a href="#CalendarServertrunksetuppy">CalendarServer/trunk/setup.py</a></li>
</ul>
<h3>Added Paths</h3>
<ul>
<li><a href="#CalendarServertrunkbin_buildsh">CalendarServer/trunk/bin/_build.sh</a></li>
<li><a href="#CalendarServertrunkbin_pysh">CalendarServer/trunk/bin/_py.sh</a></li>
<li><a href="#CalendarServertrunkbindevelop">CalendarServer/trunk/bin/develop</a></li>
<li><a href="#CalendarServertrunkbinpyflakes">CalendarServer/trunk/bin/pyflakes</a></li>
<li><a href="#CalendarServertrunkbinpython">CalendarServer/trunk/bin/python</a></li>
<li><a href="#CalendarServertrunkbinupdate_copyrights">CalendarServer/trunk/bin/update_copyrights</a></li>
<li>CalendarServer/trunk/requirements/</li>
<li><a href="#CalendarServertrunkrequirementsbasetxt">CalendarServer/trunk/requirements/base.txt</a></li>
<li><a href="#CalendarServertrunkrequirementsdeveloptxt">CalendarServer/trunk/requirements/develop.txt</a></li>
<li><a href="#CalendarServertrunkrequirementsopt_LDAPtxt">CalendarServer/trunk/requirements/opt_LDAP.txt</a></li>
<li><a href="#CalendarServertrunkrequirementsopt_Oracletxt">CalendarServer/trunk/requirements/opt_Oracle.txt</a></li>
</ul>
<h3>Removed Paths</h3>
<ul>
<li><a href="#CalendarServertrunkpydoctor">CalendarServer/trunk/pydoctor</a></li>
<li><a href="#CalendarServertrunkpyflakes">CalendarServer/trunk/pyflakes</a></li>
<li><a href="#CalendarServertrunkpython">CalendarServer/trunk/python</a></li>
<li><a href="#CalendarServertrunksupportupdate_copyrights">CalendarServer/trunk/support/update_copyrights</a></li>
<li><a href="#CalendarServertrunksupportversionpy">CalendarServer/trunk/support/version.py</a></li>
<li><a href="#CalendarServertrunktest">CalendarServer/trunk/test</a></li>
<li><a href="#CalendarServertrunktestserver">CalendarServer/trunk/testserver</a></li>
</ul>
</div>
<div id="patch">
<h3>Diff</h3>
<a id="CalendarServertrunkgitignore"></a>
<div class="modfile"><h4>Modified: CalendarServer/trunk/.gitignore (12438 => 12439)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/trunk/.gitignore        2014-01-24 01:43:49 UTC (rev 12438)
+++ CalendarServer/trunk/.gitignore        2014-01-24 01:46:22 UTC (rev 12439)
</span><span class="lines">@@ -1,3 +1,4 @@
</span><ins>+*.egg-info
</ins><span class="cx"> *.pyc
</span><span class="cx"> *.so
</span><span class="cx"> dropin.cache
</span><span class="lines">@@ -2,5 +3,6 @@
</span><span class="cx">
</span><ins>+/.develop/
</ins><span class="cx"> /build/
</span><span class="cx"> /data/
</span><span class="cx"> /calendarserver/version.py
</span><del>-/conf/caldavd-dev.plist
</del><span class="cx">\ No newline at end of file
</span><ins>+/conf/caldavd-dev.plist
</ins></span></pre></div>
<a id="CalendarServertrunkbin_buildsh"></a>
<div class="addfile"><h4>Added: CalendarServer/trunk/bin/_build.sh (0 => 12439)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/trunk/bin/_build.sh         (rev 0)
+++ CalendarServer/trunk/bin/_build.sh        2014-01-24 01:46:22 UTC (rev 12439)
</span><span class="lines">@@ -0,0 +1,586 @@
</span><ins>+# -*- sh-basic-offset: 2 -*-
+##
+# Copyright (c) 2005-2014 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.
+##
+
+. "${wd}/bin/_py.sh";
+
+
+echo_header () {
+ echo "$@";
+ echo "";
+}
+
+
+using_system () {
+ local name="$1"; shift;
+ echo_header "Using system version of ${name}.";
+}
+
+
+# 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;
+}
+
+
+# Checks for presence of a C header, optionally with a version comparison.
+# With only a header file name, try to include it, returning nonzero if absent.
+# With 3 params, also attempt a version check, returning nonzero if too old.
+# Param 2 is a minimum acceptable version number
+# Param 3 is a #define from the source that holds the installed version number
+# Examples:
+# Assert that ldap.h is present
+# find_header "ldap.h"
+# Assert that ldap.h is present with a version >= 20344
+# find_header "ldap.h" 20344 "LDAP_VENDOR_VERSION"
+find_header () {
+ local sys_header="$1"; shift;
+ if [ $# -ge 1 ]; then
+ local min_version="$1"; shift;
+ local version_macro="$1"; shift;
+ fi;
+
+ # No min_version given:
+ # Check for presence of a header. We use the "-c" cc option because we don't
+ # need to emit a file; cc exits nonzero if it can't find the header
+ if [ -z "${min_version:-}" ]; then
+ echo "#include <${sys_header}>" | cc -x c -c - -o /dev/null 2> /dev/null;
+ return "$?";
+ fi;
+
+ # Check for presence of a header of specified version
+ local found_version="$(printf "#include <${sys_header}>\n${version_macro}\n" | cc -x c -E - | tail -1)";
+
+ if [ "${found_version}" == "${version_macro}" ]; then
+ # Macro was not replaced
+ return 1;
+ fi;
+
+ if cmp_version "${min_version}" "${found_version}"; then
+ return 0;
+ else
+ return 1;
+ fi;
+};
+
+
+# Initialize all the global state required to use this library.
+init_build () {
+ init_py;
+
+ do_get="true";
+ do_setup="true";
+ force_setup="false";
+
+ dev_home="${wd}/.develop";
+ dev_root="${dev_home}/root";
+ dev_libdir="${dev_root}/lib/python";
+ dev_bindir="${dev_root}/bin";
+ dep_packages="${dev_home}/pkg";
+ dep_sources="${dev_home}/src";
+
+ mkdir -p "${dep_sources}";
+
+ # Set up virtual environment
+
+ "${bootstrap_python}" -m virtualenv "${dev_root}";
+
+ python="${dev_bindir}/python";
+
+ # These variables are defaults for things which might be configured by
+ # environment; only set them if they're un-set.
+
+ conditional_set wd "$(pwd)";
+
+ # Find some hashing commands
+ # sha1() = sha1 hash, if available
+ # md5() = md5 hash, if available
+ # hash() = default hash function
+ # $hash = name of the type of hash used by hash()
+
+ hash="";
+
+ if type -ft openssl > /dev/null; then
+ if [ -z "${hash}" ]; then hash="md5"; fi;
+ md5 () { "$(type -p openssl)" dgst -md5 "$@"; }
+ elif type -ft md5 > /dev/null; then
+ if [ -z "${hash}" ]; then hash="md5"; fi;
+ md5 () { "$(type -p md5)" "$@"; }
+ elif type -ft md5sum > /dev/null; then
+ if [ -z "${hash}" ]; then hash="md5"; fi;
+ md5 () { "$(type -p md5sum)" "$@"; }
+ fi;
+
+ if type -ft sha1sum > /dev/null; then
+ if [ -z "${hash}" ]; then hash="sha1sum"; fi;
+ sha1 () { "$(type -p sha1sum)" "$@"; }
+ fi;
+ if type -ft shasum > /dev/null; then
+ if [ -z "${hash}" ]; then hash="sha1"; fi;
+ sha1 () { "$(type -p shasum)" "$@"; }
+ fi;
+
+ if [ "${hash}" == "sha1" ]; then
+ hash () { sha1 "$@"; }
+ elif [ "${hash}" == "md5" ]; then
+ hash () { md5 "$@"; }
+ 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 () { echo "INTERNAL ERROR: No hash function."; exit 1; }
+ fi;
+}
+
+
+# If do_get is turned on, get an archive file containing a dependency via HTTP.
+www_get () {
+ if ! "${do_get}"; then return 0; fi;
+
+ local md5="";
+ local sha1="";
+
+ OPTIND=1;
+ while getopts "m:s:" option; do
+ case "${option}" in
+ 'm') md5="${OPTARG}"; ;;
+ 's') sha1="${OPTARG}"; ;;
+ esac;
+ done;
+ shift $((${OPTIND} - 1));
+
+ 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|')";
+
+ untar () { tar -xvf -; }
+ unzipstream () { tmp="$(mktemp -t ccsXXXXX)"; cat > "${tmp}"; unzip "${tmp}"; rm "${tmp}"; }
+ case "${ext}" in
+ gz|tgz) decompress="gzip -d -c"; unpack="untar"; ;;
+ bz2) decompress="bzip2 -d -c"; unpack="untar"; ;;
+ tar) decompress="untar"; unpack="untar"; ;;
+ zip) decompress="cat"; unpack="unzipstream"; ;;
+ *)
+ echo "Error in www_get of URL ${url}: Unknown extension ${ext}";
+ exit 1;
+ ;;
+ esac;
+
+ echo "";
+
+ if [ -n "${dep_packages}" ] && [ -n "${hash}" ]; then
+ mkdir -p "${dep_packages}";
+
+ local cache_basename="$(echo ${name} | tr '[ ]' '_')-$(echo "${url}" | hash)-$(basename "${url}")";
+ local cache_file="${dep_packages}/${cache_basename}";
+
+ check_hash () {
+ local file="$1"; shift;
+
+ local sum="$(md5 "${file}" | perl -pe 's|^.*([0-9a-f]{32}).*$|\1|')";
+ if [ -n "${md5}" ]; then
+ echo "Checking MD5 sum for ${name}...";
+ if [ "${md5}" != "${sum}" ]; then
+ echo "ERROR: MD5 sum for downloaded file is wrong: ${sum} != ${md5}";
+ return 1;
+ fi;
+ else
+ echo "MD5 sum for ${name} is ${sum}";
+ fi;
+
+ local sum="$(sha1 "${file}" | perl -pe 's|^.*([0-9a-f]{40}).*$|\1|')";
+ if [ -n "${sha1}" ]; then
+ echo "Checking SHA1 sum for ${name}...";
+ if [ "${sha1}" != "${sum}" ]; then
+ echo "ERROR: SHA1 sum for downloaded file is wrong: ${sum} != ${sha1}";
+ return 1;
+ fi;
+ else
+ echo "SHA1 sum for ${name} is ${sum}";
+ fi;
+ }
+
+ if [ ! -f "${cache_file}" ]; then
+ echo "No cache file: ${cache_file}";
+
+ echo "Downloading ${name}...";
+
+ local pkg_host="static.calendarserver.org";
+ local pkg_path="/pkg";
+
+ #
+ # Try getting a copy from calendarserver.org.
+ #
+ local tmp="$(mktemp "/tmp/${cache_basename}.XXXXXX")";
+ curl -L "http://${pkg_host}${pkg_path}/${cache_basename}" -o "${tmp}" || true;
+ echo "";
+ if [ ! -s "${tmp}" ] || grep '<title>404 Not Found</title>' "${tmp}" > /dev/null; then
+ rm -f "${tmp}";
+ echo "${name} is not available from calendarserver.org; trying upstream source.";
+ elif ! check_hash "${tmp}"; then
+ rm -f "${tmp}";
+ echo "${name} from calendarserver.org is invalid; trying upstream source.";
+ fi;
+
+ #
+ # That didn't work. Try getting a copy from the upstream source.
+ #
+ if [ ! -f "${tmp}" ]; then
+ curl -L "${url}" -o "${tmp}";
+ echo "";
+
+ if [ ! -s "${tmp}" ] || grep '<title>404 Not Found</title>' "${tmp}" > /dev/null; then
+ rm -f "${tmp}";
+ echo "${name} is not available from upstream source: ${url}";
+ exit 1;
+ elif ! check_hash "${tmp}"; then
+ rm -f "${tmp}";
+ echo "${name} from upstream source is invalid: ${url}";
+ exit 1;
+ fi;
+
+ if egrep "^${pkg_host}" "${HOME}/.ssh/known_hosts" > /dev/null 2>&1; then
+ echo "Copying cache file up to ${pkg_host}.";
+ if ! scp "${tmp}" "${pkg_host}:/var/www/static${pkg_path}/${cache_basename}"; then
+ echo "Failed to copy cache file up to ${pkg_host}.";
+ fi;
+ echo ""
+ fi;
+ fi;
+
+ #
+ # OK, we should be good
+ #
+ mv "${tmp}" "${cache_file}";
+ else
+ #
+ # We have the file cached, just verify hash
+ #
+ if ! check_hash "${cache_file}"; then
+ exit 1;
+ fi;
+ 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} | ${unpack};
+ 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 "Current working copy (${path}) is from the wrong URI: ${wc_uri} != ${uri}";
+ rm -rf "${path}";
+ svn_get "${name}" "${path}" "${uri}" "${revision}";
+ return $?;
+ fi;
+
+ echo "Reverting ${name}...";
+ svn revert -R "${path}";
+
+ echo "Updating ${name}...";
+ svn update -r "${revision}" "${path}";
+ else
+ # Verify that we have a working copy checked out from the correct URI
+ if [ "${wc_uri}" != "${uri}" ]; then
+ 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}";
+ else
+ local svnversion="$(svnversion "${path}")";
+ if [ "${svnversion%%[M:]*}" != "${revision}" ]; then
+ echo "Updating ${name}...";
+ svn update -r "${revision}" "${path}";
+ fi;
+ fi;
+ fi;
+ else
+ checkout () {
+ echo "Checking out ${name}...";
+ svn checkout -r "${revision}" "${uri}@${revision}" "${path}";
+ }
+
+ if [ "${revision}" != "HEAD" ] && \
+ [ -n "${dep_packages}" ] && \
+ [ -n "${hash}" ] \
+ ; then
+ local cacheid="${name}-$(echo "${uri}" | hash)";
+ local cache_file="${dep_packages}/${cacheid}@r${revision}.tgz";
+
+ mkdir -p "${dep_packages}";
+
+ 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;
+ fi;
+}
+
+
+# Run 'make' with the given command line, prepending a -j option appropriate to
+# the number of CPUs on the current machine, if that can be determined.
+jmake () {
+ case "$(uname -s)" in
+ Darwin|Linux)
+ ncpu="$(getconf _NPROCESSORS_ONLN)";
+ ;;
+ FreeBSD)
+ ncpu="$(sysctl hw.ncpu)";
+ ncpu="${ncpu##hw.ncpu: }";
+ ;;
+ esac;
+
+ if [ -n "${ncpu:-}" ] && [[ "${ncpu}" =~ ^[0-9]+$ ]]; then
+ make -j "${ncpu}" "$@";
+ else
+ make "$@";
+ fi;
+}
+
+# Declare a dependency on a C project built with autotools.
+c_dependency () {
+ local f_hash="";
+
+ OPTIND=1;
+ while getopts "m:s:" option; do
+ case "${option}" in
+ 'm') f_hash="-m ${OPTARG}"; ;;
+ 's') f_hash="-s ${OPTARG}"; ;;
+ esac;
+ done;
+ shift $((${OPTIND} - 1));
+
+ local name="$1"; shift;
+ local path="$1"; shift;
+ local uri="$1"; shift;
+
+ # Extra arguments are processed below, as arguments to './configure'.
+
+ srcdir="${dep_sources}/${path}";
+ # local dstroot="${srcdir}/_root";
+ local dstroot="${dev_root}";
+
+ www_get ${f_hash} "${name}" "${srcdir}" "${uri}";
+
+ export PATH="${dstroot}/bin:${PATH}";
+ export C_INCLUDE_PATH="${dstroot}/include:${C_INCLUDE_PATH:-}";
+ export LD_LIBRARY_PATH="${dstroot}/lib:${dstroot}/lib64:${LD_LIBRARY_PATH:-}";
+ export CPPFLAGS="-I${dstroot}/include ${CPPFLAGS:-} ";
+ export LDFLAGS="-L${dstroot}/lib -L${dstroot}/lib64 ${LDFLAGS:-} ";
+ export DYLD_LIBRARY_PATH="${dstroot}/lib:${dstroot}/lib64:${DYLD_LIBRARY_PATH:-}";
+ export PKG_CONFIG_PATH="${dstroot}/lib/pkgconfig:${PKG_CONFIG_PATH:-}";
+
+ if "${do_setup}"; then
+ if "${force_setup}" || [ ! -d "${dstroot}" ]; then
+ echo "Building ${name}...";
+ cd "${srcdir}";
+ ./configure --prefix="${dstroot}" "$@";
+ jmake;
+ jmake install;
+ else
+ echo "Using built ${name}.";
+ echo "";
+ fi;
+ fi;
+}
+
+
+ruler () {
+ echo "____________________________________________________________";
+ echo "";
+
+ if [ $# -gt 0 ]; then
+ echo "$@";
+ fi;
+}
+
+
+
+#
+# Build C dependencies
+#
+c_dependencies () {
+
+ ruler;
+ if find_header ldap.h 20428 LDAP_VENDOR_VERSION; then
+ using_system "OpenLDAP";
+ else
+ local v="2.4.38";
+ local n="openldap";
+ local p="${n}-${v}";
+ c_dependency -m "39831848c731bcaef235a04e0d14412f" \
+ "OpenLDAP" "${p}" \
+ "http://www.openldap.org/software/download/OpenLDAP/${n}-release/${p}.tgz" \
+ --disable-bdb --disable-hdb;
+ fi;
+
+ ruler;
+ if find_header sasl/sasl.h && ! find_header sasl.h; then
+ mkdir -p "${dev_root}/include";
+ echo "#include <sasl/sasl.h>" > "${dev_root}/include/sasl.h"
+ using_system "SASL";
+ elif find_header sasl.h; then
+ using_system "SASL";
+ else
+ local v="2.1.26";
+ local n="cyrus-sasl";
+ local p="${n}-${v}";
+ c_dependency -m "a7f4e5e559a0e37b3ffc438c9456e425" \
+ "Cyrus SASL" "${p}" \
+ "ftp://ftp.cyrusimap.org/cyrus-sasl/${p}.tar.gz" \
+ --disable-macos-framework;
+ fi;
+
+ ruler;
+ if find_header ffi/ffi.h; then
+ using_system "libffi";
+ else
+ c_dependency -m "45f3b6dbc9ee7c7dfbbbc5feba571529" \
+ "libffi" "libffi-3.0.13" \
+ "ftp://sourceware.org/pub/libffi/libffi-3.0.13.tar.gz"
+ fi;
+
+ ruler;
+ if type -P memcached > /dev/null; then
+ using_system "memcached";
+ else
+ local le="libevent-2.0.21-stable";
+ local mc="memcached-1.4.16";
+ c_dependency -m "b2405cc9ebf264aa47ff615d9de527a2" \
+ "libevent" "${le}" \
+ "http://github.com/downloads/libevent/libevent/${le}.tar.gz";
+ c_dependency -m "1c5781fecb52d70b615c6d0c9c140c9c" \
+ "memcached" "${mc}" \
+ "http://www.memcached.org/files/${mc}.tar.gz";
+ fi;
+
+ ruler;
+ if type -P postgres > /dev/null; then
+ using_system "Postgres";
+ else
+ local v="9.3.1";
+ local n="postgresql";
+ local p="${n}-${v}";
+
+ if type -P dtrace > /dev/null; then
+ local enable_dtrace="--enable-dtrace";
+ else
+ local enable_dtrace="";
+ fi;
+
+ c_dependency -m "c003d871f712d4d3895956b028a96e74" \
+ "PostgreSQL" "${p}" \
+ "http://ftp.postgresql.org/pub/source/v${v}/${p}.tar.bz2" \
+ --with-python ${enable_dtrace};
+ fi;
+
+}
+
+
+#
+# Build Python dependencies
+#
+py_dependencies () {
+ # export PYTHONPATH="${dev_libdir}:${PYTHONPATH:-}"
+
+ # export PATH="${dev_root}/bin:${PATH}";
+ # export C_INCLUDE_PATH="${dev_root}/include:${C_INCLUDE_PATH:-}";
+ # export LD_LIBRARY_PATH="${dev_root}/lib:${dev_root}/lib64:${LD_LIBRARY_PATH:-}";
+ # export CPPFLAGS="-I${dev_root}/include ${CPPFLAGS:-} ";
+ # export LDFLAGS="-L${dev_root}/lib -L${dev_root}/lib64 ${LDFLAGS:-} ";
+ # export DYLD_LIBRARY_PATH="${dev_root}/lib:${dev_root}/lib64:${DYLD_LIBRARY_PATH:-}";
+ # export PKG_CONFIG_PATH="${dev_root}/lib/pkgconfig:${PKG_CONFIG_PATH:-}";
+
+ # cd "${wd}";
+
+ for requirements in "${wd}/requirements/"*; do
+
+ ruler "Preparing Python requirements: ${requirements}";
+ echo "";
+
+ if ! "${python}" -m pip install \
+ --requirement "${requirements}" \
+ --download-cache "${dev_home}/pip_cache" \
+ --log "${dev_home}/pip.log" \
+ ; then
+ err=$?;
+ echo "Unable to set up Python requirements: ${requirements}";
+ if [ "${requirements#${wd}/requirements/opt_}" != "${requirements}" ]; then
+ echo "Requirements ${requirements} are optional; continuing.";
+ else
+ echo "";
+ exit ${err};
+ fi;
+ fi;
+
+ done;
+
+ echo "";
+}
+
+
+
+#
+# Set up for development
+#
+develop () {
+ init_build;
+ c_dependencies;
+ py_dependencies;
+}
</ins></span></pre></div>
<a id="CalendarServertrunkbin_pysh"></a>
<div class="addfile"><h4>Added: CalendarServer/trunk/bin/_py.sh (0 => 12439)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/trunk/bin/_py.sh         (rev 0)
+++ CalendarServer/trunk/bin/_py.sh        2014-01-24 01:46:22 UTC (rev 12439)
</span><span class="lines">@@ -0,0 +1,157 @@
</span><ins>+# -*- sh-basic-offset: 2 -*-
+##
+# Copyright (c) 2005-2014 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.
+#
+# This will prefer the python interpreter in the PYTHON environment variable.
+# If that's not found, it will check for "python2.7", "python2.6" and "python",
+# looking for each in your PATH and, failing that, in a number of well-known
+# locations.
+#
+detect_python_version () {
+ local v;
+ local p;
+ for v in "2.7" "2.6" ""
+ 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 p="$(type -p "${p}")"; then
+ if try_python "${p}"; then
+ echo "${p}";
+ return 0;
+ fi;
+ fi;
+ done;
+ done;
+ return 1;
+}
+
+
+#
+# Compare version numbers
+#
+cmp_version () {
+ local v="$1"; shift;
+ local mv="$1"; shift;
+
+ local vh;
+ local mvh;
+ local result;
+
+ while true; do
+ vh="${v%%.*}"; # Get highest-order segment
+ mvh="${mv%%.*}";
+
+ if [ "${vh}" -gt "${mvh}" ]; then
+ result=1;
+ break;
+ fi;
+
+ if [ "${vh}" -lt "${mvh}" ]; then
+ result=0;
+ break;
+ fi;
+
+ if [ "${v}" == "${v#*.}" ]; then
+ # No dots left, so we're ok
+ result=0;
+ break;
+ fi;
+
+ if [ "${mv}" == "${mv#*.}" ]; then
+ # No dots left, so we're not gonna match
+ result=1;
+ break;
+ fi;
+
+ v="${v#*.}";
+ mv="${mv#*.}";
+ done;
+
+ return ${result};
+}
+
+
+#
+# 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 () {
+ # First, detect the appropriate version of Python to use, based on our version
+ # requirements and the environment. Note that all invocations of python in
+ # our build scripts should therefore be '"${python}"', not 'python'; this is
+ # important on systems with older system pythons (2.4 or earlier) with an
+ # alternate install of Python, or alternate python installation mechanisms
+ # like virtualenv.
+ bootstrap_python="$(detect_python_version)";
+
+ # Set the $PYTHON environment variable to an absolute path pointing at the
+ # appropriate python executable, a standard-ish mechanism used by certain
+ # non-distutils things that need to find the "right" python. For instance,
+ # the part of the PostgreSQL build process which builds pl_python. Note that
+ # detect_python_version, above, already honors $PYTHON, so if this is already
+ # set it won't be stomped on, it will just be re-set to the same value.
+ export PYTHON="$(type -p ${bootstrap_python})";
+
+ if [ -z "${bootstrap_python:-}" ]; then
+ echo "No suitable python found. Python 2.6 or 2.7 is required.";
+ exit 1;
+ fi;
+}
</ins></span></pre></div>
<a id="CalendarServertrunkbindevelop"></a>
<div class="addfile"><h4>Added: CalendarServer/trunk/bin/develop (0 => 12439)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/trunk/bin/develop         (rev 0)
+++ CalendarServer/trunk/bin/develop        2014-01-24 01:46:22 UTC (rev 12439)
</span><span class="lines">@@ -0,0 +1,30 @@
</span><ins>+#!/bin/sh
+
+##
+# Copyright (c) 2005-2014 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.
+##
+
+set -e;
+set -u;
+
+if [ -z "${wd:-}" ]; then
+ wd="$(cd "$(dirname "$0")/.." && pwd)";
+fi;
+
+export CALENDARSERVER_DEVELOP="true";
+
+. "${wd}/bin/_build.sh";
+
+develop;
</ins><span class="cx">Property changes on: CalendarServer/trunk/bin/develop
</span><span class="cx">___________________________________________________________________
</span></span></pre></div>
<a id="svnexecutable"></a>
<div class="addfile"><h4>Added: svn:executable</h4></div>
<a id="CalendarServertrunkbinpyflakes"></a>
<div class="addfile"><h4>Added: CalendarServer/trunk/bin/pyflakes (0 => 12439)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/trunk/bin/pyflakes         (rev 0)
+++ CalendarServer/trunk/bin/pyflakes        2014-01-24 01:46:22 UTC (rev 12439)
</span><span class="lines">@@ -0,0 +1,37 @@
</span><ins>+#!/bin/sh
+
+##
+# Copyright (c) 2005-2014 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.
+##
+
+set -e;
+set -u;
+
+wd="$(cd "$(dirname "$0")/.." && pwd -L)";
+
+export CALENDARSERVER_DEVELOP="true";
+
+. "${wd}/bin/_build.sh";
+
+init_build > /dev/null;
+
+if [ $# -eq 0 ]; then
+ set - calendarserver contrib twisted twistedcaldav txdav txweb2;
+fi;
+
+"${python}" -m pip install pyflakes --upgrade >> "${dev_home}/setup.log";
+
+echo "Checking modules:" "$@";
+exec "${python}" -m pyflakes "$@";
</ins><span class="cx">Property changes on: CalendarServer/trunk/bin/pyflakes
</span><span class="cx">___________________________________________________________________
</span></span></pre></div>
<a id="svnexecutable"></a>
<div class="addfile"><h4>Added: svn:executable</h4></div>
<a id="CalendarServertrunkbinpython"></a>
<div class="addfile"><h4>Added: CalendarServer/trunk/bin/python (0 => 12439)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/trunk/bin/python         (rev 0)
+++ CalendarServer/trunk/bin/python        2014-01-24 01:46:22 UTC (rev 12439)
</span><span class="lines">@@ -0,0 +1,32 @@
</span><ins>+#!/bin/sh
+
+##
+# Copyright (c) 2005-2014 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.
+##
+
+set -e
+set -u
+
+wd="$(cd "$(dirname "$0")/.." && pwd)";
+
+export CALENDARSERVER_DEVELOP="true";
+
+. "${wd}/bin/_build.sh";
+
+init_build > /dev/null;
+c_dependencies >> "${dev_home}/setup.log";
+py_dependencies >> "${dev_home}/setup.log";
+
+exec "${python}" "$@";
</ins><span class="cx">Property changes on: CalendarServer/trunk/bin/python
</span><span class="cx">___________________________________________________________________
</span></span></pre></div>
<a id="svnexecutable"></a>
<div class="addfile"><h4>Added: svn:executable</h4></div>
<a id="CalendarServertrunkbintrial"></a>
<div class="modfile"><h4>Modified: CalendarServer/trunk/bin/trial (12438 => 12439)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/trunk/bin/trial        2014-01-24 01:43:49 UTC (rev 12438)
+++ CalendarServer/trunk/bin/trial        2014-01-24 01:46:22 UTC (rev 12439)
</span><span class="lines">@@ -1,13 +1,13 @@
</span><del>-#!/usr/bin/env python
</del><ins>+#!/bin/sh
</ins><span class="cx">
</span><span class="cx"> ##
</span><del>-# Copyright (c) 2006-2014 Apple Inc. All rights reserved.
</del><ins>+# Copyright (c) 2005-2014 Apple Inc. All rights reserved.
</ins><span class="cx"> #
</span><span class="cx"> # Licensed under the Apache License, Version 2.0 (the "License");
</span><span class="cx"> # you may not use this file except in compliance with the License.
</span><span class="cx"> # You may obtain a copy of the License at
</span><span class="cx"> #
</span><del>-# http://www.apache.org/licenses/LICENSE-2.0
</del><ins>+# http://www.apache.org/licenses/LICENSE-2.0
</ins><span class="cx"> #
</span><span class="cx"> # Unless required by applicable law or agreed to in writing, software
</span><span class="cx"> # distributed under the License is distributed on an "AS IS" BASIS,
</span><span class="lines">@@ -16,24 +16,17 @@
</span><span class="cx"> # limitations under the License.
</span><span class="cx"> ##
</span><span class="cx">
</span><del>-from __future__ import print_function
</del><ins>+set -e
+set -u
</ins><span class="cx">
</span><del>-import sys
-import os
</del><ins>+wd="$(cd "$(dirname "$0")/.." && pwd)";
</ins><span class="cx">
</span><del>-#PYTHONPATH
</del><ins>+export CALENDARSERVER_DEVELOP="true";
</ins><span class="cx">
</span><del>-if __name__ == "__main__":
- if "PYTHONPATH" in globals():
- sys.path.insert(0, PYTHONPATH)
- else:
- try:
- import _calendarserver_preamble
- except ImportError:
- sys.exc_clear()
</del><ins>+. "${wd}/bin/_build.sh";
</ins><span class="cx">
</span><del>- for name, value in os.environ.items():
- print("{0}={1}".format(name, value))
</del><ins>+init_build > /dev/null;
+c_dependencies >> "${dev_home}/setup.log";
+py_dependencies >> "${dev_home}/setup.log";
</ins><span class="cx">
</span><del>- from twisted.scripts.trial import run
- run()
</del><ins>+exec "${dev_bindir}/trial" "$@";
</ins></span></pre></div>
<a id="CalendarServertrunkbintwistd"></a>
<div class="modfile"><h4>Modified: CalendarServer/trunk/bin/twistd (12438 => 12439)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/trunk/bin/twistd        2014-01-24 01:43:49 UTC (rev 12438)
+++ CalendarServer/trunk/bin/twistd        2014-01-24 01:46:22 UTC (rev 12439)
</span><span class="lines">@@ -1,13 +1,13 @@
</span><del>-#!/usr/bin/env python
</del><ins>+#!/bin/sh
</ins><span class="cx">
</span><span class="cx"> ##
</span><del>-# Copyright (c) 2006-2014 Apple Inc. All rights reserved.
</del><ins>+# Copyright (c) 2005-2014 Apple Inc. All rights reserved.
</ins><span class="cx"> #
</span><span class="cx"> # Licensed under the Apache License, Version 2.0 (the "License");
</span><span class="cx"> # you may not use this file except in compliance with the License.
</span><span class="cx"> # You may obtain a copy of the License at
</span><span class="cx"> #
</span><del>-# http://www.apache.org/licenses/LICENSE-2.0
</del><ins>+# http://www.apache.org/licenses/LICENSE-2.0
</ins><span class="cx"> #
</span><span class="cx"> # Unless required by applicable law or agreed to in writing, software
</span><span class="cx"> # distributed under the License is distributed on an "AS IS" BASIS,
</span><span class="lines">@@ -16,18 +16,17 @@
</span><span class="cx"> # limitations under the License.
</span><span class="cx"> ##
</span><span class="cx">
</span><del>-import sys
</del><ins>+set -e
+set -u
</ins><span class="cx">
</span><del>-#PYTHONPATH
</del><ins>+wd="$(cd "$(dirname "$0")/.." && pwd)";
</ins><span class="cx">
</span><del>-if __name__ == "__main__":
- if "PYTHONPATH" in globals():
- sys.path.insert(0, PYTHONPATH)
- else:
- try:
- import _calendarserver_preamble
- except ImportError:
- sys.exc_clear()
</del><ins>+export CALENDARSERVER_DEVELOP="true";
</ins><span class="cx">
</span><del>- from twisted.scripts.twistd import run
- run()
</del><ins>+. "${wd}/bin/_build.sh";
+
+init_build > /dev/null;
+c_dependencies >> "${dev_home}/setup.log";
+py_dependencies >> "${dev_home}/setup.log";
+
+exec "${dev_bindir}/twistd" "$@";
</ins></span></pre></div>
<a id="CalendarServertrunkbinupdate_copyrights"></a>
<div class="addfile"><h4>Added: CalendarServer/trunk/bin/update_copyrights (0 => 12439)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/trunk/bin/update_copyrights         (rev 0)
+++ CalendarServer/trunk/bin/update_copyrights        2014-01-24 01:46:22 UTC (rev 12439)
</span><span class="lines">@@ -0,0 +1,66 @@
</span><ins>+#!/bin/sh
+# -*- sh-basic-offset: 2 -*-
+
+##
+# Copyright (c) 2013 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.
+##
+
+set -e;
+set -u;
+
+find_files () {
+ where="$1"; shift;
+
+ find "${where}" \
+ ! \( \
+ -type d \
+ \( \
+ -name .svn -o \
+ -name build -o \
+ -name data -o \
+ -name '_trial_temp*' \
+ \) \
+ -prune \
+ \) \
+ -type f \
+ ! -name '.#*' \
+ ! -name '#*#' \
+ ! -name '*~' \
+ ! -name '*.pyc' \
+ ! -name '*.log' \
+ ! -name update_copyrights \
+ -print0;
+}
+
+wd="$(cd "$(dirname "$0")/.." && pwd)";
+
+this_year="$(date "+%Y")";
+last_year=$((${this_year} - 1));
+
+tmp="$(mktemp -t "$$")";
+find_files "${wd}" > "${tmp}";
+
+ff () { cat "${tmp}"; }
+
+echo "Updating copyrights from ${last_year} to ${this_year}...";
+
+ff | xargs -0 perl -i -pe 's|(Copyright \(c\) .*-)'"${last_year}"'( Apple)|${1}'"${this_year}"'${2}|';
+ff | xargs -0 perl -i -pe 's|(Copyright \(c\) )'"${last_year}"'( Apple)|${1}'"${last_year}-${this_year}"'${2}|';
+
+ff | xargs -0 grep -e 'Copyright (c) .* Apple' \
+ | grep -v -e 'Copyright (c) .*'"${this_year}"' Apple' \
+ ;
+
+rm "${tmp}";
</ins><span class="cx">Property changes on: CalendarServer/trunk/bin/update_copyrights
</span><span class="cx">___________________________________________________________________
</span></span></pre></div>
<a id="svnexecutable"></a>
<div class="addfile"><h4>Added: svn:executable</h4></div>
<a id="CalendarServertrunkpydoctor"></a>
<div class="delfile"><h4>Deleted: CalendarServer/trunk/pydoctor (12438 => 12439)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/trunk/pydoctor        2014-01-24 01:43:49 UTC (rev 12438)
+++ CalendarServer/trunk/pydoctor        2014-01-24 01:46:22 UTC (rev 12439)
</span><span class="lines">@@ -1,31 +0,0 @@
</span><del>-#!/bin/sh
-
-##
-# Copyright (c) 2005-2014 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.
-##
-
-set -e
-set -u
-
-wd="$(cd "$(dirname "$0")" && pwd -P)";
-
-. "${wd}/support/build.sh";
-
-do_setup="false";
- do_get="false";
-
-dependencies;
-
-pydoctor "$@";
</del></span></pre></div>
<a id="CalendarServertrunkpyflakes"></a>
<div class="delfile"><h4>Deleted: CalendarServer/trunk/pyflakes (12438 => 12439)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/trunk/pyflakes        2014-01-24 01:43:49 UTC (rev 12438)
+++ CalendarServer/trunk/pyflakes        2014-01-24 01:46:22 UTC (rev 12439)
</span><span class="lines">@@ -1,30 +0,0 @@
</span><del>-#!/bin/sh
-
-set -e
-set -u
-
-wd="$(cd "$(dirname "$0")" && pwd)";
-
-if type -P pyflakes > /dev/null; then
- pyflakes="pyflakes";
-else
- flakes="$(cd "${wd}/../pyflakes-0.6.1" && pwd)";
- export PYTHONPATH="${flakes}:${PYTHONPATH:-}";
- pyflakes="${flakes}/bin/pyflakes";
-fi;
-
-if [ $# -eq 0 ]; then
- set - calendarserver twisted twistedcaldav txdav contrib;
-fi;
-
-tmp="$(mktemp "/tmp/pyflakes.XXXXX")";
-
-cd "${wd}" && "${pyflakes}" "$@" | sed \
- -e "/xmlext.py:[0-9][0-9]*: /d" \
- | tee "${tmp}";
-
-if [ -s "${tmp}" ]; then error="true"; else error="false"; fi;
-
-rm -f "${tmp}";
-
-if "${error}"; then exit 1; fi;
</del></span></pre></div>
<a id="CalendarServertrunkpython"></a>
<div class="delfile"><h4>Deleted: CalendarServer/trunk/python (12438 => 12439)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/trunk/python        2014-01-24 01:43:49 UTC (rev 12438)
+++ CalendarServer/trunk/python        2014-01-24 01:46:22 UTC (rev 12439)
</span><span class="lines">@@ -1,8 +0,0 @@
</span><del>-#!/usr/bin/env bash
-
-wd="$(cd "$(dirname "$0")" && pwd)";
-
-. "${wd}/support/shell.sh"
-
-exec "${python}" "$@";
-
</del></span></pre></div>
<a id="CalendarServertrunkrequirementsbasetxt"></a>
<div class="addfile"><h4>Added: CalendarServer/trunk/requirements/base.txt (0 => 12439)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/trunk/requirements/base.txt         (rev 0)
+++ CalendarServer/trunk/requirements/base.txt        2014-01-24 01:46:22 UTC (rev 12439)
</span><span class="lines">@@ -0,0 +1,26 @@
</span><ins>+zope.interface==4.0.5
+twisted==13.2.0
+-e svn+http://svn.calendarserver.org/repository/calendarserver/twext/trunk#egg=twextpy [DAL]
+
+# Twisted <3's SSL
+pyOpenSSL==0.12
+pycrypto==2.6.1
+pyasn1==0.1.7
+
+-e svn+http://svn.calendarserver.org/repository/calendarserver/PyKerberos/trunk#egg=kerberos
+
+# Data store
+xattr==0.6.4
+PyGreSQL==4.1.1
+sqlparse==0.1.2
+
+# Calendar
+python-dateutil==1.5
+pytz==2013.8
+-e svn+http://svn.calendarserver.org/repository/calendarserver/PyCalendar/trunk#egg=pycalendar
+
+# Process info
+psutil==1.2.0
+setproctitle==1.1.8
+
+# pycparser==2.10
</ins><span class="cx">Property changes on: CalendarServer/trunk/requirements/base.txt
</span><span class="cx">___________________________________________________________________
</span></span></pre></div>
<a id="svnmimetype"></a>
<div class="addfile"><h4>Added: svn:mime-type</h4></div>
<a id="CalendarServertrunkrequirementsdeveloptxt"></a>
<div class="addfile"><h4>Added: CalendarServer/trunk/requirements/develop.txt (0 => 12439)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/trunk/requirements/develop.txt         (rev 0)
+++ CalendarServer/trunk/requirements/develop.txt        2014-01-24 01:46:22 UTC (rev 12439)
</span><span class="lines">@@ -0,0 +1 @@
</span><ins>+docutils>=0.11
</ins><span class="cx">Property changes on: CalendarServer/trunk/requirements/develop.txt
</span><span class="cx">___________________________________________________________________
</span></span></pre></div>
<a id="svnmimetype"></a>
<div class="addfile"><h4>Added: svn:mime-type</h4></div>
<a id="CalendarServertrunkrequirementsopt_LDAPtxt"></a>
<div class="addfile"><h4>Added: CalendarServer/trunk/requirements/opt_LDAP.txt (0 => 12439)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/trunk/requirements/opt_LDAP.txt         (rev 0)
+++ CalendarServer/trunk/requirements/opt_LDAP.txt        2014-01-24 01:46:22 UTC (rev 12439)
</span><span class="lines">@@ -0,0 +1 @@
</span><ins>+-e svn+http://svn.calendarserver.org/repository/calendarserver/twext/trunk#egg=twextpy [LDAP]
</ins><span class="cx">Property changes on: CalendarServer/trunk/requirements/opt_LDAP.txt
</span><span class="cx">___________________________________________________________________
</span></span></pre></div>
<a id="svnmimetype"></a>
<div class="addfile"><h4>Added: svn:mime-type</h4></div>
<a id="CalendarServertrunkrequirementsopt_Oracletxt"></a>
<div class="addfile"><h4>Added: CalendarServer/trunk/requirements/opt_Oracle.txt (0 => 12439)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/trunk/requirements/opt_Oracle.txt         (rev 0)
+++ CalendarServer/trunk/requirements/opt_Oracle.txt        2014-01-24 01:46:22 UTC (rev 12439)
</span><span class="lines">@@ -0,0 +1 @@
</span><ins>+-e svn+http://svn.calendarserver.org/repository/calendarserver/twext/trunk#egg=twextpy [Oracle]
</ins><span class="cx">Property changes on: CalendarServer/trunk/requirements/opt_Oracle.txt
</span><span class="cx">___________________________________________________________________
</span></span></pre></div>
<a id="svnmimetype"></a>
<div class="addfile"><h4>Added: svn:mime-type</h4></div>
<a id="CalendarServertrunksetuppy"></a>
<div class="modfile"><h4>Modified: CalendarServer/trunk/setup.py (12438 => 12439)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/trunk/setup.py        2014-01-24 01:43:49 UTC (rev 12438)
+++ CalendarServer/trunk/setup.py        2014-01-24 01:46:22 UTC (rev 12439)
</span><span class="lines">@@ -18,101 +18,189 @@
</span><span class="cx">
</span><span class="cx"> from __future__ import print_function
</span><span class="cx">
</span><del>-import sys
-import os
</del><ins>+import errno
+from os import listdir, environ as environment
+from os.path import dirname, basename, abspath, join as joinpath, normpath
+from itertools import chain
+import subprocess
+from setuptools import setup, find_packages as setuptools_find_packages
+from pip.req import parse_requirements
</ins><span class="cx">
</span><del>-sys.path.insert(0, os.path.join(os.path.dirname(__file__), "support"))
</del><span class="cx">
</span><del>-from version import version
</del><span class="cx">
</span><ins>+#
+# Utilities
+#
</ins><span class="cx">
</span><del>-
</del><span class="cx"> def find_packages():
</span><span class="cx"> modules = [
</span><span class="cx"> "twisted.plugins",
</span><span class="cx"> ]
</span><span class="cx">
</span><del>- excludes = [
- ".svn",
- "_trial_temp",
- "build",
- ]
</del><ins>+ return modules + setuptools_find_packages()
</ins><span class="cx">
</span><del>- for root, dirs, files in os.walk("."):
- if root == ".":
- excludes.append("data")
</del><span class="cx">
</span><del>- for exclude in excludes:
- if exclude in dirs:
- dirs.remove(exclude)
</del><ins>+def version():
+ """
+ Compute the version number.
+ """
</ins><span class="cx">
</span><del>- if "__init__.py" in files:
- modules.append(".".join(root.split(os.path.sep)[1:]))
</del><ins>+ base_version = "6.0"
</ins><span class="cx">
</span><del>- return modules
</del><ins>+ branches = tuple(
+ branch.format(
+ project="twext",
+ version=base_version,
+ )
+ for branch in (
+ "tags/release/{project}-{version}",
+ "branches/release/{project}-{version}-dev",
+ "trunk",
+ )
+ )
</ins><span class="cx">
</span><ins>+ source_root = dirname(abspath(__file__))
</ins><span class="cx">
</span><ins>+ for branch in branches:
+ cmd = ["svnversion", "-n", source_root, branch]
+
+ try:
+ svn_revision = subprocess.check_output(cmd)
+
+ except OSError as e:
+ if e.errno == errno.ENOENT:
+ full_version = base_version + "-unknown"
+ break
+ raise
+
+ if "S" in svn_revision:
+ continue
+
+ full_version = base_version
+
+ if branch == "trunk":
+ full_version += "b.trunk"
+ elif branch.endswith("-dev"):
+ full_version += "c.dev"
+
+ if svn_revision in ("exported", "Unversioned directory"):
+ full_version += "-unknown"
+ else:
+ full_version += "-r{revision}".format(revision=svn_revision)
+
+ break
+ else:
+ full_version += "a.unknown"
+ full_version += "-r{revision}".format(revision=svn_revision)
+
+ return full_version
+
+
+
</ins><span class="cx"> #
</span><span class="cx"> # Options
</span><span class="cx"> #
</span><span class="cx">
</span><del>-description = "Calendar and Contacts Server",
-long_description = """
-Calendar and Contacts Server, implementing the CalDAV and CardDAV protocols.
-"""
</del><ins>+description = "Calendar and Contacts Server"
</ins><span class="cx">
</span><del>-classifiers = None
</del><ins>+long_description = file(joinpath(dirname(__file__), "README.rst")).read()
</ins><span class="cx">
</span><ins>+classifiers = [
+ "Development Status :: 5 - Production/Stable",
+ "Framework :: Twisted",
+ "Intended Audience :: Information Technology",
+ "License :: OSI Approved :: Apache Software License",
+ "Operating System :: OS Independent",
+ "Programming Language :: Python :: 2.7",
+ "Programming Language :: Python :: 2 :: Only",
+ "Topic :: Communications",
+ "Topic :: Internet :: WWW/HTTP :: HTTP Servers",
+ "Topic :: Office/Business :: Groupware",
+ "Topic :: Office/Business :: Scheduling",
+]
</ins><span class="cx">
</span><ins>+
+
</ins><span class="cx"> #
</span><del>-# Write version file
</del><ins>+# Dependencies
</ins><span class="cx"> #
</span><span class="cx">
</span><del>-version_number, version_info = version()
</del><ins>+requirements_dir = joinpath(dirname(__file__), "requirements")
</ins><span class="cx">
</span><del>-version_string = (
- "{number} ({info})"
- .format(number=version_number, info=version_info)
</del><ins>+
+def read_requirements(reqs_filename):
+ return [
+ str(r.req) for r in
+ parse_requirements(joinpath(requirements_dir, reqs_filename))
+ ]
+
+
+setup_requirements = []
+
+install_requirements = read_requirements("base.txt")
+
+extras_requirements = dict(
+ (reqs_filename[4:-4], read_requirements(reqs_filename))
+ for reqs_filename in listdir(requirements_dir)
+ if reqs_filename.startswith("opt_") and reqs_filename.endswith(".txt")
</ins><span class="cx"> )
</span><del>-version_file = file(os.path.join("calendarserver", "version.py"), "w")
-version_file.write('version = "{version}"\n'.format(version=version_string))
-version_file.close()
</del><span class="cx">
</span><ins>+# Requirements for development and testing
+develop_requirements = read_requirements("develop.txt")
</ins><span class="cx">
</span><ins>+if environment.get("CALENDARSERVER_DEVELOP", "false") == "true":
+ install_requirements.extend(develop_requirements)
+ install_requirements.extend(chain(*extras_requirements.values()))
+
+
+
</ins><span class="cx"> #
</span><span class="cx"> # Set up Extension modules that need to be built
</span><span class="cx"> #
</span><span class="cx">
</span><del>-from distutils.core import Extension
-
</del><span class="cx"> extensions = []
</span><span class="cx">
</span><del>-if sys.platform == "darwin":
- extensions.append(
- Extension(
- "calendarserver.platform.darwin._sacl",
- extra_link_args=["-framework", "Security"],
- sources=["calendarserver/platform/darwin/_sacl.c"]
- )
- )
</del><ins>+# if sys.platform == "darwin":
+# extensions.append(
+# Extension(
+# "calendarserver.platform.darwin._sacl",
+# extra_link_args=["-framework", "Security"],
+# sources=["calendarserver/platform/darwin/_sacl.c"]
+# )
+# )
</ins><span class="cx">
</span><span class="cx">
</span><ins>+
</ins><span class="cx"> #
</span><span class="cx"> # Run setup
</span><span class="cx"> #
</span><span class="cx">
</span><span class="cx"> def doSetup():
</span><del>- from distutils.core import setup
</del><ins>+ # Write version file
+ version_string = version()
+ version_filename = joinpath(
+ dirname(__file__), "calendarserver", "version.py"
+ )
+ version_file = file(version_filename, "w")
+ try:
+ version_file.write(
+ 'version = "{0}"\n\n'.format(version_string)
+ )
+ finally:
+ version_file.close()
</ins><span class="cx">
</span><ins>+
+
+
</ins><span class="cx"> dist = setup(
</span><del>- name="Calendar and Contacts Server",
</del><ins>+ name="CalendarServer",
</ins><span class="cx"> version=version_string,
</span><span class="cx"> description=description,
</span><span class="cx"> long_description=long_description,
</span><span class="cx"> url="http://www.calendarserver.org/",
</span><span class="cx"> classifiers=classifiers,
</span><span class="cx"> author="Apple Inc.",
</span><del>- author_email=None,
</del><ins>+ author_email="calendarserver-dev@lists.macosforge.org",
</ins><span class="cx"> license="Apache License, Version 2.0",
</span><span class="cx"> platforms=["all"],
</span><span class="cx"> packages=find_packages(),
</span><span class="lines">@@ -161,29 +249,32 @@
</span><span class="cx"> "bin/calendarserver_upgrade",
</span><span class="cx"> # "bin/calendarserver_verify_data",
</span><span class="cx"> ],
</span><del>- data_files=[("caldavd", ["conf/caldavd.plist"]), ],
</del><ins>+ data_files=[
+ ("caldavd", ["conf/caldavd.plist"]),
+ ],
</ins><span class="cx"> ext_modules=extensions,
</span><span class="cx"> py_modules=[],
</span><ins>+ setup_requires=setup_requirements,
+ install_requires=install_requirements,
+ extras_require=extras_requirements,
</ins><span class="cx"> )
</span><span class="cx">
</span><span class="cx"> if "install" in dist.commands:
</span><span class="cx"> install_obj = dist.command_obj["install"]
</span><span class="cx"> if install_obj.root is None:
</span><span class="cx"> return
</span><del>- install_scripts = os.path.normpath(install_obj.install_scripts)
- install_lib = os.path.normpath(install_obj.install_lib)
- root = os.path.normpath(install_obj.root)
- base = os.path.normpath(install_obj.install_base)
</del><ins>+ install_scripts = normpath(install_obj.install_scripts)
+ install_lib = normpath(install_obj.install_lib)
+ root = normpath(install_obj.root)
+ base = normpath(install_obj.install_base)
</ins><span class="cx">
</span><span class="cx"> if root:
</span><span class="cx"> install_lib = install_lib[len(root):]
</span><span class="cx">
</span><span class="cx"> for script in dist.scripts:
</span><del>- scriptPath = os.path.join(
- install_scripts, os.path.basename(script)
- )
</del><ins>+ scriptPath = joinpath(install_scripts, basename(script))
</ins><span class="cx">
</span><del>- print("rewriting {0}".format(scriptPath))
</del><ins>+ print("Rewriting {0}".format(scriptPath))
</ins><span class="cx">
</span><span class="cx"> script = []
</span><span class="cx">
</span><span class="lines">@@ -207,7 +298,7 @@
</span><span class="cx"> elif line == "#PATH":
</span><span class="cx"> script.append(
</span><span class="cx"> 'PATH="{add}:$PATH"'
</span><del>- .format(add=os.path.join(base, "usr", "bin"))
</del><ins>+ .format(add=joinpath(base, "usr", "bin"))
</ins><span class="cx"> )
</span><span class="cx"> else:
</span><span class="cx"> script.append(line)
</span><span class="lines">@@ -221,7 +312,7 @@
</span><span class="cx"> elif line == "#PATH":
</span><span class="cx"> script.append(
</span><span class="cx"> 'PATH="{path}"'
</span><del>- .format(path=os.path.join(base, "usr", "bin"))
</del><ins>+ .format(path=joinpath(base, "usr", "bin"))
</ins><span class="cx"> )
</span><span class="cx"> else:
</span><span class="cx"> script.append(line)
</span></span></pre></div>
<a id="CalendarServertrunksupportupdate_copyrights"></a>
<div class="delfile"><h4>Deleted: CalendarServer/trunk/support/update_copyrights (12438 => 12439)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/trunk/support/update_copyrights        2014-01-24 01:43:49 UTC (rev 12438)
+++ CalendarServer/trunk/support/update_copyrights        2014-01-24 01:46:22 UTC (rev 12439)
</span><span class="lines">@@ -1,66 +0,0 @@
</span><del>-#!/bin/sh
-# -*- sh-basic-offset: 2 -*-
-
-##
-# Copyright (c) 2013 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.
-##
-
-set -e;
-set -u;
-
-find_files () {
- where="$1"; shift;
-
- find "${where}" \
- ! \( \
- -type d \
- \( \
- -name .svn -o \
- -name build -o \
- -name data -o \
- -name '_trial_temp*' \
- \) \
- -prune \
- \) \
- -type f \
- ! -name '.#*' \
- ! -name '#*#' \
- ! -name '*~' \
- ! -name '*.pyc' \
- ! -name '*.log' \
- ! -name update_copyrights \
- -print0;
-}
-
-wd="$(cd "$(dirname "$0")/.." && pwd)";
-
-this_year="$(date "+%Y")";
-last_year=$((${this_year} - 1));
-
-tmp="$(mktemp -t "$$")";
-find_files "${wd}" > "${tmp}";
-
-ff () { cat "${tmp}"; }
-
-echo "Updating copyrights from ${last_year} to ${this_year}...";
-
-ff | xargs -0 perl -i -pe 's|(Copyright \(c\) .*-)'"${last_year}"'( Apple)|${1}'"${this_year}"'${2}|';
-ff | xargs -0 perl -i -pe 's|(Copyright \(c\) )'"${last_year}"'( Apple)|${1}'"${last_year}-${this_year}"'${2}|';
-
-ff | xargs -0 grep -e 'Copyright (c) .* Apple' \
- | grep -v -e 'Copyright (c) .*'"${this_year}"' Apple' \
- ;
-
-rm "${tmp}";
</del></span></pre></div>
<a id="CalendarServertrunksupportversionpy"></a>
<div class="delfile"><h4>Deleted: CalendarServer/trunk/support/version.py (12438 => 12439)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/trunk/support/version.py        2014-01-24 01:43:49 UTC (rev 12438)
+++ CalendarServer/trunk/support/version.py        2014-01-24 01:46:22 UTC (rev 12439)
</span><span class="lines">@@ -1,71 +0,0 @@
</span><del>-#!/usr/bin/env python
-
-##
-# Copyright (c) 2006-2014 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.
-##
-from __future__ import print_function
-
-import os
-from os.path import dirname
-import subprocess
-
-def version():
- #
- # Compute the version number.
- #
-
- base_version = "6.0"
-
- branches = tuple(
- branch.format(version=base_version)
- for branch in (
- "tags/release/CalendarServer-{version}",
- "branches/release/CalendarServer-{version}-dev",
- "trunk",
- )
- )
-
- source_root = dirname(dirname(__file__))
-
- for branch in branches:
- svn_revision = subprocess.check_output(["svnversion", "-n", source_root, branch])
-
- if "S" in svn_revision:
- continue
-
- if branch == "trunk":
- base_version += "-trunk"
- elif branch.endswith("-dev"):
- base_version += "-dev"
-
- if svn_revision in ("exported", "Unversioned directory"):
- if os.environ.get("RC_XBS", None) == "YES":
- xbs_version = os.environ.get("RC_ProjectSourceVersion", "?")
- comment = "Apple Calendar Server {version}".format(version=xbs_version)
- else:
- comment = "unknown"
- else:
- comment = "r{revision}".format(revision=svn_revision)
-
- break
- else:
- base_version += "-unknown"
- comment = "r{revision}".format(revision=svn_revision)
-
- return (base_version, comment)
-
-if __name__ == "__main__":
- base_version, comment = version()
- print("{version} ({comment})".format(version=base_version, comment=comment))
</del></span></pre></div>
<a id="CalendarServertrunktest"></a>
<div class="delfile"><h4>Deleted: CalendarServer/trunk/test (12438 => 12439)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/trunk/test        2014-01-24 01:43:49 UTC (rev 12438)
+++ CalendarServer/trunk/test        2014-01-24 01:46:22 UTC (rev 12439)
</span><span class="lines">@@ -1,151 +0,0 @@
</span><del>-#!/usr/bin/env bash
-
-##
-# Copyright (c) 2005-2014 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.
-##
-
-set -e;
-set -u;
-
-wd="$(cd "$(dirname "$0")" && pwd -L)";
-
-##
-# Options
-##
-
-do_setup="false";
-do_get="false";
-
-random="--random=$(date "+%s")";
-no_colour="";
-until_fail="";
-coverage="";
-m_twisted="";
-numjobs="";
-reactor="";
-
-if [ "$(uname -s)" == "Darwin" ]; then
- reactor="--reactor=kqueue";
-fi;
-
-usage ()
-{
- program="$(basename "$0")";
-
- if [ "${1--}" != "-" ]; then echo "$@"; echo; fi;
-
- echo "Usage: ${program} [options]";
- echo "Options:";
- echo " -h Print this help and exit";
- echo " -n Do not use color";
- echo " -o Do not run tests in random order.";
- echo " -r<num> Use specified seed to determine order.";
- echo " -u Run until the tests fail.";
- echo " -c Generate coverage reports.";
-
- if [ "${1-}" == "-" ]; then return 0; fi;
- exit 64;
-}
-
-while getopts "nhoucr:j:" option; do
- case "${option}" in
- '?') usage; ;;
- 'h') usage -; exit 0; ;;
- 'o') random=""; ;;
- 'r') random="--random=$OPTARG"; ;;
- 'n') no_colour="--reporter=bwverbose"; ;;
- 'u') until_fail="--until-failure"; ;;
- 'c') coverage="--coverage"; ;;
- 't') m_twisted="twisted"; ;;
- 'j') numjobs="-j $OPTARG"; ;;
- esac;
-done;
-shift $((${OPTIND} - 1));
-
-export PYTHONPATH="${wd}:${PYTHONPATH:-}";
-
-if [ $# -gt 0 ]; then
- test_modules="$@";
- flaky=true;
-else
- test_modules="calendarserver twistedcaldav txdav contrib ${m_twisted}";
- flaky=true;
-fi;
-
-
-##
-# Clean up
-##
-
-find "${wd}" -name \*.pyc -print0 | xargs -0 rm;
-
-
-##
-# Unit tests
-##
-
-mkdir -p "${wd}/data";
-cd "${wd}" && "${wd}/bin/trial" --temp-directory="${wd}/data/trial" --rterrors ${reactor} ${random} ${until_fail} ${no_colour} ${coverage} ${numjobs} ${test_modules};
-
-
-##
-# Code linting
-##
-
-if ${flaky}; then
- echo "";
- echo "Running pyflakes...";
- tmp="$(mktemp "/tmp/calendarserver_test_flakes.XXXXX")";
- cd "${wd}" && ./pyflakes ${test_modules} | tee "${tmp}" 2>&1;
- if [ -s "${tmp}" ]; then
- echo "**** Pyflakes says you have some code to clean up. ****";
- exit 1;
- fi;
- rm -f "${tmp}";
-fi;
-
-search_py ()
-{
- find . \
- ! '(' -type d '(' -path '*/.*' -or -name data ')' -prune ')' \
- -type f -name '*.py' \
- -print0 \
- | xargs -0 -n 100 grep "$@";
-}
-
-#tmp="$(mktemp "/tmp/calendarserver_test_flakish.XXXXX")";
-#echo "";
-#echo "Checking for legacy print statements..."
-#search_py 'print *[^(]' | sed 's|#.*||' | grep 'print *[^(]' > "${tmp}" || true;
-#if [ -s "${tmp}" ]; then
-# echo "**** Use of legacy print statement found. ****";
-# cat "${tmp}";
-# exit 1;
-#fi;
-#rm -f "${tmp}";
-
-
-##
-# Empty files
-##
-
-tmp="$(mktemp "/tmp/calendarserver_test_emtpy.XXXXX")";
-find "${wd}" '!' '(' -type d '(' -path '*/.*' -or -name data ')' -prune ')' -type f -size 0 > "${tmp}";
-if [ -s "${tmp}" ]; then
- echo "**** Empty files: ****";
- cat "${tmp}";
- exit 1;
-fi;
-rm -f "${tmp}";
</del></span></pre></div>
<a id="CalendarServertrunktestserver"></a>
<div class="delfile"><h4>Deleted: CalendarServer/trunk/testserver (12438 => 12439)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/trunk/testserver        2014-01-24 01:43:49 UTC (rev 12438)
+++ CalendarServer/trunk/testserver        2014-01-24 01:46:22 UTC (rev 12439)
</span><span class="lines">@@ -1,81 +0,0 @@
</span><del>-#!/usr/bin/env bash
-
-##
-# Copyright (c) 2005-2014 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.
-##
-
-wd="$(cd "$(dirname "$0")" && pwd)";
-cdt="${wd}/../CalDAVTester";
-
-##
-# Command line handling
-##
-
-verbose="";
-serverinfo="${cdt}/scripts/server/serverinfo.xml";
-printres="";
-subdir="";
-random="--random";
-seed="";
-ssl="";
-
-usage ()
-{
- program="$(basename "$0")";
- echo "Usage: ${program} [-v] [-s serverinfo]";
- echo "Options:";
- echo " -d Set the script subdirectory";
- echo " -h Print this help and exit";
- echo " -o Execute tests in order";
- echo " -r Print request and response";
- echo " -s Set the serverinfo.xml";
- echo " -t Set the CalDAVTester directory";
- echo " -x Random seed to use.";
- echo " -v Verbose.";
- echo " -z Use SSL.";
-
- if [ "${1-}" == "-" ]; then return 0; fi;
- exit 64;
-}
-
-while getopts 'hvrozt:s:d:x:' option; do
- case "$option" in
- '?') usage; ;;
- 'h') usage -; exit 0; ;;
- 't') cdt="${OPTARG}"; serverinfo="${OPTARG}/scripts/server/serverinfo.xml"; ;;
- 'd') subdir="--subdir=${OPTARG}"; ;;
- 's') serverinfo="${OPTARG}"; ;;
- 'r') printres="--always-print-request --always-print-response"; ;;
- 'v') verbose="v"; ;;
- 'o') random=""; ;;
- 'x') seed="--random-seed ${OPTARG}"; ;;
- 'z') ssl="--ssl"; ;;
- esac;
-done;
-
-shift $((${OPTIND} - 1));
-
-if [ $# == 0 ]; then
- set - "--all";
-fi;
-
-##
-# Do The Right Thing
-##
-
-source "${wd}/support/shell.sh";
-
-cd "${cdt}" && "${python}" testcaldav.py ${random} ${seed} ${ssl} --print-details-onfail ${printres} -s "${serverinfo}" ${subdir} "$@";
-
</del></span></pre>
</div>
</div>
</body>
</html>