https://github.com/liflab/beepbeep-3-palettes
Raw File
Tip revision: 1c5753e1c9851ebb0e7c99db113a600b7afbe324 authored by Sylvain Hallé on 23 November 2023, 19:28:17 UTC
New signatures for UpdateTableStream and UpdateTableArray
Tip revision: 1c5753e
build.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!--
	A build script for a super-project containing multiple sub-projects
    Copyright (C) 2019-2023  Sylvain Hallé

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-->
<project
  name="SuperProject"
  default="all"
  basedir="."
  xmlns:jacoco="antlib:org.jacoco.ant">

  <!-- The project's display name -->
  <property name="build.name" value="BeepBeep 3 Palettes"/>
  
  <!-- The bundle's version -->
  <property name="build.version" value="0.7"/>
  
  <!-- The author -->
  <property name="build.author" value="Sylvain Hallé"/>

  <!-- The folder containing lib files for this super-script -->
  <property name="build.libdir" value="lib"/>

  <!--Javadoc folder. Used to place the files generated by the javadoc task -->
  <property name="build.rootdocdir" value="docs/javadoc"/>
  
  <!-- Versions of various dependencies -->
  <property name="versions.jacoco" value="0.8.8"/>
  
  <!-- Pattern designating a test file (source or binary) -->
  <property name="build.test.filenamepattern" value="**/*Test.*"/>
  
  <!-- Check if ant-contrib is present -->
  <available file="${build.libdir}/ant-contrib-1.0b3.jar" property="antcontrib.present"/>
  
  <!-- Load ant-contrib -->
  <target name="init" depends="ant-contrib">
    <taskdef resource="net/sf/antcontrib/antlib.xml"
      classpath="${build.libdir}/ant-contrib-1.0b3.jar"/>
  </target>
  
  <!-- Download ant-contrib -->
  <target name="ant-contrib" unless="antcontrib.present"
    description="Install ant-contrib if not present">
    <echo message="ant-contrib is not installed. Downloading..." level="info"/>
    <mkdir dir="${build.libdir}"/>
    <get src="http://sylvainhalle.github.io/AntRun/dependencies/ant-contrib-1.0b3-bin.zip" 
      dest="${build.libdir}/ant-contrib-1.0b3-bin.zip"/>
    <unzip src="${build.libdir}/ant-contrib-1.0b3-bin.zip" dest="${build.libdir}">
      <patternset>
      <include name="**/*.jar"/>
      </patternset>
      <mapper type="flatten"/>
    </unzip>
  </target>
  
  <!-- Create paths -->
  <mkdir dir="${build.libdir}"/>
  <mkdir dir="jars"/>

  <!-- Calls the "jar" task in each subfolder -->  
  <target name="jar" depends="init,prepare">
    <for param="subdir">
      <dirset dir=".">
      <include name="*"/>
      </dirset>
      <sequential>
        <if>
          <available file="@{subdir}/build.xml"/>
          <then>
            <trycatch>
            <try>
              <ant dir="@{subdir}" target="jar" />
            </try>
            <catch>
              <echo message="Build failed for folder @{subdir}"/>
              <property name="build.onefailed" value="true"/>
            </catch>
            </trycatch>
          </then>
        </if>
      </sequential>
    </for>
    <fail message="Build failed for one of the palettes" if="build.onefailed"/>
  </target>
  
  <!-- Creates a "fat JAR" including the JARs of all palettes -->
  <target name="fat-jar">
    <zip destfile="beepbeep-palettes-${build.version}.jar">
      <zipgroupfileset dir="jars" includes="*-${build.version}.jar"/>
    </zip>
    <zip destfile="beepbeep-palettes-${build.version}-sources.jar">
      <zipgroupfileset dir="jars" includes="*-${build.version}-sources.jar"/>
    </zip>
    <zip destfile="beepbeep-palettes-${build.version}-javadoc.jar">
      <zipgroupfileset dir="jars" includes="*-${build.version}-javadoc.jar"/>
    </zip>
  </target>
  
  <!-- Calls the "show-properties" task in each subfolder -->
  <target name="show-properties" depends="init">
    <for param="subdir">
      <dirset dir=".">
      <include name="*"/>
      </dirset>
      <sequential>
      <if>
        <available file="@{subdir}/build.xml"/>
        <then>
          <ant dir="@{subdir}" target="show-properties" />
        </then>
      </if>
      </sequential>
    </for>
  </target>

  <!-- Calls the "download-deps" task in each subfolder -->
  <target name="download-deps" depends="init">
    <for param="subdir">
      <dirset dir=".">
      <include name="*"/>
      </dirset>
      <sequential>
      <if>
        <available file="@{subdir}/build.xml"/>
        <then>
          <sequential>
            <echo message="Entering @{subdir}" />
            <ant dir="@{subdir}" target="download-deps" />
          </sequential>
        </then>
      </if>
      </sequential>
    </for>
  </target>
  
  <!-- Calls the "test" task in each subfolder -->
  <target name="test" depends="init">
    <for param="subdir">
      <dirset dir=".">
        <include name="*"/>
      </dirset>
      <sequential>
      <if>
        <available file="@{subdir}/build.xml"/>
        <then>
          <sequential>
            <echo message="Entering @{subdir}" />
            <trycatch>
            <try>
              <ant dir="@{subdir}" target="test" />
            </try>
            <catch>
              <echo message="Tests failed for folder @{subdir}"/>
              <property name="test.onefailed" value="true"/>
            </catch>
            </trycatch>
          </sequential>
        </then>
      </if>
      </sequential>
    </for>
    <fail message="Tests failed for one of the palettes" if="test.onefailed"/>
  </target>
  
  <target name="junit-report">
    <!-- For the junit-report task, it is sufficient to call the task of a single sub-project -->
    <ant dir="Apache" usenativebasedir="true" target="junit-report" />
  </target>
  
  <target name="jacoco-report" depends="init,jacoco">
    <!-- Call the jacoco-report task on children -->
    <for param="subdir">
      <dirset dir=".">
        <include name="*"/>
      </dirset>
      <sequential>
      <if>
        <available file="@{subdir}/build.xml"/>
        <then>
          <sequential>
            <echo message="Entering @{subdir}" />
            <trycatch>
            <try>
              <ant dir="@{subdir}" usenativebasedir="true" target="jacoco-report" />
            </try>
            <catch>
              <echo message="Report failed for folder @{subdir}"/>
            </catch>
            </trycatch>
          </sequential>
        </then>
      </if>
      </sequential>
    </for>
    <!-- Load JaCoCo -->
    <taskdef uri="antlib:org.jacoco.ant" resource="org/jacoco/ant/antlib.xml">
      <classpath path="${build.libdir}/jacocoant.jar"/>
    </taskdef>
    <mkdir dir="coverage"/>
    <jacoco:merge destfile="coverage/merged.exec">
	  <fileset dir="Apache/tests/coverage" includes="*.exec"/>
	  <fileset dir="Complex/tests/coverage" includes="*.exec"/>
	  <fileset dir="Diagnostics/tests/coverage" includes="*.exec"/>
	  <fileset dir="Dsl/tests/coverage" includes="*.exec"/>
	  <fileset dir="Fol/tests/coverage" includes="*.exec"/>
	  <fileset dir="Fsm/tests/coverage" includes="*.exec"/>
	  <fileset dir="Graphviz/tests/coverage" includes="*.exec"/>
	  <!-- <fileset dir="Groovy/tests/coverage" includes="*.exec"/> Not yet -->
	  <fileset dir="Hibernate/tests/coverage" includes="*.exec"/>
	  <fileset dir="Http/tests/coverage" includes="*.exec"/>
	  <fileset dir="Jdbc/tests/coverage" includes="*.exec"/>
	  <fileset dir="Json/tests/coverage" includes="*.exec"/>
	  <fileset dir="Ltl/tests/coverage" includes="*.exec"/>
	  <fileset dir="Mtnp/tests/coverage" includes="*.exec"/>
	  <fileset dir="Provenance/tests/coverage" includes="*.exec"/>
	  <fileset dir="Serialization/tests/coverage" includes="*.exec"/>
	  <fileset dir="Signal/tests/coverage" includes="*.exec"/>
	  <fileset dir="Tuples/tests/coverage" includes="*.exec"/>
	  <fileset dir="WebSocket/tests/coverage" includes="*.exec"/>
	  <fileset dir="Widgets/tests/coverage" includes="*.exec"/>
	  <fileset dir="Xml/tests/coverage" includes="*.exec"/>
    </jacoco:merge>
    <jacoco:report>
      <executiondata>
        <file file="coverage/merged.exec"/>
      </executiondata>
      <structure name="${build.name}">
        <classfiles>
            <fileset dir="Apache/bin">
              <exclude name="${build.test.filenamepattern}"/>
            </fileset>
            <fileset dir="Complex/bin">
              <exclude name="${build.test.filenamepattern}"/>
            </fileset>
            <fileset dir="Diagnostics/bin">
              <exclude name="${build.test.filenamepattern}"/>
            </fileset>
            <fileset dir="Dsl/bin">
              <exclude name="${build.test.filenamepattern}"/>
            </fileset>
            <fileset dir="Fol/bin">
              <exclude name="${build.test.filenamepattern}"/>
            </fileset>
            <fileset dir="Fsm/bin">
              <exclude name="${build.test.filenamepattern}"/>
            </fileset>
            <fileset dir="Graphviz/bin">
              <exclude name="${build.test.filenamepattern}"/>
            </fileset>
            <!-- <fileset dir="Groovy/bin">
            </fileset> Not yet -->
            <fileset dir="Hibernate/bin">
              <exclude name="${build.test.filenamepattern}"/>
            </fileset>
            <fileset dir="Http/bin">
              <exclude name="${build.test.filenamepattern}"/>
            </fileset>
            <fileset dir="Jdbc/bin">
              <exclude name="${build.test.filenamepattern}"/>
            </fileset>
            <fileset dir="Json/bin">
              <exclude name="${build.test.filenamepattern}"/>
            </fileset>
            <fileset dir="Ltl/bin">
              <exclude name="${build.test.filenamepattern}"/>
            </fileset>
            <fileset dir="Mtnp/bin">
              <exclude name="${build.test.filenamepattern}"/>
            </fileset>
            <fileset dir="Provenance/bin">
              <exclude name="${build.test.filenamepattern}"/>
            </fileset>
            <fileset dir="Serialization/bin">
              <exclude name="${build.test.filenamepattern}"/>
            </fileset>
            <fileset dir="Signal/bin">
              <exclude name="${build.test.filenamepattern}"/>
            </fileset>
            <fileset dir="Tuples/bin">
              <exclude name="${build.test.filenamepattern}"/>
            </fileset>
            <fileset dir="WebSocket/bin">
              <exclude name="${build.test.filenamepattern}"/>
            </fileset>
            <fileset dir="Widgets/bin">
              <exclude name="${build.test.filenamepattern}"/>
            </fileset>
            <fileset dir="Xml/bin">
              <exclude name="${build.test.filenamepattern}"/>
            </fileset>
        </classfiles>
        <sourcefiles encoding="UTF-8">
            <fileset dir="Apache/src"/>
            <fileset dir="Complex/src"/>
            <fileset dir="Diagnostics/src"/>
            <fileset dir="Dsl/src"/>
            <fileset dir="Fol/src"/>
            <fileset dir="Fsm/src"/>
            <fileset dir="Graphviz/src"/>
            <!-- <fileset dir="Groovy/src"/> Not yet -->
            <fileset dir="Hibernate/src"/>
            <fileset dir="Http/src"/>
            <fileset dir="Jdbc/src"/>
            <fileset dir="Json/src"/>
            <fileset dir="Ltl/src"/>
            <fileset dir="Mtnp/src"/>
            <fileset dir="Provenance/src"/>
            <fileset dir="Serialization/src"/>
            <fileset dir="Signal/src"/>
            <fileset dir="Tuples/src"/>
            <fileset dir="WebSocket/src"/>
            <fileset dir="Widgets/src"/>
            <fileset dir="Xml/src"/>
        </sourcefiles>
      </structure>
      <html destdir="coverage"/>
      <xml destfile="tests/report.xml"/>
    </jacoco:report>
  </target>
  
  <target name="report" depends="junit-report,jacoco-report">
    <!-- Just call the two dependent tasks -->
  </target>
  
  <!-- Calls the "clean" task in each subfolder -->
  <target name="clean" depends="init">
    <for param="subdir">
      <dirset dir=".">
      <include name="*"/>
      </dirset>
      <sequential>
      <if>
        <available file="@{subdir}/build.xml"/>
        <then>
          <sequential>
            <echo message="Entering @{subdir}" />
            <ant dir="@{subdir}" target="clean" />
          </sequential>
        </then>
      </if>
      </sequential>
    </for>
    <echo message="Deleting jars dir" />
    <delete dir="jars" includes="*.jar" />
    <delete dir="docs" />
  </target>
  
  <!-- Calls the "wipe" task in each subfolder -->
  <target name="wipe" depends="init">
    <for param="subdir">
      <dirset dir=".">
      <include name="*"/>
      </dirset>
      <sequential>
      <if>
        <available file="@{subdir}/build.xml"/>
        <then>
          <sequential>
            <echo message="Entering @{subdir}" />
            <ant dir="@{subdir}" target="wipe" />
          </sequential>
        </then>
      </if>
      </sequential>
    </for>
  </target>

  <!-- Calls the jar task for each project -->
  <target name="all" depends="init,jar">
  </target>

  <!-- Prints the name of each subfolder that has a build script -->
  <target name="print-folders" depends="init">
    <for param="subdir">
      <dirset dir=".">
      <include name="*"/>
     </dirset>
     <sequential>
      <if>
        <available file="@{subdir}/build.xml"/>
        <then>
          <echo message="@{subdir}"/>
        </then>
      </if>
     </sequential>
    </for>
  </target>
    
  <!-- Builds the javadoc for the palettes -->
  <target name="javadoc" depends="init">
    <mkdir dir="${build.rootdocdir}"/>
    <mkdir dir="${build.rootdocdir}/doc-files"/>
    <javadoc
      overview="project-overview.html"
      destdir="${build.rootdocdir}"
      packagenames="*"
      excludepackagenames=""
      defaultexcludes="yes"
      author="true"
      version="true"
      use="true"
      Encoding="utf8"
      docencoding="utf8"
      charset="utf8"
      windowtitle="BeepBeep 3 Palettes API Reference">
      <doctitle><![CDATA[<h1>]]>${build.name}<![CDATA[ Documentation</h1>]]></doctitle>
      <bottom><![CDATA[<i>Copyright&nbsp;&#169; ]]>${build.author}<![CDATA[. All Rights Reserved.</i>]]></bottom>
      <link href="http://docs.oracle.com/javase/8/docs/api/"/>
      <fileset dir="Apache/src">
        <include name="**"/>
        <exclude name="**/*Test.java"/>
      </fileset>
      <fileset dir="Complex/src">
        <include name="**"/>
        <exclude name="**/*Test.java"/>
      </fileset>
      <fileset dir="Diagnostics/src">
        <include name="**/*.java"/>
        <exclude name="**/*Test.java"/>
      </fileset>
      <fileset dir="Dsl/src">
        <include name="**/*.java"/>
        <exclude name="**/*Test.java"/>
      </fileset>
      <fileset dir="Fol/src">
        <include name="**/*.java"/>
        <exclude name="**/*Test.java"/>
      </fileset>
      <fileset dir="Fsm/src">
        <include name="**/*.java"/>
        <exclude name="**/*Test.java"/>
      </fileset>
      <fileset dir="Hibernate/src">
        <include name="**/*.java"/>
        <exclude name="**/*Test.java"/>
      </fileset>
      <fileset dir="Hibernate/src">
        <include name="**/*.java"/>
        <exclude name="**/*Test.java"/>
      </fileset>
      <fileset dir="Http/src">
        <include name="**/*.java"/>
        <exclude name="**/*Test.java"/>
      </fileset>
      <fileset dir="Jdbc/src">
        <include name="**/*.java"/>
        <exclude name="**/*Test.java"/>
      </fileset>
      <fileset dir="Json/src">
        <include name="**/*.java"/>
        <exclude name="**/*Test.java"/>
      </fileset>
      <fileset dir="Mtnp/src">
        <include name="**/*.java"/>
        <exclude name="**/*Test.java"/>
      </fileset>
      <fileset dir="Provenance/src">
        <include name="**/*.java"/>
        <exclude name="**/*Test.java"/>
      </fileset>
      <fileset dir="Serialization/src">
        <include name="**/*.java"/>
        <exclude name="**/*Test.java"/>
      </fileset>
      <fileset dir="Signal/src">
        <include name="**/*.java"/>
        <exclude name="**/*Test.java"/>
      </fileset>
      <fileset dir="Tuples/src">
        <include name="**/*.java"/>
        <exclude name="**/*Test.java"/>
      </fileset>
      <fileset dir="WebSocket/src">
        <include name="**/*.java"/>
        <exclude name="**/*Test.java"/>
      </fileset>
      <fileset dir="Widgets/src">
        <include name="**/*.java"/>
        <exclude name="**/*Test.java"/>
      </fileset>
      <fileset dir="Xml/src">
        <include name="**/*.java"/>
        <exclude name="**/*Test.java"/>
      </fileset>
      <!-- No groups, as each palette is in its own package
      <group title="Apache" packages="ca.uqac.lif.cep.apache"/>
      <group title="Complex" packages="ca.uqac.lif.cep.complex"/>
      <group title="Diagnostics" packages="ca.uqac.lif.cep.diagnostics"/>
      <group title="Dsl" packages="ca.uqac.lif.cep.dsl"/>
      <group title="Fol" packages="ca.uqac.lif.cep.fol"/>
      <group title="Fsm" packages="ca.uqac.lif.cep.fsm"/>
      <group title="Graphviz" packages="ca.uqac.lif.cep.graphviz"/>
      <group title="Hibernate" packages="ca.uqac.lif.cep.hibernate"/>
      <group title="Http" packages="ca.uqac.lif.cep.http"/>
      <group title="Jdbc" packages="ca.uqac.lif.cep.jdbc"/>
      <group title="Json" packages="ca.uqac.lif.cep.json"/>
      <group title="Mtnp" packages="ca.uqac.lif.cep.mtnp"/>
      <group title="Provenance" packages="ca.uqac.lif.cep.provenance"/>
      <group title="Serialization" packages="ca.uqac.lif.cep.serialization"/>
      <group title="Signal" packages="ca.uqac.lif.cep.signal"/>
      <group title="Tuples" packages="ca.uqac.lif.cep.tuples"/>
      <group title="WebSocket" packages="ca.uqac.lif.cep.websocket"/>
      <group title="Widgets" packages="ca.uqac.lif.cep.widgets"/>
      <group title="Xml" packages="ca.uqac.lif.cep.xml"/>
      -->
      <classpath>
        <fileset file="Apache/lib/beepbeep*.jar"/>
        <fileset file="Dsl/dep/*.jar"/>
        <fileset file="Http/dep/*.jar"/>
        <fileset file="Json/dep/*.jar"/>
        <fileset file="Mtnp/dep/*.jar"/>
        <fileset file="Serialization/dep/*.jar"/>
        <fileset file="WebSocket/dep/*.jar"/>
        <fileset file="Xml/dep/*.jar"/>
      </classpath>
    </javadoc>
    <copy todir="docs/javadoc/doc-files">
      <!-- <fileset dir="Apache/src/doc-files"/> No such folder -->
      <!-- <fileset dir="Complex/src/doc-files"/> No such folder -->
      <!-- <fileset dir="Diagnostics/src/doc-files"/> No such folder -->
      <!-- <fileset dir="Dsl/src/doc-files"/> No such folder -->
      <!--  <fileset dir="Fol/src/doc-files"/> No such folder -->
      <!-- <fileset dir="Fsm/src/doc-files"/> No such folder -->
      <!-- <fileset dir="Graphviz/src/doc-files"/> No such folder -->
      <!-- <fileset dir="Groovy/src/doc-files"/> Not yet -->
      <!-- <fileset dir="Hibernate/src/doc-files"/> No such folder -->
      <fileset dir="Http/src/doc-files"/>
      <!-- <fileset dir="Jdbc/src/doc-files"/> No such folder -->
      <!-- <fileset dir="Json/src/doc-files"/> No such folder -->
      <!-- <fileset dir="Ltl/src/doc-files"/> No such folder -->
      <!-- <fileset dir="Mtnp/src/doc-files"/> No such folder -->
      <!-- <fileset dir="Provenance/src/doc-files"/> No such folder -->
      <fileset dir="Serialization/src/doc-files"/>
      <!-- <fileset dir="Signal/src/doc-files"/> No such folder -->
      <!-- <fileset dir="Tuples/src/doc-files"/> No such folder -->
      <!-- <fileset dir="WebSocket/src/doc-files"/> No such folder -->
      <!-- <fileset dir="Widgets/src/doc-files"/> No such folder -->
      <!-- <fileset dir="Xml/src/doc-files"/> No such folder -->
    </copy>
  </target>
  
  <!-- Task that prepares the environment before the compilation.
       This is mostly a *hack* so that the Jdbc palette, which depends on
       Tuples, can compile by copying tuples.jar to its dep dir. -->
  <target name="prepare" depends="init">
    <copy file="jars/tuples.jar" tofile="Jdbc/lib/tuples.jar" failonerror="false"/>
  </target>
  
  <!-- Target: jacoco
       Download JaCoCo if not present, and put it in the lib folder
  -->
  <property name="jacoco.jarname" value="jacocoant.jar"/>
  <condition property="jacoco.absent" value="false" else="true">
    <available file="${build.libdir}/${jacoco.jarname}"/>
  </condition>
  <target name="jacoco" if="${jacoco.absent}" description="Install JaCoCo if not present">
    <mkdir dir="${build.libdir}"/>
    <get src="https://github.com/jacoco/jacoco/releases/download/v${versions.jacoco}/jacoco-${versions.jacoco}.zip" dest="${build.libdir}/jacoco.zip"/>
    <unzip src="${build.libdir}/jacoco.zip" dest="${build.libdir}">
      <patternset>
        <include name="**/*.jar"/>
      </patternset>
      <mapper type="flatten"/>
    </unzip>
  </target>
</project>
back to top