summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sca-cpp/trunk/etc/Makefile.am2
-rw-r--r--sca-cpp/trunk/modules/edit/Makefile.am8
-rwxr-xr-xsca-cpp/trunk/modules/edit/start13
-rw-r--r--sca-cpp/trunk/modules/server/Makefile.am2
-rw-r--r--sca-cpp/trunk/modules/server/htdocs/wiring/ref.js574
-rw-r--r--sca-cpp/trunk/modules/wsgi/Makefile.am2
6 files changed, 9 insertions, 592 deletions
diff --git a/sca-cpp/trunk/etc/Makefile.am b/sca-cpp/trunk/etc/Makefile.am
index c9ca6d854f..c34e48d351 100644
--- a/sca-cpp/trunk/etc/Makefile.am
+++ b/sca-cpp/trunk/etc/Makefile.am
@@ -15,7 +15,7 @@
# specific language governing permissions and limitations
# under the License.
-EXTRA_DIST = git-exclude svn-config svn-ignore
+EXTRA_DIST = svn-config svn-ignore
dist_noinst_SCRIPTS = httpd-ipcrm memgrind
diff --git a/sca-cpp/trunk/modules/edit/Makefile.am b/sca-cpp/trunk/modules/edit/Makefile.am
index 68f4017e53..4378013d93 100644
--- a/sca-cpp/trunk/modules/edit/Makefile.am
+++ b/sca-cpp/trunk/modules/edit/Makefile.am
@@ -15,8 +15,12 @@
# specific language governing permissions and limitations
# under the License.
+if WANT_PYTHON
moddir = $(prefix)/modules/edit
-nobase_dist_mod_DATA = htdocs/*.html htdocs/dash/*.html htdocs/app/*.html htdocs/graph/*.html htdocs/graph/*.js htdocs/page/*.html htdocs/page/*.js htdocs/login/*.html htdocs/logout/*.html palettes/*/palette.composite apps/*/app.composite apps/*/app.html
-EXTRA_DIST = htdocs/*.html htdocs/dash/*.html htdocs/app/*.html htdocs/graph/*.html htdocs/graph/*.js htdocs/page/*.html htdocs/page/*.js htdocs/login/*.html htdocs/logout/*.html palettes/*/palette.composite apps/*/app.composite apps/*/app.html
+dist_mod_SCRIPTS = start stop ssl-start mkapplinks
+nobase_dist_mod_DATA = edit.composite *.py htdocs/*.html htdocs/dash/*.html htdocs/app/*.html htdocs/graph/*.html htdocs/graph/*.js htdocs/page/*.html htdocs/page/*.js htdocs/login/*.html htdocs/logout/*.html palettes/*/palette.composite apps/*/app.composite apps/*/app.html dashboards/*
+EXTRA_DIST = edit.composite *.py htdocs/*.html htdocs/dash/*.html htdocs/app/*.html htdocs/graph/*.html htdocs/graph/*.js htdocs/page/*.html htdocs/page/*.js htdocs/login/*.html htdocs/logout/*.html palettes/*/palette.composite apps/*/app.composite apps/*/app.html dashboards/*
+
+endif
diff --git a/sca-cpp/trunk/modules/edit/start b/sca-cpp/trunk/modules/edit/start
index 8410ba6167..bd1ef8380e 100755
--- a/sca-cpp/trunk/modules/edit/start
+++ b/sca-cpp/trunk/modules/edit/start
@@ -27,19 +27,6 @@ jsprefix=`readlink -f $here/../js`
../../modules/http/httpd-conf tmp sca-store.com 8090 htdocs
../../modules/http/vhost-conf tmp apps htdocs
-# Configure authentication
-../../modules/http/open-auth-conf tmp
-../../modules/http/passwd-auth-conf tmp joe joe
-../../modules/http/passwd-auth-conf tmp jane jane
-cat >>tmp/conf/dvhost.conf <<EOF
-# Grant access to apps
-<Location />
-AuthType None
-Require all granted
-</Location>
-
-EOF
-
# Configure Python component support
../server/server-conf tmp
../python/python-conf tmp
diff --git a/sca-cpp/trunk/modules/server/Makefile.am b/sca-cpp/trunk/modules/server/Makefile.am
index 30c89da85d..74674fa9a6 100644
--- a/sca-cpp/trunk/modules/server/Makefile.am
+++ b/sca-cpp/trunk/modules/server/Makefile.am
@@ -23,7 +23,7 @@ incldir = $(prefix)/include/modules/server
dist_mod_SCRIPTS = cpp-conf scheme-conf server-conf
moddir = $(prefix)/modules/server
-EXTRA_DIST = domain-test.composite client-test.scm server-test.scm htdocs/*.xml htdocs/*.txt htdocs/*.html
+EXTRA_DIST = domain-test.composite client-test.scm server-test.scm htdocs/*.html htdocs/test/*.xml htdocs/test/*.txt
mod_LTLIBRARIES = libmod_tuscany_eval.la libmod_tuscany_wiring.la
noinst_DATA = libmod_tuscany_eval.so libmod_tuscany_wiring.so
diff --git a/sca-cpp/trunk/modules/server/htdocs/wiring/ref.js b/sca-cpp/trunk/modules/server/htdocs/wiring/ref.js
deleted file mode 100644
index 95a84c01a5..0000000000
--- a/sca-cpp/trunk/modules/server/htdocs/wiring/ref.js
+++ /dev/null
@@ -1,574 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you 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.
- *
- * The JSON-RPC client code is based on Jan-Klaas' JavaScript
- * o lait library (jsolait).
- *
- * $Id: jsonrpc.js,v 1.36.2.3 2006/03/08 15:09:37 mclark Exp $
- *
- * Copyright (c) 2003-2004 Jan-Klaas Kollhof
- * Copyright (c) 2005 Michael Clark, Metaparadigm Pte Ltd
- *
- * Licensed under the Apache License, Version 2.0 (the "License").
- */
-
-/**
- * Escape a character.
- */
-var JSONClient = new Object();
-
-JSONClient.escapeJSONChar = function(c) {
- if(c == "\"" || c == "\\") return "\\" + c;
- else if (c == "\b") return "\\b";
- else if (c == "\f") return "\\f";
- else if (c == "\n") return "\\n";
- else if (c == "\r") return "\\r";
- else if (c == "\t") return "\\t";
- var hex = c.charCodeAt(0).toString(16);
- if(hex.length == 1) return "\\u000" + hex;
- else if(hex.length == 2) return "\\u00" + hex;
- else if(hex.length == 3) return "\\u0" + hex;
- else return "\\u" + hex;
-};
-
-/**
- * Encode a string into JSON format.
- */
-JSONClient.escapeJSONString = function(s) {
- /* The following should suffice but Safari's regex is broken
- (doesn't support callback substitutions)
- return "\"" + s.replace(/([^\u0020-\u007f]|[\\\"])/g,
- JSONClient.escapeJSONChar) + "\"";
- */
-
- /* Rather inefficient way to do it */
- var parts = s.split("");
- for(var i = 0; i < parts.length; i++) {
- var c = parts[i];
- if(c == '"' ||
- c == '\\' ||
- c.charCodeAt(0) < 32 ||
- c.charCodeAt(0) >= 128)
- parts[i] = JSONClient.escapeJSONChar(parts[i]);
- }
- return "\"" + parts.join("") + "\"";
-};
-
-/**
- * Marshall objects to JSON format.
- */
-JSONClient.toJSON = function(o) {
- if(o == null) {
- return "null";
- } else if(o.constructor == String) {
- return JSONClient.escapeJSONString(o);
- } else if(o.constructor == Number) {
- return o.toString();
- } else if(o.constructor == Boolean) {
- return o.toString();
- } else if(o.constructor == Date) {
- return '{javaClass: "java.util.Date", time: ' + o.valueOf() +'}';
- } else if(o.constructor == Array) {
- var v = [];
- for(var i = 0; i < o.length; i++) v.push(JSONClient.toJSON(o[i]));
- return "[" + v.join(", ") + "]";
- } else {
- var v = [];
- for(attr in o) {
- if(o[attr] == null) v.push("\"" + attr + "\": null");
- else if(typeof o[attr] == "function"); /* skip */
- else v.push(JSONClient.escapeJSONString(attr) + ": " + JSONClient.toJSON(o[attr]));
- }
- return "{" + v.join(", ") + "}";
- }
-};
-
-/**
- * HTTPBindingClient.Exception.
- */
-HTTPBindingClient.Exception = function(code, message, javaStack) {
- this.code = code;
- var name;
- if(javaStack) {
- this.javaStack = javaStack;
- var m = javaStack.match(/^([^:]*)/);
- if(m) name = m[0];
- }
- if(name) this.name = name;
- else this.name = "HTTPBindingClientException";
- this.message = message;
-};
-
-HTTPBindingClient.Exception.CODE_REMOTE_EXCEPTION = 490;
-HTTPBindingClient.Exception.CODE_ERR_CLIENT = 550;
-HTTPBindingClient.Exception.CODE_ERR_PARSE = 590;
-HTTPBindingClient.Exception.CODE_ERR_NOMETHOD = 591;
-HTTPBindingClient.Exception.CODE_ERR_UNMARSHALL = 592;
-HTTPBindingClient.Exception.CODE_ERR_MARSHALL = 593;
-
-HTTPBindingClient.Exception.prototype = new Error();
-HTTPBindingClient.Exception.prototype.toString = function(code, msg) {
- return this.name + ": " + this.message;
-};
-
-/**
- * Default top level exception handler.
- */
-HTTPBindingClient.default_ex_handler = function(e) {
- alert(e);
-};
-
-/**
- * Client settable variables
- */
-HTTPBindingClient.toplevel_ex_handler = HTTPBindingClient.default_ex_handler;
-HTTPBindingClient.profile_async = false;
-HTTPBindingClient.max_req_active = 1;
-HTTPBindingClient.requestId = 1;
-
-/**
- * HTTPBindingClient implementation
- */
-HTTPBindingClient.prototype._createApplyMethod = function() {
- var fn = function() {
- var args = [];
- var callback = null;
- var methodName = arguments[0];
- for(var i = 1; i < arguments.length; i++) args.push(arguments[i]);
-
- if(typeof args[args.length - 1] == "function") callback = args.pop();
-
- var req = fn.client._makeRequest.call(fn.client, methodName, args, callback);
- if(callback == null) {
- return fn.client._sendRequest.call(fn.client, req);
- } else {
- HTTPBindingClient.async_requests.push(req);
- HTTPBindingClient.kick_async();
- return req.requestId;
- }
- };
- fn.client = this;
- return fn;
-};
-
-HTTPBindingClient._getCharsetFromHeaders = function(http) {
- try {
- var contentType = http.getResponseHeader("Content-type");
- var parts = contentType.split(/\s*;\s*/);
- for(var i = 0; i < parts.length; i++) {
- if(parts[i].substring(0, 8) == "charset=")
- return parts[i].substring(8, parts[i].length);
- }
- } catch (e) {}
- return "UTF-8";
-};
-
-/**
- * Async queue globals
- */
-HTTPBindingClient.async_requests = [];
-HTTPBindingClient.async_inflight = {};
-HTTPBindingClient.async_responses = [];
-HTTPBindingClient.async_timeout = null;
-HTTPBindingClient.num_req_active = 0;
-
-HTTPBindingClient._async_handler = function() {
- HTTPBindingClient.async_timeout = null;
-
- while(HTTPBindingClient.async_responses.length > 0) {
- var res = HTTPBindingClient.async_responses.shift();
- if(res.canceled) continue;
- if(res.profile) res.profile.dispatch = new Date();
- try {
- res.cb(res.result, res.ex, res.profile);
- } catch(e) {
- HTTPBindingClient.toplevel_ex_handler(e);
- }
- }
-
- while(HTTPBindingClient.async_requests.length > 0 && HTTPBindingClient.num_req_active < HTTPBindingClient.max_req_active) {
- var req = HTTPBindingClient.async_requests.shift();
- if(req.canceled) continue;
- req.client._sendRequest.call(req.client, req);
- }
-};
-
-HTTPBindingClient.kick_async = function() {
- if(HTTPBindingClient.async_timeout == null)
- HTTPBindingClient.async_timeout = setTimeout(HTTPBindingClient._async_handler, 0);
-};
-
-HTTPBindingClient.cancelRequest = function(requestId) {
- /* If it is in flight then mark it as canceled in the inflight map
- and the XMLHttpRequest callback will discard the reply. */
- if(HTTPBindingClient.async_inflight[requestId]) {
- HTTPBindingClient.async_inflight[requestId].canceled = true;
- return true;
- }
-
- /* If its not in flight yet then we can just mark it as canceled in
- the the request queue and it will get discarded before being sent. */
- for(var i in HTTPBindingClient.async_requests) {
- if(HTTPBindingClient.async_requests[i].requestId == requestId) {
- HTTPBindingClient.async_requests[i].canceled = true;
- return true;
- }
- }
-
- /* It may have returned from the network and be waiting for its callback
- to be dispatched, so mark it as canceled in the response queue
- and the response will get discarded before calling the callback. */
- for(var i in HTTPBindingClient.async_responses) {
- if(HTTPBindingClient.async_responses[i].requestId == requestId) {
- HTTPBindingClient.async_responses[i].canceled = true;
- return true;
- }
- }
-
- return false;
-};
-
-HTTPBindingClient.prototype._makeRequest = function(methodName, args, cb) {
- var req = {};
- req.client = this;
- req.requestId = HTTPBindingClient.requestId++;
-
- var obj = {};
- obj.id = req.requestId;
- if (this.objectID)
- obj.method = ".obj#" + this.objectID + "." + methodName;
- else
- obj.method = methodName;
- obj.params = args;
-
- if (cb) req.cb = cb;
- if (HTTPBindingClient.profile_async)
- req.profile = { "submit": new Date() };
- req.data = JSONClient.toJSON(obj);
-
- return req;
-};
-
-HTTPBindingClient.prototype._sendRequest = function(req) {
- if(req.profile) req.profile.start = new Date();
-
- /* Get free http object from the pool */
- var http = HTTPBindingClient.poolGetHTTPRequest();
- HTTPBindingClient.num_req_active++;
-
- /* Send the request */
- http.open("POST", this.uri, (req.cb != null));
-
- /* setRequestHeader is missing in Opera 8 Beta */
- try {
- http.setRequestHeader("Content-type", "text/plain");
- } catch(e) {}
-
- /* Construct call back if we have one */
- if(req.cb) {
- var self = this;
- http.onreadystatechange = function() {
- if(http.readyState == 4) {
- http.onreadystatechange = function () {};
- var res = { "cb": req.cb, "result": null, "ex": null};
- if (req.profile) {
- res.profile = req.profile;
- res.profile.end = new Date();
- }
- try { res.result = self._handleResponse(http); }
- catch(e) { res.ex = e; }
- if(!HTTPBindingClient.async_inflight[req.requestId].canceled)
- HTTPBindingClient.async_responses.push(res);
- delete HTTPBindingClient.async_inflight[req.requestId];
- HTTPBindingClient.kick_async();
- }
- };
- } else {
- http.onreadystatechange = function() {};
- }
-
- HTTPBindingClient.async_inflight[req.requestId] = req;
-
- try {
- http.send(req.data);
- } catch(e) {
- HTTPBindingClient.poolReturnHTTPRequest(http);
- HTTPBindingClient.num_req_active--;
- throw new HTTPBindingClient.Exception(HTTPBindingClient.Exception.CODE_ERR_CLIENT, "Connection failed");
- }
-
- if(!req.cb) return this._handleResponse(http);
-};
-
-HTTPBindingClient.prototype._handleResponse = function(http) {
- /* Get the charset */
- if(!this.charset) {
- this.charset = HTTPBindingClient._getCharsetFromHeaders(http);
- }
-
- /* Get request results */
- var status, statusText, data;
- try {
- status = http.status;
- statusText = http.statusText;
- data = http.responseText;
- } catch(e) {
- HTTPBindingClient.poolReturnHTTPRequest(http);
- HTTPBindingClient.num_req_active--;
- HTTPBindingClient.kick_async();
- throw new HTTPBindingClient.Exception(HTTPBindingClient.Exception.CODE_ERR_CLIENT, "Connection failed");
- }
-
- /* Return http object to the pool; */
- HTTPBindingClient.poolReturnHTTPRequest(http);
- HTTPBindingClient.num_req_active--;
-
- /* Unmarshall the response */
- if(status != 200) {
- throw new HTTPBindingClient.Exception(status, statusText);
- }
- var obj;
- try {
- eval("obj = " + data);
- } catch(e) {
- throw new HTTPBindingClient.Exception(550, "error parsing result");
- }
- if(obj.error)
- throw new HTTPBindingClient.Exception(obj.error.code, obj.error.msg, obj.error.trace);
- var res = obj.result;
-
- /* Handle CallableProxy */
- if(res && res.objectID && res.JSONRPCType == "CallableReference")
- return new HTTPBindingClient(this.uri, res.objectID);
-
- return res;
-};
-
-
-/**
- * XMLHttpRequest wrapper code
- */
-HTTPBindingClient.http_spare = [];
-HTTPBindingClient.http_max_spare = 8;
-
-HTTPBindingClient.poolGetHTTPRequest = function() {
- if(HTTPBindingClient.http_spare.length > 0) {
- return HTTPBindingClient.http_spare.pop();
- }
- return HTTPBindingClient.getHTTPRequest();
-};
-
-HTTPBindingClient.poolReturnHTTPRequest = function(http) {
- if(HTTPBindingClient.http_spare.length >= HTTPBindingClient.http_max_spare)
- delete http;
- else
- HTTPBindingClient.http_spare.push(http);
-};
-
-HTTPBindingClient.msxmlNames = [ "MSXML2.XMLHTTP.5.0",
- "MSXML2.XMLHTTP.4.0",
- "MSXML2.XMLHTTP.3.0",
- "MSXML2.XMLHTTP",
- "Microsoft.XMLHTTP" ];
-
-HTTPBindingClient.getHTTPRequest = function() {
- /* Mozilla XMLHttpRequest */
- try {
- HTTPBindingClient.httpObjectName = "XMLHttpRequest";
- return new XMLHttpRequest();
- } catch(e) {}
-
- /* Microsoft MSXML ActiveX */
- for (var i=0; i < HTTPBindingClient.msxmlNames.length; i++) {
- try {
- HTTPBindingClient.httpObjectName = HTTPBindingClient.msxmlNames[i];
- return new ActiveXObject(HTTPBindingClient.msxmlNames[i]);
- } catch (e) {}
- }
-
- /* None found */
- HTTPBindingClient.httpObjectName = null;
- throw new HTTPBindingClient.Exception(0, "Can't create XMLHttpRequest object");
-};
-
-
-HTTPBindingClient.prototype.get = function(id, responseFunction) {
- var xhr = this.createXMLHttpRequest();
- xhr.onreadystatechange = function() {
- if (xhr.readyState == 4) {
- if (xhr.status == 200) {
- var strDocument = xhr.responseText;
- var xmlDocument = xhr.responseXML;
- if(!xmlDocument || xmlDocument.childNodes.length==0){
- xmlDocument = (new DOMParser()).parseFromString(strDocument, "text/xml");
- }
- if (responseFunction != null) responseFunction(xmlDocument);
- } else {
- alert("get - Error getting data from the server");
- }
- }
- }
- xhr.open("GET", this.uri + '/' + id, true);
- xhr.send(null);
-};
-
-HTTPBindingClient.prototype.post = function (entry, responseFunction) {
- var xhr = this.createXMLHttpRequest();
- xhr.onreadystatechange = function() {
- if (xhr.readyState == 4) {
- if (xhr.status == 201) {
- var strDocument = xhr.responseText;
- var xmlDocument = xhr.responseXML;
- if(!xmlDocument || xmlDocument.childNodes.length==0){
- xmlDocument = (new DOMParser()).parseFromString(strDocument, "text/xml");
- }
- if (responseFunction != null) responseFunction(xmlDocument);
- } else {
- alert("post - Error getting data from the server");
- }
- }
- }
- xhr.open("POST", this.uri, true);
- xhr.setRequestHeader("Content-Type", "application/atom+xml");
- xhr.send(entry);
-};
-
-HTTPBindingClient.prototype.put = function (id, entry, responseFunction) {
- var xhr = this.createXMLHttpRequest();
- xhr.onreadystatechange = function() {
- if (xhr.readyState == 4) {
- if (xhr.status == 200) {
- var strDocument = xhr.responseText;
- var xmlDocument = xhr.responseXML;
- if(!xmlDocument || xmlDocument.childNodes.length==0){
- xmlDocument = (new DOMParser()).parseFromString(strDocument, "text/xml");
- }
- if (responseFunction != null) responseFunction(xmlDocument);
- } else {
- alert("put - Error getting data from the server");
- }
- }
- }
- xhr.open("PUT", this.uri + '/' + id, true);
- xhr.setRequestHeader("Content-Type", "application/atom+xml");
- xhr.send(entry);
-};
-
-HTTPBindingClient.prototype.del = function (id, responseFunction) {
- var xhr = this.createXMLHttpRequest();
- xhr.onreadystatechange = function() {
- if (xhr.readyState == 4) {
- if (xhr.status == 200) {
- if (responseFunction != null) responseFunction();
- } else {
- alert("delete - Error getting data from the server");
- }
- }
- }
- xhr.open("DELETE", this.uri + '/' + id, true);
- xhr.send(null);
-};
-
-HTTPBindingClient.prototype.createXMLHttpRequest = function () {
- /* Mozilla XMLHttpRequest */
- try { return new XMLHttpRequest(); } catch(e) {}
-
- /* Microsoft MSXML ActiveX */
- for (var i = 0; i < HTTPBindingClient.msxmlNames.length; i++) {
- try { return new ActiveXObject(HTTPBindingClient.msxmlNames[i]); } catch (e) {}
- }
- alert("XML http request not supported");
- return null;
-}
-
-/**
- * Construct an HTTPBindingClient.
- */
-function HTTPBindingClient(cname, uri, objectID) {
- this.uri = "/references/" + cname + "/" + uri;
- this.objectID = objectID;
- this.apply = this._createApplyMethod();
-
- if (typeof DOMParser == "undefined") {
- DOMParser = function () {}
-
- DOMParser.prototype.parseFromString = function (str, contentType) {
- if (typeof ActiveXObject != "undefined") {
- var d = new ActiveXObject("MSXML.DomDocument");
- d.loadXML(str);
- return d;
- } else if (typeof XMLHttpRequest != "undefined") {
- var req = new XMLHttpRequest;
- req.open("GET", "data:" + (contentType || "application/xml") +
- ";charset=utf-8," + encodeURIComponent(str), false);
- if (req.overrideMimeType) {
- req.overrideMimeType(contentType);
- }
- req.send(null);
- return req.responseXML;
- }
- }
- }
-};
-
-/**
- * Construct a component.
- */
-function ClientComponent(name) {
- this.name = name;
-}
-
-/**
- * Public API.
- */
-
-/**
- * Return a component.
- */
-function component(name) {
- return new ClientComponent(name);
-}
-
-/**
- * Return a reference proxy.
- */
-function reference(comp, name) {
- return new HTTPBindingClient(comp.name, name);
-};
-
-/**
- * Add proxy functions to a reference proxy.
- */
-function defun(ref) {
- function defapply(name) {
- return function() {
- var args = new Array();
- args[0] = name;
- for (i = 0, n = arguments.length; i < n; i++)
- args[i + 1] = arguments[i];
- return this.apply.apply(this, args);
- };
- }
-
- for (f = 1; f < arguments.length; f++) {
- var fn = arguments[f];
- ref[fn]= defapply(fn);
- }
- return ref;
-};
-
diff --git a/sca-cpp/trunk/modules/wsgi/Makefile.am b/sca-cpp/trunk/modules/wsgi/Makefile.am
index 9f67ab37c0..c4a762b1c6 100644
--- a/sca-cpp/trunk/modules/wsgi/Makefile.am
+++ b/sca-cpp/trunk/modules/wsgi/Makefile.am
@@ -40,7 +40,7 @@ prefixdir=$(prefix)/modules/wsgi
gae.prefix: $(top_builddir)/config.status
echo ${GAE_PREFIX} >gae.prefix
-EXTRA_DIST = domain-test.composite *.py htdocs/*.xml htdocs/*.txt htdocs/*.html
+EXTRA_DIST = domain-test.composite *.py htdocs/test/*.xml htdocs/test/*.txt htdocs/*.html
client_test_SOURCES = client-test.cpp
client_test_LDFLAGS = -lxml2 -lcurl -lmozjs