<?xml version="1.0"?>

<!-- ===========================================================================

 xmlBlaster build file to compile xmlBlaster-server and its Java/C/C++ clients.

Authors:
 James Birchfield "jmbirchfield@proteustechnologies.com"
 Marcel Ruff "xmlBlaster@marcelruff.info"
 Martin Johnson  mjhn@bigpond.net.au"  (Windows C++ TAO support)
 Guy Donadio  (SunOS C++ ORBIX support)

Installing the build tools
==========================

The xmlBlaster build system is based on Jakarta Ant, which is a Java building
tool originally developed for the Jakarta Tomcat project but now used in many
other Apache projects and extended by many developers.

Ant is a little but very handy tool that uses a build file written in XML
(this file) as building instructions. For more information refer to
"http://jakarta.apache.org/ant/".

To make things easier for you, the xmlBlaster distribution contains a
precompiled version of Ant and the build scripts take care of all the
classpath issues.

The only thing that you have to make sure, is the "JAVA_HOME" environment
property should be set to match the JVM you want to use. That's it.


Building instructions
=====================

Ok, let's build the baby. First, make sure your current working directory is
where this very file is located. Then type

  ./build all (unix)    (-debug -verbose -buildfile <file>)
  build.bat all (win32)

if everything is right and all the required packages are visible, this action
will generate a file called "xmlBlaster.jar" in the "./lib" directory.
Note, that if you do further development, compilation time is reduced
since Ant is able to detect which files have changed an to recompile
them at need.

If you use 'xmlBlaster/.bashrc', login again to include xmlBlaster.jar into
your CLASSPATH.
Else add it manually.

TODO
  Probably we should split the build file and integrate with a master
  file, see:
   ftp://www6.software.ibm.com/software/developer/library/j-tools4xp.pdf

============================================================================ -->

