JAL-3026 reinstate test to classpath, fix compilation errors therein
[jalview.git] / build.xml
index d86cbf3..7394235 100755 (executable)
--- a/build.xml
+++ b/build.xml
@@ -43,6 +43,7 @@
     <echo message="See docs/building.html and the comments in build file for other targets." />
     <echo message="note: compile and makeApplet optionally compile/obfuscate applet against a different Java version by specifying -Djava118.home=PathtoJDK/lib which is the lib directory in the JDK install that contains rt.jar " />
     <echo message="Useful -D flags: -Ddonotobfuscate will prevent applet obfuscation" />
+    <echo message="Useful -D flags: -Dclover.jar to specify path to openclover for testng coverage report" />
   </target>
 
 
     <property name="docDir" value="doc" />
     <property name="sourceDir" value="src" />
     <property name="schemaDir" value="schemas" />
-    <property name="outputDir" value="classes" />
+    <property name="outputDir" value="classes" unless:set="clover.jar"/>
+    <property name="outputDir" value="cloverclasses" if:set="clover.jar"/>
     <property name="packageDir" value="dist" />
     <property name="outputJar" value="jalview.jar" />
     <!-- Jalview Applet JMol Jar Dependency -->
     <property name="reportDir" value="test-reports" />
     <property name="testDir" value="test" />
     <property name="testOutputDir" value="tests" />
+       <property name="cloverOutputDir" value="clover" if:set="clover.jar" />
     <!-- switch to indicate if we should obfuscate jalviewLite -->
     <!-- <property name="donotobfuscate" value="true"/> -->
     <!-- switch to exclude associations from generated jnlp files -->
         <include name="**/*.*" />
       </fileset>
     </copy>
+       <mkdir dir="${cloverOutputDir}" if:set="clover.jar"/>
   </target>
 
   <target name="build" depends="prepare">
 
   <target name="buildindices" depends="init, prepare" unless="help.uptodate">
     <replace value="${JALVIEW_VERSION}">
-      <replacetoken><![CDATA[$$Version-Rel$$]]></replacetoken>
+      <replacetoken>
+        <![CDATA[$$Version-Rel$$]]>
+      </replacetoken>
       <fileset dir="${outputDir}/${helpDir}">
         <include name="help.jhm" />
       </fileset>
     </jar>
 
     <antcall target="writejnlpf">
-      <param name="jnlpFile" value="${packageDir}/jalview.jnlp" />
+      <param name="jnlpFile" value="${packageDir}/jalview_256M.jnlp" />
       <param name="inih" value="10M" />
       <param name="maxh" value="256M" />
     </antcall>
+    <antcall target="writejnlpf">
+      <param name="jnlpFile" value="${packageDir}/jalview.jnlp" />
+      <param name="inih" value="800M" />
+      <param name="maxh" value="1024M" />
+    </antcall>
 
     <antcall target="writejnlpf">
       <param name="jnlpFile" value="${packageDir}/jalview_1G.jnlp" />
 
     <antcall target="writejnlpf">
       <param name="jnlpFile" value="${packageDir}/jalview_2G.jnlp" />
-      <param name="inih" value="256M" />
+      <param name="inih" value="800M" />
       <param name="maxh" value="1024M" />
     </antcall>
 
         <association mime-type="application-x/ext-file" extensions="jar"/>-->
   </target>
 
-  <target name="-jarsignwithtsa" depends="makedist,preparejnlp" if="timestamp">
+  <target name="-jarsignwithtsa" depends="makedist,preparejnlp" if="timestamp" unless="nosign">
     <signjar storepass="${jalview.keystore.pass}" keypass="${jalview.key.pass}" keystore="${jalview.keystore}" alias="${jalview.key}" lazy="false" verbose="false" sigalg="${jalview.keyalg}" digestalg="${jalview.keydig}"
       tsaproxyhost="${proxyHost}" tsaproxyport="${proxyPort}" tsaurl="${jalview.tsaurl}">
       <fileset dir="${packageDir}">
       </fileset>
     </signjar>
   </target>
-  <target name="-jarsignnotsa" depends="makedist,preparejnlp" unless="timestamp">
+  <target name="-jarsignnotsa" depends="makedist,preparejnlp" if:blank="timestamp" unless="nosign">
     <signjar storepass="${jalview.keystore.pass}" keypass="${jalview.key.pass}" keystore="${jalview.keystore}" alias="${jalview.key}" lazy="false" verbose="false" sigalg="${jalview.keyalg}" digestalg="${jalview.keydig}">
       <fileset dir="${packageDir}">
         <include name="*.jar" />
         </resources>
         <resources os="Mac OS X">
           <fileset dir="${packageDir}">
