Fix distribution build, add missing files and samples and fix path to libraries. GCC 4.5 is used if available but not installed automatically.

git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@949435 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
jsdelfino 2010-05-29 19:44:35 +00:00
commit e5a49fff24
45 changed files with 275 additions and 115 deletions

View file

@ -20,16 +20,9 @@ ACLOCAL_AMFLAGS = -I m4
SUBDIRS = kernel modules components doc samples
datadir=$(prefix)
data_DATA = INSTALL README LICENSE COPYING NOTICE
data_DATA = README LICENSE COPYING NOTICE
nobase_data_DATA = xsd/*.xsd xsd/external/*.xsd xsd/external/*.dtd
install-data-hook:
rm -rf $(prefix)/doc
cp -r doc $(prefix)
rm -f $(prefix)/doc/Makefile* $(prefix)/doc/Doxyfile*
rm -rf `find $(prefix)/doc -type d -name .svn`
rm -rf `find $(prefix)/doc -type d -name .deps`
dist-hook:
rm -rf `find $(distdir)/ -type d -name .svn`
rm -rf `find $(distdir)/ -type d -name .deps`

View file

@ -1,6 +1,29 @@
Apache Tuscany SCA Runtime
==========================
Tuscany SCA Native is an SCA (Service Component Architecture) runtime written
in C++ and integrated with the Apache HTTPD server.
It supports SCA components written in C++ and Python. Experimental support
for other programming languages is under construction. SCA bindings are
available for the JSON-RPC and ATOMPub protocols.
Several useful SCA components are provided on top of the SCA runtime, which
can be used to help assemble distributed SCA composite applications:
Cache: Key/value memory cache, using Memcached;
Chat: XMPP chat, using Apache Vysper and Libstrophe;
Log: distributed logger, using Facebook Scribe.
Queue: AMQP queuing, using Apache Qpid/C;
Sqldb: SQL database, using PostgreSQL;
Store: Key/value persistent store, using TinyCDB;
Webservice: Web service gateway, using Apache Axis2/C;
These components present a simple ATOMPub REST interface, allowing you to send
a message to a queue, a chat connection, or add an entry to a cache or a
database for example, using a simple HTTP POST.
Getting the source code
=======================
@ -61,7 +84,7 @@ Here's a rough guide to the Tuscany SCA source tree:
Building
========
See the INSTALL file.
See the INSTALL file at the root of the source tree.
Contributing to the project

View file

@ -24,6 +24,9 @@ memcached.prefix: $(top_builddir)/config.status
comp_LTLIBRARIES = libmemcache.la
libmemcache_la_SOURCES = memcache.cpp
noinst_DATA = libmemcache.so
libmemcache.so:
ln -s .libs/libmemcache.so
memcache_test_SOURCES = memcache-test.cpp
memcache_test_LDFLAGS = -lxml2

View file

@ -23,7 +23,7 @@
name="memcache">
<component name="memcache">
<implementation.cpp path=".libs" library="libmemcache"/>
<implementation.cpp path="." library="libmemcache"/>
<service name="memcache">
<t:binding.http uri="memcache"/>
</service>

View file

@ -31,6 +31,9 @@ vysper.prefix: $(top_builddir)/config.status
comp_LTLIBRARIES = libchatter.la
libchatter_la_SOURCES = chatter.cpp
libchatter_la_LDFLAGS = -L${LIBSTROPHE_LIB} -R${LIBSTROPHE_LIB} -lstrophe -lexpat -lssl -lresolv
noinst_DATA = libchatter.so
libchatter.so:
ln -s .libs/libchatter.so
xmpp_test_SOURCES = xmpp-test.cpp
xmpp_test_LDFLAGS = -L${LIBSTROPHE_LIB} -R${LIBSTROPHE_LIB} -lstrophe -lexpat -lssl -lresolv
@ -43,9 +46,7 @@ noinst_PROGRAMS = xmpp-test client-test
if WANT_VYSPER
AM_JAVACFLAGS = -cp `${top_builddir}/components/chat/vysper-classpath ${VYSPER_PREFIX}`${JAVAROOT}
noinst_JAVA = test/*.java
CLEANFILES = test/*.class
TESTS = echo-test

View file

@ -23,7 +23,7 @@
name="chat">
<component name="print-sender">
<implementation.cpp path=".libs" library="libchatter"/>
<implementation.cpp path="." library="libchatter"/>
<property name="jid">sca1@localhost</property>
<property name="password">sca1</property>
<service name="print-sender">
@ -32,7 +32,7 @@
</component>
<component name="print-chatter">
<implementation.cpp path=".libs" library="libchatter"/>
<implementation.cpp path="." library="libchatter"/>
<property name="jid">sca2@localhost</property>
<property name="password">sca2</property>
<service name="print-chatter">

View file

@ -19,10 +19,10 @@ if WANT_LOG
INCLUDES = -I${THRIFT_INCLUDE} -I${FB303_INCLUDE}
comp_SCRIPTS = scribed-central-conf scribed-client-conf scribed-central-start scribed-central-stop scribed-client-start scribed-client-stop
comp_SCRIPTS = scribed-central-conf scribed-client-conf scribed-central-start scribed-central-stop scribed-client-start scribed-client-stop scribe-cat
compdir=$(prefix)/components/log
comp_DATA = scribe.prefix thrift.prefix
comp_DATA = scribe.prefix thrift.prefix scribecat.py
scribe.prefix: $(top_builddir)/config.status
echo ${SCRIBE_PREFIX} >scribe.prefix
@ -36,16 +36,21 @@ gen-cpp/fb303_constants.cpp gen-cpp/fb303_types.cpp gen-cpp/scribe_constants.cpp
CLEANFILES = gen-cpp/*
comp_LTLIBRARIES = liblog.la liblogger.la
noinst_DATA = liblog.so liblogger.so
nodist_liblog_la_SOURCES = gen-cpp/fb303_constants.cpp gen-cpp/fb303_types.cpp gen-cpp/scribe_constants.cpp gen-cpp/scribe.cpp gen-cpp/scribe_types.cpp gen-cpp/FacebookService.cpp gen-cpp/scribe.h
liblog_la_CXXFLAGS = -Wno-unused-parameter
liblog_la_SOURCES = log.cpp
liblog_la_LDFLAGS = -L${THRIFT_LIB} -R${THRIFT_LIB} -lthrift -L${FB303_LIB} -R${FB303_LIB} -lfb303 -L${SCRIBE_LIB} -R${SCRIBE_LIB} -lscribe
liblog.so:
ln -s .libs/liblog.so
nodist_liblogger_la_SOURCES = gen-cpp/fb303_constants.cpp gen-cpp/fb303_types.cpp gen-cpp/scribe_constants.cpp gen-cpp/scribe.cpp gen-cpp/scribe_types.cpp gen-cpp/FacebookService.cpp gen-cpp/scribe.h
liblogger_la_CXXFLAGS = -Wno-unused-parameter
liblogger_la_SOURCES = logger.cpp
liblogger_la_LDFLAGS = -L${THRIFT_LIB} -R${THRIFT_LIB} -lthrift -L${FB303_LIB} -R${FB303_LIB} -lfb303 -L${SCRIBE_LIB} -R${SCRIBE_LIB} -lscribe
liblogger.so:
ln -s .libs/liblogger.so
client_test_SOURCES = client-test.cpp
client_test_LDFLAGS = -lxml2 -lcurl -lmozjs

View file

@ -23,7 +23,7 @@
name="log">
<component name="log">
<implementation.cpp path=".libs" library="liblog"/>
<implementation.cpp path="." library="liblog"/>
<property name="category">default</property>
<service name="log">
<t:binding.http uri="log"/>
@ -39,7 +39,7 @@
</component>
<component name="logger">
<implementation.cpp path=".libs" library="liblogger"/>
<implementation.cpp path="." library="liblogger"/>
<property name="category">default</property>
<service name="logger">
<t:binding.http uri="logger"/>

View file

@ -27,9 +27,12 @@ tinycdb.prefix: $(top_builddir)/config.status
echo ${TINYCDB_PREFIX} >tinycdb.prefix
comp_LTLIBRARIES = libnosqldb.la
noinst_DATA = libnosqldb.so
libnosqldb_la_SOURCES = nosqldb.cpp
libnosqldb_la_LDFLAGS = -L${TINYCDB_LIB} -R${TINYCDB_LIB} -lcdb
libnosqldb.so:
ln -s .libs/libnosqldb.so
tinycdb_test_SOURCES = tinycdb-test.cpp
tinycdb_test_LDFLAGS = -L${TINYCDB_LIB} -R${TINYCDB_LIB} -lcdb

View file

@ -23,7 +23,7 @@
name="nosqldb">
<component name="nosqldb">
<implementation.cpp path=".libs" library="libnosqldb"/>
<implementation.cpp path="." library="libnosqldb"/>
<property name="dbname">tmp/test.cdb</property>
<service name="nosqldb">
<t:binding.http uri="nosqldb"/>

View file

@ -120,13 +120,6 @@ private:
int fd;
struct stat st;
//friend const failable<bool> post(const value& key, const value& val, TinyCDB& cdb);
//friend const failable<bool> put(const value& key, const value& val, TinyCDB& cdb);
//friend const failable<value> get(const value& key, const TinyCDB& cdb);
//friend const failable<bool> del(const value& key, TinyCDB& cdb);
//friend const failable<bool> rewrite(const lambda<failable<bool>(buffer& buf, const unsigned int klen, const unsigned int vlen)>& update, const lambda<failable<bool>(struct cdb_make&)>& finish, TinyCDB& cdb);
//friend const failable<bool> rewrite(const lambda<failable<bool>(buffer& buf, const unsigned int klen, const unsigned int vlen)>& update, const lambda<failable<bool>(struct cdb_make&)>& finish, buffer& buf, const int fd, TinyCDB& cdb);
friend const string dbname(const TinyCDB& cdb);
friend const failable<int> cdbopen(TinyCDB& cdb);
friend const failable<bool> cdbclose(TinyCDB& cdb);
@ -306,6 +299,29 @@ const failable<bool> rewrite(const lambda<failable<bool>(buffer& buf, const unsi
/**
* Post a new item to the database.
*/
struct postUpdate {
const string ks;
postUpdate(const string& ks) : ks(ks) {
}
const failable<bool> operator()(buffer& buf, const unsigned int klen, unused const unsigned int vlen) const {
if (ks == string((char*)buf, klen))
return mkfailure<bool>("Key already exists");
return true;
}
};
struct postFinish {
const string ks;
const string vs;
postFinish(const string& ks, const string& vs) : ks(ks), vs(vs) {
}
const failable<bool> operator()(struct cdb_make& cdbm) const {
if (cdb_make_add(&cdbm, c_str(ks), length(ks), c_str(vs), length(vs)) == -1)
return mkfailure<bool>("Could not add entry");
return true;
}
};
const failable<bool> post(const value& key, const value& val, TinyCDB& cdb) {
debug(key, "tinycdb::post::key");
debug(val, "tinycdb::post::value");
@ -315,18 +331,10 @@ const failable<bool> post(const value& key, const value& val, TinyCDB& cdb) {
const string vs(scheme::writeValue(val));
// Process each entry and detect existing key
auto update = [=](buffer& buf, const unsigned int klen, unused const unsigned int vlen)->const failable<bool> {
if (ks == string((char*)buf, klen))
return mkfailure<bool>("Key already exists");
return true;
};
const lambda<failable<bool>(buffer& buf, const unsigned int klen, const unsigned int vlen)> update = postUpdate(ks);
// Add the new entry to the db
auto finish = [=](struct cdb_make& cdbm)->const failable<bool> {
if (cdb_make_add(&cdbm, c_str(ks), length(ks), c_str(vs), length(vs)) == -1)
return mkfailure<bool>("Could not add entry");
return true;
};
const lambda<failable<bool>(struct cdb_make& cdbm)> finish = postFinish(ks, vs);
// Rewrite the db
const failable<bool> r = rewrite(update, finish, cdb);
@ -337,6 +345,29 @@ const failable<bool> post(const value& key, const value& val, TinyCDB& cdb) {
/**
* Update an item in the database. If the item doesn't exist it is added.
*/
struct putUpdate {
const string ks;
putUpdate(const string& ks) : ks(ks) {
}
const failable<bool> operator()(buffer& buf, const unsigned int klen, unused const unsigned int vlen) const {
if (ks == string((char*)buf, klen))
return false;
return true;
}
};
struct putFinish {
const string ks;
const string vs;
putFinish(const string& ks, const string& vs) : ks(ks), vs(vs) {
}
const failable<bool> operator()(struct cdb_make& cdbm) const {
if (cdb_make_add(&cdbm, c_str(ks), length(ks), c_str(vs), length(vs)) == -1)
return mkfailure<bool>("Could not add entry");
return true;
}
};
const failable<bool> put(const value& key, const value& val, TinyCDB& cdb) {
debug(key, "tinycdb::put::key");
debug(val, "tinycdb::put::value");
@ -346,18 +377,10 @@ const failable<bool> put(const value& key, const value& val, TinyCDB& cdb) {
const string vs(scheme::writeValue(val));
// Process each entry and skip existing key
auto update = [&](buffer& buf, const unsigned int klen, unused const unsigned int vlen)->const failable<bool> {
if (ks == string((char*)buf, klen))
return false;
return true;
};
const lambda<failable<bool>(buffer& buf, const unsigned int klen, const unsigned int vlen)> update = putUpdate(ks);
// Add the new entry to the db
auto finish = [&](struct cdb_make& cdbm)->const failable<bool> {
if (cdb_make_add(&cdbm, c_str(ks), length(ks), c_str(vs), length(vs)) == -1)
return mkfailure<bool>("Could not add entry");
return true;
};
const lambda<failable<bool>(struct cdb_make& cdbm)> finish = putFinish(ks, vs);
// Rewrite the db
const failable<bool> r = rewrite(update, finish, cdb);
@ -394,6 +417,25 @@ const failable<value> get(const value& key, TinyCDB& cdb) {
/**
* Delete an item from the database
*/
struct delUpdate {
const string ks;
delUpdate(const string& ks) : ks(ks) {
}
const failable<bool> operator()(buffer& buf, const unsigned int klen, unused const unsigned int vlen) const {
if (ks == string((char*)buf, klen))
return false;
return true;
}
};
struct delFinish {
delFinish() {
}
const failable<bool> operator()(unused struct cdb_make& cdbm) const {
return true;
}
};
const failable<bool> del(const value& key, TinyCDB& cdb) {
debug(key, "tinycdb::delete::key");
debug(dbname(cdb), "tinycdb::delete::dbname");
@ -401,18 +443,10 @@ const failable<bool> del(const value& key, TinyCDB& cdb) {
const string ks(scheme::writeValue(key));
// Process each entry and skip existing key
auto update = [=](buffer& buf, const unsigned int klen, unused const unsigned int vlen)->const failable<bool> {
if (ks == string((char*)buf, klen))
return false;
return true;
};
const lambda<failable<bool>(buffer& buf, const unsigned int klen, const unsigned int vlen)> update = delUpdate(ks);
// Nothing to do to finish
auto finish = [=](unused struct cdb_make& cdbm)->const failable<bool> {
// hack: reference a variable from outer scope to workaround GCC internal error
const string xs(ks);
return true;
};
const lambda<failable<bool>(struct cdb_make& cdbm)> finish = delFinish();
// Rewrite the db
const failable<bool> r = rewrite(update, finish, cdb);

View file

@ -27,12 +27,17 @@ qpidc.prefix: $(top_builddir)/config.status
echo ${QPIDC_PREFIX} >qpidc.prefix
comp_LTLIBRARIES = libqueue-sender.la libqueue-listener.la
noinst_DATA = libqueue-sender.so libqueue-listener.so
libqueue_sender_la_SOURCES = queue-sender.cpp
libqueue_sender_la_LDFLAGS = -L${QPIDC_LIB} -R${QPIDC_LIB} -lqpidclient -lqpidcommon
libqueue-sender.so:
ln -s .libs/libqueue-sender.so
libqueue_listener_la_SOURCES = queue-listener.cpp
libqueue_listener_la_LDFLAGS = -L${QPIDC_LIB} -R${QPIDC_LIB} -lqpidclient -lqpidcommon
libqueue-listener.so:
ln -s .libs/libqueue-listener.so
qpid_test_SOURCES = qpid-test.cpp
qpid_test_LDFLAGS = -L${QPIDC_LIB} -R${QPIDC_LIB} -lqpidclient -lqpidcommon

View file

@ -23,7 +23,7 @@
name="queue">
<component name="print-sender">
<implementation.cpp path=".libs" library="libqueue-sender"/>
<implementation.cpp path="." library="libqueue-sender"/>
<property name="key">print</property>
<service name="print-sender">
<t:binding.http uri="print-sender"/>
@ -31,7 +31,7 @@
</component>
<component name="print-listener">
<implementation.cpp path=".libs" library="libqueue-listener"/>
<implementation.cpp path="." library="libqueue-listener"/>
<property name="key">print</property>
<property name="queue">printq</property>
<reference name="relay" target="print"/>
@ -46,7 +46,7 @@
</component>
<component name="report-sender">
<implementation.cpp path=".libs" library="libqueue-sender"/>
<implementation.cpp path="." library="libqueue-sender"/>
<property name="key">report</property>
<service name="report-sender">
<t:binding.http uri="report-sender"/>

View file

@ -19,7 +19,7 @@ if WANT_SQLDB
INCLUDES = -I${PGSQL_INCLUDE}
comp_SCRIPTS = pgsql-start pgsql-stop
comp_SCRIPTS = pgsql-start pgsql-stop pgsql
compdir=$(prefix)/components/sqldb
comp_DATA = pgsql.prefix
@ -27,9 +27,12 @@ pgsql.prefix: $(top_builddir)/config.status
echo ${PGSQL_PREFIX} >pgsql.prefix
comp_LTLIBRARIES = libsqldb.la
noinst_DATA = libsqldb.so
libsqldb_la_SOURCES = sqldb.cpp
libsqldb_la_LDFLAGS = -L${PGSQL_LIB} -R${PGSQL_LIB} -lpq
libsqldb.so:
ln -s .libs/libsqldb.so
pgsql_test_SOURCES = pgsql-test.cpp
pgsql_test_LDFLAGS = -L${PGSQL_LIB} -R${PGSQL_LIB} -lpq

View file

@ -23,7 +23,7 @@
name="sqldb">
<component name="sqldb">
<implementation.cpp path=".libs" library="libsqldb"/>
<implementation.cpp path="." library="libsqldb"/>
<property name="conninfo">dbname=db</property>
<property name="table">test</property>
<service name="sqldb">

View file

@ -19,24 +19,36 @@ if WANT_WEBSERVICE
INCLUDES = -I${AXIS2C_INCLUDE}
comp_DATA = axis2c.prefix
comp_SCRIPTS = axis2-conf
compdir=$(prefix)/components/webservice
comp_DATA = axis2c.prefix axis2.xml services.xml module.xml
axis2c.prefix: $(top_builddir)/config.status
echo ${AXIS2C_PREFIX} >axis2c.prefix
comp_LTLIBRARIES = libwebservice-client.la libwebservice-listener.la libaxis2-dispatcher.la libaxis2-service.la
noinst_DATA = libwebservice-client.so libwebservice-listener.so libaxis2-dispatcher.so libaxis2-service.so
libwebservice_client_la_SOURCES = webservice-client.cpp
libwebservice_client_la_LDFLAGS = -lxml2 -L${AXIS2C_LIB} -R${AXIS2C_LIB} -laxis2_engine -laxis2_axiom -laxutil
libwebservice-client.so:
ln -s .libs/libwebservice-client.so
libwebservice_listener_la_SOURCES = webservice-listener.cpp
libwebservice_listener_la_LDFLAGS = -lxml2 -L${AXIS2C_LIB} -R${AXIS2C_LIB} -laxis2_engine -laxis2_axiom -laxutil
libwebservice-listener.so:
ln -s .libs/libwebservice-listener.so
libaxis2_dispatcher_la_SOURCES = axis2-dispatcher.cpp
libaxis2_dispatcher_la_LDFLAGS = -lxml2 -L${AXIS2C_LIB} -R${AXIS2C_LIB} -laxis2_engine -laxis2_axiom -laxutil
libaxis2-dispatcher.so:
ln -s .libs/libaxis2-dispatcher.so
libaxis2_service_la_SOURCES = axis2-service.cpp
libaxis2_service_la_LDFLAGS = -lxml2 -L${AXIS2C_LIB} -R${AXIS2C_LIB} -laxis2_engine -laxis2_axiom -laxutil
libaxis2-service.so:
ln -s .libs/libaxis2-service.so
axiom_test_SOURCES = axiom-test.cpp
axiom_test_LDFLAGS = -lxml2 -L${AXIS2C_LIB} -R${AXIS2C_LIB} -laxis2_engine -laxis2_axiom -laxutil

View file

@ -33,10 +33,10 @@ mkdir -p $root/axis2c/services
# Install Tuscany Axis2 module and service
mkdir -p $root/axis2c/modules/tuscany
ln -f -s $here/.libs/libaxis2-dispatcher.so $root/axis2c/modules/tuscany/libaxis2-dispatcher.so
ln -f -s $here/libaxis2-dispatcher.so $root/axis2c/modules/tuscany/libaxis2-dispatcher.so
ln -f -s $here/module.xml $root/axis2c/modules/tuscany/module.xml
mkdir -p $root/axis2c/services/tuscany
ln -f -s $here/.libs/libaxis2-service.so $root/axis2c/services/tuscany/libaxis2-service.so
ln -f -s $here/libaxis2-service.so $root/axis2c/services/tuscany/libaxis2-service.so
ln -f -s $here/services.xml $root/axis2c/services/tuscany/services.xml
cp $here/axis2.xml $root/axis2c/axis2.xml

View file

@ -23,7 +23,7 @@
name="webservice-client">
<component name="webservice-client">
<implementation.cpp path=".libs" library="libwebservice-client"/>
<implementation.cpp path="." library="libwebservice-client"/>
<property name="uri">http://localhost:9090/axis2/services/echo</property>
<service name="webservice-client">
<t:binding.jsonrpc uri="echo-client"/>
@ -31,7 +31,7 @@
</component>
<component name="webservice-listener">
<implementation.cpp path=".libs" library="libwebservice-listener"/>
<implementation.cpp path="." library="libwebservice-listener"/>
<service name="webservice-listener">
<t:binding.http uri="echo-listener"/>
</service>

View file

@ -25,19 +25,20 @@ AM_CONFIG_HEADER(config.h)
AM_INIT_AUTOMAKE([tar-ustar])
AC_PREFIX_DEFAULT(/usr/local/tuscany/sca)
# Require GCC 4.5
# Check for required programs.
AC_MSG_NOTICE([checking for programs])
AC_MSG_CHECKING([for gcc-4.5])
if test -x "/usr/bin/gcc-4.5"; then
if test -x "/usr/bin/g++-4.5"; then
# Use GCC 4.5 if available
CXX=/usr/bin/g++-4.5
CPP=/usr/bin/cpp-4.5
CC=/usr/bin/gcc-4.5
AC_MSG_RESULT(/usr/bin/gcc-4.5)
AM_CONDITIONAL([WANT_GCC45], true)
AC_DEFINE([WANT_GCC45], 1, [compile with gcc-4.5])
else
AC_MSG_ERROR([could not find gcc-4.5])
AM_CONDITIONAL([WANT_GCC45], false)
fi
# Check for required programs.
AC_MSG_NOTICE([checking for programs])
AC_PROG_CXX
AC_PROG_AWK
AC_PROG_CC

View file

@ -22,9 +22,12 @@ include_HEADERS = *.hpp
string_test_SOURCES = string-test.cpp
test_LTLIBRARIES = libdynlib-test.la
testdir = $(prefix)/test
noinst_test_LTLIBRARIES = libdynlib-test.la
noinst_testdir = `pwd`/tmp
libdynlib_test_la_SOURCES = dynlib-test.cpp
noinst_DATA = libdynlib-test.so
libdynlib-test.so:
ln -s .libs/libdynlib-test.so
kernel_test_SOURCES = kernel-test.cpp

View file

@ -540,7 +540,7 @@ bool testStateMonad() {
}
bool testDynLib() {
const lib dl(string(".libs/libdynlib-test") + dynlibExt);
const lib dl(string("libdynlib-test") + dynlibExt);
const failable<lambda<int(const int)> > sq(dynlambda<int(const int)>("csquare", dl));
assert(hasContent(sq));
lambda<int(const int)> l(content(sq));

View file

@ -27,9 +27,12 @@
#include "function.hpp"
#include "sstream.hpp"
#include "fstream.hpp"
#include "perf.hpp"
namespace tuscany {
#ifdef WANT_GCC45
const lambda<const int(const int)> inc(const int i) {
return [=](const int x)->const int {
return x + i;
@ -64,12 +67,34 @@ bool testLambda() {
return true;
}
const double fib_aux(const double n, const double a, const double b) {
return n == 0.0? a : fib_aux(n - 1.0, b, a + b);
}
const bool fibMapPerf() {
list<double> s = seq(0.0, 4999.0);
list<double> r = map<double, double>([](const double n)->const double { return fib_aux(n, 0.0, 1.0); }, s);
assert(5000 == length(r));
return true;
}
bool testCppPerf() {
cout << "Fibonacci map test " << (time([]()->const bool { return fibMapPerf(); }, 1, 1) / 5000) << " ms" << endl;
return true;
}
#endif
}
int main() {
tuscany::cout << "Testing..." << tuscany::endl;
#ifdef WANT_GCC45
tuscany::testLambda();
tuscany::testCppPerf();
#else
tuscany::cout << "Skipped GCC 4.5 tests" << tuscany::endl;
#endif
tuscany::cout << "OK" << tuscany::endl;

View file

@ -17,14 +17,15 @@
INCLUDES = -I${HTTPD_INCLUDE}
mod_SCRIPTS = httpd-conf httpd-start httpd-stop httpd-restart httpd-ca-conf httpd-cert-conf httpd-ssl-conf
moddir=$(prefix)/modules/http
mod_SCRIPTS = httpd-conf httpd-start httpd-stop httpd-restart
curl_test_SOURCES = curl-test.cpp
curl_test_LDFLAGS = -lxml2 -lcurl -lmozjs
prefix_DATA = httpd.prefix curl.prefix
prefixdir=$(prefix)/modules/http
mod_DATA = httpd.prefix curl.prefix
nobase_mod_DATA = conf/*
httpd.prefix: $(top_builddir)/config.status
echo ${HTTPD_PREFIX} >httpd.prefix
curl.prefix: $(top_builddir)/config.status

View file

@ -35,7 +35,7 @@ libmod_tuscany_java_la_SOURCES = mod-java.cpp
libmod_tuscany_java_la_LDFLAGS = -lxml2 -lcurl -lmozjs ${JAVA_LDFLAGS}
noinst_DATA = libmod_tuscany_java.so
libmod_tuscany_java.so:
ln -s .libs/libmod_tuscany_java.so libmod_tuscany_java.so
ln -s .libs/libmod_tuscany_java.so
jni_test_SOURCES = jni-test.cpp
jni_test_LDFLAGS = ${JAVA_LDFLAGS}
@ -53,7 +53,7 @@ jar_DATA = ${jarfile}
${jarfile}: ${noinst_JAVA}
${JAR} cf $@ org/apache/tuscany/*.class
CLEANFILES = ${jarfile} org/apache/tuscany/*.class test/*.class
CLEANFILES = classnoinst.stamp ${jarfile} org/apache/tuscany/*.class test/*.class
client_test_SOURCES = client-test.cpp
client_test_LDFLAGS = -lxml2 -lcurl -lmozjs

View file

@ -37,7 +37,7 @@ libmod_tuscany_python_la_SOURCES = mod-python.cpp
libmod_tuscany_python_la_LDFLAGS = -lxml2 -lcurl -lmozjs -L${PYTHON_LIB} -R${PYTHON_LIB} -lpython2.6
noinst_DATA = libmod_tuscany_python.so
libmod_tuscany_python.so:
ln -s .libs/libmod_tuscany_python.so libmod_tuscany_python.so
ln -s .libs/libmod_tuscany_python.so
python_test_SOURCES = python-test.cpp
python_test_LDFLAGS = -L${PYTHON_LIB} -R${PYTHON_LIB} -lpython2.6

View file

@ -27,16 +27,20 @@ noinst_DATA = libmod_tuscany_eval.so libmod_tuscany_wiring.so
libmod_tuscany_eval_la_SOURCES = mod-eval.cpp
libmod_tuscany_eval_la_LDFLAGS = -lxml2 -lcurl -lmozjs
libmod_tuscany_eval.so:
ln -s .libs/libmod_tuscany_eval.so libmod_tuscany_eval.so
ln -s .libs/libmod_tuscany_eval.so
libmod_tuscany_wiring_la_SOURCES = mod-wiring.cpp
libmod_tuscany_wiring_la_LDFLAGS = -lxml2 -lcurl -lmozjs
libmod_tuscany_wiring.so:
ln -s .libs/libmod_tuscany_wiring.so libmod_tuscany_wiring.so
ln -s .libs/libmod_tuscany_wiring.so
noinst_testdir = $(prefix)/test
noinst_test_LTLIBRARIES = libimpl-test.la
noinst_testdir = `pwd`/tmp
noinst_DATA += libimpl-test.so
libimpl_test_la_SOURCES = impl-test.cpp
libimpl-test.so:
ln -s .libs/libimpl-test.so
client_test_SOURCES = client-test.cpp
client_test_LDFLAGS = -lxml2 -lcurl -lmozjs

View file

@ -30,7 +30,7 @@
</component>
<component name="cpp-test">
<implementation.cpp path=".libs" library="libimpl-test"/>
<implementation.cpp path="." library="libimpl-test"/>
<service name="cpp">
<t:binding.http uri="cpp"/>
</service>

View file

@ -19,9 +19,11 @@ if WANT_PYTHON
INCLUDES = -I${PYTHON_INCLUDE}
mod_SCRIPTS = composite.py scdl.py util.py elemutil.py xmlutil.py atomutil.py jsonutil.py wsgi-start wsgi-stop
mod_SCRIPTS = composite.py wsgi-start wsgi-stop gae-start gae-stop
moddir = $(prefix)/modules/wsgi
mod_DATA = app.yaml scdl.py util.py elemutil.py xmlutil.py atomutil.py jsonutil.py
noinst_DATA = target.stamp
target.stamp: app.yaml *.py *.composite htdocs/*

View file

@ -17,3 +17,6 @@
SUBDIRS = store-scheme store-cpp store-python store-java store-gae store-sql store-nosql
sample_DATA = README
sampledir=$(prefix)/samples

View file

@ -15,9 +15,14 @@
# specific language governing permissions and limitations
# under the License.
sample_LTLIBRARIES = libcurrency-converter.la libfruits-catalog.la libshopping-cart.la
sample_SCRIPTS = start stop ssl-start
sampledir = $(prefix)/samples/store-cpp
nobase_sample_DATA = currency-converter.cpp fruits-catalog.cpp shopping-cart.cpp store.composite htdocs/*
sample_LTLIBRARIES = libcurrency-converter.la libfruits-catalog.la libshopping-cart.la
libcurrency_converter_la_SOURCES = currency-converter.cpp
libfruits_catalog_la_SOURCES = fruits-catalog.cpp

View file

@ -23,7 +23,7 @@
name="store">
<component name="Catalog">
<implementation.cpp path=".libs" library="libfruits-catalog"/>
<implementation.cpp path="." library="libfruits-catalog"/>
<property name="currencyCode">USD</property>
<service name="Catalog">
<t:binding.jsonrpc uri="catalog"/>
@ -32,7 +32,7 @@
</component>
<component name="ShoppingCart">
<implementation.cpp path=".libs" library="libshopping-cart"/>
<implementation.cpp path="." library="libshopping-cart"/>
<service name="ShoppingCart">
<t:binding.atom uri="shoppingCart"/>
</service>
@ -43,14 +43,14 @@
</component>
<component name="CurrencyConverter">
<implementation.cpp path=".libs" library="libcurrency-converter"/>
<implementation.cpp path="." library="libcurrency-converter"/>
<service name="CurrencyConverter">
<t:binding.jsonrpc uri="currencyConverter"/>
</service>
</component>
<component name="Cache">
<implementation.cpp path="../../components/cache/.libs" library="libmemcache"/>
<implementation.cpp path="../../components/cache" library="libmemcache"/>
<service name="Cache">
<t:binding.atom uri="cache"/>
</service>

View file

@ -18,8 +18,10 @@
if WANT_PYTHON
if WANT_GAE
noinst_DATA = target.stamp
sample_SCRIPTS = start stop
sampledir = $(prefix)/samples/store-gae
BUILT_SOURCES = target.stamp
target.stamp: app.yaml *.py *.composite $(top_builddir)/modules/wsgi/*.py htdocs/*
mkdir -p target
cp app.yaml *.py *.composite `ls $(top_builddir)/modules/wsgi/*.py | grep -v "\-test"` target
@ -29,6 +31,8 @@ target.stamp: app.yaml *.py *.composite $(top_builddir)/modules/wsgi/*.py htdocs
clean-local:
rm -rf target.stamp target
nobase_sample_DATA = target/app.yaml target/*.py target/*.composite target/htdocs/*
TESTS = server-test
endif

View file

@ -19,11 +19,14 @@ JAVAROOT = ${top_builddir}/samples/store-java
if WANT_JAVA
sample_SCRIPTS = start stop ssl-start
sampledir=$(prefix)/samples/store-java
AM_JAVACFLAGS = -cp ${top_builddir}/modules/java/libmod-tuscany-java-${PACKAGE_VERSION}.jar:${JAVAROOT}
noinst_JAVA = store/*.java
CLEANFILES = classnoinst.stamp store/*.class
CLEANFILES = store/*.class
nobase_sample_DATA = store.composite htdocs/* store/*
TESTS = server-test

View file

@ -50,7 +50,7 @@
</component>
<component name="Cache">
<implementation.cpp path="../../components/cache/.libs" library="libmemcache"/>
<implementation.cpp path="../../components/cache" library="libmemcache"/>
<service name="Cache">
<t:binding.atom uri="cache"/>
</service>

View file

@ -15,5 +15,13 @@
# specific language governing permissions and limitations
# under the License.
if WANT_NOSQLDB
sample_SCRIPTS = start stop ssl-start
sampledir = $(prefix)/samples/store-nosql
nobase_sample_DATA = currency-converter.scm fruits-catalog.scm shopping-cart.scm store.scm store.composite htdocs/*
TESTS = server-test
endif

View file

@ -60,7 +60,7 @@
</component>
<component name="NoSqldb">
<implementation.cpp path="../../components/nosqldb/.libs" library="libnosqldb"/>
<implementation.cpp path="../../components/nosqldb" library="libnosqldb"/>
<property name="dbname">tmp/store.cdb</property>
<service name="NoSqldb">
<t:binding.atom uri="nosqldb"/>

View file

@ -17,6 +17,11 @@
if WANT_PYTHON
sample_SCRIPTS = start stop ssl-start
sampledir = $(prefix)/samples/store-python
nobase_sample_DATA = currency-converter.py fruits-catalog.py shopping-cart.py store.py store.composite htdocs/*
TESTS = server-test
endif

View file

@ -60,7 +60,7 @@
</component>
<component name="Cache">
<implementation.cpp path="../../components/cache/.libs" library="libmemcache"/>
<implementation.cpp path="../../components/cache" library="libmemcache"/>
<service name="Cache">
<t:binding.atom uri="cache"/>
</service>

View file

@ -15,8 +15,12 @@
# specific language governing permissions and limitations
# under the License.
noinst_PROGRAMS = script-test
sample_SCRIPTS = start stop ssl-start
sampledir = $(prefix)/samples/store-scheme
nobase_sample_DATA = currency-converter.scm fruits-catalog.scm shopping-cart.scm store.scm store.composite htdocs/*
noinst_PROGRAMS = script-test
script_test_SOURCES = script-test.cpp
script_test_LDFLAGS = -lxml2 -lmozjs

View file

@ -60,7 +60,7 @@
</component>
<component name="Cache">
<implementation.cpp path="../../components/cache/.libs" library="libmemcache"/>
<implementation.cpp path="../../components/cache" library="libmemcache"/>
<service name="Cache">
<t:binding.atom uri="cache"/>
</service>

View file

@ -15,5 +15,13 @@
# specific language governing permissions and limitations
# under the License.
if WANT_SQLDB
sample_SCRIPTS = start stop ssl-start
sampledir = $(prefix)/samples/store-sql
nobase_sample_DATA = currency-converter.scm fruits-catalog.scm shopping-cart.scm store.scm store.composite htdocs/*
TESTS = server-test
endif

View file

@ -60,7 +60,7 @@
</component>
<component name="Sqldb">
<implementation.cpp path="../../components/sqldb/.libs" library="libsqldb"/>
<implementation.cpp path="../../components/sqldb" library="libsqldb"/>
<property name="conninfo">dbname=db</property>
<property name="table">store</property>
<service name="Sqldb">

View file

@ -35,12 +35,13 @@ sudo apt-get -y install wget git-core autoconf automake libtool g++
if [ "$?" != "0" ]; then
exit $?
fi
wget http://svn.apache.org/repos/asf/tuscany/sca-cpp/trunk/ubuntu/ubuntu-gcc-4.5
chmod +x ./ubuntu-gcc-4.5
./ubuntu-gcc-4.5
if [ "$?" != "0" ]; then
exit $?
fi
# Uncomment to install GCC 4.5
#wget http://svn.apache.org/repos/asf/tuscany/sca-cpp/trunk/ubuntu/ubuntu-gcc-4.5
#chmod +x ./ubuntu-gcc-4.5
#./ubuntu-gcc-4.5
#if [ "$?" != "0" ]; then
# exit $?
#fi
sudo apt-get -y install libssl-dev
if [ "$?" != "0" ]; then
exit $?

View file

@ -15,7 +15,8 @@
# specific language governing permissions and limitations
# under the License.
# Install GCC 4.5
# Install GCC 4.5, useful if you want to use it and it's not already included
# in your Linux distribution
# Display commands as they are executed
set -x

View file

@ -30,13 +30,13 @@ if [ "$?" != "0" ]; then
exit $?
fi
# Install GCC 4.5
wget http://svn.apache.org/repos/asf/tuscany/sca-cpp/trunk/ubuntu/ubuntu-gcc-4.5
chmod +x ./ubuntu-gcc-4.5
./ubuntu-gcc-4.5
if [ "$?" != "0" ]; then
exit $?
fi
# Uncomment to install GCC 4.5
#wget http://svn.apache.org/repos/asf/tuscany/sca-cpp/trunk/ubuntu/ubuntu-gcc-4.5
#chmod +x ./ubuntu-gcc-4.5
#./ubuntu-gcc-4.5
#if [ "$?" != "0" ]; then
# exit $?
#fi
# Build Apache HTTP server
sudo apt-get -y install libssl-dev
@ -227,7 +227,7 @@ wget http://www.apache.org/dist/incubator/thrift/0.2.0-incubating/thrift-0.2.0-i
tar xzf thrift-0.2.0-incubating.tar.gz
cd thrift-0.2.0
./bootstrap.sh
./configure --prefix=$build/thrift-0.2.0-bin --with-java=no --with-erlang=no --with-perl=no --with-ruby=no --with-csharp=no --disable-static
./configure --prefix=$build/thrift-0.2.0-bin PY_PREFIX=$build/thrift-0.2.0-bin --with-java=no --with-erlang=no --with-perl=no --with-ruby=no --with-csharp=no --disable-static
make
make install
if [ "$?" != "0" ]; then