<project name="xmlBlaster" default="usage" basedir=".">

   <!-- http://ant-contrib.sourceforge.net/tasks/tasks/index.html -->
   <taskdef resource="net/sf/antcontrib/antcontrib.properties">
      <classpath>
         <pathelement location="lib/ant/ant-contrib.jar" />
      </classpath>
   </taskdef>

   <!-- C++/C user guide: http://ant-contrib.sourceforge.net/cc.html -->
   <taskdef resource="cpptasks.tasks"> <!-- cc defineset compiler linker -->
      <classpath>
         <pathelement location="lib/ant/cpptasks.jar" /> <!-- not supported, use: ant -lib lib/ant/cpptasks.jar ... --> 
      </classpath>
   </taskdef>
   <typedef resource="cpptasks.types"/>

   <!-- Access environment variables, for example "env.XMLBLASTER_HOME" -->
   <property environment="env"/>

   <!-- taskdef name="cc" classname="net.sf.antcontrib.cpptasks.CCTask" />
   <typedef name="defineset" classname="net.sf.antcontrib.cpptasks.types.DefineSet" />
   <typedef name="libset" classname="net.sf.antcontrib.cpptasks.types.LibrarySet" />
   <typedef name="compiler" classname="net.sf.antcontrib.cpptasks.CompilerDef" />
   <typedef name="linker" classname="net.sf.antcontrib.cpptasks.LinkerDef" / -->

   <taskdef resource="net/sf/antcontrib/antcontrib.properties" />  <!-- if foreach osfamily switch if -->

   <!-- Allow any user specific values to override the defaults -->
   <property file="${user.home}/build.properties" />

   <!-- Set default values for the build -->
   <property file="build.properties" />

   <property name="name" value="xmlBlaster"/>
   <property name="version" value="2.0.0"/>
   <property name="year" value="1999-2010"/>

   <!-- property name="build.compiler" value="classic"/ -->
   <property name="debug" value="on"/>
   <property name="optimize" value="off" />
   <property name="deprecation" value="off" />

   <property name="xmlblaster_absolute_home" value="${user.dir}"/>
   <property name="xmlBlaster.home" value="${basedir}"/>
   <property name="src.java.dir" value="./src/java"/>
   <property name="config.dir" value="./config"/>
   <property name="dtd.dir" value="./src/dtd"/>
   <property name="doc.dir" value="./doc"/>
   <property name="classes.dir" value="./classes"/>
   <property name="javadoc.dir" value="./doc/api"/>
   <property name="javadoc.client.dir" value="./doc/client-api"/>
   <property name="javadoc.contrib.dir" value="./doc/contrib-api"/>
   <property name="testsuite.dir" value="./testsuite"/>
   <property name="testsuite.java.dir" value="./testsuite/src/java"/>
   <property name="demo.dir" value="./demo"/>
   <property name="demo.java.dir" value="./demo/javaclients"/>
   <property name="bin.dir" value="./bin"/>
   <property name="lib.dir" value="./lib"/>
   <property name="lib.dir.absolute" location="${xmlblaster_absolute_home}/lib"/>
   <property name="req.dir" value="./doc/requirements"/>
   <property name="docbookReq.dir" value="./doc/docbookReq"/>
   <property name="packages" value="org.xmlBlaster.*"/>

   <!-- The document root of the servlet engine (deploy dir for war files): -->
   <!-- "${user.home}/jakarta-tomcat" -->
   <condition property="TOMCAT_HOME" value="${env.CATALINA_HOME}">
      <isset property="env.CATALINA_HOME"/>
   </condition>
   <condition property="TOMCAT_HOME" value="${env.TOMCAT_HOME}">
      <isset property="env.TOMCAT_HOME"/>
   </condition>
   <property name="WWW_ROOT"             value="${TOMCAT_HOME}/webapps"/>
   <property name="demo.http.dir"        value="${demo.dir}/http"/>
   <property name="WEB-INF"              value="${demo.http.dir}/WEB-INF"/>

   <property name="idl" value="org.xmlBlaster.protocol.corba"/>
   <property name="idl.class" value="org.jacorb.idl.parser"/>
   <property name="idl.dir" value="./src/java/org/xmlBlaster/protocol/corba"/>
   <property name="idl.file" value="${xmlBlaster.home}/${idl.dir}/xmlBlaster.idl" />

   <property name="build.dir" value="./build.tmp"/>
   <property name="build.src" value="${build.dir}/src"/>
   <property name="build.dest" value="${build.dir}/classes"/>
   <property name="build.war" value="${build.dir}/war"/>

   <property name="dist.dir" value="./dist/xmlBlaster"/>
   <property name="dist-classes.dir" value="./dist-classes"/>
   <property name="dist-client.dir" value="./dist-client"/>
   <property name="dist-clientMini.dir" value="./dist-clientMini"/>

   <property name="test.class" value="org.xmlBlaster.test.AllTests"/>
   <property name="report.dir" value="./doc/test/report"/> <!-- junit HTML report -->
   <property name="report.absolutdir" value="${xmlblaster_absolute_home}/doc/test/report/html"/>
   <!-- property name="report.htmlfile" value="${report.absolutdir}/junit-noframes.html"/ -->
   <property name="report.htmlfile" value="${report.absolutdir}/index.html"/>

   <property name="cp.j2ee" value="lib/connector.jar:lib/jaas.jar:lib/jta-spec1_0_1.jar:lib/javax.jms.jar:lib/ejb2.0.jar"/>
   <property name="cp.xml" value="lib/omquery.jar:lib/xtdash.jar"/>
   <property name="cp.orb" value="lib/miniJacorb.jar:lib/jacorb/idl.jar:lib/jacorb/jacorb.jar:lib/jacorb/logkit-1.2.jar:lib/jacorb/avalon-framework-4.1.5.jar"/>
   <property name="cp.core" value="lib/remotecons.jar:lib/joda-time.jar:lib/servlet.jar:lib/junit.jar:lib/xmlunit.jar:${JAVA_HOME}/lib/tools.jar:lib/gnu-regexp.jar:lib/commons-codec.jar:lib/commons-lang-2.4.jar:lib/quartz/commons-dbcp-1.2.2.jar:lib/quartz/commons-pool-1.3.jar:lib/quartz/quartz-all-1.6.5.jar:lib/commons-collections-3.2.jar"/>

   <property name="cp.xmlrpc3" value="lib/xmlrpc3/commons-logging-1.1.jar:lib/xmlrpc3/ws-commons-util-1.0.2.jar:lib/xmlrpc3/xmlrpc-client-3.1.1.jar:lib/xmlrpc3/xmlrpc-common-3.1.1.jar:lib/xmlrpc3/xmlrpc-server-3.1.1.jar"/>
   <property name="cp.other" value="lib/mail.jar:lib/activation.jar:lib/batik/batik.jar:lib/batik/js.jar:lib/jax.jar:lib/jhotdraw.jar:lib/naming-common.jar:lib/naming-java.jar:lib/commons-logging.jar:lib/log4j.jar:lib/jzlib.jar"/>
   <property name="cp.db" value="lib/postgresql.jar:lib/hsqldb.jar:lib/mysql-connector-java-3.0.8-stable-bin.jar/"/>
   <property name="cp.xpath" value="lib/jaxen.jar"/>
   <property name="cp.test" value="${testsuite.java.dir}:lib/testsuite.jar"/>
   <property name="cp.wrapper" value="lib/wrapper.jar"/>
   <property name="cp.jmx" value="lib/jmxri.jar:lib/jmxtools.jar:lib/jmxremote.jar:lib/mx4j-tools.jar:lib/mx4j-impl.jar"/>
   <property name="cp.javacup" value="lib/java_cup.jar"/>
   <property name="cp.stomp" value="lib/stompconnect-1.0.jar"/>

   <!--
   <property name="soap.dir" value="./src/java/org/xmlBlaster/protocol/soap"/>
   <property name="soapdeploy.dir" value="./demo/soap"/>
   <property name="soaplib.dir" value="lib/soap"/>
   <property name="cp.soap" value="${soaplib.dir}/jdom.jar:${soaplib.dir}/log4j-core.jar:${soaplib.dir}/log4j.jar:${soaplib.dir}/saw.jar:${soaplib.dir}/soap.jar:${soaplib.dir}/xerces.jar"/>
   <property name="cp" value="${cp.j2ee}:${cp.xml}:${cp.orb}:${cp.core}:${cp.other}:${cp.db}:${cp.xpath}:${cp.test}:${cp.soap}:${cp.wrapper}:${cp.jmx}:${cp.javacup}"/>
   -->
   <property name="cp" value="${cp.j2ee}:${cp.xml}:${cp.orb}:${cp.core}:${cp.other}:${cp.db}:${cp.xpath}:${cp.test}:${cp.wrapper}:${cp.jmx}:${cp.javacup}:${cp.xmlrpc3}:${cp.stomp}"/>
   <property name="CXX" value="cxx"/>  <!-- for ORBIX 2000 (for the newer orbix EA 5.1 it should be empty (set in build.properties) -->

   <property name="svnversion.exe" value="svnversion"/>  <!-- On UNIX: /usr/bin/svnversion -->
   <!--
   <path id="svn.classpath">
         <pathelement location="${svnant.jar}" />
         <pathelement location="${svnClientAdapter.jar}" />
         <pathelement location="${svnjavahl.jar}" />
   </path>
   <taskdef resource="svntask.properties" classpathref="svn.classpath"/>
   -->


   <!-- for the embedded java devices (j2me) : the WTK TOOLKIT -->
   <condition property="J2ME_HOME" value="${env.J2ME_HOME}">
      <isset property="env.J2ME_HOME"/>
   </condition>


   <!-- =================================================================== -->
   <!-- General C++ compiling setup for VisualC++, Borland and GCC          -->
   <!-- Force from outside compiler: build.bat -Duse-msvc=1 ...             -->
   <!-- See  http://ant-contrib.sourceforge.net/cc.html                     -->
   <!-- =================================================================== -->
   <property name="compiler" value="msvc"/> <!-- "gcc" "icc" "VC6" "bcc" "msvc" -->
   <property name="cpp.debug" value="true" />
   <property name="chmod.fail" value="true" />

   <property name="COMPILE_CORBA_PLUGIN" value="0" />   <!-- Add the Corba protocol plugin -->
   <property name="COMPILE_SOCKET_PLUGIN" value="1" />  <!-- Add the C socket library wrapper plugin? -->

   <property name="CPP_LINK" value="shared"/>  <!-- link a shared (DLL) C++ client library xmlBlaster/lib/libxmlBlasterClient.so -->
   <property name="src.cpp.dir" value="./src/c++"/>
   <property name="build.src.cpp.dir" value="${build.src}/c++"/>
   <property name="CORBACPP_VER" value=""/> <!-- 2.3.7 -->
   <property name="CORBACPP_HOME" value="/opt/ACE_wrappers/TAO"/> <!-- /opt/local/mico -->
   <property name="xerces.include.dir" value="/usr/include"/>  <!-- Assumes ./xercesc subdirectory -->
   <property name="xerces.lib.dir" value="/usr/lib"/>
   <property name="xerces.lib.name" value="xerces-c"/>  <!-- On Windows it is xerces-c_2 -->
   <property name="thread.impl" value="OMNITHREAD" /> <!-- Default setting is OMNITHREAD -->
   <property name="corba.product" value="TAO" /> <!-- Setting default CORBA to "TAO" -->
   <property name="ORBIX_LIBS" value="it_art,it_ifc,it_naming,it_poa" /> <!-- The necessary libs for ORBIX C++ clients -->
   <property name="OMNIORB_LIBS" value="omniORB4,omnithread" /> <!-- The necessary libs for omniORB C++ clients -->
   <property name="ORBACUS_LIBS" value="CosNaming,IDL,OB,JTC" /> <!-- The necessary libs for ORBACUS C++ clients -->

   <property name="src.csharp.dir" value="./src/csharp"/>
   <property name="csharp.debug" value="true" />

   <!-- property name="CFLAGS" value="-m32"/> Add your own in build.properties -->
   <!-- property name="LDFLAGS" value="${CFLAGS}"/> Add your own in build.properties -->
   <property name="C_LINK" value="shared"/>  <!-- link a shared/static (DLL) C client library xmlBlaster/lib/libxmlBlasterClientC.so -->
   <property name="src.c.dir" value="./src/c"/>
   <property name="build.src.c.dir" value="${build.src}/c"/>
   <property name="c.debug" value="true" />
   <property name="gcc.enableStackTrace" value="-D_ENABLE_STACK_TRACE_" /> <!-- Use -U... to undefine for OSF -->
   <property name="sqlite.include.dir" location="${src.c.dir}/util/queue"/> <!-- Path to sqlite.h, http://www.sqlite.org -->
   <property name="sqlite.lib.dir" location="${lib.dir}"/>                  <!-- Path to libsqlite.so -->
   <property name="zlib.include.dir" location="${src.c.dir}/util/zlib"/> <!-- Path to zlib.h, http://www.gzip.org/zlib/ -->
   <property name="zlib.lib.dir" location="${lib.dir}"/>                  <!-- Path to libz.so zlib.dll -->
   <property name="zlib.lib.name" value="z"/>                  <!-- On Windows set to 'zlib1' for zlib1.dll, defaults to 'z' for libz.so -->
   <property name="PthreadDraftVersion" value="10"/>  <!-- omnithread posix.cc -->

   <compiler id="base-msvc" name="msvc" if="use-msvc">
      <compilerarg value="${CFLAGS}" if="CFLAGS" />  <!-- Will be quoted "", which does not allow to specify multiple args! -->
      <compilerarg value="${CFLAGS2}" if="CFLAGS2" />
      <compilerarg value="${CFLAGS3}" if="CFLAGS3" />
      <defineset><define name="_WINDOWS" value="1" /></defineset>
      <!-- <compilerarg value="/EHsc" /> -->  <!-- Enable C++ exception handling (former /GX), set automatically by cpptasks -->
      <!-- <compilerarg value="/RTC1" /> -->  <!-- Enable stack chek (former /GZ), set automatically by cpptasks -->
      <compilerarg value="/Gm" if="is-debug"/>
      <compilerarg value="/Zi" if="is-debug"/>
      <!-- compilerarg value="/Zc:wchar_t-"/ -->    <!-- To avoid xerces 2.7: error LNK2019: unresolved external symbol __imp_?transcode@XMLString@xercesc_2_7@@SAPADQB_W@Z -->
      <!-- compilerarg value="/G6"/ -->             <!-- target Pentium Pro -->
      <!-- <compilerarg value="/MDd" />  -->        <!-- multi threading with debug and dll (/MT = multithreaded without DLL) will force MSVCRT[D].DLL to be included -->
      <compilerarg value="/W3"/>                    <!-- display many warnings -->
      <!-- <compilerarg value="/Od" unless="is-debug"/> --> <!-- maximize speed -->
      <!-- compilerarg value="/Ob2" unless="is-debug"/ --> <!-- auto-inlining -->

      <!--
      This flag makes good sense though currently ace complains for some reason
      I think it is to do with the way I have built ace (Martin Johnson)
      <defineset>
         <define name="_CRTDBG_MAP_ALLOC" if="is-debug"/>
      </defineset>
      -->

   </compiler>

   <versioninfo id="xmlBlaster-C-version" companyname="xmlBlaster.org" fileversion="${version} ${year}"/>

   <compiler id="msvc" name="msvc" extends="base-msvc">
      <!--  disable Microsoft Extensions   -->
      <compilerarg value="/GR"/> <!--enable C++ RTTI, used in TestQueue.cpp -->
      <compilerarg value="/TP" if="XMLBLASTER_C_COMPILE_AS_CPP" /> <!-- Compile lib as C++ -->
      <!-- compilerarg value="/YX"/ --> <!-- use precompiled headers -->
      <compilerarg value="/wd4996"/> <!-- 'sprintf' etc. was declared deprecated -->
      <!-- option 'GX' is deprecated, use 'EHsc' -->
      <!-- 'GZ' is deprecated, use 'RTC1' -->
      <!-- Not for C code: compilerarg value="-D${thread.impl}" /-->  <!-- -DBOOST or  -DOMNITHREAD -->
   </compiler>

   <compiler id="msvc-with-extensions" extends="base-msvc">
      <!--  enable Microsoft Extensions   -->
      <compilerarg value="/Ze"/>
      <compilerarg value="-D${thread.impl}" />
   </compiler>

   <compiler id="bcc" name="bcc" if="use-bcc">
      <compilerarg value="${CFLAGS}" if="CFLAGS" />  <!-- Will be quoted "", which does not allow to specify multiple args! -->
      <compilerarg value="${CFLAGS2}" if="CFLAGS2" />
      <compilerarg value="${CFLAGS3}" if="CFLAGS3" />
      <!--  target Pentium Pro   -->
      <compilerarg value="-6"/>
      <!--  zero length empty class member functions -->
      <compilerarg value="-Vx"/>
      <compilerarg value="-Ve"/>
      <!--   align on quad word boundaries   -->
      <compilerarg value="-a8"/>
      <!--   byte size enums   -->
      <compilerarg value="-b-"/>
      <compilerarg value="-k"/>
      <compilerarg value="-y" if="is-debug"/>
      <compilerarg value="-vi"/>
      <compilerarg value="-r-" if="is-debug"/>
      <!--  maximize speed     -->
      <compilerarg value="-O2" unless="is-debug"/>
      <compilerarg value="-D${thread.impl}" />
   </compiler>

   <!-- Compile C/C++ -->
   <compiler id="gcc" name="gcc" if="use-gcc">
      <compilerarg value="${CFLAGS}" if="CFLAGS" />  <!-- Will be quoted "", which does not allow to specify multiple args! -->
      <compilerarg value="${CFLAGS2}" if="CFLAGS2" />
      <compilerarg value="${CFLAGS3}" if="CFLAGS3" />
      <compilerarg value="-D__MacOSX__" if="OSX" />
      <compilerarg value="-Wall" />
      <compilerarg value="-pedantic" />
      <compilerarg value="-Wno-long-long" />  <!-- with -pedantic: to suppress warning: ANSI C does not support `long long', C99 supports it -->
      <compilerarg value="-D_REENTRANT" />
      <compilerarg value="-rdynamic" if="linux"/>  <!-- To show symbols of a backtrace (see XmlBlasterException.cpp, msgUtil.c) -->
      <compilerarg value="-export-dynamic" /> <!-- To show symbols of a backtrace (see XmlBlasterException.cpp, msgUtil.c) -->
      <compilerarg value="${gcc.enableStackTrace}" /> <!-- To show symbols of a backtrace (see XmlBlasterException.cpp, msgUtil.c) -->
      <compilerarg value="-D${thread.impl}" />
      <compilerarg value="-x" if="XMLBLASTER_C_COMPILE_AS_CPP" /> <!-- Compile lib as C++ -->
      <compilerarg value="c++" if="XMLBLASTER_C_COMPILE_AS_CPP" /> <!-- (follow up of above -x, to avoid quotes) Compile lib as C++ -->
   </compiler>

   <!-- Compile C++ -->
   <compiler id="g++" extends="gcc" if="use-gcc">
      <compilerarg value="-ftemplate-depth-20" /> <!-- needed for cpp templates in boost -->
   </compiler>

   <!-- Compile Intel C++ -->
   <compiler id="icc" name="icc" if="use-icc">
      <compilerarg value="${CFLAGS}" if="CFLAGS" />  <!-- Will be quoted "", which does not allow to specify multiple args! -->
      <compilerarg value="${CFLAGS2}" if="CFLAGS2" />
      <compilerarg value="${CFLAGS3}" if="CFLAGS3" />
      <compilerarg value="-fPIC" />
      <compilerarg value="-Wall" />
      <compilerarg value="-wd981" />          <!-- operands are evaluated in unspecified order -->
      <compilerarg value="-wd193" />          <!-- zero used for undefined preprocessing identifier #if _MSC_VER >= 1400 -->
      <compilerarg value="-wd383" />          <!-- C++ suppress char * to string temporary warn -->
      <!-- compilerarg value="-wd1683" / -->         <!-- explicit conversion of a 64-bit integral type to a smaller integral type (potential portability problem) -->
      <compilerarg value="-D_REENTRANT" />
      <compilerarg value="-D__interface=bar" /> <!-- Added temporary to workaround /usr/include/netinet/in.h delivered by SUSE 9.2 -->
      <compilerarg value="-D__s=bar1" />        <!-- Added temporary to workaround /usr/include/netinet/in.h delivered by SUSE 9.2 -->
   </compiler>

  <compiler id="CC" name="CC" if="use-CC"> <!-- SunOS 5.8 C++ 5.3 and 5.5 -->
      <compilerarg value="${CFLAGS}" if="CFLAGS" />  <!-- Will be quoted "", which does not allow to specify multiple args! -->
      <compilerarg value="${CFLAGS2}" if="CFLAGS2" />
      <compilerarg value="${CFLAGS3}" if="CFLAGS3" />
    <!-- compilerarg value="-Kpic"/ -->  <!-- defaults to -KPIC (-xcode=pic32) for CC -->
    <!-- compilerarg value="-Bdynamic"/ --> <!-- is default for CC -->
  </compiler>

  <compiler id="aCC" name="aCC" if="use-aCC"> <!-- aCC: HP ANSI C++ B3910B A.03.77 (HPUX) -->
      <!-- defined(__hpux__) is always defined -->
      <!-- defined(__HP_aCC) is predefined for aCC -->
      <!-- defined(__GNUG__) is defined for g++ -->
      <compilerarg value="${CFLAGS}" if="CFLAGS" />  <!-- Will be quoted "", which does not allow to specify multiple args! -->
      <compilerarg value="${CFLAGS2}" if="CFLAGS2" />
      <compilerarg value="${CFLAGS3}" if="CFLAGS3" />
  </compiler>

  <!-- 
    Standard Mac OS X PreProcessor defines:
          _GLIBCXX_DEBUG=1
          _GLIBCXX_DEBUG_PEDANTIC=1

    plus custom defines:
          COMPILE_SOCKET_PLUGIN=1
          __macos__
          __MacOSX__
          __IPhoneOS__
  -->


   <!-- =================================================================== -->
   <!-- Help on usage                                                       -->
   <!-- =================================================================== -->
   <target name="usage" depends="prepare" description="show help">
      <switch value="${os.family}" caseinsensitive="false">
         <case value="unix">
            <property name="script" value="build" />
         </case>
         <default>
            <property name="script" value="build.bat" />
         </default>
      </switch>
      <echo message=""/>
      <echo message=""/>
      <echo message="xmlBlaster Build file"/>
      <echo message="-------------------------------------------------------------"/>
      <echo message=""/>
      <echo message=" available targets are:"/>
      <echo message=""/>
      <echo message="   xmlBlaster  --> generates the xmlBlaster.jar file (default)"/>
      <echo message="   demo        --> generates the demo.jar file"/>
      <echo message="   testsuite   --> generates the testsuite.jar file"/>
      <echo message="   all         --> generates xmlBlaster.jar (including demo and testsuite classes)"/>
      <echo message="   dist        --> generates the xmlBlaster distribution to run as a server"/>
      <echo message="         -DADD_HSQLDB=false    hsqldb.jar, for embedded database support [true]"/>
      <echo message="         -DADD_CORBA=false     jacorb.jar, for CORBA support [true]"/>
      <echo message="         -DADD_XMLRPC=false    commons-logging-1.1.jar ws-commons-util-1.0.2.jar xmlrpc-client-3.1.1.jar xmlrpc-common-3.1.1.jar xmlrpc-server-3.1.1.jar, for XMLRPC support [true]"/>
      <echo message="         -DADD_SNMP=false      jax.jar, for SNMP support [false]"/>
      <echo message="         -DADD_EMAIL=false     no EMAIL support [true]"/>
      <echo message="         -DADD_MX4J=false      mx4j-impl.jar, mx4j-tools.jar, for JMX-MX4J support [false]"/>
      <echo message="         -DADD_TINYSQL=true    tinySQL JDBC dBase driver support [false]"/>
      <echo message="         -DADD_PROP=[property file] Adds your customized xmlBlaster.properties file"/>
      <echo message="         -DADD_PLUGINPROP=[xml file] Adds your customized xmlBlasterPlugins.xml file"/>
      <echo message="         -DADD_LOGGINGPROP=[property file] Adds your customized logging.properties file"/>
      <echo message="         -DADD_MANIFEST=[manifest file] Adds your customized manifest.xmlBlaster file"/>
      <echo message="         -DADD_DIRECTORY=[directory] Adds all class files in the specified directory"/>
      <echo message="         -DADD_JAVACLIENTS=false basic java clients (XmlScript and some HelloWorld*) [true]"/>
      <echo message="   clean       --> cleans up the class directory"/>
      <echo message="   delete      --> cleans up the class directory and all created distribution jar files"/>
      <echo message="   deploy_war  --> create and deploys a web archive (e.g. for tomcat) to show persistent http callbacks"/>
      <echo message="                   demonstrates persistent http callbacks"/>
      <echo message="   j2me        --> create and deploys a j2me application. For this you need to install Sun's"/>
      <echo message="                   WTK2.1 SDK for embedded java. Invoke it as follows:"/>
      <echo message="                     build -DJ2ME_HOME='home of the WTK2.1' j2me"/>
      <echo message="                   Set  -DMIDlet-Jar-URL='http://yourHost/j2me/SystemInfo.jar' on demand"/>
      <echo message="   j2me-run    --> runs the deployed j2me application in the installed emulator. Invoke"/>
      <echo message="                   build -DJ2ME_HOME='home of the WTK2.1' j2me-run"/>
      <echo message="   jboss-sar   --> create embedded XmlBlaster for JBoss"/>
      <echo message="   k2          --> create the J2EE connector"/>
      <echo message="   jms-adapter --> create the J2EE connector example bean"/>
      <echo message=""/>
      <echo message="   dist-client --> create for a typical client the necessary xmlBlasterClient.jar file"/>
      <echo message="         -DADD_HSQLDB=false    does not add hsqldb.jar, no embedded database support [true]"/>
      <echo message="         -DADD_CORBA=false     does not add jacorb.jar, no CORBA support for clients [true]"/>
      <echo message="         -DADD_XMLRPC=false    does not add xmlrpc.jar, no XMLRPC support for clients [true]"/>
      <echo message="         -DADD_EMAIL=true      mail.jar,activaton.jar, for EMAIL support [false]"/>
      <echo message="         -DADD_SNMP=false      does not add jax.jar, no SNMP support for clients [false]"/>
      <echo message="         -DADD_PROP=[property file] Adds your customized xmlBlaster.properties file"/>
      <echo message="         -DADD_LOGGINGPROP=[property file] Adds your customized logging.properties file"/>
      <echo message="         -DADD_MANIFEST=[manifest file] Adds your customized manifest.xmlBlaster file"/>
      <echo message="         -DADD_DIRECTORY=[directory] Adds all class files in the specified directory"/>
      <echo message=""/>
      <echo message=" C++: Use '-DCPP_LINK=static' to create static libs, default are shared libraries .so,.dll,.sl,.dylib"/>
      <echo message="   cpp-lib     --> generates C++ libxmlBlasterClient.sl (shared library .so .sl .dll)"/>
      <echo message="                   Check build.properties settings for C++ CORBA and C++ XML libraries"/>
      <echo message="   cpp-test    --> generates C++ test clients"/>
      <echo message="   cpp-demo    --> generates C++ demo clients"/>
      <echo message="   cpp         --> builds cpp-lib, cpp-test and cpp-demo"/>
      <echo message="   cpp-clean   --> cleans up C++ generated files (object files, corba files etc)"/>
      <echo message="   cpp-delete  --> like 'cpp-clean', but delete shared library and C++ test clients as well"/>
      <echo message=""/>
      <echo message=" C:   Use '-DC_LINK=static' to create static libs, default are shared libraries .so,.dll,.sl,.dylib"/>
      <echo message="   c-lib       --> generates the C client library libxmlBlasterClientC.sl (shared library .so .sl .dll)"/>
      <echo message="                   which uses the SOCKET protocol"/>
      <echo message="   c-test      --> generates C test clients"/>
      <echo message="   c-demo      --> generates C demo clients"/>
      <echo message="   c           --> builds c-lib, c-test and c-demo"/>
      <echo message="   c-clean     --> cleans up C generated files (object files etc)"/>
      <echo message="   c-delete    --> like 'c-clean', but delete shared library and C test clients as well"/>
      <echo message=""/>
      <echo message="   activex     --> Creates a Windows ActiveX Bridge (for use with C# and VisualBasic.Net)"/>
      <echo message="   contrib     --> Builds all classes found in the org.xmlBlaster.contrib directory into xmlBlasterContrib.jar"/>
      <echo message="   DbWatcher   --> Builds all classes necessary for the DbWatcher"/>
      <echo message=""/>
      <echo message="   runTests    --> compiles and starts xmlBlaster and runs all JUNIT tests"/>
      <echo message="   report      --> after 'runTests' you can generate a HTML report"/>
      <echo message="                   into xmlBlaster/doc/test/report/html/junit-noframes.html"/>
      <echo message="   runTestsAndReport --> does both of above"/>
      <echo message="   -Dtest.class=nameOfTestClass  runJunit --> run junit on the specifyed testclass"/>
      <echo message=""/>
      <echo message="   javadocs    --> generates the complete javadoc documentation"/>
      <echo message="   javadocs-client --> generates the client side javadoc documentation"/>
      <echo message="   javadocs-delete --> remove the above"/>
      <echo message="   html        --> generates the html file of each java/cpp/python ... file in same directory"/>
      <echo message="   html-delete --> remove the above"/>
      <echo message="   requirements--> generates html files for all xml requirements"/>
      <echo message="   requirements-delete --> remove the above"/>
      <echo message="   whitepaper  --> generates html and pdf files for our xml whitepaper"/>
      <echo message="   whitepaper-delete --> remove the above"/>
      <echo message="   docs        --> does javadoc, source-html, requirements and whitepaper"/>
      <echo message="   docs-delete --> remove the above"/>
      <echo message=""/>
      <echo message=" See the comments inside the build.xml file for more details."/>
      <echo message="-------------------------------------------------------------"/>
      <echo message=""/>
      <echo message="Examples:"/>
      <echo message="   ${script} clean"/>
      <echo message="   ${script} all"/>
      <echo message="   ${script} -Ddebug=off -DJVM.target=1.1 all"/>
      <echo message="   ${script} -Ddeprecation=on -Doptimize=on all"/>
      <echo message="   ${script} -DADD_CORBA=false -DADD_PROP=mystuff/xmlBlaster.properties -DADD_PLUGINPROPS=mystuff/xmlBlasterPlugins.xml -DADD_LOGGINGPROP=mystuff/logging.properties dist-client"/>
      <echo message="   ${script} -verbose cpp-lib"/>
      <echo message="   ant -lib lib/ant/cpptasks.jar c  (run outside of build.sh/build.bat)"/>
      <echo message=""/>
      <echo message=""/>
   </target>

   <!-- =================================================================== -->
   <!-- Prepares the build directory                                        -->
   <!-- =================================================================== -->
   <target name="prepare" depends="revisionnumber" description="For internal use only">
      <mkdir dir="${build.dir}"/>
      <osfamily property="os.family" />

      <!-- os.family=unix os.name="Mac OS X" -->
      <echo message="os.family=${os.family} os.name=${os.name}"/>  <!-- os.family = "dos", "mac", "netware", "os/2", "unix", "windows", "win9x", "z/os" -->
      <property name="${os.family}" value="true" />    <!-- set e.g unix=true to be used in if="unix" conditions -->

      <!-- See http://www.vamphq.com/osp.html for other os.name settings -->

      <condition property="windows">
         <equals arg1="${os.family}" arg2="windows"/>
      </condition>

      <condition property="linux">
         <equals arg1="${os.name}" arg2="Linux"/>
      </condition>

      <condition property="sun"> <!-- "sun" is used below for if="sun" conditions -->
         <equals arg1="${os.name}" arg2="SunOS"/>
      </condition>

      <condition property="hpux"> <!-- "hpux" is used below for if="hpux" conditions, os.family=unix os.name=HP-UX -->
         <equals arg1="${os.name}" arg2="HP-UX"/>
      </condition>

      <condition property="OSX">
         <equals arg1="${os.name}" arg2="Mac OS X"/>
      </condition>

      <!--
        These filters replace in your code @version@, @build.timestamp@ etc with
        the current values if the copy task contains a filtering="true" attribute.
      -->
      <tstamp>
         <format property="build.timestamp" pattern="MM/dd/yyyy hh:mm aa" unit="hour"/>
      </tstamp>
      <filter token="version" value="${version}"/>
      <filter token="revision.number" value="${revision.number}"/>
      <filter token="build.timestamp" value="${build.timestamp}"/>
      <filter token="build.java.version" value="${java.version}"/>
      <filter token="build.java.vendor" value="${java.vendor}"/>
      <!-- see more filters in prepare-cpp task -->

      <echo message="Build timestamp = ${build.timestamp} version = ${version}"/>

      <echo message="xmlBlaster.home=${xmlBlaster.home}"/>

      <switch value="${java.specification.version}">
         <case value="1.6"> <!-- for JDK 1.6 choose 1.5, otherwise it won't compile generics in JMS api -->
            <property name="isJdk15" value="true" />
            <property name="JVM.target" value="1.5" />
            <property name="JVM.source" value="1.5" />
            <property name="DO_FILTERING" value="true" />
         </case>
         <case value="1.5">
            <property name="isJdk15" value="true" />
            <property name="JVM.target" value="1.5" />
            <property name="JVM.source" value="1.5" />
            <property name="DO_FILTERING" value="true" />
         </case>
         <case value="1.4">
            <echo message="ERROR: JVM.target=${JVM.target}, JVM.source=${JVM.source} is not supported anymore, please use xmlBlaster 1.6.2"/>
         </case>
         <case value="1.3">
            <echo message="ERROR: JVM.target=${JVM.target}, JVM.source=${JVM.source} is not supported anymore, please use xmlBlaster 1.0.7"/>
         </case>
         <default>
            <property name="JVM.target" value="1.5" />
            <property name="JVM.source" value="1.5" />
            <property name="DO_FILTERING" value="true" />
         </default>
      </switch>

      <switch value="${XBL_IDL_WITH_WSTRING}">
         <case value="1">
            <property name="D_XBL_IDL_WSTRING" value="-DXBL_IDL_WSTRING=1" />  <!-- to force 'wstring' in xmlBlaster.idl -->
         </case>
         <default>
            <property name="D_XBL_IDL_WSTRING" value="" />
         </default>
      </switch>

      <echo message="JVM.target=${JVM.target}, JVM.source=${JVM.source}"/>

   </target>

   <!-- =================================================================== -->
   <!-- Determine the current subversion revision number                    -->
   <!-- =================================================================== -->
   <target name="revisionnumber" unless="no-svn" description="Determines the svn revision number">
      <!--
      svnversion xmlBlaster svn://www.xmlBlaster.org/trunk/xmlBlaster
      12683:12702M
      -->
      <exec executable="${svnversion.exe}" failonerror="false" failifexecutionfails="false">
         <redirector outputproperty="revision.number"/>
         <arg line="-n ."/>
      </exec>
      <echo message="Subversion revision number is '${revision.number}'."/>
   </target> <!-- revision -->

   <!-- =================================================================== -->
   <!-- Compiles the source code                                            -->
   <!-- =================================================================== -->
   <target name="prepare-src" depends="prepare" description="For internal use only">
      <!-- create directories -->
      <mkdir dir="${build.src}"/>
      <mkdir dir="${build.dest}"/>
   </target>

   <!-- =================================================================== -->
   <!-- Compile the xmlBlaster.idl file for the CORBA plugin                -->
   <!-- Uses ${idl}=org.xmlBlaster.protocol.corba package prefix            -->
   <!-- =================================================================== -->
   <target name="java-corba-idl" depends="prepare" description="Compile xmlBlaster.idl to generate Java stubs and skeletons">
      <echo message="Converting idl..."/>
      <echo message="Comparing ${idl.dir}/xmlBlaster.idl to ${idl.dir}/serverIdl/Server.java"/>
      <uptodate property="idlBuild.required" targetfile="${idl.dir}/serverIdl/Server.java" value="false">
         <srcfiles dir= "${idl.dir}" includes="xmlBlaster.idl"/>
      </uptodate>
      <if><equals arg1="${idlBuild.required}" arg2="false" />
         <then>
            <echo message="CORBA stubs and skeletons are up to date" />
         </then>
         <else>
            <echo message="Generating CORBA stubs and skeletons from ${idl.dir}/xmlBlaster.idl" />
            <java classname="${idl.class}" classpath="${cp}" fork="true">
               <arg line=" ${D_XBL_IDL_WSTRING} -i2jpackage serverIdl:${idl}.serverIdl -i2jpackage clientIdl:${idl}.clientIdl  -i2jpackage authenticateIdl:${idl}.authenticateIdl -d ${src.java.dir} ${idl.dir}/xmlBlaster.idl"/>
            </java>
         </else>
      </if>
      <echo message="${idl.dir}/xmlBlaster.idl done"/>
   </target>


   <!-- =================================================================== -->
   <!-- Generate the lexical files (JFlex and JavaCup)                      -->
   <!-- JFlex is normally not in the distribution. If a JFlex.jar file is   -->
   <!-- found in ${xmlBlaster.lib} then JFlex is generated if not uptodate. -->
   <!-- JavaCup is always generated if not uptodate (since the license      -->
   <!-- allows to have it in the distribution                               -->
   <!-- =================================================================== -->
   <target name="lexicalCheck" depends="prepare" description="checks if JFlex exists">
      <available file="${lib.dir}/JFlex.jar" property="flexAvailable"/>
   </target>
   <target name="lexicalCheckCup" depends="lexicalCheck" description="checks if CUP exists">
      <available file="${lib.dir}/java_cup.jar" property="cupAvailable"/>
   </target>
   <target name="jflex" depends="lexicalCheckCup" if="flexAvailable">
      <echo message="Invoking JFlex to build the Lexical Parser ..."/>
      <!--
      <copy file="${src.java.dir}/org/xmlBlaster/util/lexical/Sql92Selector.flex"
            tofile="${build.src}/xmlBlaster/org/xmlBlaster/util/lexical/Sql92Selector.flex" />
      -->
      <uptodate property="jflexBuild.required" targetfile="${src.java.dir}/org/xmlBlaster/util/lexical/Sql92Scanner.flex" value="false">
         <srcfiles dir= "${src.java.dir}/org/xmlBlaster/util/lexical" includes="Sql92Scanner.java"/>
      </uptodate>
      <if><equals arg1="${jflexBuild.required}" arg2="false" />
         <then>
            <echo message="Generating java files from JFlex not necessary since already up to date" />
         </then>
         <else>
            <echo message="Generating the necessary java files ..."/>

            <delete file="${src.java.dir}/org/xmlBlaster/util/lexical/Sql92Scanner.java"/>
            <java classname="JFlex.Main" classpath="./lib/JFlex.jar" fork="false" dir="${src.java.dir}/org/xmlBlaster/util/lexical">
               <arg line="${src.java.dir}/org/xmlBlaster/util/lexical/Sql92Scanner.flex"></arg>
            </java>
         </else>
      </if>
      <echo message="${src.java.dir}/org/xmlBlaster/util/lexical/Sql92Scanner.java done"/>
   </target>

   <target name="javaCup" depends="jflex" if="cupAvailable" description="Generates the necessary java classes for the SQL92 lexical parser">
      <uptodate property="cupBuild.required" targetfile="${src.java.dir}/org/xmlBlaster/util/lexical/Sql92Parser.java" value="false">
         <srcfiles dir= "${src.java.dir}/org/xmlBlaster/util/lexical" includes="Sql92Parser.cup"/>
      </uptodate>
      <if><equals arg1="${cupBuild.required}" arg2="false" />
         <then>
            <echo message="Generating java files from JavaCup not necessary since already up to date" />
         </then>
         <else>
            <echo message="Generating the necessary java files ..."/>
            <!--
            <copy file="${src.java.dir}/org/xmlBlaster/util/lexical/Sql92Selector.cup"
                  tofile="${build.src}/xmlBlaster/org/xmlBlaster/util/lexical/Sql92Selector.cup" />
            -->
            <java classname="java_cup.Main" classpath="./lib/java_cup.jar" fork="true" dir="${src.java.dir}/org/xmlBlaster/util/lexical">
               <arg line="-symbols Sql92Symbols -parser Sql92Parser Sql92Parser.cup"/>
            </java>
         </else>
      </if>
      <echo message="${src.java.dir}/org/xmlBlaster/util/lexical/Sql92Parser.java done"/>
   </target>


   <!-- =================================================================== -->
   <!-- Compiles the contrib/dbwatcher source directory                     -->
   <!-- =================================================================== -->
   <target name="DbWatcher" depends="xmlBlaster" description="Compile xmlBlaster contrib DbWatcher.jar">
      <jar destfile="${build.dir}/DbWatcher.jar" basedir="${build.dest}"
           includes="org/xmlBlaster/contrib/I_Info*,org/xmlBlaster/contrib/dbwatcher/**,org/xmlBlaster/util/log/XmlBlasterJdk14LoggingHandler*"/>
      <copy file="${build.dir}/${name}.jar" tofile="${lib.dir}/${name}.jar"/>
   </target>

   <!-- =================================================================== -->
   <!-- Compiles the contrib/dbwatcher source directory                     -->
   <!-- =================================================================== -->
   <target name="contrib" depends="xmlBlaster" description="Compile complete xmlBlaster contrib directory">
      <copy todir="${build.dest}/org/xmlBlaster/contrib/replication/setup">
         <fileset dir="${src.java.dir}/org/xmlBlaster/contrib/replication/setup"/>
      </copy>
      <jar destfile="${build.dir}/xmlBlasterContrib.jar" basedir="${build.dest}"
           includes="org/xmlBlaster/contrib/**,org/xmlBlaster/util/log/XmlBlasterJdk14LoggingHandler*"/>
      <copy file="${build.dir}/xmlBlasterContrib.jar" tofile="${lib.dir}/xmlBlasterContrib.jar"/>
   </target>

   <!-- =================================================================== -->
   <!-- Compiles the xmlBlaster core source directory                       -->
   <!-- =================================================================== -->
   <target name="xmlBlaster" depends="java-corba-idl,prepare-src,javaCup" description="Compile xmlBlaster server and create a xmlBlaster.jar">

      <copy todir="${build.src}/xmlBlaster" filtering="${DO_FILTERING}">
         <fileset dir="${src.java.dir}">
            <exclude name="README"/>
            <exclude name="**/servlet/Req*.java"/>
            <exclude name="**/client/protocol/http/j2me/UrlConnectionMicro.java"/> <!-- We need Base64.java -->
            <exclude name="**/client/protocol/http/j2me/XmlBlasterAccessJ2ME.java"/>
            <exclude name="**/util/admin/extern/LowMemoryDetector.java" unless="isJdk15"/>
            <!-- Activate excludes to compile with JDK 1.2 -->
            <patternset id="jdk12.notcompatible.sources">
               <!-- 
               <exclude name="**/jmx/**"/>
               <exclude name="**/jmxgui/**"/>
               <exclude name="**/memoryleak/**"/>
                -->
            </patternset>
         </fileset>
      </copy>
      <!-- this is for monitoring -->
      <copy todir="${build.dest}/org/xmlBlaster/contrib/replication/monitor">
         <fileset dir="${src.java.dir}/org/xmlBlaster/contrib/replication/monitor"/>
      </copy>

      <copy file="${config.dir}/manifest.xmlBlaster" tofile="${build.dest}/manifest.xmlBlaster"/>
      <copy file="${config.dir}/xmlBlaster.policy" tofile="${build.dest}/xmlBlaster.policy" filtering="true"/>
      <copy file="${config.dir}/favicon.ico" tofile="${build.dest}/org/xmlBlaster/util/http/favicon.ico"/>
      <copy file="${config.dir}/favicon.ico" tofile="${build.dest}/org/xmlBlaster/contrib/replication/monitor/favicon.ico"/>
      <copy file="${config.dir}/rainbowfish200.gif" tofile="${build.dest}/org/xmlBlaster/util/http/rainbowfish200.gif"/>
      <copy file="${config.dir}/status.html" tofile="${build.dest}/org/xmlBlaster/contrib/htmlmonitor/status.html"/>
      <copy file="${src.java.dir}/org/xmlBlaster/AppIcon.gif" tofile="${build.dest}/org/xmlBlaster/AppIcon.gif"/>
      <copy file="${src.java.dir}/org/xmlBlaster/AppIcon.gif" tofile="${build.dest}/org/xmlBlaster/jmxgui/AppIcon.gif"/>
      <copy file="${src.java.dir}/org/xmlBlaster/jmxgui/question.gif" tofile="${build.dest}/org/xmlBlaster/jmxgui/question.gif"/>
      <copy file="${src.java.dir}/org/xmlBlaster/jmxgui/tims_rainbowfish.gif" tofile="${build.dest}/org/xmlBlaster/jmxgui/tims_rainbowfish.gif"/>
      <copy file="${src.java.dir}/org/xmlBlaster/jmxgui/node.gif" tofile="${build.dest}/org/xmlBlaster/jmxgui/node.gif"/>
      <copy file="${src.java.dir}/org/xmlBlaster/jmxgui/globe.gif" tofile="${build.dest}/org/xmlBlaster/jmxgui/globe.gif"/>
      <copy file="${src.java.dir}/org/xmlBlaster/jmxgui/config.xml" tofile="${build.dest}/org/xmlBlaster/jmxgui/util/config.xml"/>
      <copy file="${config.dir}/jacorb.properties.template" tofile="${build.dest}/jacorb.properties" filtering="true"/>
      <copy file="${config.dir}/xmlBlaster.properties.template" tofile="${build.dest}/xmlBlaster.properties" filtering="true"/>
      <copy file="${config.dir}/xmlBlasterPlugins.xml.template" tofile="${build.dest}/xmlBlasterPlugins.xml" filtering="true"/>
      <copy file="${config.dir}/logging.properties" tofile="${build.dest}/logging.properties" filtering="true"/>

      <javac srcdir="${build.src}/xmlBlaster"
            destdir="${build.dest}"
            classpath="${cp}"
            debug="${debug}"
            optimize="${optimize}"
            deprecation="${deprecation}"
            source="${JVM.source}"
            target="${JVM.target}" />

      <!-- javac srcdir="${req.dir}" destdir="${build.dest}" classpath="${cp}" / -->

      <rmic classname="org.xmlBlaster.client.protocol.rmi.RmiCallbackServer" base="${build.dest}" />
      <rmic classname="org.xmlBlaster.protocol.rmi.AuthServerImpl" base="${build.dest}" />
      <rmic classname="org.xmlBlaster.protocol.rmi.XmlBlasterImpl" base="${build.dest}" />

      <jar destfile="${build.dir}/${name}.jar" manifest="${build.dest}/manifest.xmlBlaster" basedir="${build.dest}"
           includes="org/**,xmlBlaster.policy,*.gif,doc/requirements/*,*.properties,xmlBlasterPlugins.xml,manifest.xmlBlaster,*.xml"/>

      <copy file="${build.dir}/${name}.jar" tofile="${lib.dir}/${name}.jar"/>

      <!-- echo message="Creating ${soapdeploy.dir}/webservices/${name}.sar"/>
      <mkdir dir="${soapdeploy.dir}/webservices"/>
      <jar destfile="${soapdeploy.dir}/webservices/${name}.sar" manifest="${build.dest}/manifest.xmlBlaster"
           basedir="${build.dest}"
           includes="org/**/soap/*,service.xml"/ -->
   </target>

   <!-- =================================================================== -->
   <!-- Compiles the xmlBlaster demo source directory                       -->
   <!-- =================================================================== -->
   <target name="demo" depends="xmlBlaster" description="Compile the xmlBlaster demo clients">   <!-- XmlRpcHttpClient.java !!! away again when it compiles -->
      <copy todir="${build.src}/demo">
         <fileset dir="${demo.dir}">
            <exclude name="**/README*"/>
            <exclude name="c/**"/>
            <exclude name="c++/**"/>
            <exclude name="perl/**"/>
            <exclude name="php/**"/>
            <exclude name="python/**"/>
            <exclude name="**/*.html"/>
            <exclude name="**/*.php"/>
            <exclude name="**/*.inc"/>
            <exclude name="**/*.ldif"/>
            <exclude name="**/*.pl"/>
            <exclude name="**/*.py"/>
            <exclude name="**/XmlRpcHttpClient.java"/>
            <exclude name="queryXML/**"/>
            <exclude name="**/j2me/**"/>
         </fileset>
      </copy>

      <copy todir="${build.src}/demo">
         <fileset dir="${demo.dir}/queryXML">
            <include name="DomQueryTest.java"/>
            <include name="XtOmQueryTest.java"/>
            <include name="Agent.xml"/>
            <include name="AgentBig.xml"/>
         </fileset>
      </copy>

      <copy file="${src.java.dir}/org/xmlBlaster/AppIcon.gif" todir="${build.dest}/javaclients/simplereader"/>
      <copy file="${demo.java.dir}/simplereader/blue.gif" todir="${build.dest}/javaclients/simplereader"/>
      <copy file="${demo.java.dir}/simplereader/red.gif" todir="${build.dest}/javaclients/simplereader"/>

      <javac srcdir="${build.src}/demo"
            destdir="${build.dest}"
            classpath="${cp}:${lib.dir}/${name}.jar"
            debug="${debug}"
            optimize="${optimize}"
            deprecation="${deprecation}"
            source="${JVM.source}"
            target="${JVM.target}" />
      <jar destfile="${build.dir}/demo.jar" basedir="${build.dest}" includes="javaclients/**/*.class,http/**/*.class,Hello*,DomQuery*,javaclients/**/*.gif"/>
      <copy file="${build.dir}/demo.jar" tofile="${lib.dir}/demo.jar"/>
   </target>

   <!-- =================================================================== -->
   <!-- Compiles the xmlBlaster, demo, and  testsuite source directories    -->
   <!-- =================================================================== -->
   <target name="all" depends="xmlBlaster,demo,testsuite" description="Compile xmlBlaster server, demo clients and testsuite clients">
   <!--target name="all" depends="prepare-src"-->
      <delete file="${lib.dir}/demo.jar"/>
      <delete file="${lib.dir}/testsuite.jar"/>
      <delete file="${build.dir}/${name}.jar"/>
      <jar destfile="${build.dir}/${name}.jar" manifest="${build.dest}/manifest.xmlBlaster" basedir="${build.dest}"
           includes="org/**/*.*,javaclients/**/*.class,javaclients/**/*.gif,http/**/*.class,html/systemInfo/*.class,xmlBlaster.policy,*.gif,xmlBlasterPlugins.xml,*.properties,Hello*,Ptp*,Latency*,DomQuery*,doc/requirements/*"/>
      <copy file="${build.dir}/${name}.jar" tofile="${lib.dir}/${name}.jar"/>
   </target>

   <!-- =================================================================== -->
   <!-- Compiles the xmlBlaster, Java/C/C++ clients (does a delete before)  -->
   <!-- =================================================================== -->
   <target name="total" depends="delete,all,c,cpp" description="Compile xmlBlaster server, all Java, C and C++ clients">
   </target>

   <target name="SimpleReader" depends="all" description="Startup simple GUI to show messages">
            <echo message="CLASSPATH=${build.dir} ${project.classpath}" />
            <java dir="." fork="true" classname="javaclients.simplereader.SimpleReaderGui" maxmemory="36m">
                  <classpath path="${cp}" />
                  <classpath path="${build.dest}" />
                  <arg value="-session.name" />
                  <arg value="simpleReaderGUI/1" />
                  <arg value="-Security.Client.DefaultPlugin" />
                  <arg value="htpasswd,1.0" />
                  <arg value="-dispatch/connection/plugin/socket/port" />
                  <arg value="7607" />
                  <arg value="-passwd" />
                  <arg value="secret" />
                  <arg value="-xpath" />
                  <arg value="//key" />
            </java>
   </target>

   <!-- =================================================================== -->
   <!-- Compiles the xmlBlaster testsuite source directory (JDK >= 1.3)     -->
   <!-- =================================================================== -->
   <target name="testsuite" depends="xmlBlaster,testsuite-only" description="Compile Java testsuite into testsuite.jar (based on junit) and xmlBlaster before">
   </target>
   <target name="testsuite-only" description="Compile Java testsuite only into testsuite.jar (based on junit)">
      <copy todir="${build.src}/testsuite/src/java/org" filtering="true">
         <fileset dir="${testsuite.dir}/src/java/org">
            <exclude name="README"/>
         </fileset>
      </copy>
      <copy tofile="${build.dest}/org/xmlBlaster/test/j2ee/blasterClient.properties" file="${src.java.dir}/org/xmlBlaster/j2ee/k2/blasterk2.properties"/>
      <copy tofile="${build.dest}/org/xmlBlaster/test/j2ee/blasterServer.properties" file="${config.dir}/xmlBlaster-jmx.properties.template"/>
      <javac srcdir="${build.src}/testsuite/src/java"
            destdir="${build.dest}"
            classpath="${cp}:${lib.dir}/${name}.jar"
            debug="${debug}"
            optimize="${optimize}"
            deprecation="${deprecation}"
            source="${JVM.source}"
            target="${JVM.target}">
      </javac>
      <jar destfile="${build.dir}/testsuite.jar" basedir="${build.dest}" includes="org/xmlBlaster/test/**"/>
      <copy file="${build.dir}/testsuite.jar" tofile="${lib.dir}/testsuite.jar"/>
   </target>
   <!-- =================================================================== -->
   <!-- Builds the JBoss embeddable XmlBlaster MBean                        -->
   <!-- The embedded xmlBlaster.jar is striped on its config files          -->
   <!-- =================================================================== -->
   <target name="jboss-sar" depends="xmlBlaster">
      <mkdir dir="${build.dir}/sar"/>
      <copy file="${config.dir}/xmlBlaster-jmx.properties.template" tofile="${build.dir}/sar/xmlBlaster.properties" filtering="true"/>
      <copy file="${config.dir}/jbossPlugins.xml.template" tofile="${build.dir}/sar/xmlBlasterPlugins.xml" filtering="true"/>
    <!-- Clean xmlBlaster -->
    <jar destfile="${build.dir}/sar/xmlBlaster.jar">
      <zipfileset src="${build.dir}/xmlBlaster.jar"
        excludes="xmlBlaster.properties,xmlBlasterPlugins.xml"/>
    </jar>
    
    <jar destfile="${build.dir}/xmlBlaster.sar">
      <zipfileset dir="${src.java.dir}/org/xmlBlaster/j2ee/jmx/"
        includes="jboss-service.xml"
        prefix="META-INF"/>
      <fileset dir="${lib.dir}"
        includes="activation.jar,jacorb/idl.jar,jacorb/avalon-framework-4.1.5.jar,jacorb/logkit-1.2.jar,jacorb/jacorb.jar,omquery.jar,xtdash.jar,remotecons.jar,joda-time.jar,jax.jar,xmlrpc3/commons-logging-1.1.jar,xmlrpc3/ws-commons-util-1.0.2.jar,xmlrpc3/xmlrpc-client-3.1.1.jar,xmlrpc3/xmlrpc-common-3.1.1.jar,xmlrpc3/xmlrpc-server-3.1.1.jar,gnu-regexp.jar,tinySQL.jar,jzlib.jar"
        />                                             
      <fileset dir="${build.dir}/sar"
        includes="xmlBlaster.properties,xmlBlasterPlugins.xml,xmlBlaster.jar"
        />
    </jar>
    
     <copy file="${build.dir}/xmlBlaster.sar" tofile="${lib.dir}/xmlBlaster.sar"/>
     <delete dir="${build.dir}/sar"/>
   </target>
   <!-- =================================================================== -->
   <!-- Builds the J2EE XmlBlaster resource adapter, with example bean      -->
   <!-- =================================================================== -->
   <target name="k2" depends="xmlBlaster">
      <!-- Pack rar archive -->
      <!-- create tmp dir to build it up -->
      <mkdir dir="${build.dir}/ra"/>
      <mkdir dir="${build.dir}/ra/META-INF"/>

      <copy file="${lib.dir}/jacorb/jacorb.jar"  toFile="${build.dir}/ra/jacorb.jar"/>
      <copy file="${lib.dir}/jacorb/avalon-framework-4.1.5.jar"  toFile="${build.dir}/ra/avalon-framework-4.1.5.jar"/>
      <copy file="${lib.dir}/jacorb/logkit-1.2.jar"  toFile="${build.dir}/ra/logkit-1.2.jar"/>
      <copy file="${src.java.dir}/org/xmlBlaster/j2ee/k2/ra.xml" toFile="${build.dir}/ra/META-INF/ra.xml"/>
    <!-- Remove propertyfile from build by commenting this  out   -->
    <copy file="${src.java.dir}/org/xmlBlaster/j2ee/k2/blasterk2.properties" toFile="${build.dir}/ra/blasterk2.properties"/>

    <!-- Clean xmlBlaster - uncomment this if you do not run the embedded XmlBlaster in the same server
    <jar destfile="${build.dir}/ra/xmlBlaster.jar">
      <zipfileset src="${build.dir}/xmlBlaster.jar"
        excludes="xmlBlaster.properties,xmlBlasterPlugins.xml"/>
    </jar>-->
    
    <jar destfile="${build.dir}/xmlBlasterK2.rar" basedir="${build.dir}/ra" includes="**"/>
    <copy file="${build.dir}/xmlBlasterK2.rar" tofile="${lib.dir}/xmlBlasterK2.rar"/>
    <delete dir="${build.dir}/ra"/>
   </target>
   <!-- =================================================================== -->
   <!-- Builds the J2EE XmlBlaster resource adapter example bean      -->
   <!-- =================================================================== -->
   <target name="jms-adapter" depends="k2" description="Builds the J2EE XmlBlaster resource adapter example bean">
      <!-- Pack rar archive -->
      <!-- create tmp dir to build it up -->
      <mkdir dir="${build.dir}/jms"/>
      <mkdir dir="${build.dir}/jms/META-INF"/>
      <mkdir dir="${build.dir}/jms/javaclients/j2ee/k2/"/>
      <copy file="${demo.java.dir}/j2ee/k2/JmsAdapter.java" toFile="${build.src}/javaclients/j2ee/k2/JmsAdapter.java"/>
      <copy file="${demo.java.dir}/j2ee/k2/JmsAdapter-ejb-jar.xml" toFile="${build.dir}/jms/META-INF/ejb-jar.xml"/>
      <copy file="${demo.java.dir}/j2ee/k2/JmsAdapter-jboss-ejb-jar.xml" toFile="${build.dir}/jms/META-INF/jboss.xml"/>


      <javac srcdir="${build.src}/javaclients/j2ee/k2/"
            destdir="${build.dest}"
            classpath="${cp}:${lib.dir}/${name}.jar"
            debug="${debug}"
            optimize="${optimize}"
            deprecation="${deprecation}"
            source="${JVM.source}"
            target="${JVM.target}" />

      <jar destfile="${build.dir}/JmsAdapter.jar">
         <fileset dir="${build.dest}" includes="**/JmsAdapter.class"/>
         <fileset dir="${build.dir}/jms"/>
      </jar>

      <copy overwrite="yes" file="${build.dir}/JmsAdapter.jar" tofile="${lib.dir}/JmsAdapter.jar"/>
      <delete dir="${build.dir}/jms"/>
   </target>

   <target name="appletLib_jar" depends="prepare" description="Creates a jar file with a client library for applets">
      <mkdir dir="${build.war}"/>
      <copy todir="${build.war}">
         <fileset file="${src.java.dir}/org/xmlBlaster/client/protocol/http/applet/*.html"/>
      </copy>
      <unjar src="${lib.dir}/commons-codec.jar" dest="${build.dest}"/>
      <jar destfile="${build.war}/xmlBlasterAppletLib.jar"
           basedir="${build.dest}/"
           includes="**/org/xmlBlaster/client/protocol/http/common/*.class,**/org/xmlBlaster/client/protocol/http/applet/*.class,**/org/xmlBlaster/util/def/MethodName*,**/org/apache/commons/codec/binary/Base64.class,**/org/apache/commons/codec/*.class">
      </jar>
   </target>

   <target name="appletDemo_jar" depends="prepare" description="Creates appletDemo.jar with applet examples">
      <mkdir dir="${build.war}"/>
      <copy todir="${build.war}">
         <fileset file="${demo.http.dir}/applet/*.html"/>
      </copy>
      <jar destfile="${build.war}/appletDemo.jar"
           basedir="${build.dest}/"
           includes="http/applet/*.class">
      </jar>
   </target>

   <!-- =================================================================== -->
   <!-- Creates a web archive (.war) to deploy to a modern servlet engine   -->
   <!-- =================================================================== -->
   <target name="deploy_war" depends="prepare, dist-only, appletLib_jar, appletDemo_jar, deploy_war-only" description="Creates a web archive (.war) to deploy to a modern servlet engine"/>
   <target name="deploy_war-only" depends="prepare" description="Creates a web archive (.war) to deploy to a modern servlet engine, expecting everything is compiled already">
      <echo message="Please run 'build all' before if you have changed some code"/>
      <echo message="TOMCAT_HOME = ${TOMCAT_HOME}"/>
      <mkdir dir="${build.war}"/>
      <copy file="${doc.dir}/howto/xmlBlaster.css" tofile="${build.war}/xmlBlaster.css"/>
      <copy file="${WEB-INF}/web.xml" tofile="${build.war}/WEB-INF/web.xml"/>
      <copy todir="${build.war}/WEB-INF/classes/org/xmlBlaster/protocol/http">
        <fileset dir="${build.dest}/org/xmlBlaster/protocol/http"/>
      </copy>
      <copy todir="${build.war}/WEB-INF/classes/org/xmlBlaster/protocol/http/appletproxy/">
        <fileset dir="${build.dest}/org/xmlBlaster/protocol/http/appletproxy/"/>
      </copy>
      <copy todir="${build.war}/WEB-INF/classes/org/xmlBlaster/protocol/http/ajax/">
        <fileset dir="${build.dest}/org/xmlBlaster/protocol/http/ajax/">
           <exclude name="${build.dest}/org/xmlBlaster/protocol/http/ajax/*.java" unless="isJdk15"/>
        </fileset>
      </copy>
      <copy todir="${build.war}/WEB-INF/classes/http">
         <fileset dir="${build.dest}/http"/>
      </copy>
      <copy file="${DIST_PATH}/${jarFile}" tofile="${build.war}/WEB-INF/lib/xmlBlaster.jar"/>
      <!--
      <copy file="${lib.dir}/hsqldb.jar" tofile="${build.war}/WEB-INF/lib/hsqldb.jar"/>
      <copy file="${lib.dir}/jacorb/jacorb.jar" tofile="${build.war}/WEB-INF/lib/jacorb.jar"/>
      <copy file="${lib.dir}/jacorb/avalon-framework-4.1.5.jar" tofile="${build.war}/WEB-INF/lib/avalon-framework-4.1.5.jar"/>
      <copy file="${lib.dir}/jacorb/logkit-1.2.jar" tofile="${build.war}/WEB-INF/lib/logkit-1.2.jar"/>
      <copy file="${config.dir}/jacorb.properties.template" tofile="${build.war}/WEB-INF/classes/jacorb.properties" filtering="false"/>
      <copy file="${lib.dir}/xmlBlaster.jar" tofile="${build.war}/WEB-INF/lib/xmlBlaster.jar"/>
      -->
      <copy file="${lib.dir}/commons-codec.jar" tofile="${build.war}/WEB-INF/lib/commons-codec.jar"/> <!-- Base64 for applet -->
      <!-- jar destfile="${build.war}/WEB-INF/lib/jacorb.jar" update="yes" file="${build.war}/WEB-INF/classes/jacorb.properties"/ -->

      <!-- unjar src="${lib.dir}/jacorb/jacorb.jar" dest="${build.war}/WEB-INF/classes" />
      <unjar src="${lib.dir}/xmlBlaster.jar" dest="${build.war}/WEB-INF/classes" />
       -->

      <copy todir="${build.war}/javascript">
         <fileset dir="${src.java.dir}/org/xmlBlaster/protocol/http/javascript"/>
      </copy>
      <copy todir="${build.war}/persistentWindow">
         <fileset dir="${src.java.dir}/org/xmlBlaster/protocol/http/persistentWindow"/>
      </copy>
      <copy todir="${build.war}/js" failonerror="false">
         <fileset dir="${demo.http.dir}/js"/>
      </copy>
      <copy todir="${build.war}/css" failonerror="false">
         <fileset dir="${demo.http.dir}/css"/>
      </copy>
      <copy file="${demo.http.dir}/index.html" tofile="${build.war}/index.html"/>
      <copy file="${demo.http.dir}/gpsmap.html" tofile="${build.war}/gpsmap.html" failonerror="false"/>
      <copy file="${demo.http.dir}/gps.html" tofile="${build.war}/gps.html" failonerror="false"/>
      <copy file="${config.dir}/favicon.ico" tofile="${build.war}/favicon.ico"/>
      <copy file="${demo.http.dir}/README" tofile="${build.war}/README"/>
      <copy todir="${build.war}/images">
         <fileset dir="${demo.http.dir}/images"/>
      </copy>
      <copy todir="${build.war}/dhtml">
         <fileset dir="${demo.http.dir}/dhtml"/>
      </copy>
      <copy todir="${build.war}/svg">
         <fileset dir="${demo.http.dir}/svg"/>
      </copy>

      <jar destfile="${build.dir}/xmlBlaster.war"
           basedir="${build.war}/"
           includes="**"/>

      <copy file="${lib.dir}/${name}.jar" tofile="${WWW_ROOT}/../lib/xmlBlaster.jar"/>
      <delete dir="${WWW_ROOT}/xmlBlaster"/>
      <delete file="${WWW_ROOT}/xmlBlaster.war"/>
      <copy file="${build.dir}/xmlBlaster.war" tofile="${WWW_ROOT}/xmlBlaster.war"/>
      <!-- unjar src="${WWW_ROOT}/xmlBlaster.war" dest="${WWW_ROOT}" /-->

      <echo message=""/>
      <echo message="   Start xmlBlaster and a demo data publisher:"/>
      <echo message="      java org.xmlBlaster.Main -plugin/xmlrpc/port 8089    (we switch port to allow tomcat on 8080)"/>
      <echo message="      java http.dhtml.systemInfo.SystemInfoPublisher"/>
      <echo message=""/>
      <echo message="   Start tomcat and invoke the persistent HTTP HTML demo with:"/>
      <echo message="      ${TOMCAT_HOME}/bin/startup.sh"/>
      <echo message="      tail -n 500 -f ${TOMCAT_HOME}/logs/catalina.out"/>
      <echo message="      http://localhost:8080/xmlBlaster         or:"/>
      <echo message="      http://localhost:8080/xmlBlaster/dhtml/systemInfo/systemInfo.html?ActionType=login&amp;xmlBlaster.loginName=karl&amp;xmlBlaster.passwd=secret"/>
      <echo message=""/>
      <echo message="   Start the persistent HTTP applet demo with:"/>
      <echo message="      http://localhost:8080/xmlBlaster/HelloWorld3.html"/>
      <echo message="      http://localhost:8080/xmlBlaster/SystemInfoApplet.html"/>
      <echo message="      http://localhost:8080/xmlBlaster/XmlScript.html"/>
   </target>

   <!-- =================================================================== -->
   <!-- Compiles the j2me demo                                              -->
   <!-- =================================================================== -->

   <!--
   <filelist id="j2me.preverify.cp" 
             dir="${J2ME_HOME}/lib" 
             files="cldcapi10.jar,midpapi10.jar,${build.dir}/j2me/tmpclasses"/>
   <pathconvert targetos="${os.family}"
                property="j2me.preverify.cp}"
                refid="j2me.preverify.cp}" />
    -->

   <condition property="J2ME_HOME" value="${env.J2ME_HOME}">
      <isset property="env.J2ME_HOME"/>
   </condition>
   <condition property="J2ME_HOME" value="">
      <not>
         <isset property="J2ME_HOME"/>
      </not>
   </condition>
   <!-- property name="MIDlet-Jar-URL" value="http://www.xmlblaster.org/xmlBlaster/demo/j2me/SystemInfo.jar" / -->
   <!-- Will replace the token in the SystemInfo.jad file: --> 
   <property name="MIDlet-Jar-URL" value="SystemInfo.jar" />
   <property name="MIDlet-servletUrl" value="http://server.xmlBlaster.org:8080/xmlBlaster/AppletServlet" />

   <target name="j2me" depends="prepare" description="Compile j2me demo and packages it">
      <switch value="${J2ME_HOME}" caseinsensitive="false">
         <case value="">
            <echo message="========================================================================"/>
            <echo message="!!!!!!!!!!!! YOU HAVE TO SET THE ENVIRONMENT VARIABLE J2ME_HOME !!!!!!!!"/>
            <echo message="========================================================================"/>
         </case>
         <default>
         </default>
      </switch>


      <copy todir="${build.dir}/j2me/src/org/xmlBlaster/client/protocol/http/common">
         <fileset dir="${src.java.dir}/org/xmlBlaster/client/protocol/http/common">
         </fileset>
      </copy>
      <copy todir="${build.dir}/j2me/src/org/xmlBlaster/client/protocol/http/j2me">
         <fileset dir="${src.java.dir}/org/xmlBlaster/client/protocol/http/j2me">
         </fileset>
      </copy>
      <copy todir="${build.dir}/j2me/src/org/xmlBlaster">
         <fileset dir="${src.java.dir}/org/xmlBlaster">
            <include name="util/Base64.java"/>
         </fileset>
      </copy>
      <copy file="${demo.dir}/j2me/SystemInfoMidlet.java" tofile="${build.dir}/j2me/src/SystemInfoMidlet.java"/>
      <mkdir dir="${build.dir}/j2me/tmpclasses"/>
      <mkdir dir="${build.dir}/j2me/classes"/>
      <mkdir dir="${build.dir}/j2me/lib"/>
      <javac srcdir="${build.dir}/j2me/src"
            destdir="${build.dir}/j2me/tmpclasses"
            bootclasspath="${J2ME_HOME}/lib/cldcapi11.jar:${J2ME_HOME}/lib/midpapi20.jar"
            debug="${debug}"
            optimize="${optimize}"
            deprecation="${deprecation}"
            source="${JVM.source}"
            target="${JVM.target}" />

      <switch value="${os.family}" caseinsensitive="false">
         <case value="windows">
            <exec dir="." executable="${J2ME_HOME}/bin/preverify" vmlauncher="false">
              <arg line="-classpath ${J2ME_HOME}\lib\cldcapi11.jar;${J2ME_HOME}\lib\midpapi20.jar;${build.dir}\j2me\tmpclasses -d ${build.dir}\j2me\classes ${build.dir}\j2me\tmpclasses"/>
            </exec>
         </case>
         <default>
            <exec dir="." executable="${J2ME_HOME}/bin/preverify" vmlauncher="false">
              <arg line="-classpath ${J2ME_HOME}/lib/cldcapi11.jar:${J2ME_HOME}/lib/midpapi20.jar:${build.dir}/j2me/tmpclasses -d ${build.dir}/j2me/classes ${build.dir}/j2me/tmpclasses"/>
            </exec>
         </default>
      </switch>


      <jar destfile="${build.dir}/j2me/lib/SystemInfo.jar" 
           basedir="${build.dir}/j2me/classes" 
           manifest="${demo.dir}/j2me/manifest.j2me"
           includes="**/*.class"/>
      <copy file="${build.dir}/j2me/lib/SystemInfo.jar" tofile="${demo.dir}/j2me/SystemInfo.jar"/>
      <!-- update the jad file according to the new jar size -->
      <script language="javascript"> <![CDATA[
         importClass(java.io.File);
        // Access to Ant-Properties by their names
        dir = project.getProperty("demo.dir") + "/j2me";
        var file = new File(dir, "SystemInfo.jar");
        var size = file.length();
        project.setProperty("jarFileSize", "" + size);
      ]]> </script>
      <delete file="${demo.dir}/j2me/SystemInfo.jad"/>
      <copy file="${demo.dir}/j2me/SystemInfo.jad.template" tofile="${demo.dir}/j2me/SystemInfo.jad"/>
      <replace file="${demo.dir}/j2me/SystemInfo.jad" token="@@jarFileSize@@" value="${jarFileSize}"/>
      <replace file="${demo.dir}/j2me/SystemInfo.jad" token="@@SystemInfo.jar@@" value="${MIDlet-Jar-URL}"/>  <!-- SystemInfo.jar -->
      <replace file="${demo.dir}/j2me/SystemInfo.jad" token="@@servletURL@@" value="${MIDlet-servletUrl}"/>  <!-- http://server.xmlBlaster.org:8080/xmlBlaster/AppletServlet -->
      <echo message=""/>
      <echo message="==============================================================================================="/>
      <echo message="(the path used for the J2ME_HOME is ${J2ME_HOME})"/>
      <echo message="the size of the created ${demo.dir}/j2me/SystemInfo.jar file is ${jarFileSize}"/>
      <echo message="==============================================================================================="/>
      <echo message=""/>
   </target>

   <target name="j2me-run" depends="j2me">
      <exec dir="${demo.dir}/j2me" executable="${J2ME_HOME}/bin/emulator" vmlauncher="false">
         <arg line="-Xdescriptor SystemInfo.jad"/>
      </exec>
   </target>


   <!-- =================================================================== -->
   <!-- starts xmlBlaster and blocks                                        -->
   <!-- =================================================================== -->
   <target name="startXmlBlasterServer" description="Start xmlBlaster">
      <java classname="org.xmlBlaster.Main" classpath="lib/xmlBlaster.jar" dir="." failonerror="true" fork="true">
         <sysproperty key="java.compiler" value="NONE"/>
         <arg line="-info true"/>
         <arg line="-useKeyboard false"/>
      </java>
   </target>

   <!-- =================================================================== -->
   <!-- run junit test testcases                                            -->
   <!-- =================================================================== -->
   <target name="runJunit" description="Run all JUnit tests">
      <delete dir="${report.dir}"/>
      <delete dir="${report.dir}/html"/>
      <mkdir dir="${report.dir}"/>
      <mkdir dir="${report.dir}/html"/>
      <echo message="Executing the testsuite"/>
      <echo message="  hint: if the script halts here you've most probably not added junit.jar to your ant/lib"/>
      <junit dir="testsuite/src/java/org/xmlBlaster/test"
             printsummary="on" haltonfailure="off"
             haltonerror="off" showoutput="on" fork="yes">
         <formatter type="xml"/>
         <jvmarg value="-Djava.compiler=NONE"/>
         <jvmarg value="-Xmx256m"/>
         <classpath>
            <pathelement path="lib/xmlBlaster.jar:${cp}"/>
         </classpath>

         <test name="org.xmlBlaster.test.C.AllTests" fork="yes" todir="${report.dir}"/>
         <test name="org.xmlBlaster.test.classtest.AllTests" fork="yes" todir="${report.dir}"/>
         <test name="org.xmlBlaster.test.qos.AllTests" fork="yes" todir="${report.dir}"/>
         <test name="org.xmlBlaster.test.client.AllTests" fork="yes" todir="${report.dir}"/>
         <test name="org.xmlBlaster.test.topic.AllTests" fork="yes" todir="${report.dir}"/>
         <test name="org.xmlBlaster.test.authentication.AllTests" fork="yes" todir="${report.dir}"/>
         <test name="org.xmlBlaster.test.mime.AllTests" fork="yes" todir="${report.dir}"/>
         <test name="org.xmlBlaster.test.jms.AllTests" fork="yes" todir="${report.dir}"/>
         <test name="org.xmlBlaster.test.dispatch.AllTests" fork="yes" todir="${report.dir}"/>
         <test name="org.xmlBlaster.test.distributor.AllTests" fork="yes" todir="${report.dir}"/>
         <test name="org.xmlBlaster.test.jdbc.AllTests" fork="yes" todir="${report.dir}"/>
         <test name="org.xmlBlaster.test.snmp.AllTests" fork="yes" todir="${report.dir}"/>
         <test name="org.xmlBlaster.test.persistence.AllTests" fork="yes" todir="${report.dir}"/>
         <test name="org.xmlBlaster.test.cluster.AllTests" fork="yes" todir="${report.dir}"/>
         <test name="org.xmlBlaster.test.j2ee.AllTests" fork="yes" todir="${report.dir}"/>
         <test name="org.xmlBlaster.test.stress.AllTests" fork="yes" todir="${report.dir}"/>
         <test name="org.xmlBlaster.test.jmx.AllTests" fork="yes" todir="${report.dir}"/>
         <test name="org.xmlBlaster.test.classloader.AllTests" fork="yes" todir="${report.dir}"/>
         <!-- build -Dtest.class="org.xmlBlaster.test.C.AllTests" runTests -->
         <!-- test name="${test.class}" fork="yes" todir="${report.dir}"/ -->
      </junit>
      <echo message="See ${report.dir} for results"/>
      <echo message="Invoke target 'report' for HTML report generation"/>
   </target>

   <!-- =================================================================== -->
   <!-- starts xmlBlaster and the junit tests                               -->
   <!-- =================================================================== -->
   <target name="runTests" depends="clean,all,c,runTestsOnly" description="Start xmlBlaster (in blocking mode) and run Junit" />
   <target name="runTestsOnly" description="Start xmlBlaster (in blocking mode) and run Junit">
      <copy file="${lib.dir}/junit.jar" tofile="${lib.dir}/ant/junit.jar"/>
      <parallel>
         <antcall target="startXmlBlasterServer"/>  <!-- blocks -->
         <sequential>
            <sleep seconds="5"/>                    <!-- wait 5 sec for xmlBlaster startup -->
            <antcall target="runJunit"/>            <!-- run Junit tests -->
            <echo message="Tests are done, we shutown xmlBlaster now ..."/>
            <java classname="org.xmlBlaster.test.StopXmlBlaster"
                  dir="${xmlblaster_absolute_home}"
                  fork="true"
                  classpath="lib/xmlBlaster.jar:${cp}" />
         </sequential>
      </parallel>
   </target>
   <target name="tests-delete">
      <delete dir="${report.dir}"/>
   </target>

   <!-- =================================================================== -->
   <!-- Creates a test report with junit                                    -->
   <!-- =================================================================== -->
   <target name="report" description="Creates a HTML test report with junit">
      <echo message="Creating report to ${report.dir} ..."/>
      <echo message="NOTE: If the report generation halts here you've probably not added xalan.jar to your classpath"/>
      <junitreport todir="${report.dir}">
         <fileset dir="${report.dir}">
            <include name="TEST-*.xml"/>
         </fileset>
         <report format="frames" todir="${report.dir}/html"/>
      </junitreport>
      <echo message="Test results written to '${report.htmlfile}'"/>
   </target>

   <!-- =================================================================== -->
   <!-- Creates a test report with junit and shows it directly in a browser -->
   <!-- =================================================================== -->
   <target name="reportShow" depends="report" description="Creates a HTML test report with junit and shows it directly in a browser">
      <echo message="Viewing the report '${report.htmlfile}' ..."/>
      <exec dir="${report.absolutdir}" executable="junit-noframes.html" os="Windows XP" vmlauncher="false"/>
      <exec dir="${report.absolutdir}" executable="junit-noframes.html" os="Windows 2000" vmlauncher="false"/>
      <exec dir="${report.absolutdir}" executable="mozilla" os="Linux" vmlauncher="false">
         <arg line="file://${report.htmlfile}"/>
      </exec>
   </target>

   <!-- =================================================================== -->
   <!-- Note that sometimes xmlBlaster does not stop completely             -->
   <!-- because of xmlrpc does not stop listener thread proper              -->
   <!-- Than you need to start the report manually                          -->
   <!-- =================================================================== -->
   <target name="runTestsAndReport" depends="runTests,report" description="Does runTests and report in one step"/>

   <!-- =================================================================== -->
   <!-- starts xmlBlaster JMX GUI                                           -->
   <!-- =================================================================== -->
   <target name="runJmxGUI" description="Run GUI that connects to jmx Server">
        <echo message="Starting the Controller GUI"/>
        <java classname="org.xmlBlaster.jmxgui.Main" classpath="lib/xmlBlaster.jar" dir="." failonerror="true" fork="true">
                <sysproperty key="java.compiler" value="NONE"/>
        </java>
   </target>
         
   <!-- =================================================================== -->
   <!-- Creates complete documentation                                      -->
   <!-- =================================================================== -->
   <target name="docs" depends="xmlBlaster,javadocs-client,javadocs-contrib,javadocs,html,requirements,whitepaper" description="Creates the complete documentation (javadoc, source-html, requirements>">
   </target>
   <target name="docs-delete" depends="javadocs-delete,html-delete,requirements-delete,whitepaper-delete" description="Remoces all documentation (javadoc, source-html, requirements>">
   </target>

   <!-- =================================================================== -->
   <!-- Creates the javadoc documentation                                   -->
   <!-- =================================================================== -->
   <target name="javadocs" description="Creates the complete javadoc documentation">
      <echo message="Creating javadoc documentation"/>
      <mkdir dir="${javadoc.dir}"/>
      <javadoc packagenames="org.xmlBlaster.*,javaclients,http.*,html.*"
               sourcepath="${src.java.dir}:${testsuite.java.dir}:${demo.java.dir}:${demo.dir}"
               excludepackagenames="org.xmlBlaster.client.protocol.http.j2me"
               classpath="${cp}"
               destdir="${javadoc.dir}"
               maxmemory="256m"
               private="true"
               author="true"
               version="true"
               use="true"
               windowtitle="xmlBlaster ${version} API"
               doctitle="&lt;h1&gt;xmlBlaster API&lt;/h1&gt;"
               header="xmlBlaster ${version} API"
               bottom="Copyright &#169; ${year} The xmlBlaster.org contributers." />
      <!-- javadoc does not like missing package names in demo.dir:  sourcepath="${src.java.dir}:${testsuite.java.dir}:${demo.dir}:${demo.java.dir}" -->
   </target>
   <!-- =================================================================== -->
   <!-- Creates the javadoc documentation                                   -->
   <!-- =================================================================== -->
   <target name="javadocs-client" description="Creates the client side javadoc documentation">
      <echo message="Creating client javadoc documentation"/>
      <mkdir dir="${javadoc.client.dir}"/>
      <!-- sourcefiles="${demo.dir}/HelloWorld.java,${demo.dir}/HelloWorld2.java,${demo.dir}/HelloWorld3.java,${demo.dir}/HelloWorld4.java,${demo.dir}/HelloWorld5.java,${demo.dir}/HelloWorld6.java" -->
      <javadoc packagenames="org.xmlBlaster.client.*,org.xmlBlaster.util.*,javaclients,http.*,html.*"
               sourcefiles="${demo.dir}/HelloWorld.java"
               sourcepath="${src.java.dir}:${demo.dir}"
               excludepackagenames="org.xmlBlaster.util.servlet,org.xmlBlaster.util.recorder.*"
               classpath="${cp}"
               maxmemory="256m"
               destdir="${javadoc.client.dir}"
               protected="true"
               package="false"
               private="false"
               author="true"
               version="true"
               use="true"
               windowtitle="xmlBlaster ${version} client API"
               doctitle="&lt;h1&gt;xmlBlaster client API&lt;/h1&gt;"
               header="xmlBlaster ${version} client API"
               bottom="Copyright &#169; ${year} The xmlBlaster.org contributers." />
      <!-- javadoc does not like missing package names in demo.dir:  sourcepath="${src.java.dir}:${testsuite.java.dir}:${demo.dir}:${demo.java.dir}" -->
   </target>
   <target name="javadocs-contrib" description="Creates the contributions javadoc documentation">
      <echo message="Creating contributions javadoc documentation"/>
      <mkdir dir="${javadoc.contrib.dir}"/>
      <!-- sourcefiles="${demo.dir}/HelloWorld.java,${demo.dir}/HelloWorld2.java,${demo.dir}/HelloWorld3.java,${demo.dir}/HelloWorld4.java,${demo.dir}/HelloWorld5.java,${demo.dir}/HelloWorld6.java" -->
      <javadoc packagenames="org.xmlBlaster.contrib.*"
               sourcepath="${src.java.dir}:${demo.dir}"
               excludepackagenames=""
               classpath="${cp}"
               maxmemory="256m"
               destdir="${javadoc.contrib.dir}"
               protected="true"
               package="false"
               private="false"
               author="true"
               version="true"
               use="true"
               windowtitle="xmlBlaster ${version} contributions API"
               doctitle="&lt;h1&gt;xmlBlaster contributions API&lt;/h1&gt;"
               header="xmlBlaster ${version} contributions API"
               bottom="Copyright &#169; ${year} The xmlBlaster.org contributers." />
      <!-- javadoc does not like missing package names in demo.dir:  sourcepath="${src.java.dir}:${testsuite.java.dir}:${demo.dir}:${demo.java.dir}" -->
   </target>
   <target name="javadocs-delete" description="Removes the javadoc documentation">
      <delete dir="${javadoc.dir}" failonerror="false"/>
      <delete dir="${javadoc.client.dir}" failonerror="false"/>
      <delete dir="${javadoc.contrib.dir}" failonerror="false"/>
   </target>

   <!-- =================================================================== -->
   <!-- Creates a html view from each source file                           -->
   <!-- code2html by Peter Palfrader http://www.palfrader.org/code2html     -->
   <!-- =================================================================== -->
   <target name="html" description="Creates a html view from each source file in the same directory">
      <echo message="Creating html files from each found source file in any programming language"/>
      <apply dir="." executable="bin/code2html" failonerror="false" parallel="false" dest=".">
         <arg value="--linknumbers"/>
         <arg value="--replace-tabs=3"/>
         <arg value="--fallback=cpp"/> <!-- xmlBlaster.idl as c++, java is recognized automatically -->
         <srcfile/>
         <targetfile/>
         <fileset dir=".">
            <patternset>
               <include name="**/*.idl"/>
               <include name="**/*.java"/>
               <include name="**/*.cpp"/>
               <include name="**/*.c"/>
               <include name="**/*.h"/>
               <include name="**/*.hpp"/>
               <include name="**/*.pl"/>
               <include name="**/*.pm"/>
               <include name="**/*.perl"/>
               <include name="**/*.py"/>
               <include name="**/*.python"/>
               <include name="**/*.php"/>
               <include name="**/*.inc"/>
               <include name="**/*.js"/>
               <include name="**/*.tcl"/>
               <include name="**/*.vb"/>
               <include name="**/*.cs"/>
               <exclude name="build/**"/>
               <exclude name="classes/**"/>
            </patternset>
         </fileset>
         <mapper type="glob" from="*" to="*.html"/>
      </apply>
   </target>
   <target name="html-delete" description="Removes html files generated from each source file">
      <echo message="Deleting html files from each found source"/>
      <delete>
         <fileset dir=".">
            <patternset>
               <include name="**/*.idl.html"/>
               <include name="**/*.java.html"/>
               <include name="**/*.cpp.html"/>
               <include name="**/*.c.html"/>
               <include name="**/*.hpp.html"/>
               <include name="**/*.h.html"/>
               <include name="**/*.cs.html"/>
               <include name="**/*.pl.html"/>
               <include name="**/*.pm.html"/>
               <include name="**/*.perl.html"/>
               <include name="**/*.py.html"/>
               <include name="**/*.python.html"/>
               <include name="**/*.php.html"/>
               <include name="**/*.inc.html"/>
               <include name="**/*.js.html"/>
               <include name="**/*.tcl.html"/>
            </patternset>
         </fileset>
      </delete>
   </target>

   <!-- =================================================================== -->
   <!-- Creates html requirements from doc/requirements/ XML files          -->
   <!-- =================================================================== -->
    <target name="requirements" description="Creates html requirements from doc/requirements/ XML files">

      <!-- Create the errorCode listing requirement first: -->
      <java classname="org.xmlBlaster.util.def.ErrorCode" classpath="lib/xmlBlaster.jar:${cp}"
            dir="${xmlblaster_absolute_home}" failonerror="false" fork="true">
         <arg line="${req.dir}/admin.errorcodes.listing.xml"/>
      </java>

      <!-- create the all.xml file for overview -->
      <fileset id="req.files"
        dir="${req.dir}"
        excludes="all.xml"
        includes="*.xml"/>
      <property name="url.start" value=" &lt;url>"/>
      <property name="url.end " value=""/>
      <pathconvert  targetos="windows" dirsep="/" pathsep="&lt;/url>&lt;url>" property="files" refid="req.files">
        <map from="${base.dir}/doc/requirements/" to="&lt;url>"/>
      </pathconvert>
      <echo file="${req.dir}/all.xml"><![CDATA[<files><url>${files}</url></files>]]></echo>
      <!-- Create the overview -->
      <style processor="trax" basedir="${req.dir}"
             in="${req.dir}/all.xml"
             out="${req.dir}/requirement.html"
             extension=".html" style="${req.dir}/overview.xsl"
             force="true">
       </style>
      <!-- generate each req -->
      <style processor="trax" basedir="${req.dir}"
             destdir="${req.dir}"
             extension=".html" style="${req.dir}/detail.xsl"
             includes="*.xml"
             excludes= "all.xml"
             force="true">
       </style>
   </target>
   <target name="requirements-delete" description="Removes html requirements">
      <echo message="Deleting all requirement html pages"/>
      <delete>
         <fileset dir="doc/requirements">
            <patternset>
               <include name="**/*.html"/>
               <exclude name="**/package.html"/>
            </patternset>
            <patternset>
               <include name="all.xml"/>
            </patternset>
         </fileset>
      </delete>
   </target>


   <!-- =================================================================== -->
   <!-- Creates html from new requirements from doc/docbookReq/ XML files       -->
   <!-- =================================================================== -->
    <target name="docbookTest" description="just a temporary test">
      <style processor="trax" basedir="${docbookReq.dir}"
             in="${docbookReq.dir}/client.c.socket.xml"
             out="${docbookReq.dir}/test0.html"
             extension=".xml" 
             style="${docbookReq.dir}/../docbook/docbookXmlBlaster.xsl"
             force="true">              
       </style>
      <style processor="trax" basedir="${docbookReq.dir}"
             in="${docbookReq.dir}/test0.html"
             out="${docbookReq.dir}/test1.html"
             extension=".xml" 
             style="${docbookReq.dir}/embedSource.xsl"
             force="true">              
       </style>
    </target>

    <target name="docbookReq" description="Creates new html requirements from docbook doc/docbookReq/ XML files">

      <style processor="trax" 
             basedir="doc/requirements"
             destdir="${docbookReq.dir}"
             includes="*.xml"
             excludes="all.xml"
             extension=".xml" 
             style="${docbookReq.dir}/req2Docbook.xsl"
             force="true">              
       </style>

      <!-- Create the errorCode listing requirement first: -->
<!--
      <java classname="org.xmlBlaster.util.def.ErrorCode" classpath="lib/xmlBlaster.jar:${cp}"
            dir="${xmlblaster_absolute_home}" failonerror="false" fork="true">
         <arg line="${docbookReq.dir}/admin.errorcodes.listing.xml"/>
      </java>
-->
      <!-- create the all.xml file for overview -->
      <fileset id="docbookReq.files"
        dir="${docbookReq.dir}"
        excludes="all.xml"
        includes="*.xml"/>
      <property name="url.start" value=" &lt;url>"/>
      <property name="url.end " value=""/>
      <pathconvert  targetos="windows" dirsep="/" pathsep="&lt;/url>&lt;url>" property="files" refid="docbookReq.files">
        <map from="${base.dir}/doc/docbookReq/" to="&lt;url>"/>
      </pathconvert>
      <echo file="${docbookReq.dir}/all.xml"><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
   <files><url>${files}</url></files>]]></echo>
      <!-- Create the overview -->                   
      <!--
      <style processor="trax" basedir="${docbookReq.dir}"
             in="${docbookReq.dir}/all.xml"
             out="${docbookReq.dir}/requirement.html"
             extension=".html" style="${docbookReq.dir}/createOverview.xsl"
             force="true">              
         <xmlcatalog>
            <dtd publicId="-//OASIS//DTD DocBook XML V4.2//EN" location="doc/dtd/docbookx.dtd" />
         </xmlcatalog>    
       </style>
       -->

      <style processor="trax" basedir="${docbookReq.dir}"
             in="${docbookReq.dir}/all.xml"
             out="${docbookReq.dir}/requirement.xml"
             extension=".xml" style="${docbookReq.dir}/createOverview.xsl"
             force="true">              
       </style>
<!--
      <style processor="trax" basedir="${docbookReq.dir}"
             in="${docbookReq.dir}/requirement.html"
             out="${docbookReq.dir}/menu.xml"
             extension=".html" style="${docbookReq.dir}/createMenu.xsl"
             force="true">              
       </style>


      <style processor="trax" basedir="${docbookReq.dir}"
             in="${docbookReq.dir}/requirement.html"
             out="${docbookReq.dir}/menu.xml"
             extension=".html" style="${docbookReq.dir}/createMenu.xsl"
             force="true">              
       </style>
-->
      <!-- generate each req -->
      <!--
      <style processor="trax" basedir="${docbookReq.dir}"
             destdir="${docbookReq.dir}"
             extension=".html" style="doc/docbook/docbookXmlBlaster.xsl"
             includes="*.xml"
             excludes= "all.xml"
             force="true">
         <xmlcatalog>
            <dtd publicId="-//OASIS//DTD DocBook XML V4.2//EN" location="doc/dtd/docbookx.dtd" />
         </xmlcatalog>    
       </style>
      -->
   </target>

   <target name="docbookReq-delete" description="Removes html docbook requirements">
      <echo message="Deleting all docbook requirement html pages"/>
      <delete>
         <fileset dir="doc/requirements">
            <patternset>
               <include name="**/*.html"/>
               <exclude name="**/package.html"/>
            </patternset>
            <patternset>
               <include name="all.xml"/>
            </patternset>
         </fileset>
      </delete>
   </target>


   <!-- =================================================================== -->
   <!-- Creates html whitepaper with docbook                                -->
   <!-- =================================================================== -->
   <target name="whitepaper" description="Creates html whitepaper doc/whitepaper XML file">
      <property name="docbook.dir" value="/opt/docbook"/>
      <!-- html -->
      <echo message="Creating whitepaper html variant (excepting docbook under ${docbook.dir})"/>
      <java classname="com.jclark.xsl.sax.Driver" classpath="${cp}" dir="${doc.dir}/whitepaper" failonerror="false" fork="true">
         <sysproperty key="com.jclark.xsl.sax.parser" value="com.jclark.xsl.dom.SunXMLProcessorImpl"/>
         <arg line="whitepaper.xml ${docbook.dir}/html/docbook.xsl whitepaper.html"/>
      </java>
      <!-- pdf -->
      <echo message="Creating whitepaper pdf variant (excepting docbook formatting objects under ${docbook.dir}/fo and apache fop in CLASSPATH)"/>
      <java classname="com.jclark.xsl.sax.Driver" classpath="${cp}" dir="${doc.dir}/whitepaper" failonerror="false" fork="true">
         <sysproperty key="com.jclark.xsl.sax.parser" value="com.jclark.xsl.dom.SunXMLProcessorImpl"/>
         <arg line="whitepaper.xml ${docbook.dir}/fo/docbook.xsl whitepaper.fo"/>
      </java>
      <java classname="org.apache.fop.apps.CommandLine" classpath="${cp}" dir="${doc.dir}/whitepaper" failonerror="false" fork="true">
         <sysproperty key="org.xml.sax.parser" value="com.sun.xml.parser.Parser"/>
         <arg line="whitepaper.fo whitepaper.pdf"/>
      </java>
   </target>
   <target name="whitepaper-delete" description="Removes html whitepaper">
      <echo message="Deleting whitepaper"/>
      <delete>
         <fileset dir="doc/whitepaper">
            <patternset>
               <include name="**/*.html,**/*.fo,**/*.pdf"/>
            </patternset>
         </fileset>
      </delete>
   </target>

   <!-- =================================================================== -->
   <!-- Creates the distribution                                            -->
   <!-- =================================================================== -->
   <target name="dist" depends="java-delete,all,dist-only" description="Creates a server distribution for deployment (see usage)"/>
   <target name="dist-only" depends="" description="">
      <delete dir="${dist.dir}"/>
      <delete dir="${dist-classes.dir}"/>

      <mkdir dir="${dist.dir}"/>
      <mkdir dir="${dist.dir}/bin"/>
      <mkdir dir="${dist.dir}/lib"/>

      <mkdir dir="${dist-classes.dir}"/>

      <property name="DIST_PATH" value="."/>
      <property name="ADD_HSQLDB" value="true"/>
      <property name="ADD_CORBA" value="true"/>
      <property name="ADD_XMLRPC" value="true"/>
      <property name="ADD_J2EE" value="false"/>
      <property name="ADD_CONTRIB" value="false"/>
      <property name="ADD_JMXTOOLS" value="false"/> <!-- To use HTMLAdaptor, see http://www.xmlblaster.org/xmlBlaster/doc/requirements/admin.jmx.html#htmladaptor -->
      <property name="ADD_MX4J" value="false"/> <!-- To use JMX MX4J HTML Adaptor, see http://www.mx4j.org, http://www.xmlblaster.org/xmlBlaster/doc/requirements/admin.jmx.html#htmladaptor -->
      <property name="ADD_SNMP" value="false"/>
      <property name="ADD_TINYSQL" value="false"/>
      <property name="ADD_PROP" value="default"/> <!-- e.g. -DADD_PROP=myclient/xmlBlaster.properties (to configure MoM) -->
      <property name="ADD_PLUGINPROP" value="default"/> <!-- e.g. -DADD_PLUGINPROP=myclient/xmlBlasterProperties.xml (to configure MoM) -->
      <property name="ADD_LOGGINGPROP" value="config/logging.properties"/> <!-- e.g. -DADD_LOGGINGPROP=myclient/logging.properties (to configure logging) -->
      <property name="ADD_POLICY" value="default"/> <!-- e.g. -DADD_POLICY=myclient/xmlBlaster.policy (for RMI security) -->
      <property name="ADD_DIRECTORY" value="false"/>  <!-- e.g. -DADD_DIRECTORY=myclient/classes -->
      <property name="ADD_EMAIL" value="true"/>
      <property name="ADD_JAVACLIENTS" value="true"/>
                      
      <mkdir dir="${DIST_PATH}/lib"/>

      <unjar src="${lib.dir}/${name}.jar" dest="${dist-classes.dir}" />
      <unjar src="${lib.dir}/jzlib.jar" dest="${dist-classes.dir}" />
      <unjar src="${lib.dir}/gnu-regexp.jar" dest="${dist-classes.dir}" />
      <unjar src="${lib.dir}/miniJacorb.jar" dest="${dist-classes.dir}" />
      <unjar src="${lib.dir}/omquery.jar" dest="${dist-classes.dir}" />
      <unjar src="${lib.dir}/xtdash.jar" dest="${dist-classes.dir}" />
      <unjar src="${lib.dir}/remotecons.jar" dest="${dist-classes.dir}" />
      <unjar src="${lib.dir}/joda-time.jar" dest="${dist-classes.dir}" />
      <unjar src="${lib.dir}/commons-codec.jar" dest="${dist-classes.dir}" />
      <unjar src="${lib.dir}/commons-lang-2.4.jar" dest="${dist-classes.dir}" />
      <unjar src="${lib.dir}/commons-logging.jar" dest="${dist-classes.dir}" />
      <unjar src="${lib.dir}/log4j.jar" dest="${dist-classes.dir}" />

      <switch value="${ADD_HSQLDB}">
         <case value="true">
            <echo message="Adding ${lib.dir}/hsqldb.jar for HSQLDB support" />
            <unjar src="${lib.dir}/hsqldb.jar" dest="${dist-classes.dir}" />
         </case>
         <default>
            <echo message="ADD_HSQLDB=${ADD_HSQLDB}: No HSQLDB support added." />
         </default>
      </switch>
      <switch value="${ADD_CORBA}">
         <case value="true">
            <echo message="Adding ${lib.dir}/jacorb/jacorb.jar for CORBA support" />
            <unjar src="${lib.dir}/jacorb/jacorb.jar" dest="${dist-classes.dir}" />
            <unjar src="${lib.dir}/jacorb/avalon-framework-4.1.5.jar" dest="${dist-classes.dir}" />
            <unjar src="${lib.dir}/jacorb/logkit-1.2.jar" dest="${dist-classes.dir}" />
            <unjar src="${lib.dir}/miniJacorb.jar" dest="${dist-classes.dir}" />
         </case>
         <default>
            <echo message="ADD_CORBA=${ADD_CORBA}: No CORBA support added." />
         </default>
      </switch>
      <switch value="${ADD_XMLRPC}">
         <case value="true">
            <echo message="Adding XMLRPC support" />
            <unjar src="${lib.dir}/xmlrpc3/commons-logging-1.1.jar" dest="${dist-classes.dir}"/>
            <unjar src="${lib.dir}/xmlrpc3/ws-commons-util-1.0.2.jar" dest="${dist-classes.dir}"/>
            <unjar src="${lib.dir}/xmlrpc3/xmlrpc-client-3.1.1.jar" dest="${dist-classes.dir}"/>
            <unjar src="${lib.dir}/xmlrpc3/xmlrpc-common-3.1.1.jar" dest="${dist-classes.dir}"/>
            <unjar src="${lib.dir}/xmlrpc3/xmlrpc-server-3.1.1.jar" dest="${dist-classes.dir}"/>
         </case>
         <default>
            <echo message="ADD_XMLRPC=${ADD_XMLRPC}: No XMLRPC support added." />
         </default>
      </switch>
      <switch value="${ADD_CONTRIB}">
         <case value="true">
            <echo message="Adding ${lib.dir}/xmlBlasterContrib.jar for CONTRIB support" />
            <echo message="Make sure you have previously built the new contrib package." />
            <antcall target="contrib" inheritAll='false' inheritRefs='false'/>
            <copy todir="${dist-classes.dir}/org/xmlBlaster/contrib/replication/setup" verbose="true">
               <fileset dir="${build.dest}/org/xmlBlaster/contrib/replication/setup"/>
            </copy>
            <!-- unjar src="${lib.dir}/xmlBlasterContrib.jar" dest="${dist-classes.dir}" / -->
            <unjar src="${lib.dir}/javax.jms.jar" dest="${dist-classes.dir}" />
         </case>
         <default>
         </default>
      </switch>
      <switch value="${ADD_JMXTOOLS}">
         <case value="true">
            <echo message="Adding ${lib.dir}/jmxtools.jar for JMX HTMLAdaptor support" />
            <unjar src="${lib.dir}/jmxtools.jar" dest="${dist-classes.dir}" />
            <!-- added this since it does not work with JDK1.4 otherwise -->
            <unjar src="${lib.dir}/jmxremote.jar" dest="${dist-classes.dir}" />
            <unjar src="${lib.dir}/jmxri.jar" dest="${dist-classes.dir}" />
         </case>
         <default>
         </default>
      </switch>
      <switch value="${ADD_MX4J}">
         <case value="true">
            <echo message="Adding ${lib.dir}/mx4j-impl.jar for JMX MX4J Adaptor support" />
            <unjar src="${lib.dir}/mx4j-impl.jar" dest="${dist-classes.dir}" />
            <unjar src="${lib.dir}/mx4j-tools.jar" dest="${dist-classes.dir}" />
         </case>
         <default>
         </default>
      </switch>
      <switch value="${ADD_SNMP}">
         <case value="true">
            <echo message="Adding ${lib.dir}/jax.jar for SNMP support" />
            <unjar src="${lib.dir}/jax.jar" dest="${dist-classes.dir}" />
         </case>
         <default>
            <echo message="ADD_SNMP=${ADD_SNMP}: No SNMP support added." />
         </default>
      </switch>
      <switch value="${ADD_TINYSQL}">
         <case value="true">
            <echo message="Adding ${lib.dir}/tinySQL.jar for JDBC-dBase support" />
            <unjar src="${lib.dir}/tinySQL.jar" dest="${dist-classes.dir}" />
         </case>
         <default>
            <echo message="ADD_TINYSQL=${ADD_TINYSQL}: No JDBC-dBase support added." />
         </default>
      </switch>
      <switch value="${ADD_PROP}">
         <case value="default">
            <echo message="Using default xmlBlaster.properties" />
            <copy file="config/xmlBlaster.properties.template" tofile="${dist-classes.dir}/xmlBlaster.properties"/>
            <copy file="config/xmlBlaster.properties.template" tofile="${dist.dir}/config/xmlBlaster.properties.template" overwrite="yes"/>
         </case>
         <default>
            <echo message="Using ${ADD_PROP}" />
            <copy file="${ADD_PROP}" tofile="${dist-classes.dir}/xmlBlaster.properties" overwrite="yes"/>
            <copy file="${ADD_PROP}" tofile="${dist.dir}/config/xmlBlaster.properties.template" overwrite="yes"/>
         </default>
      </switch>
      <switch value="${ADD_PLUGINPROP}">
         <case value="default">
            <echo message="Using default xmlBlasterPlugins.xml" />
            <copy file="config/xmlBlasterPlugins.xml.template" tofile="${dist-classes.dir}/xmlBlasterPlugins.xml"/>
            <copy file="config/xmlBlasterPlugins.xml.template" tofile="${dist.dir}/config/xmlBlasterPlugins.xml.template" overwrite="yes"/>
         </case>
         <default>
            <echo message="Using ${ADD_PLUGINPROP}" />
            <copy file="${ADD_PLUGINPROP}" tofile="${dist-classes.dir}/xmlBlasterPlugins.xml" overwrite="yes"/>
            <copy file="${ADD_PLUGINPROP}" tofile="${dist.dir}/config/xmlBlasterPlugins.xml.template" overwrite="yes"/>
         </default>
      </switch>

      <echo message="Using ${ADD_LOGGINGPROP}" />
      <copy file="${ADD_LOGGINGPROP}" tofile="${dist-classes.dir}/logging.properties" overwrite="yes"/>
      <copy file="${ADD_LOGGINGPROP}" tofile="${dist.dir}/config/logging.properties" overwrite="yes"/>

      <switch value="${ADD_POLICY}">
         <case value="default">
            <echo message="Using default xmlBlaster.policy" />
            <copy file="config/xmlBlaster.policy" tofile="${dist-classes.dir}/xmlBlaster.policy"/>
            <copy file="config/xmlBlaster.policy" tofile="${dist.dir}/config/xmlBlaster.policy"/>
         </case>
         <default>
            <echo message="Using ${ADD_POLICY}" />
            <copy file="${ADD_POLICY}" tofile="${dist-classes.dir}/xmlBlaster.policy" overwrite="yes"/>
            <copy file="${ADD_POLICY}" tofile="${dist.dir}/config/xmlBlaster.policy" overwrite="yes"/>
         </default>
      </switch>
      <switch value="${ADD_DIRECTORY}">
         <case value="false">
         </case>
         <default>
            <echo message="Adding ${ADD_DIRECTORY}" />
            <copy todir="${dist-classes.dir}">
               <fileset dir="${ADD_DIRECTORY}"/>
            </copy>
         </default>
      </switch>
      <switch value="${ADD_JAVACLIENTS}">
         <case value="false">
         </case>
         <default>
            <echo message="Adding ${demo.java.dir}" />
            <copy todir="${dist-classes.dir}">
               <fileset dir="${build.dest}" includes="**/HelloWorldErase*"/>
               <fileset dir="${build.dest}" includes="**/HelloWorldGet*"/>
               <fileset dir="${build.dest}" includes="**/HelloWorldPublish*"/>
               <fileset dir="${build.dest}" includes="**/HelloWorldSubscribe*"/>
               <fileset dir="${build.dest}" includes="**/XmlScript*"/>
            </copy>
         </default>
      </switch>
      <switch value="${ADD_EMAIL}"> <!-- last task to force our javamail.jar -->
         <case value="true">
            <echo message="Adding activation.jar/mail.jar for EMAIL support" />
            <unjar src="${lib.dir}/activation.jar" dest="${dist-classes.dir}" />
            <unjar src="${lib.dir}/mail.jar" dest="${dist-classes.dir}" />
         </case>
         <default>
            <echo message="ADD_EMAIL=${ADD_EMAIL}: No EMAIL support added." />
         </default>
      </switch>

      <copy file="config/jacorb.properties.template" tofile="${dist-classes.dir}/jacorb.properties" overwrite="yes" preservelastmodified="true"/>

      <copy file="README" tofile="${dist.dir}/README" overwrite="yes" preservelastmodified="true"/>
      <copy file="INSTALL" tofile="${dist.dir}/INSTALL" overwrite="yes" preservelastmodified="true"/>
      <copy file="doc/LICENSE" tofile="${dist.dir}/LICENSE" overwrite="yes" preservelastmodified="true"/>
      <copy file="config/jacorb.properties.template" tofile="${dist.dir}/config/jacorb.properties.template" overwrite="yes" preservelastmodified="true"/>
      <copy file=".bashrc" tofile="${dist.dir}/.bashrc" overwrite="yes" preservelastmodified="true"/>

        <!-- copy wrapper files -->
      <copy file="bin/xmlBlasterd.sh" tofile="${dist.dir}/bin/xmlBlasterd.sh" overwrite="yes" preservelastmodified="true"/>
      <copy file="config/wrapper.conf.template" tofile="${dist.dir}/config/wrapper.conf.template" overwrite="yes" preservelastmodified="true"/>

      <copy file="bin/xmlBlaster.sh" tofile="${dist.dir}/bin/xmlBlaster.sh" overwrite="yes" preservelastmodified="true"/>
      <copy file="bin/ns" tofile="${dist.dir}/bin/ns" overwrite="yes" preservelastmodified="true"/>
      <chmod perm="ug+x">
        <fileset dir="${dist.dir}/bin"/>
      </chmod>

      <delete dir="${dist-classes.dir}/META-INF" failonerror="false"/>

      <property name="zipFile" value="${name}Dist-${version}.zip"/>
      <property name="jarFile" value="${name}Dist.jar"/>

      <!-- Create xmlBlaster/dist/lib/xmlBlaster.jar with ALL classes ...-->
      <delete file="${dist.dir}/lib/${name}.jar" failonerror="false"/>
      <jar destfile="${dist.dir}/lib/${name}.jar" manifest="${config.dir}/manifest.xmlBlaster" basedir="${dist-classes.dir}"/>

      <!-- Create xmlBlasterDist-0.79e.zip with everything ...-->
      <delete file="${DIST_PATH}/${zipFile}" failonerror="false"/>
      <zip destfile="${DIST_PATH}/${zipFile}" basedir="${dist.dir}/.."/>

      <!-- Copy xmlBlasterDist.jar containing ALL classes ...-->
      <copy file="${dist.dir}/lib/${name}.jar" tofile="${DIST_PATH}/${jarFile}" overwrite="yes"/>

      <echo message="DONE: Created ${DIST_PATH}/${jarFile} containing all classes only"/>
      <echo message="DONE: Created ${DIST_PATH}/${zipFile} containing the jar, binaries and configs"/>

   </target>

   <target name="dist-client-mini" depends="xmlBlaster,demo,dist-client-mini-jar" description="Create a minimalistic java client distribution: 'build -DJVM.source=1.6 -DJVM.target=1.6 dist-client-mini'"/>
   <target name="dist-client-mini-jar" description="Create a minimalistic java client distribution (SOCKET only)">
      <delete includeEmptyDirs="true" failonerror="false"><fileset dir="${dist-clientMini.dir}"/></delete>
      <echo>Creating ${dist-clientMini.dir}</echo>
      <mkdir dir="${dist-clientMini.dir}"/>

      <jar destfile="${dist-clientMini.dir}/xmlBlasterClient.jar" manifest="config/manifest.xmlBlaster">
         <fileset dir="${build.dest}">
            <include name="org/xmlBlaster/client/*.class"/>
            <include name="org/xmlBlaster/client/dispatch/*.class"/>
            <include name="org/xmlBlaster/client/key/*"/>
            <include name="org/xmlBlaster/client/qos/*"/>
            <include name="org/xmlBlaster/client/protocol/*.class"/>
            <include name="org/xmlBlaster/client/protocol/socket/*"/>
            <include name="org/xmlBlaster/client/queuemsg/*"/>
                
            <exclude name="org/xmlBlaster/client/Javascript*"/>
            <exclude name="org/xmlBlaster/client/script/*.class"/>
            <exclude name="org/xmlBlaster/client/XmlDbMessageWrapper.*"/>

            <include name="org/xmlBlaster/authentication/plugins/I_ClientPlugin*"/>
            <include name="org/xmlBlaster/authentication/plugins/I_MsgSecurityInterceptor*"/>
            <include name="org/xmlBlaster/authentication/plugins/I_SecurityQos*"/>
            <include name="org/xmlBlaster/authentication/plugins/htpasswd/ClientPlugin*"/>
            <include name="org/xmlBlaster/authentication/plugins/htpasswd/SecurityQos*"/>
            <include name="org/xmlBlaster/authentication/plugins/CryptDataHolder*"/>

            <!-- Does not import other engine stuff -->
            <include name="org/xmlBlaster/engine/qos/AddressServer*"/>

            <!-- Global.getNativeCallbackDriver -->
            <include name="org/xmlBlaster/protocol/I_CallbackDriver.class"/>


            <include name="org/xmlBlaster/contrib/ClientPropertiesInfo*"/>
            <include name="org/xmlBlaster/contrib/I_Info*"/>
            <include name="org/xmlBlaster/contrib/GlobalInfo*"/>
            <include name="org/xmlBlaster/contrib/InfoHelper*"/>
            <include name="org/xmlBlaster/contrib/PropertiesInfo*"/>

            <!-- org.xmlBlaster.util.queue.jdbc.JdbcQueue wants -->
            <include name="org/xmlBlaster/engine/msgstore/I_Map*"/>
            <!-- org.xmlBlaster.util.qos.AccessFilterQos and QueryRefinementQos wants, Query has no engine dependency and should be moved to util.qos -->
            <include name="org/xmlBlaster/engine/mime/Query.class"/>

            <include name="org/xmlBlaster/util/*.class"/>
            <include name="org/xmlBlaster/util/admin/*.class"/>
            <include name="org/xmlBlaster/util/admin/extern/*.class"/>
            <include name="org/xmlBlaster/util/classloader/*.class"/>
            <include name="org/xmlBlaster/util/cluster/*.class"/>
            <include name="org/xmlBlaster/util/context/*.class"/>
            <include name="org/xmlBlaster/util/def/*.class"/>
            <include name="org/xmlBlaster/util/dispatch/*.class"/>
            <include name="org/xmlBlaster/util/dispatch/plugins/*.class"/>
            <include name="org/xmlBlaster/util/error/*.class"/>
            <include name="org/xmlBlaster/util/key/*.class"/>
            <include name="org/xmlBlaster/util/log/*.class"/>
            <include name="org/xmlBlaster/util/plugin/*.class"/>
            <include name="org/xmlBlaster/util/property/*.class"/>
            <include name="org/xmlBlaster/util/protocol/*.class"/>
            <include name="org/xmlBlaster/util/protocol/socket/*.class"/>
            <include name="org/xmlBlaster/util/qos/*.class"/>
            <include name="org/xmlBlaster/util/qos/address/*.class"/>
            <include name="org/xmlBlaster/util/qos/storage/*.class"/>
            <include name="org/xmlBlaster/util/queue/*.class"/>
            <include name="org/xmlBlaster/util/queue/jdbc/*.class"/>
            <include name="org/xmlBlaster/util/queue/ram/*.class"/>
            <include name="org/xmlBlaster/util/queuemsg/*.class"/>
            <include name="org/xmlBlaster/util/xbformat/*.class"/>
            <include name="org/xmlBlaster/util/http/*.class"/>
                
            <exclude name="org/xmlBlaster/util/checkpoint/**"/>
            <exclude name="org/xmlBlaster/util/lexical/**"/>
            <exclude name="org/xmlBlaster/util/servlet/**"/>

            <include name="HelloWorld3*"/>
            <include name="HelloWorld4*"/>
         </fileset>
      </jar>

      <echo message="--------------------------------------------"/>
      <echo message="Created ${dist-clientMini.dir}/xmlBlasterClient.jar"/>
      <echo message="It supports xmlBlaster java clients with SOCKET protocol"/>
      <echo message="Test: java -cp dist-clientMini/xmlBlasterClient.jar HelloWorld3 -queue/connection/defaultPlugin RAM,1.0"/>
      <echo message="--------------------------------------------"/>
   </target>

   <!-- =================================================================== -->
   <!-- Creates the distribution for java clients                           -->
   <!-- =================================================================== -->
   <target name="dist-client" depends="java-delete,dist-client-fast" description="Create a java client distribution"/>
   <target name="dist-client-fast" depends="all,dist-client-only" description="Create a java client distribution"/>
   <target name="dist-client-only" depends="" description="">
      <mkdir dir="${dist-client.dir}"/>
      <mkdir dir="${dist-client.dir}/lib"/>
      <mkdir dir="${dist-client.dir}/classes"/>

      <property name="DIST_PATH" value="${dist-client.dir}"/>
      <property name="ADD_HSQLDB" value="true"/>
      <property name="ADD_CORBA" value="true"/>
      <property name="ADD_XMLRPC" value="true"/>
      <property name="ADD_SNMP" value="false"/>
      <property name="ADD_PROP" value="false"/> <!-- e.g. -DADD_PROP=myclient/xmlBlaster.properties -->
      <property name="ADD_PLUGINPROP" value="false"/> <!-- e.g. -DADD_PLUGINPROP=myclient/xmlBlasterPlugins.xml -->
      <property name="ADD_LOGGINGPROP" value="config/logging.properties"/> <!-- e.g. -DADD_LOGGINGPROP=myclient/logging.properties -->
      <property name="ADD_MANIFEST" value="false"/> <!-- e.g. -DADD_MANIFEST=myclient/manifest.xmlBlaster -->
      <property name="ADD_DIRECTORY" value="false"/>  <!-- e.g. -DADD_DIRECTORY=myclient/classes -->
      <property name="ADD_EMAIL" value="false"/>
      <property name="ADD_APPLET" value="false"/>

      <unjar src="${lib.dir}/${name}.jar" dest="${dist-client.dir}/classes" />
      <unjar src="${lib.dir}/jzlib.jar" dest="${dist-client.dir}/classes" />
      <unjar src="${lib.dir}/commons-codec.jar" dest="${dist-client.dir}/classes" />
      <unjar src="${lib.dir}/commons-lang-2.4.jar" dest="${dist-client.dir}/classes" />
      <unjar src="${lib.dir}/commons-logging.jar" dest="${dist-client.dir}/classes" />
      <unjar src="${lib.dir}/log4j.jar" dest="${dist-client.dir}/classes" />
      <unjar src="${lib.dir}/joda-time.jar" dest="${dist-client.dir}/classes" />

      <switch value="${ADD_HSQLDB}">
         <case value="true">
            <echo message="Adding ${lib.dir}/hsqldb.jar for HSQLDB support" />
            <unjar src="${lib.dir}/hsqldb.jar" dest="${dist-client.dir}/classes" />
         </case>
         <default>
            <echo message="ADD_HSQLDB=${ADD_HSQLDB}: No HSQLDB support added." />
         </default>
      </switch>
      <switch value="${ADD_CORBA}">
         <case value="true">
            <echo message="Adding ${lib.dir}/jacorb/jacorb.jar for CORBA support" />
            <unjar src="${lib.dir}/jacorb/jacorb.jar" dest="${dist-client.dir}/classes" />
            <unjar src="${lib.dir}/miniJacorb.jar" dest="${dist-client.dir}/classes" />
            <unjar src="${lib.dir}/jacorb/logkit-1.2.jar" dest="${dist-classes.dir}" />
            <unjar src="${lib.dir}/miniJacorb.jar" dest="${dist-classes.dir}" />
         </case>
         <default>
            <echo message="ADD_CORBA=${ADD_CORBA}: No CORBA support added." />
         </default>
      </switch>
      <switch value="${ADD_XMLRPC}">
         <case value="true">
            <echo message="Adding ${lib.dir}/xmlrpc.jar for XMLRPC support" />
            <unjar src="${lib.dir}/xmlrpc3/commons-logging-1.1.jar" dest="${dist-classes.dir}"/>
            <unjar src="${lib.dir}/xmlrpc3/ws-commons-util-1.0.2.jar" dest="${dist-classes.dir}"/>
            <unjar src="${lib.dir}/xmlrpc3/xmlrpc-client-3.1.1.jar" dest="${dist-classes.dir}"/>
            <unjar src="${lib.dir}/xmlrpc3/xmlrpc-common-3.1.1.jar" dest="${dist-classes.dir}"/>
            <unjar src="${lib.dir}/xmlrpc3/xmlrpc-server-3.1.1.jar" dest="${dist-classes.dir}"/>
         </case>
         <default>
            <echo message="ADD_XMLRPC=${ADD_XMLRPC}: No XMLRPC support added." />
         </default>
      </switch>
      <switch value="${ADD_SNMP}">
         <case value="true">
            <echo message="Adding ${lib.dir}/jax.jar for SNMP support" />
            <unjar src="${lib.dir}/jax.jar" dest="${dist-client.dir}/classes" />
         </case>
         <default>
            <echo message="ADD_SNMP=${ADD_SNMP}: No SNMP support added." />
         </default>
      </switch>
      <switch value="${ADD_PROP}">
         <case value="false">
            <echo message="Using default xmlBlaster.properties" />
            <copy file="config/xmlBlaster.properties.template" tofile="${dist-client.dir}/config/xmlBlaster.properties.template" overwrite="yes"/>
            <copy file="config/jacorb.properties.template" tofile="${dist-client.dir}/config/jacorb.properties.template" overwrite="yes"/>
         </case>
         <default>
            <echo message="Using ${ADD_PROP} -> ${dist.dir}/config/*.properties*" />
            <copy file="${ADD_PROP}" tofile="${dist-client.dir}/config/xmlBlaster.properties.template" overwrite="yes"/>
            <copy file="config/jacorb.properties.template" tofile="${dist-client.dir}/config/jacorb.properties.template" overwrite="yes"/>
         </default>
      </switch>
      <switch value="${ADD_PLUGINPROP}">
         <case value="false">
            <echo message="Using no xmlBlasterPlugins.xml on client side" />
            <!-- copy file="config/xmlBlasterPlugins.xml.template" tofile="${dist-client.dir}/config/xmlBlasterPlugins.xml.template" overwrite="yes"/ -->
         </case>
         <default>
            <echo message="Using ${ADD_PLUGINPROP} -> ${dist.dir}/config/*.xml*" />
            <copy file="${ADD_PLUGINPROP}" tofile="${dist-client.dir}/config/xmlBlasterPlugins.xml.template" overwrite="yes"/>
         </default>
      </switch>
      <echo message="Using ${ADD_LOGGINGPROP} -> ${dist-client.dir}/config/logging.properties" />
      <copy file="${ADD_LOGGINGPROP}" tofile="${dist-client.dir}/config/logging.properties" overwrite="yes"/>
      <switch value="${ADD_MANIFEST}">
         <case value="false">
            <echo message="Using default manifest.xmlBlaster" />
            <copy file="${config.dir}/manifest.xmlBlaster" tofile="${dist-client.dir}/config/manifest.xmlBlaster" overwrite="yes"/>
         </case>
         <default>
            <echo message="Using ${ADD_MANIFEST}" />
            <copy file="${ADD_MANIFEST}" tofile="${dist-client.dir}/config/manifest.xmlBlaster" overwrite="yes"/>
         </default>
      </switch>
      <switch value="${ADD_DIRECTORY}">
         <case value="false">
         </case>
         <default>
            <echo message="Adding ${ADD_DIRECTORY}" />
            <copy todir="${dist-client.dir}/classes">
               <fileset dir="${ADD_DIRECTORY}"/>
            </copy>
         </default>
      </switch>
      <switch value="${ADD_EMAIL}">
         <case value="true">
            <echo message="Adding ${lib.dir}/activation.jar and ${lib.dir}/mail.jar EMAIL libraries" />
            <unjar src="${lib.dir}/activation.jar" dest="${dist-client.dir}/classes" />
            <unjar src="${lib.dir}/mail.jar" dest="${dist-client.dir}/classes" />
         </case>
         <default>
            <echo message="ADD_EMAIL=${ADD_EMAIL}: No email support jar files added" />
         </default>
      </switch>

      <delete includeEmptyDirs="true"><fileset dir="${dist-client.dir}/classes" includes="**/META-INF/**"/></delete>
      <!--jar destfile="${dist-client.dir}/lib/xmlBlasterClient.jar" manifest="${dist-client.dir}/config/manifest.xmlBlaster" basedir="${dist-client.dir}/classes"/-->
      <!--Changes done by astelzl@avitech.de DIST_PATH is set in my build-file to copy the xmlBlasterClient.jar to the specified path-->
      <!--Same as dist target-->
      <jar destfile="${DIST_PATH}/lib/xmlBlasterClient.jar"
           manifest="${dist-client.dir}/config/manifest.xmlBlaster"
           basedir="${dist-client.dir}/classes"/>
      <!-- delete includeEmptyDirs="true"><fileset dir="${dist-client.dir}/classes" /></delete -->

      <echo message="--------------------------------------------"/>
      <echo message="Created ${dist-client.dir}/lib/xmlBlasterClient.jar"/>
      <echo message="It supports xmlBlaster java clients with the above noted protocols"/>
      <echo message="--------------------------------------------"/>
   </target>

   <!-- =================================================================== -->
   <!-- Creates a ActiveX Bridge (for use with C# and VisualBasic.Net)      -->
   <!-- Please use JDK 1.5 or higher for this                               -->
   <!-- build -DJRE_HOME=C:\PROGRA~1\Java\j2re1.5.0 -DJVM.target=1.4 activex -->
   <!-- =================================================================== -->
   <target name="activex" depends="dist-client-fast,activex-deploy" description="Creates a ActiveX Bridge (for use with C# and VisualBasic.Net)"/>
   <target name="activex-deploy" depends="" description="Creates a ActiveX Bridge (for use with C# and VisualBasic.Net)">
      <property name="JAVA_HOME" value="${env.JAVA_HOME}" />
      <property name="JRE_HOME" value="${env.JRE_HOME}" />
      <property name="CLSID" value="D824B185-AE3C-11D6-ABF5-00B0D07B8581" />
      <mkdir dir="${JRE_HOME}/axbridge"/>
      <mkdir dir="${JRE_HOME}/axbridge/lib"/>
      <mkdir dir="${JRE_HOME}/axbridge/bin"/>
      <delete file="${JRE_HOME}/axbridge/lib/xmlBlasterActiveX.jar"/>
      <delete file="${JRE_HOME}/axbridge/bin/XmlScriptAccess.dll"/>
      
      <jar destfile="${build.dir}/xmlBlasterActiveX.jar"
           manifest="${src.java.dir}/org/xmlBlaster/client/activex/manifest.activex"
           basedir="${build.dest}"
           includes="org/xmlBlaster/client/activex/*.class">
         <zipfileset src="${dist-client.dir}/lib/xmlBlasterClient.jar"/>
      </jar>
      <jar destfile="${build.dir}/xmlBlasterActiveX.jar"
           manifest="${src.java.dir}/org/xmlBlaster/client/activex/manifest.activex"
           basedir="${build.dest}"
           update="true"
           includes="org/xmlBlaster/client/activex/*.class"/>
      <echo message="Created: ${build.dir}/xmlBlasterActiveX.jar" />

      <echo message="Calling: ${JAVA_HOME}\bin\packager.exe -clsid {${CLSID}} -out ${JRE_HOME}\axbridge\bin -reg ${build.dir}/xmlBlasterActiveX.jar org.xmlBlaster.client.activex.XmlScriptAccess" />
      <exec dir="."
            executable="${JAVA_HOME}\bin\packager.exe"
            os="Windows XP"
            failonerror="true"
            vmlauncher="false"
            output="packager-activex.log">
         <!-- env key="CLASSPATH" value="lib/xmlBlaster.jar"/ -->
         <env key="CLASSPATH" value="${dist-client.dir}/lib/xmlBlasterClient.jar"/>
         <arg line="-clsid {${CLSID}} -out ${JRE_HOME}\axbridge\bin -reg ${build.dir}/xmlBlasterActiveX.jar org.xmlBlaster.client.activex.XmlScriptAccess" />
      </exec>

      <!-- Due to CLASSLOADER problem we copy the JDBC driver to JRE_HOME\lib\ext -->
      <copy todir="${JRE_HOME}/lib/ext" filtering="false">
         <fileset dir="lib">
            <include name="hsqldb.jar"/>
         </fileset>
      </copy>
      <echo message="activex done: See results under ${JRE_HOME}\axbridge"/>
   </target>

   <!-- =================================================================== -->
   <!-- Prepares env settings for C++ client library compilation            -->
   <!-- =================================================================== -->
   <target name="initialize-cpp" depends="prepare" description="For internal use only, C++ client environment">
      <echo message="Adjust following settings in build.properties if necessary:"/>
      <!-- echo message=" STL_HOME      = ${STL_HOME}"/ -->
      <echo message=" os.name       = ${os.name}"/>
      <echo message=" xerces.include.dir = ${xerces.include.dir}"/>
      <echo message=" xerces.lib.dir = ${xerces.lib.dir}"/>
      <echo message=" COMPILE_SOCKET_PLUGIN=${COMPILE_SOCKET_PLUGIN}"/>
      <echo message=" COMPILE_CORBA_PLUGIN=${COMPILE_CORBA_PLUGIN}"/>
      <echo message=" CORBACPP_HOME = ${CORBACPP_HOME}"/>
      <echo message=" CORBACPP_VER  = ${CORBACPP_VER}"/>
      <echo message=" XMLBLASTER_COMPILE_LOG4CPLUS_PLUGIN=${XMLBLASTER_COMPILE_LOG4CPLUS_PLUGIN}"/>
      <echo message=" XMLBLASTER_C_COMPILE_AS_CPP=${XMLBLASTER_C_COMPILE_AS_CPP}"/>

      <switch value="${cpp.debug}" caseinsensitive="false">
         <case value="true">
            <property name="CPP_DEBUG_POSTFIX" value="D" />
         </case>
         <default>
            <property name="CPP_DEBUG_POSTFIX" value="" />
         </default>
      </switch>
      <property name="cpp.obj.dir" value="${build.dir}/objCPP${CPP_DEBUG_POSTFIX}" />
      <property name="cpp.lib.name" value="xmlBlasterClient${CPP_DEBUG_POSTFIX}" />

      <switch value="${c.debug}" caseinsensitive="false">
         <case value="true">
            <property name="C_DEBUG_POSTFIX" value="D" />
         </case>
         <default>
            <property name="C_DEBUG_POSTFIX" value="" />
         </default>
      </switch>
      <property name="c.obj.dir" value="${build.dir}/objC${C_DEBUG_POSTFIX}" />
      <property name="c.lib.name" value="xmlBlasterClientC${C_DEBUG_POSTFIX}" />

      <!-- log4cplus -->
      <switch value="${os.family}" caseinsensitive="false">
         <case value="unix">
            <property name="LOG4CPLUS_OS_EXCLUDES" value="**/nteventlogappender.cxx,**/*win*,**/*mac*" />
         </case>
         <case value="windows">
            <property name="LOG4CPLUS_OS_EXCLUDES" value="**/*unix*,**/*mac*" />
            <property name="use-msvc" value="true" />
         </case>
         <case value="mac">
            <property name="LOG4CPLUS_OS_EXCLUDES" value="**/nteventlogappender.cxx,**/*win*,**/*unix*" />
         </case>
         <default>
            <property name="LOG4CPLUS_OS_EXCLUDES" value="" />
         </default>
      </switch>

      <switch value="${os.name}" caseinsensitive="false">
         <case value="Linux">
            <switch value="${use-icc}" caseinsensitive="true">
               <case value="true">
               </case>
               <default>                                   <!-- (Linux: The .so compiled fine without this but exe linking used wrong CC compiler (from sun) -->
                  <property name="use-gcc" value="true" /> <!-- TODO: build.properties has no chance to change this (e.g. for KAI compiler) -->
               </default>
            </switch>
         </case>                                     <!-- Probably we need to set it all the time in build.properties -->
         <case value="OSF1">                         <!-- Giglio Federico: OSF1 V5.1 1885 alpha machine using gcc (GCC) 3.3.1 -->
            <property name="use-gcc" value="true" />
         </case>
         <case value="Mac OS X">                     <!-- __IPhoneOS__ __MacOSX__ __OBJC__ __APPLE__ http://developer.apple.com/documentation/DeveloperTools/gcc-4.2.1/cpp/Standard-Predefined-Macros.html#Standard-Predefined-Macros -->
            <property name="use-gcc" value="true" />
         </case>
         <default>                                   <!-- (Linux: The .so compiled fine without this but exe linking used wrong CC compiler (from sun) -->
         </default>
      </switch>
      <echo message=" use-gcc       = ${use-gcc}"/>  <!-- Linux/UNIX default -->
      <echo message=" use-icc       = ${use-icc}"/>  <!-- Intel C/C++ compiler -->
      <echo message=" use-CC        = ${use-CC}"/>   <!-- SunOS C++, set in your build.properties -->
      <echo message=" use-msvc      = ${use-msvc}"/> <!-- LittleWeak default -->
      <echo message=" use-bcc       = ${use-bcc}"/>

      <echo message=" LOG4CPLUS_OS_EXCLUDES=${LOG4CPLUS_OS_EXCLUDES}"/>

      <condition property="ICC_HOME" value="${env.ICC_HOME}">
         <isset property="env.ICC_HOME"/> <!-- Path to Intel icc installation for rpath setting (to not need LD_LIBRARY_PATH setting) -->
      </condition>

      <condition property="cpp.compiler" value="GNU g++">
         <isset property="use-gcc"/>
      </condition>
      <condition property="cpp.compiler" value="Intel icc">
         <isset property="use-icc"/>
      </condition>
      <condition property="cpp.compiler" value="Sun CC">
         <isset property="use-CC"/>
      </condition>
      <condition property="cpp.compiler" value="Borland bcc">
         <isset property="use-bcc"/>
      </condition>
      <condition property="cpp.compiler" value="Microsoft msvc">
         <isset property="use-msvc"/>
      </condition>
      <filter token="cpp.compiler" value="${cpp.compiler}"/>
      <filter token="c.compiler" value="${cpp.compiler}"/>

      <property name="${corba.product}" value="true" /> <!-- Setting e.g. "MICO" or "TAO" to be used in if="" clause below -->
      <echo message=" Setting ${corba.product} = true" />
      <property name="${corba.product},${os.family}" value="true" /> <!-- Setting e.g. "MICO,windows" or "TAO,unix" to be used in if="" clause below -->
      <echo message=" Setting ${corba.product},${os.family} = true" />

      <property name="${thread.impl}" value="true" /> <!-- Setting e.g. "BOOST" or "OMNITHREAD" to be used in if="" clause below -->
      <echo message=" Setting ${thread.impl} = true" />

      <condition property="tao.lib.type" value="d">
         <equals arg1="${cpp.debug}" arg2="true" />
      </condition>

      <condition property="tao.lib.type" value="">
         <equals arg1="${cpp.debug}" arg2="false" />
      </condition>

      <switch value="${XMLBLASTER_COMPILE_LOG4CPLUS_PLUGIN}">
         <case value="1">
            <property name="COMPILE_LOG4CPLUS_EXCLUDES" value="" />
            <property name="COMPILE_LOG4CPLUS_DEFINE" value="1" />
         </case>
         <default>
            <property name="COMPILE_LOG4CPLUS_EXCLUDES" value="**/*.cxx" />
         </default>
      </switch>

      <switch value="${COMPILE_SOCKET_PLUGIN}">
         <case value="1">
            <property name="COMPILE_SOCKET_EXCLUDES" value="" />
            <property name="COMPILE_SOCKET_DEFINE" value="" />
         </case>
         <default>
            <property name="COMPILE_SOCKET_EXCLUDES" value="**/socket/**" />
         </default>
      </switch>

      <switch value="${COMPILE_CORBA_PLUGIN}">
         <case value="1">
            <property name="COMPILE_CORBA_EXCLUDES" value="" />
            <property name="COMPILE_CORBA_DEFINE" value="1" />
         </case>
         <default>
            <property name="COMPILE_CORBA_EXCLUDES" value="**/corba/**" />
         </default>
      </switch>

      <!-- Remove old stuff to simplify update, these two lines can be removed in May 2004 -->
      <delete file="${src.cpp.dir}/util/Global_CopyByAnt.cpp" />
      <delete file="${src.c.dir}/util/msgUtil_CopyByAnt.c" />
   </target>

   <target name="prepare-cpp" depends="initialize-cpp" description="For internal use only, C++ client environment">
      <!--
         C++: Copy all .cpp and .h files to the build.tmp directory.
        "@version@" and "@build.timestamp@" is replaced to current values by ant (Global.cpp)
      -->
      <copy todir="${build.src.cpp.dir}" filtering="true">
         <fileset dir="${src.cpp.dir}">
            <exclude name="README"/>
            <exclude name="xmlBlasterCppCE/**"/>
            <exclude name="**/log4cplus/property.cxx"/>
         </fileset>
      </copy>

      <!-- Hack for Windows and compiling log4cplus (see also the above exclude property.cxx): -->
      <!-- The Windows linker can't cope the same Porperty.obj file (one from xmlBlaster/util the other from xmlBlaster/log4cplus -->
      <copy file="${src.cpp.dir}/log4cplus/property.cxx" tofile="${build.src.cpp.dir}/log4cplus/property2.cxx"/>

      <!--
         C: Copy all .c and .h files to the build.tmp directory.
        "@version@" and "@build.timestamp@" is replaced to current values by ant (msgUtil.c)
      -->
      <copy todir="${build.src.c.dir}" filtering="true">
         <fileset dir="${src.c.dir}">
            <exclude name="README"/>
            <exclude name="**/pthreadVC*.*"/>
         </fileset>
      </copy>
      <copy todir="${build.src.c.dir}" filtering="false">
         <fileset dir="${src.c.dir}">
            <include name="**/pthreadVC*.*"/>
         </fileset>
      </copy>

   </target>

   <!-- =================================================================== -->
   <!-- Compile xmlBlaster.idl for MICO to create C++ CORBA stubs           -->
   <!-- =================================================================== -->
   <target name="cpp-corba-idl-MICO" description="Compiles xmlBlaster.idl for CORBA C++ clients">
      <!-- C++ compilation needs some OS dependend settings (sorry, but we currently only have UNIX & WINDOWS to test) -->
      <switch value="${os.family}" caseinsensitive="false">
         <case value="unix">
            <property name="idl.cmd.flag" value="" />
            <property name="idl.cmd" value="${CORBACPP_HOME}/bin/idl" />
         </case>
         <default>
            <property name="idl.cmd.flag" value="--windows-dll" />
            <property name="idl.cmd" value="${CORBACPP_HOME}/win32-bin/idl" />
         </default>
      </switch>

      <!-- Start IDL compiler to create CORBA stubs -->
      <uptodate property="idlBuild.done" targetfile="${build.src.cpp.dir}/generated/xmlBlaster.cpp" value="true">
         <srcfiles dir= "${idl.dir}" includes="xmlBlaster.idl"/>
      </uptodate>

      <if><equals arg1="${idlBuild.done}" arg2="true" />
         <then>
            <echo message="${corba.product} stubs and skeletons for os=${os.family} are up to date" />
         </then>
         <else>
            <echo message="Generating ${idl.dir}/xmlBlaster.idl ${corba.product} stubs and skeletons for os=${os.family}" />
            <!-- A typical MICO idl CORBA compile:
              /opt/mico/bin/idl - -poa - -c++-suffix cpp - -windows-dll /home/xmlblast/xmlBlaster/src/java/org/xmlBlaster/protocol/corba/xmlBlaster.idl
            -->
            <exec dir="${build.src.cpp.dir}/generated" executable="${idl.cmd}" failonerror="true" resultproperty="idl.returnvalue">
               <env key="LD_LIBRARY_PATH" path="${CORBACPP_HOME}/lib" /> <!-- Linux -->
               <env key="SHLIB_PATH" path="${CORBACPP_HOME}/lib" />      <!-- HPUX,SOLARIS -->
               <env key="LIBPATH" path="${CORBACPP_HOME}/lib" />         <!-- AIX -->
               <env key="PATH" path="${CORBACPP_HOME}/bin" />
               <arg line="--poa"/>
               <arg line="--c++-suffix cpp"/>
               <arg line="${idl.cmd.flag}"/>                             <!-- To export from windows DLL -->
               <arg line="${idl.file}"/>
            </exec>
            <!-- exec dir="${src}" executable="${CORBACPP_HOME}/bin/idl" os="Windows 2000" output="dir.txt" -->
            <echo message="IDL compilation returned ${idl.returnvalue}"/>
         </else>
      </if>
   </target>

   <!-- =================================================================== -->
   <!-- Compile xmlBlaster.idl for TAO to create C++ CORBA stubs            -->
   <!-- =================================================================== -->
   <target name="cpp-corba-idl-TAO" description="Compiles xmlBlaster.idl for CORBA C++ clients">
      <!-- C++ compilation needs some OS dependend settings (sorry, but we currently only have UNIX & WINDOWS to test) -->
      <switch value="${os.family}" caseinsensitive="true">
         <case value="unix">
            <property name="idl.cmd" value="${CORBACPP_HOME}/TAO_IDL/tao_idl" />
         </case>
         <default>
            <property name="idl.cmd" value="${CORBACPP_HOME}/../bin/tao_idl.exe" />
         </default>
      </switch>

      <!-- Start IDL compiler to create CORBA stubs -->
      <uptodate property="idlBuild.done" targetfile="${build.src.cpp.dir}/generated/xmlBlasterC.cpp" value="true">
         <srcfiles dir= "${idl.dir}" includes="xmlBlaster.idl"/>
      </uptodate>

      <if><equals arg1="${idlBuild.done}" arg2="true" />
         <then>
            <echo message="${corba.product} stubs and skeletons for os=${os.family} are up to date" />
         </then>
         <else>
            <echo message="Generating ${idl.dir}/xmlBlaster.idl ${corba.product} stubs and skeletons for os=${os.family}" />
            <exec dir="${build.src.cpp.dir}/generated" executable="${idl.cmd}" failonerror="true" resultproperty="idl.returnvalue">
               <arg line="-Ge 0 -Wb,pre_include=${xmlBlaster.home}/${build.src.cpp.dir}/util/XmlBCfg.h -Wb,export_macro=Dll_Export"/>
               <arg line="${idl.file}"/>
            </exec>
            <echo message="IDL compilation returned ${idl.returnvalue}"/>
         </else>
      </if>
   </target>

   <!-- =================================================================== -->
   <!-- Compile xmlBlaster.idl for OMNIORB to create C++ CORBA stubs        -->
   <!-- =================================================================== -->
   <target name="cpp-corba-idl-OMNIORB" depends="prepare" description="Compiles xmlBlaster.idl for omniOrb CORBA C++ clients">
      <switch value="${os.family}" caseinsensitive="true">
         <case value="unix">
            <property name="idl.cmd" value="${CORBACPP_HOME}/bin/${CORBACPP_VER}/omniidl" />
         </case>
         <default>
            <property name="idl.cmd" value="${CORBACPP_HOME}/bin/x86_win32/omniidl.exe" />
         </default>
      </switch>
      <uptodate property="idlBuild.done" targetfile="${build.src.cpp.dir}/generated/xmlBlaster.h" value="true">
         <srcfiles dir= "${idl.dir}" includes="xmlBlaster.idl"/>
      </uptodate>
      <if><equals arg1="${idlBuild.done}" arg2="true" />
         <then>
            <echo message="${corba.product} stubs and skeletons for os=${os.family} are up to date" />
         </then>
         <else>
            <echo message="Generating ${idl.dir}/xmlBlaster.idl ${corba.product} stubs and skeletons for os=${os.family}" />
            <exec dir="${build.src.cpp.dir}/generated" executable="${idl.cmd}" failonerror="true" resultproperty="idl.returnvalue">
               <env key="LD_LIBRARY_PATH" path="${CORBACPP_HOME}/lib" /> <!-- Linux -->
               <env key="PYTHONPATH" path="${CORBACPP_HOME}/lib/python2.2/site-packages" /> <!-- Linux -->
               <env key="SHLIB_PATH" path="${CORBACPP_HOME}/lib" />      <!-- HPUX,SOLARIS -->
               <env key="LIBPATH" path="${CORBACPP_HOME}/lib" />         <!-- AIX -->
               <env key="PATH" path="${CORBACPP_HOME}/bin" />
               <arg line="-bcxx -Wbh=.h -Wbs=.cpp"/>
               <arg line="${idl.file}"/>
            </exec>
            <echo message="IDL compilation returned ${idl.returnvalue}"/>
         </else>
      </if>
   </target>

   <!-- =================================================================== -->
   <!-- Compile xmlBlaster.idl for ORBIX to create C++ CORBA stubs            -->
   <!-- =================================================================== -->
   <target name="cpp-corba-idl-ORBIX" description="Compiles xmlBlaster.idl for CORBA C++ clients">
      <!-- C++ compilation needs some OS dependend settings (sorry, but we currently only have UNIX & WINDOWS to test) -->
      <switch value="${os.family}" caseinsensitive="true">
         <case value="unix">
            <property name="idl.cmd" value="${CORBACPP_HOME}/${CORBACPP_VER}/bin/idl" />
         </case>
         <default>
            <property name="idl.cmd" value="${CORBACPP_HOME}/asp/5.1/bin/idl.exe" />
         </default>
      </switch>

      <!-- Start IDL compiler to create CORBA stubs -->
      <uptodate property="idlBuild.done" targetfile="${build.src.cpp.dir}/generated/xmlBlasterS.cpp" value="true">
         <srcfiles dir= "${idl.dir}" includes="xmlBlaster.idl"/>
      </uptodate>

      <if><equals arg1="${idlBuild.done}" arg2="true" />
         <then>
            <echo message="${corba.product} stubs and skeletons for os=${os.family} are up to date" />
         </then>
         <else>
            <echo message="Generating ${idl.dir}/xmlBlaster.idl ${corba.product} stubs and skeletons for os=${os.family}" />
            <exec dir="${build.src.cpp.dir}/generated" executable="${idl.cmd}" failonerror="true" resultproperty="idl.returnvalue">
               <arg line="-base:-cS.cpp:-hS.h"/>
               <arg line="-poa:-c.cpp:-h.h:-bS.h"/>
               <arg line="${idl.file}"/>
            </exec>
            <echo message="IDL compilation returned ${idl.returnvalue}"/>
         </else>
      </if>
   </target>

   <!-- =================================================================== -->
   <!-- Compile xmlBlaster.idl for ORBACUS to create C++ CORBA stubs        -->
   <!-- =================================================================== -->
   <target name="cpp-corba-idl-ORBACUS" description="Compiles xmlBlaster.idl for CORBA C++ clients">
      <!-- C++ compilation needs some OS dependend settings (sorry, but we currently only have UNIX & WINDOWS to test) -->
      <switch value="${os.family}" caseinsensitive="true">
         <case value="unix">
            <property name="idl.cmd" value="${CORBACPP_HOME}/bin/idl" />
         </case>
         <default>
            <property name="idl.cmd" value="${CORBACPP_HOME}/bin/idl.exe" />
         </default>
      </switch>

      <!-- Start IDL compiler to create CORBA stubs -->
      <uptodate property="idlBuild.done" targetfile="${build.src.cpp.dir}/generated/xmlBlaster.cpp" value="true">
         <srcfiles dir= "${idl.dir}" includes="xmlBlaster.idl"/>
      </uptodate>

      <if><equals arg1="${idlBuild.done}" arg2="true" />
         <then>
            <echo message="${corba.product} stubs and skeletons for os=${os.family} are up to date" />
         </then>
         <else>
            <echo message="Generating ${idl.dir}/xmlBlaster.idl ${corba.product} stubs and skeletons for os=${os.family}" />
            <exec dir="${build.src.cpp.dir}/generated" executable="${idl.cmd}" failonerror="true" resultproperty="idl.returnvalue">
               <arg line=""/>
               <arg line="${idl.file}"/>
            </exec>
            <echo message="IDL compilation returned ${idl.returnvalue}"/>
         </else>
      </if>
   </target>

   <!-- =================================================================== -->
   <!-- c++ client integration - create libxmlBlasterClient.sl (so,dll)     -->
   <!-- See http://ant-contrib.sourceforge.net/cc.html                      -->
   <!-- =================================================================== -->
   <target name="cpp-lib" depends="prepare-cpp,c-lib" description="c++ client integration - create libxmlBlasterClient.sl (dll)">

      <!-- We use some helper from the C-lib (queue, zlib, SOCKET)
         OR XMLBLASTER_PERSISTENT_QUEUE
      <switch value="${COMPILE_SOCKET_PLUGIN}">
         <case value="1">
            <echo message="calling ant target c-lib for SOCKET protocol plugin ..." />
            <antcall target="c-lib"/>
            <echo message="c-lib done, continue with cpp-lib ..." />
         </case>
         <default>
         </default>
      </switch>
      -->

      <switch value="${COMPILE_CORBA_PLUGIN}">
         <case value="1">
            <echo message="calling ant target cpp-corba-idl-${corba.product} for CORBA protocol support ..." />
            <antcall target="cpp-corba-idl-${corba.product}"/>  <!-- Call e.g. "cpp-corba-idl-MICO" for MICO -->
            <echo message="cpp-corba-idl-${corba.product} done, continue with cpp-lib ..." />
         </case>
         <default>
         </default>
      </switch>

      <!-- Build a shared library xmlBlasterClient.so, xmlBlasterClient.sl or xmlBlasterClient.dll -->
      <!-- A typical compile:
        g++ -g
            -fpic -I/opt/local/mico/include -DMICO -c /opt/local/xmlBlaster/src/c++/generated/xmlBlaster.cc
       -->
      <!-- A typical shared library link:
        g++ -shared -g
            -o /opt/local/xmlBlaster/lib/libxmlBlasterClient.so.0.79d
            /opt/local/xmlBlaster/src/c++/client/CorbaConnection.o /opt/local/xmlBlaster/src/c++/util/CompatibleCorba.o /opt/local/xmlBlaster/src/c++/util/Log.o /opt/local/xmlBlaster/src/c++/generated/xmlBlaster.o
      -->
      <!--
         cl /W3 -DOMNITHREAD /c /nologo /GX /Zi /Od /GZ /D_DEBUG /MDd /DXMLBLASTER_TAO=1 /D__WIN32__ /D_WIN32_WINNT=0x0400 /D__x86__ /D__NT__ /D__O
         SVERSION__=4 /D_OMNITHREAD_DLL=1 /DWIN32=1 /D_WINDLL=1 /D_MBCS=1 /D_WINDOWS=1 /IC:\Marcel\xmlBlaster\src\c++ /IC:\Marcel\ACE_wrappers\TAO /IC:\Marce
         l\ACE_wrappers /IC:\Marcel\ACE_wrappers\TAO\orbsvcs /IC:\Marcel\ACE_wrappers\TAO\include /IC:\Marcel\xmlBlaster\src\c++\generated /IC:\Marcel\ACE_wrap
         pers\TAO\include\windows /IC:\Marcel\xerces-c2_2_0-win32\src /IC:\Marcel\xerces-c2_2_0-win32\src\xercesc /IC:\Marcel\xerces-c2_2_0-win32\include /IC:\
         Marcel\xerces-c2_2_0-win32\include\xercesc C:\Marcel\xmlBlaster\src\c++\util\qos\ConnectQosFactory.cpp C:\Marcel\xmlBlaster\src\c++\util\qos\AccessFil
         terQos.cpp C:\Marcel\xmlBlaster\src\c++\util\key\KeyData.cpp C:\Marcel\xmlBlaster\src\c++\util\Property.cpp C:\Marcel\xmlBlaster\src\c++\util\qos\stor
         age\CbQueueProperty.cpp C:\Marcel\xmlBlaster\src\c++\util\Constants.cpp

         link @C:\Marcel\xmlBlaster\lib\xmlBlasterClient.rsp
           Creating library xmlBlasterClient.lib and object xmlBlasterClient.exp

         === xmlBlasterClient.rsp contains: ===
         /NOLOGO
         /DEBUG
         /DLL
         /INCREMENTAL:NO
         /OUT:xmlBlasterClient.dll
         ..\..\ACE_wrappers\ace\aced.lib
         ..\..\ACE_wrappers\TAO\tao\TAOd.lib
         ..\..\ACE_wrappers\TAO\tao\PortableServer\TAO_PortableServerd.lib
         ..\..\ACE_wrappers\TAO\orbsvcs\orbsvcs\TAO_CosNamingd.lib
         ..\..\xerces-c2_2_0-win32\lib\xerces-c_2.lib
         ..\build\obj\QueryKeyData.obj
         ..\build\obj\Timeout.obj
         ...

        RESULT:
         06/24/2003  11:46 AM         3,178,496 xmlBlasterClient.dll
         06/24/2003  11:46 AM           668,081 xmlBlasterClient.exp
         06/24/2003  11:46 AM         1,098,054 xmlBlasterClient.lib
         06/24/2003  11:46 AM         7,195,648 xmlBlasterClient.pdb
         06/24/2003  11:46 AM             2,957 xmlBlasterClient.rsp
       -->
      <mkdir dir="${cpp.obj.dir}"/>

      <!-- CPP_LINK==shared links a shared library xmlBlaster/lib/libxmlBlaster.so -->
      <cc debug="${cpp.debug}" outtype="${CPP_LINK}"
          outfile="${lib.dir}/${cpp.lib.name}" objdir="${cpp.obj.dir}"
          multithreaded="true" exceptions="true">
         <compiler refid="icc"/>
         <compiler refid="msvc"/> <!-- MS VC++ 7 -->
         <compiler refid="bcc"/>  <!-- Borland -->
         <compiler refid="CC"/>   <!-- SunOS C++ 5.3 -->
         <compiler refid="g++"/>  <!-- GCC -->
         <fileset dir="${build.src.cpp.dir}/generated" includes="**/*.cpp"/>
         <fileset dir="${build.src.cpp.dir}/util" includes="**/*.cpp" excludes="**/SQLiteQueuePlugin.*"/>
         <fileset dir="${build.src.cpp.dir}/client" includes="**/*.cpp"
                  excludes="${COMPILE_SOCKET_EXCLUDES},${COMPILE_CORBA_EXCLUDES}" />
                        <fileset dir="${build.src.cpp.dir}/authentication" includes="**/*.cpp" />
                        <fileset dir="${build.src.cpp.dir}/contrib" includes="**/*.cpp" />
         <!-- i don't think we need these libs. Boost 1.30 comes with all the classes defined here
         <fileset dir="${build.src.cpp.dir}/libs/thread/src" includes="*.cpp" if="BOOST" />
         -->
         <fileset dir="${build.src.cpp.dir}/omnithread" includes="*.cpp" if="OMNITHREAD" />
         <fileset dir="${build.src.cpp.dir}/log4cplus" includes="**/*.cxx"
                  excludes="${COMPILE_LOG4CPLUS_EXCLUDES},${LOG4CPLUS_OS_EXCLUDES}" />
         <fileset dir="${build.src.cpp.dir}/util/queue" includes="SQLiteQueuePlugin.cpp" if="XMLBLASTER_PERSISTENT_QUEUE"/>
         <fileset dir="${build.src.cpp.dir}/util/queue" includes="SQLiteQueuePlugin.cpp" if="XMLBLASTER_PERSISTENT_QUEUE_SQLITE3"/>

         <includepath location="${build.src.cpp.dir}" />

         <!-- sysincludepath location="${STL_HOME}/stlport" /-->
         <sysincludepath location="${CORBACPP_HOME}" if="TAO" /> <!-- TAO -->
         <sysincludepath location="${CORBACPP_HOME}/.." if="TAO" /> <!-- TAO -->
         <sysincludepath location="${CORBACPP_HOME}/orbsvcs" if="TAO" /> <!-- TAO -->
         <sysincludepath location="${CORBACPP_HOME}/include" /> <!-- MICO, OMNIORB -->
         <sysincludepath location="${CORBACPP_HOME}/include/omniORB4" /> <!-- MICO, OMNIORB -->
         <sysincludepath location="${build.src.cpp.dir}/generated" /> <!-- ORBACUS -->

         <sysincludepath location="${CORBACPP_HOME}/include/windows" if="MICO,windows" /> <!-- MICO necessary for mico on win32 -->
         <sysincludepath location="${CORBACPP_HOME}/${CORBACPP_VER}/${CXX}/include" if="ORBIX,unix" />
         <sysincludepath location="${CORBACPP_HOME}/asp/${CORBACPP_VER}/include" if="ORBIX,windows" />
         <sysincludepath location="${xerces.include.dir}" />           <!-- Since xerces 1.7.0 (inclusive xerces 2.6) -->

         <includepath location="${build.src.c.dir}" />   <!-- Using the C SOCKET client library -->
         
         <defineset> <!-- See compiler id="base-msvc" at top of file -->

           <define name="XBL_IDL_WITH_WSTRING" value="1" if="XBL_IDL_WITH_WSTRING" />
           <define name="COMPILE_CORBA_PLUGIN" value="1" if="COMPILE_CORBA_DEFINE" />   <!-- Add the Corba protocol plugin? -->
           <define name="COMPILE_SOCKET_PLUGIN" value="1" if="COMPILE_SOCKET_DEFINE" />   <!-- Add the C socket library wrapper plugin? -->
           <define name="XMLBLASTER_${corba.product}" value="1" />   <!-- "XMLBLASTER_TAO" or "XMLBLASTER_MICO" or "XMLBLASTER_ORBIX" etc., see client/protocol/corba/CompatibleCorba.h -->
           <define name="XMLBLASTER_COMPILE_LOG4CPLUS_PLUGIN" value="1" if="COMPILE_LOG4CPLUS_DEFINE" />   <!-- Add the log4cplus logging library -->
           <define name="XMLBLASTER_PERSISTENT_QUEUE" value="1" if="XMLBLASTER_PERSISTENT_QUEUE" /> <!-- Use persistent queue -->
           <define name="XMLBLASTER_PERSISTENT_QUEUE_SQLITE3" value="1" if="XMLBLASTER_PERSISTENT_QUEUE_SQLITE3" /> <!-- Use persistent queue -->
           <define name="XMLBLASTER_ZLIB" value="1" if="XMLBLASTER_ZLIB" /> <!-- Add command line define -->
           <define name="XMLBLASTER_NO_RCSID" value="1" if="XMLBLASTER_NO_RCSID" /> <!-- no rcsid string if svnversion makes problem in Global.cpp -->

           <define name="__WIN32__" if="windows"/>                   <!-- omnithread, OMNIORB -->
           <define name="RTCs" value="1" if="windows" /> <!-- show stack problems -->
           <define name="RTCu" value="1" if="windows" /> <!-- show uninitialized vars -->
           <define name="_WIN32_WINNT" value="0x0400" if="windows"/> <!-- omnithread, OMNIORB -->
           <define name="__x86__" if="windows"/>                     <!-- omnithread, OMNIORB -->  <!-- ${sun.cpu.endian}="little" -->
           <define name="__NT__" if="windows"/>                      <!-- omnithread, OMNIORB -->
           <define name="__OSVERSION__" value="4" if="windows"/>     <!-- omnithread, OMNIORB -->
           <define name="_OMNITHREAD_DLL" value="1" if="windows"/>   <!-- omnithread, OMNIORB -->

           <undefine name="HAVE_LSTAT" if="windows" /> <!-- log4cplus only configurator.cxx:604-->
           <define name="LOG4CPLUS_BUILD_DLL" value="1" if="windows" /> <!-- log4cplus only -->
           <define name="_WIN32" value="1" if="windows" />        <!-- log4cplus only -->
           <define name="WIN32" value="1" if="windows" />
           <define name="_WINDOWS" value="1" if="windows" />
           <define name="_WINDLL" value="1" if="windows" />     <!-- Needed in XmlBCfg.h, sets DLL_Export -->
           <define name="_MBCS" value="1" if="windows" />         <!-- TCHAR == char -->
           <!--define name="_USRDLL" value="1" if="windows" /-->  <!-- Regular DLLs that statically link to MFC only -->
           <!--define name="_WINDLL" value="1" if="windows" /-->  <!-- Regular DLLs that statically link to MFC only -->
           <!-- undefine name="UNWANTEDDEF" / -->                 <!-- example only -->

           <define name="__linux" value="1" if="linux" />

           <define name="__sunos__" value="1" if="sun" />
           <define name="__sparc__" value="1" if="sun" />
           <define name="__OSVERSION__" value="5" if="sun" />
           <define name="SVR4" value="1" if="sun" />
           <define name="UsePthread" value="1" if="sun" />
           <define name="_REENTRANT" value="1" if="sun" />
           <define name="PthreadDraftVersion" value="${PthreadDraftVersion}" if="sun" />

           <!-- To correctly include C lib headers -->
           <define name="XMLBLASTER_C_COMPILE_AS_CPP" value="1" if="sun" /> <!-- Compile lib as C++ until somebody adds a 'cc' task to our build.xml -->
           <define name="XMLBLASTER_C_COMPILE_AS_CPP" value="1" if="XMLBLASTER_C_COMPILE_AS_CPP" /> <!-- Compile lib as C++ until somebody adds a 'cc' task to our build.xml -->

           <define name="BOOST_ASSERT_CONFIG" value="1" if="BOOST" /> <!-- To get error if compiler etc is not supported -->
           <define name="BOOST" value="1" if="BOOST" /> <!-- ThreadImpl.cpp looks for BOOST -->
         </defineset>

         <!-- Mac OSX TODO: if on command line 'gcc' is used linking fails -->
         <!-- Workaround: 'ln -s /usr/bin/g++ gcc' at beginning of path -->
         <linker name="g++"  if="OSX">
            <linkerarg value="${LDFLAGS}" if="LDFLAGS"/>
            <libset dir="${xerces.lib.dir}" libs="${xerces.lib.name}" />
            <libset dir="${lib.dir}" libs="${c.lib.name}" />
            <libset dir="${sqlite.lib.dir}" libs="sqlite" if="XMLBLASTER_PERSISTENT_QUEUE" />
            <libset dir="${sqlite.lib.dir}" libs="sqlite3" if="XMLBLASTER_PERSISTENT_QUEUE_SQLITE3" />
            <libset dir="${zlib.lib.dir}" libs="${zlib.lib.name}" if="XMLBLASTER_ZLIB" />
         </linker>

         <linker name="gcc"  if="use-gcc">
           <linkerarg value="${LDFLAGS}" if="LDFLAGS"/>
         </linker>

         <linker name="icc"  if="use-icc">
           <linkerarg value="${LDFLAGS}" if="LDFLAGS"/>
         </linker>

         <linker name="msvc" if="use-msvc"> <!-- linker does not support nested switch -->
            <!-- TAO -->
            <fileset dir="${CORBACPP_HOME}/../ace" includes="ace${tao.lib.type}.lib" if="TAO,windows" />
            <fileset dir="${CORBACPP_HOME}/tao" includes="TAO${tao.lib.type}.lib" if="TAO,windows" />
            <fileset dir="${CORBACPP_HOME}/tao/PortableServer" includes="TAO_PortableServer${tao.lib.type}.lib" if="TAO,windows" />
            <fileset dir="${CORBACPP_HOME}/orbsvcs/orbsvcs" includes="TAO_CosNaming${tao.lib.type}.lib" if="TAO,windows" />

            <!-- libset dir="${STL_HOME}/lib" libs="stlport_gcc" /-->

            <!-- MICO -->
            <libset dir="${CORBACPP_HOME}/win32-bin" libs="mico${CORBACPP_VER},micocoss${CORBACPP_VER}" if="MICO,windows" />
            <libset dir="${CORBACPP_HOME}/win32-bin/lib" libs="mico${CORBACPP_VER},micocoss${CORBACPP_VER}" if="MICO,windows" />
            <syslibset libs="ws2_32" if="MICO,windows" />

            <!-- ORBIX -->
            <libset dir="${CORBACPP_HOME}/asp/${CORBACPP_VER}/lib" libs="${ORBIX_LIBS}" if="ORBIX" />

            <!-- OMNIORB -->
            <libset dir="${CORBACPP_HOME}/lib/${CORBACPP_VER}" libs="${OMNIORB_LIBS}" if="OMNIORB" />

            <!-- ORBACUS -->
            <libset dir="${CORBACPP_HOME}/lib" libs="${ORBACUS_LIBS}" if="ORBACUS" />

            <!-- XERCES XML parser -->
            <libset dir="${xerces.lib.dir}" libs="${xerces.lib.name}${CPP_DEBUG_POSTFIX}" if="windows" />

            <!-- xmlBlasterClientC.so -->
            <libset dir="${lib.dir}" libs="${c.lib.name}" />

            <!-- libsqlite.so --> 
            <libset dir="${sqlite.lib.dir}" libs="sqlite" if="XMLBLASTER_PERSISTENT_QUEUE" />
            <libset dir="${sqlite.lib.dir}" libs="sqlite3" if="XMLBLASTER_PERSISTENT_QUEUE_SQLITE3" />

            <!-- zlib.dll (libz.so) -->
            <libset dir="${zlib.lib.dir}" libs="${zlib.lib.name}" if="XMLBLASTER_ZLIB" />
         </linker>

         <linker name="bcc"  if="use-bcc">
           <linkerarg value="${LDFLAGS}" if="LDFLAGS"/>
         </linker>

         <linker name="CC"  if="use-CC">
           <linkerarg value="${LDFLAGS}" if="LDFLAGS"/>
           <linkerarg value="-mt"/>
           <linkerarg value="-lpthread"/>
           <linkerarg value="-lxmlBlasterClientC${C_DEBUG_POSTFIX}"/>
         </linker>
      </cc>
   </target>  <!-- cpp-lib -->


   <!-- =================================================================== -->
   <!-- c++ client integration - create C++ test clients                    -->
   <!-- See http://ant-contrib.sourceforge.net/cc.html                      -->
   <!-- =================================================================== -->
   <!--
      Linux:
        g++ -g -Wall -I/opt/local/mico/include
                     -I/opt/xerces-c-src1_5_1/include
                     -I/home/xmlblast/xmlBlaster/src/c++
                     -DMICO -c TestGet.cpp
        g++ -g -Wall -Wl,-rpath=/home/xmlblast/xmlBlaster/lib -Wl,-rpath=/opt/xerces-c-src1_5_1/lib -Wl,-rpath=/opt/local/mico/lib
                     TestGet.o -o/home/xmlblast/xmlBlaster/testsuite/src/c++/bin/TestGet
                     -L/opt/xerces-c-src1_5_1/lib -lxerces-c1_5_1 -lpthread -ldl
                     -L/opt/local/mico/lib -lmico2.3.6 -lpthread
                     -L/opt/local/mico/lib -lmicocoss2.3.6
                     -L/home/xmlblast/xmlBlaster/lib -lxmlBlasterClient -lstdc++

       Using STLport 4.5.1 gives a problem when linking an executable (on Linux):
           /home/xmlblast/xmlBlaster/lib/libxmlBlasterClient.so: undefined reference to `CORBA::UserException::_print(_STL::basic_ostream<char, _STL::char_traits<char> > &) const'

      Windows:
       set CFLAGS=/c /nologo /D_WINDOWS /GX /GR /TP /MTd  /DMICO=1 /I.  /IE:\mico\include /IE:\mico\include\windows /nologo /D_WINDOWS /IE:\xmlBlaster\src\c++
       cl.exe %CFLAGS% /FoE:\xmlBlaster\build\obj\Log.obj E:\xmlBlaster\src\c++\util\Log.cpp
       cl.exe %CFLAGS% /FoE:\xmlBlaster\build\obj\xmlBlaster.obj E:\xmlBlaster\src\c++\generated\xmlBlaster.cpp
       cl.exe %CFLAGS% /FoE:\xmlBlaster\build\obj\CompatibleCorba.obj E:\xmlBlaster\src\c++\util\CompatibleCorba.cpp
       cl.exe %CFLAGS%  /IE:\xerces-c-src1_6_0\src /IE:\xerces-c-src1_6_0\include /FoE:\xmlBlaster\build\obj\CorbaConnection.obj E:\xmlBlaster\src\c++\client\CorbaConnection.cpp
   -->
   <target name="cpp-test" depends="prepare-cpp" description="Create C++ test clients">
      <foreach list="TestRequestResponse,TestQueue,TestProperty,TestClientProperty,TestLeaveServer,TestGet,TestSub,TestStringTrim,TestCommand,TestConnectQos,TestEmbeddedServer,TestFailsafe,TestConnect,TestSubXPath,TestRam,TestTimeout,TestTimestamp,TestCorbaDriver,TestThread,TestKeys,TestDoubleGlobal"
               target="compileCppExe" param="exeName" delimiter="," inheritAll="true">
         <param name="compileCppSourcePath" value="${testsuite.dir}/src/c++" />
      </foreach>
   </target>

   <!--
      Here an example on how to compile a single test application ...
      ./build -DexeName=TestGet cpp-test-single
   -->
   <target name="cpp-test-single" depends="prepare-cpp" description="Create single C++ test client">
      <foreach list="${cppToCompile}"
               target="compileCppExe" param="exeName" delimiter="," inheritAll="true">
         <param name="compileCppSourcePath" value="${testsuite.dir}/src/c++" />
      </foreach>
   </target>

   <!--
      Here an example on how to compile a single test application ...
      ./build -DexeName=HelloWorld2 cpp-demo-single
   -->
   <target name="cpp-demo-single" depends="prepare-cpp" description="Create single C++ demo client">
      <foreach list="${cppToCompile}"
               target="compileCppExe" param="exeName" delimiter="," inheritAll="true">
         <param name="compileCppSourcePath" value="${demo.dir}/c++" />
      </foreach>
   </target>

   <target name="cpp-demo" depends="prepare-cpp" description="Create C++ demo clients">
      <foreach list="HelloWorld2,PublishDemo,SubscribeDemo,ExternOrb,TestEmptyContent,FileWriterApp"
               target="compileCppExe" param="exeName" delimiter="," inheritAll="true">
         <param name="compileCppSourcePath" value="${demo.dir}/c++" />
      </foreach>
   </target>

   <target name="compileCppExe" description="For internal use only (C++ clients build)">
      <echo message="Compiling of C++ test client '${compileCppSourcePath}/bin/${exeName}' ..."/>
      <mkdir dir="${cpp.obj.dir}"/>
      <mkdir dir="${compileCppSourcePath}/bin"/>
      <cc debug="${cpp.debug}"
          outtype="executable"
          outfile="${compileCppSourcePath}/bin/${exeName}"
          objdir="${cpp.obj.dir}"
          multithreaded="true"
          exceptions="true"
          subsystem="console">
         <compiler refid="g++"/>
         <compiler refid="icc"/>
         <compiler refid="msvc"/>
         <compiler refid="bcc"/>
         <compiler refid="CC"/>
         <fileset dir="${compileCppSourcePath}" includes="${exeName}.cpp"/>
         <includepath location="${build.src.cpp.dir}" />
         <!-- sysincludepath location="${STL_HOME}/stlport" / -->

         <sysincludepath location="${CORBACPP_HOME}" if="TAO" />          <!-- TestCorbaDriver.cpp only which uses CORBA directly -->
         <sysincludepath location="${CORBACPP_HOME}/.." if="TAO" />       <!-- TestCorbaDriver.cpp only which uses CORBA directly -->
         <sysincludepath location="${CORBACPP_HOME}/orbsvcs" if="TAO" />  <!-- TestCorbaDriver.cpp only which uses CORBA directly -->
         <sysincludepath location="${CORBACPP_HOME}/include" if="MICO" /> <!-- TestCorbaDriver.cpp only which uses CORBA directly -->
         <sysincludepath location="${CORBACPP_HOME}/include" if="OMNIORB" /> <!-- TestCorbaDriver.cpp only which uses CORBA directly -->
         <sysincludepath location="${CORBACPP_HOME}/include" if="ORBACUS" /> <!-- TestCorbaDriver.cpp only which uses CORBA directly -->
         <sysincludepath location="${build.src.cpp.dir}/generated" if="ORBACUS" /> <!-- TestCorbaDriver.cpp only which uses CORBA directly -->
         <sysincludepath location="${CORBACPP_HOME}/${CORBACPP_VER}/${CXX}/include" if="ORBIX,unix" /> <!-- TestCorbaDriver.cpp only which uses CORBA directly -->
         <sysincludepath location="${CORBACPP_HOME}/asp/${CORBACPP_VER}/include" if="ORBIX,windows" />
         <sysincludepath location="${CORBACPP_HOME}/shlib" if="ORBIX" />  <!-- TestCorbaDriver.cpp only which uses CORBA directly -->

         <sysincludepath location="${xerces.include.dir}" />              <!-- Since xerces 1.7.0 -->

         <!-- syslibset dir="/usr/lib" libs="stdc++" if="unix"/ -->

         <defineset> <!-- See compiler id="base-msvc" at top of file -->
           <define name="XBL_IDL_WITH_WSTRING" value="1" if="XBL_IDL_WITH_WSTRING" />
           <define name="COMPILE_CORBA_PLUGIN" value="1" if="COMPILE_CORBA_DEFINE" />   <!-- Add the Corba protocol plugin? -->
           <define name="COMPILE_SOCKET_PLUGIN" value="1" if="COMPILE_SOCKET_DEFINE" />   <!-- Add the C socket library wrapper plugin? -->
           <define name="XMLBLASTER_${corba.product}" value="1" />   <!-- "XMLBLASTER_TAO" or "XMLBLASTER_MICO" or "XMLBLASTER_ORBIX" etc., see client/protocol/corba/CompatibleCorba.h -->
           <define name="XMLBLASTER_COMPILE_LOG4CPLUS_PLUGIN" value="1" if="COMPILE_LOG4CPLUS_DEFINE" />   <!-- Add the log4cplus logging library -->
           <define name="XMLBLASTER_PERSISTENT_QUEUE" value="1" if="XMLBLASTER_PERSISTENT_QUEUE" /> <!-- Use persistent queue -->
           <define name="XMLBLASTER_PERSISTENT_QUEUE_SQLITE3" value="1" if="XMLBLASTER_PERSISTENT_QUEUE_SQLITE3" /> <!-- Use persistent queue -->
           <define name="XMLBLASTER_ZLIB" value="1" if="XMLBLASTER_ZLIB" /> <!-- Add command line define -->

           <define name="__WIN32__" if="windows"/>                   <!-- omnithread, OMNIORB -->
           <define name="RTCs" value="1" if="windows" /> <!-- show stack problems -->
           <define name="RTCu" value="1" if="windows" /> <!-- show uninitialized vars -->
           <define name="_WIN32_WINNT" value="0x0400" if="windows"/> <!-- omnithread, OMNIORB -->
           <define name="__x86__" if="windows"/>                     <!-- omnithread, OMNIORB -->  <!-- ${sun.cpu.endian}="little" -->
           <define name="__NT__" if="windows"/>                      <!-- omnithread, OMNIORB -->
           <define name="__OSVERSION__" value="4" if="windows"/>     <!-- omnithread, OMNIORB -->
           <define name="_OMNITHREAD_DLL" value="1" if="windows"/>   <!-- omnithread, OMNIORB -->

           <undefine name="HAVE_LSTAT" if="windows" /> <!-- log4cplus only configurator.cxx:604-->
           <define name="LOG4CPLUS_BUILD_DLL" value="1" if="windows" /> <!-- log4cplus only -->
           <define name="_WIN32" value="1" if="windows" />        <!-- log4cplus only -->
           <define name="WIN32" value="1" if="windows" />
           <define name="_WINDOWS" value="1" if="windows" />
           <define name="_MBCS" value="1" if="windows" />         <!-- TCHAR == char -->
           <!--define name="_USRDLL" value="1" if="windows" /-->  <!-- Regular DLLs that statically link to MFC only -->
           <!--define name="_WINDLL" value="1" if="windows" /-->  <!-- Regular DLLs that statically link to MFC only -->
           <!-- undefine name="UNWANTEDDEF" / -->                 <!-- example only -->

           <define name="__linux" value="1" if="linux" />

           <define name="__sunos__" value="1" if="sun" />
           <define name="__sparc__" value="1" if="sun" />
           <define name="__OSVERSION__" value="5" if="sun" />
           <define name="SVR4" value="1" if="sun" />
           <define name="UsePthread" value="1" if="sun" />
           <define name="_REENTRANT" value="1" if="sun" />
           <define name="PthreadDraftVersion" value="${PthreadDraftVersion}" if="sun" />

           <define name="BOOST_ASSERT_CONFIG" value="1" if="BOOST" /> <!-- To get error if compiler etc is not supported -->
         </defineset>

         <linker name="g++"  if="use-gcc">
            <linkerarg value="${LDFLAGS}" if="LDFLAGS"/>
            <linkerarg value="-Wl,-rpath=${CORBACPP_HOME}/../ace" if="TAO" unless="OSX" />
            <linkerarg value="-Wl,-rpath=${CORBACPP_HOME}/lib" if="MICO" unless="OSX" />
            <linkerarg value="-Wl,-rpath=${CORBACPP_HOME}/lib" if="OMNIORB" unless="OSX" />
            <linkerarg value="-Wl,-rpath=${CORBACPP_HOME}/${CORBACPP_VER}/${CXX}/lib" if="ORBIX" unless="OSX" />
            <linkerarg value="-Wl,-rpath=${xerces.lib.dir}" unless="OSX"/>
            <linkerarg value="-Wl,-rpath=${lib.dir.absolute}" unless="OSX" />
            <linkerarg value="-Wl,-rpath=${sqlite.lib.dir}" if="XMLBLASTER_PERSISTENT_QUEUE" unless="OSX" />
            <linkerarg value="-Wl,-rpath=${sqlite.lib.dir}" if="XMLBLASTER_PERSISTENT_QUEUE_SQLITE3" unless="OSX" />
            <linkerarg value="-Wl,-rpath=${zlib.lib.dir}" if="XMLBLASTER_ZLIB" unless="OSX" />

            <!-- Mac OSX: No rpath support Some other Unix systems have an rpath concept where a final linked image can contain a list of additional directories to use when searching for required libraries. Since Mac OS X uses full paths for libraries instead of searching, rpath is less interesting.  -->
            <!-- Since XCode 3.0 -rpath is supported with /usr/bin/ld, but gcc 4.0 or 4.2 does not seem to use this ld-->
            <!-- So you need to set:  -->
            <!-- export DYLD_LIBRARY_PATH=/Users/marcel/xerces-c_2_8_0-x86-macosx-gcc_4_0/lib:/Users/marcel/xmlBlaster/lib -->


            <!-- TAO -->
            <libset dir="${CORBACPP_HOME}/../ace" libs="ACE" if="TAO" />
            <libset dir="${CORBACPP_HOME}/tao" libs="TAO" if="TAO" />
            <libset dir="${CORBACPP_HOME}/tao/PortableServer" libs="TAO_PortableServer" if="TAO" />
            <libset dir="${CORBACPP_HOME}/orbsvcs/orbsvcs" libs="TAO_CosNaming" if="TAO" />

            <!-- libset dir="${STL_HOME}/lib" libs="stlport_gcc" /-->

            <!-- MICO -->
            <libset dir="${CORBACPP_HOME}/bin" libs="mico${CORBACPP_VER},micocoss${CORBACPP_VER}" if="MICO" />
            <libset dir="${CORBACPP_HOME}/lib" libs="mico${CORBACPP_VER},micocoss${CORBACPP_VER}" if="MICO" />

            <!-- ORBIX -->
            <libset dir="${CORBACPP_HOME}/${CORBACPP_VER}/${CXX}/lib" libs="${ORBIX_LIBS}" if="ORBIX" />

            <!-- OMNIORB-->
            <libset dir="${CORBACPP_HOME}/lib/${CORBACPP_VER}" libs="${OMNIORB_LIBS}" if="OMNIORB" />

            <!-- ORBACUS-->
            <libset dir="${CORBACPP_HOME}/lib" libs="${ORBACUS_LIBS}" if="ORBACUS" />

            <!-- XERCES XML parser -->
            <libset dir="${xerces.lib.dir}" libs="${xerces.lib.name}" />

            <!-- xmlBlasterClient.so -->
            <libset dir="${lib.dir}" libs="${cpp.lib.name}" />

            <!-- xmlBlasterClientC.so -->
            <libset dir="${lib.dir}" libs="${c.lib.name}" />

            <!-- libsqlite.so -->
            <libset dir="${sqlite.lib.dir}" libs="sqlite" if="XMLBLASTER_PERSISTENT_QUEUE" />
            <libset dir="${sqlite.lib.dir}" libs="sqlite3" if="XMLBLASTER_PERSISTENT_QUEUE_SQLITE3" />

            <!-- libz.so -->
            <libset dir="${zlib.lib.dir}" libs="${zlib.lib.name}" if="XMLBLASTER_ZLIB" />

            <syslibset dir="/lib" libs="dl" if="unix" unless="OSX"/>
            <syslibset dir="/usr/lib" libs="pthread" if="unix"/>
            <!-- syslibset dir="/usr/lib" libs="socket" if="unix"/  NOT FOR G++ 3.3 and Linux 2.4.x, 2.6.x -->
            <syslibset dir="/usr/local/lib" libs="stdc++" if="unix" unless="OSX"/>
            <syslibset dir="/usr/lib" libs="rt" if="unix" unless="OSX"/>

         </linker>

         <linker name="icc"  if="use-icc">
            <linkerarg value="${LDFLAGS}" if="LDFLAGS"/>

            <linkerarg value="-Wl,-rpath=${CORBACPP_HOME}/../ace" if="TAO" />
            <linkerarg value="-Wl,-rpath=${CORBACPP_HOME}/lib" if="MICO" />
            <linkerarg value="-Wl,-rpath=${CORBACPP_HOME}/lib" if="OMNIORB" />
            <linkerarg value="-Wl,-rpath=${CORBACPP_HOME}/${CORBACPP_VER}/${CXX}/lib" if="ORBIX" />
            <linkerarg value="-Wl,-rpath=${xerces.lib.dir}" />
            <linkerarg value="-Wl,-rpath=${lib.dir.absolute}" />
            <linkerarg value="-Wl,-rpath=${sqlite.lib.dir}" if="XMLBLASTER_PERSISTENT_QUEUE" />
            <linkerarg value="-Wl,-rpath=${sqlite.lib.dir}" if="XMLBLASTER_PERSISTENT_QUEUE_SQLITE3" />
            <linkerarg value="-Wl,-rpath=${zlib.lib.dir}" if="XMLBLASTER_ZLIB" />
            <linkerarg value="-Wl,-rpath=${ICC_HOME}/lib" if="ICC_HOME" />

            <!-- TAO -->
            <libset dir="${CORBACPP_HOME}/../ace" libs="ACE" if="TAO" />
            <libset dir="${CORBACPP_HOME}/tao" libs="TAO" if="TAO" />
            <libset dir="${CORBACPP_HOME}/tao/PortableServer" libs="TAO_PortableServer" if="TAO" />
            <libset dir="${CORBACPP_HOME}/orbsvcs/orbsvcs" libs="TAO_CosNaming" if="TAO" />

            <!-- libset dir="${STL_HOME}/lib" libs="stlport_gcc" /-->

            <!-- MICO -->
            <libset dir="${CORBACPP_HOME}/bin" libs="mico${CORBACPP_VER},micocoss${CORBACPP_VER}" if="MICO" />
            <libset dir="${CORBACPP_HOME}/lib" libs="mico${CORBACPP_VER},micocoss${CORBACPP_VER}" if="MICO" />

            <!-- ORBIX -->
            <libset dir="${CORBACPP_HOME}/${CORBACPP_VER}/${CXX}/lib" libs="${ORBIX_LIBS}" if="ORBIX" />

            <!-- OMNIORB-->
            <libset dir="${CORBACPP_HOME}/lib/${CORBACPP_VER}" libs="${OMNIORB_LIBS}" if="OMNIORB" />

            <!-- ORBACUS-->
            <libset dir="${CORBACPP_HOME}/lib" libs="${ORBACUS_LIBS}" if="ORBACUS" />

            <!-- XERCES XML parser -->
            <libset dir="${xerces.lib.dir}" libs="${xerces.lib.name}" />

            <!-- xmlBlasterClient.so -->
            <libset dir="${lib.dir}" libs="${cpp.lib.name}" />

            <!-- xmlBlasterClientC.so -->
            <libset dir="${lib.dir}" libs="${c.lib.name}" />

            <!-- libsqlite.so -->
            <libset dir="${sqlite.lib.dir}" libs="sqlite" if="XMLBLASTER_PERSISTENT_QUEUE" />
            <libset dir="${sqlite.lib.dir}" libs="sqlite3" if="XMLBLASTER_PERSISTENT_QUEUE_SQLITE3" />

            <!-- libz.so -->
            <libset dir="${zlib.lib.dir}" libs="${zlib.lib.name}" if="XMLBLASTER_ZLIB" />

            <syslibset dir="/lib" libs="dl" if="unix"/>
            <syslibset dir="/usr/lib" libs="pthread" if="unix"/>

         </linker>

         <linker name="msvc" if="use-msvc"> <!-- linker does not support nested switch -->
            <linkerarg value="${LDFLAGS}" if="LDFLAGS"/>
            <linkerarg value="${LDFLAGS2}" if="LDFLAGS2"/>
            <linkerarg value="${LDFLAGS3}" if="LDFLAGS3"/>
            <!-- TAO -->
            <fileset dir="${CORBACPP_HOME}/../ace" includes="ace${tao.lib.type}.lib" if="TAO,windows" />
            <fileset dir="${CORBACPP_HOME}/tao" includes="TAO${tao.lib.type}.lib" if="TAO,windows" />
            <fileset dir="${CORBACPP_HOME}/tao/PortableServer" includes="TAO_PortableServer${tao.lib.type}.lib" if="TAO,windows" />
            <fileset dir="${CORBACPP_HOME}/orbsvcs/orbsvcs" includes="TAO_CosNaming${tao.lib.type}.lib" if="TAO,windows" />

            <!-- libset dir="${STL_HOME}/lib" libs="stlport_gcc" /-->

            <!-- MICO -->
            <libset dir="${CORBACPP_HOME}/win32-bin" libs="mico${CORBACPP_VER},micocoss${CORBACPP_VER}" if="MICO,windows" />
            <libset dir="${CORBACPP_HOME}/win32-bin/lib" libs="mico${CORBACPP_VER},micocoss${CORBACPP_VER}" if="MICO,windows" />

            <!-- ORBIX -->
            <libset dir="${CORBACPP_HOME}/asp/${CORBACPP_VER}/lib" libs="${ORBIX_LIBS}" if="ORBIX" />

            <!-- OMNIORB -->
            <libset dir="${CORBACPP_HOME}/lib/${CORBACPP_VER}" libs="${OMNIORB_LIBS}" if="OMNIORB" />

            <!-- XERCES XML parser -->
            <libset dir="${xerces.lib.dir}" libs="${xerces.lib.name}" if="windows" />

            <!-- xmlBlasterClient.dll -->
            <libset dir="${lib.dir}" libs="${cpp.lib.name}" />
         </linker>

         <linker name="icc"  if="use-icc">
            <linkerarg value="${LDFLAGS}" if="LDFLAGS"/>
         </linker>

         <linker name="bcc"  if="use-bcc">
            <linkerarg value="${LDFLAGS}" if="LDFLAGS"/>
         </linker>

         <linker name="CC"> <!-- SunOS -->
            <linkerarg value="${LDFLAGS}" if="LDFLAGS"/>
            <!-- build -DCPP_LINK=static -DPURIFY=PURIFY -verbose cpp -->
            <!-- purify CC -i -ldl -lpthread -lsocket -lposix4 -lnsl ... -->
            <syslibset dir="/lib" libs="socket,posix4,nsl" if="PURIFY" /> <!-- ORBIX only? -->

            <!-- ORBIX -->
            <libset dir="${CORBACPP_HOME}/${CORBACPP_VER}/${CXX}/lib" libs="${ORBIX_LIBS}" if="ORBIX" />

            <!-- XERCES XML parser -->
            <libset dir="${xerces.lib.dir}" libs="${xerces.lib.name}" />

            <!-- xmlBlasterClient.so -->
            <libset dir="${lib.dir}" libs="${cpp.lib.name}" />

            <!-- xmlBlasterClientC.so -->
            <libset dir="${lib.dir}" libs="${c.lib.name}" />

            <!-- libsqlite.so -->
            <libset dir="${sqlite.lib.dir}" libs="sqlite" if="XMLBLASTER_PERSISTENT_QUEUE" />
            <libset dir="${sqlite.lib.dir}" libs="sqlite3" if="XMLBLASTER_PERSISTENT_QUEUE_SQLITE3" />

            <!-- libz.so -->
            <libset dir="${zlib.lib.dir}" libs="${zlib.lib.name}" if="XMLBLASTER_ZLIB" />

            <linkerarg value="-i"/>
            <linkerarg value="-lpthread"/>
            <linkerarg value="-lsocket"/>
            <!-- linkerarg value="-L${CORBACPP_HOME}/${CORBACPP_VER}/${CXX}/lib" if="ORBIX" / -->
            <!-- linkerarg value="-L${xerces.lib.dir}" / -->
            <!-- linkerarg value="-L${lib.dir.absolute}" / -->
            <linkerarg value="-L${CORBACPP_HOME}/shlib/posix" if="ORBIX" />
            <!-- Burn .so path into executables: -->
            <linkerarg value="-R ${CORBACPP_HOME}/shlib:${CORBACPP_HOME}/shlib/posix:${lib.dir.absolute}:${xerces.lib.dir}" if="ORBIX" />

            <syslibset dir="/lib" libs="dl" />
            <syslibset dir="/lib" libs="rt" />
         </linker>

      </cc>
   </target>   <!-- compileCppExe -->

   <target name="cpp" depends="cpp-lib, cpp-demo, cpp-test" description="Compile C++ client library and test/demo clients"/>


   <!-- =================================================================== -->
   <!-- C client integration - create libxmlBlasterClientC.sl (so,dll)      -->
   <!-- See http://ant-contrib.sourceforge.net/cc.html                      -->
   <!-- =================================================================== -->
   <target name="c-lib" depends="prepare-cpp" description="C client integration - create libxmlBlasterClientC.sl (dll)">
      <mkdir dir="${c.obj.dir}"/>

      <!--
      gcc -g -shared -o libxmlBlasterClientCD.so ../build.tmp/objCD/helper.o ../build.tmp/objCD/XmlBlasterAccessUnparsed.o ../build.tmp/objCD/CallbackServerUnparsed.o ../build.tmp/objCD/XmlBlasterConnectionUnparsed.o ../build.tmp/objCD/msgUtil.o ../build.tmp/objCD/xmlBlasterSocket.o ../build.tmp/objCD/SQLiteQueue.o ../build.tmp/objCD/Properties.o ../build.tmp/objCD/xmlBlasterZlib.o -L/opt/sqlite-bin/lib -lsqlite -L/opt/zlib-bin/lib -lz
      -->
      <!-- C_LINK==shared links a shared library xmlBlaster/lib/libxmlBlasterClientC.so -->
      <cc debug="${c.debug}"
          outtype="${C_LINK}"
          outfile="${lib.dir}/${c.lib.name}"
          objdir="${c.obj.dir}"
          multithreaded="true">
         <compiler refid="gcc"/>
         <compiler refid="icc"/>
         <compiler refid="msvc"/> <!-- MS VC++ 7 -->
         <compiler refid="bcc"/>  <!-- Borland -->
         <compiler refid="CC"/>   <!-- SunOS C++ 5.3 -->
         <!-- versioninfo extends="xmlBlaster-C-version" filedescription="xmlBlaster C client shared library"/ -->
         <fileset dir="${build.src.c.dir}/socket" includes="*.c"/>
         <fileset dir="${build.src.c.dir}/util" includes="*.c"/>
         <fileset dir="${build.src.c.dir}/util/queue" includes="SQLiteQueue.c" if="XMLBLASTER_PERSISTENT_QUEUE"/>
         <fileset dir="${build.src.c.dir}/util/queue" includes="SQLite3Queue.c" if="XMLBLASTER_PERSISTENT_QUEUE_SQLITE3"/>
         <!-- fileset dir="${build.src.c.dir}/util/zlib" includes="*.c" if="XMLBLASTER_ZLIB"/--> <!--(We currently don't deliver zlib sources in the xmlBlaster distribution)-->

         <includepath location="${build.src.c.dir}" />
         <includepath location="${sqlite.include.dir}" if="XMLBLASTER_PERSISTENT_QUEUE" />
         <includepath location="${sqlite.include.dir}" if="XMLBLASTER_PERSISTENT_QUEUE_SQLITE3" />
         <includepath location="${zlib.include.dir}" if="XMLBLASTER_ZLIB" />

         <defineset> <!-- See compiler id="base-msvc" at top of file -->
           <!-- define name="TC" value="1" if="windows" /--> <!-- Force C compiling: TC, to force C++: TP -->
           <define name="RTCs" value="1" if="windows" /> <!-- show stack problems -->
           <define name="RTCu" value="1" if="windows" /> <!-- show uninitialized vars -->
           <define name="_WINDLL" value="1" if="windows" />     <!-- Needed in basicDefs.h, sets DLL_Export -->
           <define name="__linux" value="1" if="linux" />
           <define name="__sunos__" value="1" if="sun" />
           <define name="__sparc__" value="1" if="sun" />
           <define name="UsePthread" value="1" if="sun" />
           <define name="_REENTRANT" value="1" if="sun" />
           <define name="PthreadDraftVersion" value="${PthreadDraftVersion}" if="sun" />
           <define name="XMLBLASTER_C_COMPILE_AS_CPP" value="1" if="sun" /> <!-- Compile lib as C++ until somebody adds a 'cc' task to our build.xml -->
           <define name="XMLBLASTER_C_COMPILE_AS_CPP" value="1" if="XMLBLASTER_C_COMPILE_AS_CPP" /> <!-- Compile lib as C++ until somebody adds a 'cc' task to our build.xml -->
           <define name="XMLBLASTER_PERSISTENT_QUEUE" value="1" if="XMLBLASTER_PERSISTENT_QUEUE" /> <!-- Add command line define -->
           <define name="XMLBLASTER_PERSISTENT_QUEUE_SQLITE3" value="1" if="XMLBLASTER_PERSISTENT_QUEUE_SQLITE3" /> <!-- Add command line define -->
           <define name="XMLBLASTER_ZLIB" value="1" if="XMLBLASTER_ZLIB" /> <!-- Add command line define -->
           <define name="XMLBLASTER_NO_RCSID" value="1" if="XMLBLASTER_NO_RCSID" /> <!-- no rcsid string if svnversion makes problem in msgUtil.c -->
         </defineset>

         <linker name="gcc"  if="use-gcc" unless="XMLBLASTER_C_COMPILE_AS_CPP">
           <linkerarg value="${LDFLAGS}" if="LDFLAGS"/>
           <libset dir="${sqlite.lib.dir}" libs="sqlite" if="XMLBLASTER_PERSISTENT_QUEUE"/>
           <libset dir="${sqlite.lib.dir}" libs="sqlite3" if="XMLBLASTER_PERSISTENT_QUEUE_SQLITE3"/>
           <libset dir="${zlib.lib.dir}" libs="${zlib.lib.name}" if="XMLBLASTER_ZLIB"/>
         </linker>

         <linker name="icc"  if="use-icc">
           <linkerarg value="${LDFLAGS}" if="LDFLAGS"/>
           <libset dir="${sqlite.lib.dir}" libs="sqlite" if="XMLBLASTER_PERSISTENT_QUEUE"/>
           <libset dir="${sqlite.lib.dir}" libs="sqlite3" if="XMLBLASTER_PERSISTENT_QUEUE_SQLITE3"/>
           <libset dir="${zlib.lib.dir}" libs="${zlib.lib.name}" if="XMLBLASTER_ZLIB"/>
         </linker>

         <linker name="msvc" if="use-msvc"> <!-- linker does not support nested switch -->
           <linkerarg value="${LDFLAGS}" if="LDFLAGS"/>
           <linkerarg value="${LDFLAGS2}" if="LDFLAGS2"/>
           <linkerarg value="${LDFLAGS3}" if="LDFLAGS3"/>
           <libset dir="${build.src.c.dir}/socket" libs="pthreadVC2" />
           <syslibset libs="ws2_32" />
           <libset dir="${sqlite.lib.dir}" libs="sqlite" if="XMLBLASTER_PERSISTENT_QUEUE"/>
           <libset dir="${sqlite.lib.dir}" libs="sqlite3" if="XMLBLASTER_PERSISTENT_QUEUE_SQLITE3"/>
           <libset dir="${zlib.lib.dir}" libs="${zlib.lib.name}" if="XMLBLASTER_ZLIB"/>
         </linker>

         <linker name="bcc"  if="use-bcc">
           <linkerarg value="${LDFLAGS}" if="LDFLAGS"/>
           <libset dir="${sqlite.lib.dir}" libs="sqlite" if="XMLBLASTER_PERSISTENT_QUEUE"/>
           <libset dir="${sqlite.lib.dir}" libs="sqlite3" if="XMLBLASTER_PERSISTENT_QUEUE_SQLITE3"/>
           <libset dir="${zlib.lib.dir}" libs="${zlib.lib.name}" if="XMLBLASTER_ZLIB"/>
         </linker>

         <linker name="CC"  if="use-CC">
           <linkerarg value="${LDFLAGS}" if="LDFLAGS"/>
           <libset dir="${sqlite.lib.dir}" libs="sqlite" if="XMLBLASTER_PERSISTENT_QUEUE"/>
           <libset dir="${sqlite.lib.dir}" libs="sqlite3" if="XMLBLASTER_PERSISTENT_QUEUE_SQLITE3"/>
           <libset dir="${zlib.lib.dir}" libs="${zlib.lib.name}" if="XMLBLASTER_ZLIB"/>
           <linkerarg value="-mt"/>
           <linkerarg value="-lpthread"/>
         </linker>
      </cc>

      <copy file="${build.src.c.dir}/socket/pthreadVC2.dll" tofile="${lib.dir}/pthreadVC2.dll"/>

      <switch value="${os.family}" caseinsensitive="false">
         <case value="windows">
            <echo message="Assure to add ${lib.dir.absolute} to your PATH to find xmlBlasterClientC.dll, pthreadVC2.dll and sqlite.dll (if persistent queues are used) and zlib.dll (if compression is used)"/>
            <switch value="${XMLBLASTER_PERSISTENT_QUEUE}">
               <case value="1">
                  <copy file="${sqlite.lib.dir}/sqlite.dll" tofile="${lib.dir}/sqlite.dll"/>
               </case>
               <default>
               </default>
            </switch>
            <switch value="${XMLBLASTER_PERSISTENT_QUEUE_SQLITE3}">
               <case value="1">
                  <copy file="${sqlite.lib.dir}/sqlite3.dll" tofile="${lib.dir}/sqlite3.dll"/>
               </case>
               <default>
               </default>
            </switch>
            <switch value="${XMLBLASTER_ZLIB}">
               <case value="1">
                  <property name="zlib.dll.name" value="${zlib.lib.name}.dll"/>
                  <copy file="${zlib.lib.dir}/${zlib.dll.name}" todir="${lib.dir}" failonerror="false"/>
               </case>
               <default>
               </default>
            </switch>
         </case>
         <default>
         </default>
      </switch>
   </target>  <!-- C lib -->

   <target name="c-test" depends="prepare-cpp" description="Create C test clients">
      <foreach list="TestLeaveServer,TestQueue,TestUtil,TestSocket,TestMethods,TestTimeout,TestXmlUtil,TestError,TestStress"
               target="compileCExe" param="exeName" delimiter="," inheritAll="true">
         <param name="compileCSourcePath" value="${testsuite.dir}/src/c" />
      </foreach>
   </target>

   <!--
      Here an example on how to compile a single test application ...
      ./build -DexeName=Publisher c-demo-single
   -->
   <target name="c-demo-single" depends="prepare-cpp" description="Create single C demo client">
      <foreach list="${cToCompile}"
               target="compileCExe" param="exeName" delimiter="," inheritAll="true">
         <param name="compileCSourcePath" value="${demo.dir}/c/socket" />
      </foreach>
   </target>

   <target name="c-demo" depends="prepare-cpp" description="Create C demo clients">
      <foreach list="Publisher,HelloWorld3,HelloWorld4,LogRedirect,HelloWorldUdp,Subscriber,Get"
               target="compileCExe" param="exeName" delimiter="," inheritAll="true">
         <param name="compileCSourcePath" value="${demo.dir}/c/socket" />
      </foreach>
   </target>

   <target name="compileCExe" description="For internal use only (C clients build)">
      <echo message="Compiling of C test client '${compileCSourcePath}/bin/${exeName}' to '${compileCSourcePath}/bin/${exeName}'"/>
      <mkdir dir="${c.obj.dir}"/>
      <mkdir dir="${compileCSourcePath}/bin"/>
      <cc debug="${c.debug}"
          outtype="executable"
          outfile="${compileCSourcePath}/bin/${exeName}"
          objdir="${c.obj.dir}"
          multithreaded="true"
          exceptions="true"
          subsystem="console">
         <compiler refid="gcc"/>
         <compiler refid="icc"/>
         <compiler refid="msvc"/>
         <compiler refid="bcc"/>
         <compiler refid="CC"/>
         <fileset dir="${compileCSourcePath}" includes="${exeName}.c"/>
         <includepath location="${build.src.c.dir}" />

         <!-- syslibset dir="/usr/lib" libs="stdc++" if="unix"/ -->

         <defineset>
           <!-- define name="TC" value="1" if="windows" / --> <!-- Force C compiling -->
           <define name="WIN32" value="1" if="windows" />
           <define name="RTCs" value="1" if="windows" /> <!-- show stack problems -->
           <define name="RTCu" value="1" if="windows" /> <!-- show uninitialized vars -->
           <define name="_WINDOWS" value="1" if="windows" />
           <define name="_MBCS" value="1" if="windows" />
           <define name="_USRDLL" value="1" if="windows" />
           <define name="__sunos__" value="1" if="sun" />
           <define name="__sparc__" value="1" if="sun" />
           <define name="UsePthread" value="1" if="sun" />
           <define name="_REENTRANT" value="1" if="sun" />
           <define name="XMLBLASTER_C_COMPILE_AS_CPP" value="1" if="sun" /> <!-- Compile lib as C++ until somebody adds a 'cc' task to our build.xml -->
           <define name="XMLBLASTER_C_COMPILE_AS_CPP" value="1" if="XMLBLASTER_C_COMPILE_AS_CPP" /> <!-- Compile lib as C++ until somebody adds a 'cc' task to our build.xml -->
           <define name="XMLBLASTER_PERSISTENT_QUEUE" value="1" if="XMLBLASTER_PERSISTENT_QUEUE" /> <!-- Add command line define -->
           <define name="XMLBLASTER_PERSISTENT_QUEUE_SQLITE3" value="1" if="XMLBLASTER_PERSISTENT_QUEUE_SQLITE3" /> <!-- Add command line define -->
           <define name="XMLBLASTER_ZLIB" value="1" if="XMLBLASTER_ZLIB" /> <!-- Add command line define -->
         </defineset>

         <linker name="gcc" if="use-gcc">
            <linkerarg value="${LDFLAGS}" if="LDFLAGS"/>
            <linkerarg value="-Wl,-rpath=${lib.dir.absolute}:${sqlite.lib.dir}:${zlib.lib.dir}" if="linux"/>
            <libset dir="${lib.dir}" libs="${c.lib.name}" />  <!-- libxmlBlasterClientC.so -->
            <libset dir="${sqlite.lib.dir}" libs="sqlite" if="XMLBLASTER_PERSISTENT_QUEUE" />  <!-- libsqlite.so -->
            <libset dir="${sqlite.lib.dir}" libs="sqlite3" if="XMLBLASTER_PERSISTENT_QUEUE_SQLITE3" />  <!-- libsqlite.so -->
            <libset dir="${zlib.lib.dir}" libs="${zlib.lib.name}" if="XMLBLASTER_ZLIB"/>
            <syslibset dir="/lib" libs="socket" if="sun"/>
            <!-- syslibset dir="/lib" libs="dl" unless="unix"/ -->
            <syslibset libs="pthread" if="unix"/> <!-- /usr/lib or /usr/lib64 on 64bit machines are default -->
            <!-- syslibset dir="/usr/lib" libs="socket" if="unix"/ -->
         </linker>

         <linker name="icc" if="use-icc">
            <linkerarg value="${LDFLAGS}" if="LDFLAGS"/>
            <linkerarg value="-Wl,-rpath=${lib.dir.absolute}:${sqlite.lib.dir}:${zlib.lib.dir}:${ICC_HOME}/lib" />
            <libset dir="${lib.dir}" libs="${c.lib.name}" />  <!-- libxmlBlasterClientC.so -->
            <libset dir="${sqlite.lib.dir}" libs="sqlite" if="XMLBLASTER_PERSISTENT_QUEUE" />  <!-- libsqlite.so -->
            <libset dir="${sqlite.lib.dir}" libs="sqlite3" if="XMLBLASTER_PERSISTENT_QUEUE_SQLITE3" />  <!-- libsqlite.so -->
            <libset dir="${zlib.lib.dir}" libs="${zlib.lib.name}" if="XMLBLASTER_ZLIB"/>
            <libset dir="${ICC_HOME}/lib" libs="imf" if="ICC_HOME" />
            <syslibset dir="/lib" libs="dl" if="unix"/>
            <syslibset dir="/usr/lib" libs="pthread" if="unix"/>
         </linker>

         <linker name="msvc" if="use-msvc">
            <linkerarg value="${LDFLAGS}" if="LDFLAGS"/>
            <linkerarg value="${LDFLAGS2}" if="LDFLAGS2"/>
            <linkerarg value="${LDFLAGS3}" if="LDFLAGS3"/>
            <libset casesensitive="false" dir="${lib.dir}" libs="${c.lib.name}" />  <!-- xmlBlasterClientC.dll -->
            <libset casesensitive="false" dir="${lib.dir}" libs="${c.lib.name}.dll" />  <!-- xmlBlasterClientC.dll -->
            <libset dir="${sqlite.lib.dir}" libs="sqlite" if="XMLBLASTER_PERSISTENT_QUEUE" />  <!-- libsqlite.so -->
            <libset dir="${sqlite.lib.dir}" libs="sqlite3" if="XMLBLASTER_PERSISTENT_QUEUE_SQLITE3" />  <!-- libsqlite.so -->
            <libset dir="${zlib.lib.dir}" libs="${zlib.lib.name}" if="XMLBLASTER_ZLIB"/>
            <libset dir="${build.src.c.dir}/socket" libs="pthreadVC2" />
            <syslibset libs="ws2_32" />
            <libset casesensitive="false" dir="${lib.dir.absolute}" libs="${c.lib.name}" />  <!-- xmlBlasterClientC.dll -->
            <libset casesensitive="false" dir="${lib.dir.absolute}" libs="${c.lib.name}.dll" />  <!-- xmlBlasterClientC.dll -->
         </linker>

         <linker name="bcc" if="use-bcc">
            <linkerarg value="${LDFLAGS}" if="LDFLAGS"/>
         </linker>

         <linker name="CC" if="use-CC"> <!-- SunOS -->
            <linkerarg value="${LDFLAGS}" if="LDFLAGS"/>
            <syslibset dir="/lib" libs="socket,posix4,nsl"/>
            <libset dir="${lib.dir}" libs="${c.lib.name}" /> <!-- libxmlBlasterClientC.so -->
            <libset dir="${sqlite.lib.dir}" libs="sqlite" if="XMLBLASTER_PERSISTENT_QUEUE" />  <!-- libsqlite.so -->
            <libset dir="${sqlite.lib.dir}" libs="sqlite3" if="XMLBLASTER_PERSISTENT_QUEUE_SQLITE3" />  <!-- libsqlite.so -->
            <libset dir="${zlib.lib.dir}" libs="${zlib.lib.name}" if="XMLBLASTER_ZLIB"/>
            <linkerarg value="-i"/>
            <linkerarg value="-lpthread"/>
             <!-- Burn .so path into executables: -R path1:path2:...
               We put it in two 'linkerarg' to avoid quotes from cpp-tasks: "-R path1:path2:..." -->
            <linkerarg value="-R"/>
            <linkerarg value="${lib.dir}:${lib.dir.absolute}"/>
            <syslibset dir="/lib" libs="dl" />
         </linker>

      </cc>
   </target>   <!-- compileCExe -->

   <target name="c" depends="c-lib, c-demo, c-test" description="Compile C client library and test/demo clients"/>

   <!-- =================================================================== -->
   <!-- Cleans everything                                                   -->
   <!-- =================================================================== -->
    <target name="c-clean" depends="initialize-cpp" description="Remove C object files">
       <delete dir="${c.obj.dir}"/>
       <delete includeEmptyDirs="true" failonerror="false">
          <fileset dir="${build.src.c.dir}"/>
          <fileset dir="${src.c.dir}" includes="*.000,*.001,*.idb,*.pdb,*.obj,*.o"/>
          <fileset dir="${src.c.dir}/util" includes="*.000,*.001,*.idb,*.pdb,*.obj,*.o"/>
          <fileset dir="${src.c.dir}/socket" includes="*.000,*.001,*.idb,*.pdb,*.obj,*.o"/>
          <fileset dir="${demo.dir}/c" includes="*.000,*.001,*.idb,*.pdb,*.obj,*.o"/>
          <fileset dir="${testsuite.dir}/src/c" includes="*.000,*.001,*.idb,*.pdb,*.obj,*.o"/>
       </delete>
    </target>

    <target name="c-delete" depends="c-clean" description="Remove all generated C files/libs/executables">
       <delete includeEmptyDirs="true" failonerror="false">
          <fileset dir="${build.src.c.dir}"/>
          <fileset dir="${src.c.dir}" includes="HelloWorld,XmlBlasterConnectionUnparsedMain,*.exe"/>
          <fileset dir="${src.c.dir}/util" includes="PropertiesMain,msgUtil,*.exe"/>
          <fileset dir="${src.c.dir}/socket" includes="CallbackServerUnparsed,XmlBlasterAccessUnparsedMain,*.exe"/>
          <fileset dir="${demo.dir}/c/socket/bin" includes="*"/>
          <fileset dir="${demo.dir}/c/bin" includes="*"/>
          <fileset dir="${testsuite.dir}/src/c/bin" includes="*"/>
          <fileset dir="${lib.dir}" includes="libz.dll,${zlib.lib.name}.dll,pthreadVC2.dll,*xmlBlasterClientC${C_DEBUG_POSTFIX}.*"/>
       </delete>
    </target>

    <target name="cpp-clean" depends="initialize-cpp" description="Remove C++ object files">
       <delete dir="${cpp.obj.dir}"/>
       <delete dir=".c_dependency_cache"/>
       <delete includeEmptyDirs="true" failonerror="false">
          <fileset dir="${testsuite.dir}/src/c++" includes="*.o"/>
       </delete>
    </target>

    <target name="cpp-delete" depends="cpp-clean" description="Remove all generated C++ files/libs/executables">
       <delete includeEmptyDirs="true" failonerror="false">
          <fileset dir="${build.src.cpp.dir}"/>
          <fileset dir="${src.cpp.dir}/generated" includes="*.o, *.cc, *.cpp, *.h, *.hh, *.i"/>
          <fileset dir="${lib.dir}" includes="*xmlBlasterClient${CPP_DEBUG_POSTFIX}.*,history.xml"/>
          <fileset dir="${testsuite.dir}/src/c++/bin" includes="*"/>
          <fileset dir="${demo.dir}/c++/bin" includes="*"/>
          <fileset dir="${idl.dir}" includes="*Idl/*.java"/>
       </delete>
    </target>

    <target name="java-clean" depends="prepare" description="Remove generated Java files">
       <delete dir="${build.dir}"/>
       <delete includeEmptyDirs="true" failonerror="false">
          <fileset dir="${lib.dir}" includes="${name}.jar,demo.jar,testsuite.jar,${name}-${version}.jar,xmlBlasterK2.rar,JmsAdapter.jar,xmlBlaster-ear.sar,xmlBlasterContrib.jar"/>
          <!-- fileset dir="${req.dir}" includes="*.class"/ -->
       </delete>
       <!-- files generated by java cup -->
       <delete includeEmptyDirs="false" failonerror="false">
          <fileset dir="${src.java.dir}/org/xmlBlaster/util/lexical" includes="Sql92Symbols.java, Sql92Parser.java"/>
          <!-- fileset dir="${req.dir}" includes="*.class"/ -->
       </delete>

    </target>

    <target name="java-delete" depends="java-clean,docs-delete" description="Remove all generated ditribution Java and documentation files">
       <delete dir="${dist-classes.dir}"/>
       <delete dir="${dist.dir}"/>
       <delete dir="${dist-client.dir}"/>
       <delete file="${demo.dir}/j2me/SystemInfo.jar"/>
       <delete file="${demo.dir}/j2me/SystemInfo.jad"/>
   </target>

    <target name="clean" depends="cpp-clean,c-clean,java-clean" description="Remove generated Java, C and C++ files">
    </target>

    <target name="delete" depends="clean,cpp-delete,c-delete,java-delete,docs-delete,tests-delete" description="Remove all generated ditribution Java, C, C++ and documentation files">
   </target>

   <target name="csharp" depends="csharp-win,csharp-mono" description="Compile C# demo client"/>

   <!-- csc -debug+ /warn:4 -out:Hello.exe NativeC.cs Hello.cs -->
   <target name="csharp-win" depends="prepare" description="Compile C# demo client" if="windows">
      <echo message="Compiling C# demo on windows"/>
      <property name="csharp.compiler.exe" value="csc"/>
      <property name="csharp.out.exe" value="TestPinvoke.exe"/>
      <exec executable="${csharp.compiler.exe}" dir="${src.csharp.dir}" failonerror="true" failifexecutionfails="false">
         <arg line="-debug+ /unsafe /warn:4 -out:${csharp.out.exe} PInvokeCE.cs XmlBlasterAccess.cs Key.cs Qos.cs TestPinvoke.cs util/*.cs service/*.cs"/>
      </exec>
      <echo message="Created C# demo ${src.csharp.dir}/${csharp.out.exe}"/> 
   </target>

   <!--
    Using mono 'mcs' for C#1 or 'gmcs' for C#2 
    mcs /d:"XMLBLASTER_MONO;BLA;BLUB" -debug+ -out:Hello.exe NativeC.cs XmlBlasterAccess.cs Key.cs Qos.cs Hello.cs
   -->
   <target name="csharp-mono" depends="prepare" description="Compile C# demo client" if="unix">
      <echo message="Compiling C# demo for mono"/>
      <property name="csharp.compiler.exe" value="gmcs"/>
      <property name="csharp.out.exe" value="Hello#.exe"/>
      <exec executable="${csharp.compiler.exe}" dir="${src.csharp.dir}" failonerror="true" failifexecutionfails="false">
         <arg line="-debug+ /unsafe /warn:4 /define:'XMLBLASTER_MONO' -out:${csharp.out.exe} PInvokeCE.cs NativeC.cs XmlBlasterAccess.cs Key.cs Qos.cs Hello.cs util/*.cs service/*.cs"/>
      </exec>
      <echo message="Created C# demo ${src.csharp.dir}/${csharp.out.exe}"/> 
      <echo message="Usage: 'mono ${src.csharp.dir}/${csharp.out.exe} -dispatch/connection/plugin/socket/hostname localhost'"/> 
   </target>

   <target name="bin-win-prepare" depends="prepare,revisionnumber">
      <property name="bin-win.dir" value="./bin-win/xmlBlaster-win-dll-${version}"/>
   </target>

   <target name="bin-win-clean" depends="bin-win-prepare" description="Remove generated bin-win distribution">
       <delete dir="${bin-win.dir}"/>
   </target>

   <target name="bin-win" depends="initialize-cpp,bin-win-prepare,bin-win-clean" description="Create a binary distribution">
      <!--
         Prepare xerces with    E:\xerces-c-src_2_7_0\Projects\Win32\VC7.1\xerces-all\xerces-all.sln -> XercesLib
            Compile a 'Debug' and a 'Release' variant and copy Relase\xerces-c_2.* to Debug\

         XMLBLASTER_COMPILE_LOG4CPLUS_PLUGIN=1
         
         XMLBLASTER_ZLIB=1
         zlib.include.dir=E:/zlib/include
         zlib.lib.dir=E:/zlib/lib
         zlib.lib.name=zdll
         zlib.dll.name=zlib1.dll
         
         xerces.include.dir=E:/xerces-c-src_2_7_0/src
         xerces.lib.dir=E:/xerces-c-src_2_7_0/Build/Win32/VC7.1/Debug
         xerces.lib.name=xerces-c_2
         xerces.dll.name=xerces-c_2_7
         
         XMLBLASTER_PERSISTENT_QUEUE=1
         XMLBLASTER_PERSISTENT_QUEUE_SQLITE3=1
         sqlite.include.dir=E:/sqlite
         sqlite.lib.dir=E:/sqlite
         
         COMPILE_SOCKET_PLUGIN = 1
         COMPILE_CORBA_PLUGIN  = 0
         corba.product         = NONE

         build c-delete cpp-delete
         build -Dc.debug=true -Dcpp.debug=true c cpp
         build -Dc.debug=false -Dcpp.debug=false c cpp
         recompile c client lib with VC++ (to be C# compatible, i couldn't find out which compiler setting is wrong, but ant-dlls are not found by csharp, dumpbin.exe shows differernces)
         build csharp
       -->
      
      <mkdir dir="${bin-win.dir}"/>
      <tstamp>
         <format property="touch.time" pattern="yyyy-MM-dd hh:mm aa"/>
      </tstamp>

      <echo file="${bin-win.dir}/LICENSE">http://www.xmlblaster.org/license.html</echo>
      <echo file="${bin-win.dir}/VERSION">xmlBlaster ${version} #${revision.number}</echo>
      <echo file="${bin-win.dir}/README">XmlBlaster Windows Binary Distribution

Contains DLL for C and C++ and C# .net


Version:

   xmlBlaster ${version} #${revision.number}

   sqlite 2.8.17

   pthreads 2.8.0 (for ARM 2.8 with WINCE patch)

   zlib 1.2.3
   


See:

   http://www.xmlblaster.org/xmlBlaster/doc/requirements/client.c.socket.html

   http://www.xmlblaster.org/xmlBlaster/doc/requirements/client.c.queue.html

   http://www.xmlblaster.org/xmlBlaster/doc/requirements/client.cpp.html

   http://www.xmlblaster.org/xmlBlaster/doc/requirements/client.csharp.html

   http://www.xmlblaster.org/xmlBlaster/doc/requirements/client.c.windowsCE.html



Microsoft Visual C++ 2005 Redistributable Package (x86), needed to run VS8 applications:

   http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;FamilyID=32bc1bee-a3f9-4c13-9c99-220b62a191ee


---
${touch.time}
http://www.xmlblaster.org/
      </echo>

      <property name="bin-win32.dir" value="${bin-win.dir}/win32"/>
      <mkdir dir="${bin-win32.dir}"/>

      <copy file="${lib.dir}/${zlib.dll.name}" todir="${bin-win32.dir}/bin"/>
      <copy file="${lib.dir}/pthreadVC2.dll" tofile="${bin-win32.dir}/bin/pthreadVC2.dll"/>
      <copy file="${lib.dir}/sqlite.dll" tofile="${bin-win32.dir}/bin/sqlite.dll"/>
      <copy file="${lib.dir}/${xerces.dll.name}.dll" todir="${bin-win32.dir}/bin"/>
      <copy file="${lib.dir}/${xerces.dll.name}${CPP_DEBUG_POSTFIX}.dll" todir="${bin-win32.dir}/bin"/>
      <copy file="${lib.dir}/xmlBlasterClient.dll" tofile="${bin-win32.dir}/bin/xmlBlasterClient.dll"/>
      <copy file="${lib.dir}/xmlBlasterClientC.dll" tofile="${bin-win32.dir}/bin/xmlBlasterClientC.dll"/>
      <!--
      <copy file="${lib.dir}/xmlBlasterClientD.dll" tofile="${bin-win32.dir}/bin/xmlBlasterClientD.dll"/>
      <copy file="${lib.dir}/xmlBlasterClientCD.dll" tofile="${bin-win32.dir}/bin/xmlBlasterClientCD.dll"/>
      -->
      <copy todir="${bin-win32.dir}/bin">
         <fileset dir="${demo.dir}/c/socket/bin">
            <include name="**/*.exe"/>
         </fileset>
      </copy>
      <copy todir="${bin-win32.dir}/bin">
         <fileset dir="${demo.dir}/c++/bin">
            <include name="**/*.exe"/>
         </fileset>
      </copy>

      <copy file="${zlib.lib.dir}/${zlib.lib.name}.lib" todir="${bin-win32.dir}/lib"/>
      <copy file="${src.c.dir}/socket/pthreadVC2.lib" todir="${bin-win32.dir}/lib"/>
      <copy file="${sqlite.lib.dir}/sqlite.lib" todir="${bin-win32.dir}/lib"/>
      <copy file="${xerces.lib.dir}/${xerces.lib.name}.lib" todir="${bin-win32.dir}/lib"/>
      <copy file="${lib.dir}/xmlBlasterClient.lib" todir="${bin-win32.dir}/lib"/>
      <copy file="${lib.dir}/xmlBlasterClientC.lib" todir="${bin-win32.dir}/lib"/>

      <copy todir="${bin-win32.dir}/include">
         <fileset dir="${src.c.dir}">
            <include name="**/*.h"/>
            <exclude name="HelloWorldCE/**"/>
            <exclude name="WindowsCE/**"/>
         </fileset>
         <fileset dir="${zlib.include.dir}">
            <include name="zlib.h"/>
         </fileset>
      </copy>

      <copy todir="${bin-win32.dir}/include">
         <fileset dir="${src.cpp.dir}">
            <include name="**/*.h"/>
         </fileset>
      </copy>

      <!-- Windows CE -->
      <property name="bin-wince-arm.dir" value="${bin-win.dir}/wince-arm/"/>
      <mkdir dir="${bin-wince-arm.dir}"/>
      <mkdir dir="${bin-wince-arm.dir}/bin"/>
      <mkdir dir="${bin-wince-arm.dir}/lib"/>
      <mkdir dir="${bin-wince-arm.dir}/include"/>
      <copy file="${lib.dir}/zlib-ARM.dll" todir="${bin-wince-arm.dir}/bin"/>
      <copy file="${lib.dir}/pthreads-ARM.dll" todir="${bin-wince-arm.dir}/bin"/>
      <copy file="${lib.dir}/xmlBlasterClientC${CPP_DEBUG_POSTFIX}-ARM.dll" todir="${bin-wince-arm.dir}/bin" failonerror="false"/>

      <copy todir="${bin-wince-arm.dir}/include">
         <fileset dir="${src.c.dir}">
            <include name="**/*.h"/>
            <exclude name="HelloWorldCE/**"/>
            <exclude name="WindowsCE/**"/>
         </fileset>
         <fileset dir="${zlib.include.dir}">
            <include name="zlib.h"/>
         </fileset>
      </copy>

      <copy file="${lib.dir}/zlib-ARM.lib" todir="${bin-wince-arm.dir}/lib"/>
      <copy file="${lib.dir}/pthreads-ARM.lib" todir="${bin-wince-arm.dir}/lib"/>
      <copy file="${lib.dir}/xmlBlasterClientC.lib" todir="${bin-wince-arm.dir}/lib"/>

      <property name="bin-win.distname" value="xmlBlaster-win-dll-${version}-${revision.number}.zip"/>
      <!-- zip destfile="${bin-win.distname}" basedir="${bin-win32.dir}/.."/ -->
      <zip destfile="${bin-win.distname}" basedir="./bin-win"/>
      <echo message="Binary distribution created: ${bin-win.distname}"/>
   </target>
</project>