-                <include name="quaqua-filechooser-only-8.0.jar"/>
+            <include name="quaqua-filechooser-only-8.0.jar"/>
             <include name="*quaqua64*.jnilib.jar" />
           </fileset>
         </resources>
     <jnlpf toFile="${jnlpFile}" />
     <!-- add the add-modules j2se attribute for java 9 -->
     <replace file="${jnlpFile}" value="j2se version=&quot;1.8+&quot; initial-heap-size=&quot;${inih}&quot; max-heap-size=&quot;${maxh}&quot; java-vm-args=&quot;--add-modules=java.se.ee --illegal-access=warn&quot;">
-          <replacetoken>j2se version="1.8+"</replacetoken>
-           
-        </replace>
+      <replacetoken>j2se version="1.8+"</replacetoken>
+    </replace>
   </target>
 
   <target name="-dofakejnlpfileassoc" depends="-generatejnlpf" if="nojnlpfileassocs">
 </target>
 
 <target name="makedist" depends="build, buildPropertiesFile, linkcheck, buildindices">
+  <fail if="clover.jar">
+    Ignoring request to build jalview distribution with clover-instrumented classes
+  </fail>
   <!-- make the package jar if not already existing -->
   <mkdir dir="${packageDir}" />
   <!-- clean dir if it already existed -->
   <!-- each replacetoken CDATA body must be on one line - 
        otherwise the pattern doesn't match -->
   <replace value="${JALVIEW_VERSION}">
-    <replacetoken><![CDATA[$$Version-Rel$$]]></replacetoken>
+    <replacetoken>
+      <![CDATA[$$Version-Rel$$]]>
+    </replacetoken>
     <fileset dir="_sourcedist">
       <include name="**/*" />
     </fileset>
   </replace>
   <replace dir="_sourcedist" value="${build.year}">
-    <replacetoken><![CDATA[$$Year-Rel$$]]></replacetoken>
+    <replacetoken>
+      <![CDATA[$$Year-Rel$$]]>
+    </replacetoken>
     <fileset dir="_sourcedist">
       <include name="**/*" />
     </fileset>
     <include name="ap_${jsonSimple}" />
   </fileset>
 </target>
-<target name="-signappletnotsa" unless="timestamp" depends="-signapplet">
+<target name="-signappletnotsa" if:blank="timestamp" depends="-signapplet" unless="nosign">
   <signjar storepass="${jalview.keystore.pass}" keypass="${jalview.key.pass}" keystore="${jalview.keystore}" alias="${jalview.key}" lazy="false" verbose="false">
     <fileset refid="signappletjarset" />
   </signjar>
 </target>
 
-<target name="-signapplettsa" if="timestamp" depends="-signapplet">
+<target name="-signapplettsa" if="timestamp" depends="-signapplet" unless="nosign">
   <signjar storepass="${jalview.keystore.pass}" keypass="${jalview.key.pass}" keystore="${jalview.keystore}" alias="${jalview.key}" lazy="false" verbose="false" tsaproxyhost="${proxyHost}" tsaproxyport="${proxyPort}" tsaurl="${jalview.tsaurl}">
     <fileset refid="signappletjarset" />
   </signjar>
   <javac srcdir="utils" destdir="utils" includes="HelpLinksChecker.java"/>
   <java fork="true" dir="${helpDir}" classpath="utils" classname="HelpLinksChecker" failonerror="true">
     <arg file="${helpDir}"/>
-    <arg value="-nointernet"/>
+    <arg value="-nointernet" />
   </java>
 </target>
+
+<target name="eclipse-install" depends="init,prepare">
+
+  <property name="eclipseTempFile" value="eclipse-jee-oxygen-R-linux-gtk-x86_64.tar.gz"/>
+  <property name="eclipseInstallURL" value="http://mirror.csclub.uwaterloo.ca/eclipse/technology/epp/downloads/release/oxygen/R/eclipse-jee-oxygen-R-linux-gtk-x86_64.tar.gz"/>
+  <property name="java2scriptURL" value="https://github.com/BobHanson/java2script/blob/master/sources/net.sf.j2s.core/dist/dropins/net.sf.j2s.core.jar?raw=true"/>
+
+  <get url="${eclipseInstallURL}" dest="${eclipseTempFile}"/>
+  <untar compression="gzip" src="${eclipseTempFile}" dest="${eclipse-inst}"/>
+
+  <!-- not needed since we ship transpiler with source
+    <get url="${java2scriptURL}" dest="eclipse-inst/dropins/net.sf.j2s.core.jar" /> -->
+
+</target>
+
+<target name="build-site" depends="init,prepare,compile-site,unzip-to-site">
+  <!-- closure compile -->
+  <!-- tarball -->
+  <tar compression="gzip" destfile="site.tar.gz">
+    <tarfileset dir="site" />
+  </tar>
+</target>
+<target name="prepare-site" depends="init,prepare">
+  <property name="swingjsdir" value="swingjs"/>
+  <property name="eclipse-inst" value="/home/bamboo/buildtools/eclipse/eclipse-js"/>
+  <property name="eclipse-exec" value="${eclipse-inst}/eclipse"/>
+  <property name="site" value="site"/>
+  <!-- where the eclipse js workspace has been initialised -->
+  <property name="eclipse-work" value="/home/bamboo/buildtools/eclipse/eclipse-js-workspace"/>
+  <!-- git repository linked to project in workspace -->
+  <property name="eclipse-workrepo" value="/home/bamboo/buildtools/eclipse/eclipse-js-workspace/jalview-js"/>
+</target>
+  <target name="clean-site" depends="prepare-site">
+    <delete dir="${eclipse-workrepo}/${site}"/>
+    <mkdir dir="${eclipse-workrepo}/${site}"/>
+  </target>
+<target name="compile-site" depends="prepare-site,clean-site">
+  <!-- update transpiler -->
+  <copy file="${swingjsdir}/net.sf.j2s.core.jar" todir="${eclipse-inst}/dropins" overwrite="true" failonerror="true"/>
+  <!-- update the git repo linked to the eclipse workspace -->
+  <exec executable="/usr/bin/git" outputproperty="git.commit" failifexecutionfails="true">
+    <arg value="rev-parse" />
+    <arg value="--short" />
+    <arg value="HEAD" />
+  </exec>
+  <!-- update and checkout the same commit in the workspace project -->
+  <exec executable="/usr/bin/git" failifexecutionfails="true" dir="${eclipse-workrepo}">
+    <arg value="reset" />
+    <arg value="--hard" />
+  </exec>
+  <exec executable="/usr/bin/git" failifexecutionfails="true" dir="${eclipse-workrepo}">
+      <arg value="pull" />
+  </exec>
+  <exec executable="/usr/bin/git" failifexecutionfails="true" dir="${eclipse-workrepo}">
+    <arg value="checkout" />
+    <arg value="${git.commit}" />
+  </exec>
+  <!-- custom classpath for .js builds -->
+  <copy file=".classpath.js" tofile="${eclipse-workrepo}/.classpath" overwrite="true"/>
+  <!-- clean eclipse log -->
+  <delete file="${eclipse-work}/.metadata/.log"/>
+    
+  <!-- execute the eclipse build - the build may fail but valid javascript may still be produced, so we ignore return codes -->
+  <exec executable="${eclipse-exec}" failonerror="no">
+    <arg value="-nosplash"/>
+    <arg value="--launcher.suppressErrors"/>
+    <arg value="-application"/>
+    <arg value="org.eclipse.jdt.apt.core.aptBuild"/>
+    <arg value="-data"/>
+    <arg value="${eclipse-work}"/>
+  </exec>
+  <!-- report log -->
+  <exec executable="/bin/cat">
+    <arg value="${eclipse-work}/.metadata/.log"/>
+  </exec>
+  <!-- TODO: run jslint and something else here to check we have a complete set of .js files for java -->
+  <!-- possibly compare timestamps between .js files and their mate in source - any newer or not present triggers a new build -->
+  <!-- <mkdir dir="${packageDir}/${site}" /> -->
+  <!--   <property name="swingjs.zipurl" value="https://github.com/BobHanson/java2script/blob/master/sources/net.sf.j2s.java.core/dist/SwingJS-site.zip?raw=true" /> -->
+
+  <!-- and reset the .classpath -->
+  <exec executable="/usr/bin/git" failifexecutionfails="true" dir="${eclipse-workrepo}">
+    <arg value="checkout" />
+    <arg value="${git.commit}"/>
+    <arg value="--"/>
+    <arg value=".classpath" />
+  </exec>
+
+  <!-- finally copy artefacts from eclipse project checkout to the build site -->
+  <copy todir="${site}">
+    <fileset dir="${eclipse-workrepo}/site"/>
+  </copy>
+</target>
+<target name="unzip-to-site" depends="prepare-site">
+  <property name="swingjs.zip" value="${swingjsdir}/SwingJS-site.zip" />
+  <unzip dest="${site}/" overwrite="true">
+    <fileset dir="libjs">
+      <include name="*.zip" />
+    </fileset>
+  </unzip>
+  <copy overwrite="true" todir="${site}/swingjs/j2s/">
+    <fileset dir="${resourceDir}">
+      <include name="**"/>
+    </fileset>
+  </copy>
+
+  <!-- copy test files into place in site -->
+  <copy todir="${site}/examples">
+    <fileset dir="examples">
+      <include name="*.*"/>
+    </fileset>
+  </copy>
+  <!-- lastly, update SwingJS -->
+  <unzip dest="${site}/" overwrite="true">
+    <fileset dir="${swingjsdir}">
+      <include name="SwingJS-site.zip"/>
+    </fileset>
+  </unzip>
+</target>
 </project>