Last active
January 3, 2019 19:13
-
-
Save tgvaughan/9826563 to your computer and use it in GitHub Desktop.
Generic ANT bulid file for BEAST 2 packages. Copy this into an otherwise empty directory and type "ant skeleton" to create a new package.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<project default="build" basedir="."> | |
<!-- Source, JUnit test code and jar library locations. --> | |
<property name="src" location="src"/> | |
<property name="test" location="test"/> | |
<property name="lib" location="lib"/> | |
<!-- Location to check for local copy of beast2 repository --> | |
<property name="beastDir" location="../beast2"/> | |
<!-- BEAST 2 currently uses Java 1.8 --> | |
<property name="sourceVersion" value="1.8"/> | |
<property name="targetVersion" value="1.8"/> | |
<!-- Directories necessary for all BEAST 2 packages --> | |
<property name="doc" location="doc"/> | |
<property name="examples" location="examples"/> | |
<property name="templates" location="templates"/> | |
<!-- BEAST branch and version to build against | |
(only different for version tags because of | |
a Github peculiarity) --> | |
<property name="beast-branch" value="master"/> | |
<property name="beast-version" value="master"/> | |
<!-- Names of temporary build/test directories --> | |
<property name="build" location="build"/> | |
<property name="build-lib" location="build-lib"/> | |
<property name="build-test" location="build-test"/> | |
<property name="test-reports" location="test-reports"/> | |
<property name="dist" location="dist"/> | |
<property name="pack" location="${dist}/package"/> | |
<!-- Prepare for compilation --> | |
<target name="init"> | |
<available file="version.xml" property="versionAvailable"/> | |
<fail unless="versionAvailable"> | |
** Required file version.xml does not exist. ** | |
If this is a new project, run "ant skeleton" from | |
the command line to create the files required for | |
your BEAST 2 package. | |
</fail> | |
<!-- Read package name and version from xml file --> | |
<xmlproperty file="version.xml" prefix="fromVersionFile" /> | |
<property name="projName" value="${fromVersionFile.addon(name)}" /> | |
<property name="projVersion" value="${fromVersionFile.addon(version)}" /> | |
<mkdir dir="${build}"/> | |
<mkdir dir="${build-lib}"/> | |
<mkdir dir="${dist}"/> | |
<copy todir="${build-lib}" failonerror="false" quiet="true"> | |
<fileset dir="${lib}" includes="*.jar"/> | |
</copy> | |
</target> | |
<!-- Get beast --> | |
<target name="find-beast" depends="init"> | |
<available file="${beastDir}" property="localBeastAvailable"/> | |
</target> | |
<target name="build-remote-beast" depends="find-beast" unless="localBeastAvailable"> | |
<echo>No local copy of the beast2 source found at ${beastDir}.</echo> | |
<echo>Compiling against version ${beast-version} from GitHub.</echo> | |
<property name="build-beast" location="build-beast"/> | |
<mkdir dir="${build-beast}"/> | |
<get src="https://github.com/CompEvol/beast2/archive/${beast-branch}.zip" dest="${build-beast}/beast.zip"/> | |
<unzip src="${build-beast}/beast.zip" dest="${build-beast}"/> | |
<mkdir dir="${build-beast}/beast2-${beast-version}/build"/> | |
<javac target="${targetVersion}" source="${sourceVersion}" | |
srcdir="${build-beast}/beast2-${beast-version}/src" | |
destdir="${build-beast}/beast2-${beast-version}/build" includeantruntime="false"> | |
<classpath> | |
<pathelement path="${classpath}"/> | |
<fileset dir="${build-beast}/beast2-${beast-version}/lib" includes="*.jar"/> | |
</classpath> | |
</javac> | |
<jar jarfile="${build-lib}/beast2.jar" basedir="${build-beast}/beast2-${beast-version}/build" /> | |
<copy todir="${build-lib}"> | |
<fileset dir="${build-beast}/beast2-${beast-version}/lib" includes="*.jar"/> | |
</copy> | |
<delete dir="${build-beast}" /> | |
</target> | |
<target name="build-local-beast" depends="find-beast" if="localBeastAvailable"> | |
<echo>Compiling against beast2 source found at ${beastDir}.</echo> | |
<property name="build-beast" location="build-beast"/> | |
<mkdir dir="${build-beast}"/> | |
<javac target="${targetVersion}" source="${sourceVersion}" | |
srcdir="${beastDir}/src" | |
destdir="${build-beast}" includeantruntime="false"> | |
<classpath> | |
<pathelement path="${classpath}"/> | |
<fileset dir="${beastDir}/lib" includes="*.jar"/> | |
</classpath> | |
</javac> | |
<jar jarfile="${build-lib}/beast2.jar" basedir="${build-beast}" /> | |
<copy todir="${build-lib}"> | |
<fileset dir="${beastDir}/lib" includes="*.jar"/> | |
</copy> | |
<delete dir="${build-beast}" /> | |
</target> | |
<target name="build-beast" depends="build-local-beast,build-remote-beast"/> | |
<!-- Compile --> | |
<target name="compile" depends="build-beast"> | |
<javac target="${targetVersion}" source="${sourceVersion}" srcdir="${src}" destdir="${build}" includeantruntime="false"> | |
<classpath> | |
<pathelement path="${classpath}"/> | |
<fileset dir="${build-lib}" includes="*.jar"/> | |
</classpath> | |
</javac> | |
</target> | |
<target name="copy-resources" depends="compile"> | |
<copy todir="${build}"> | |
<fileset dir="${src}" | |
includes="**/*.png" /> | |
</copy> | |
</target> | |
<!-- Prepare for unit test compilation --> | |
<target name="init-test" depends="init"> | |
<mkdir dir="${build-test}"/> | |
<mkdir dir="${test-reports}"/> | |
</target> | |
<!-- Compile unit tests --> | |
<target name="compile-test" depends="init-test,compile,copy-resources"> | |
<javac target="${targetVersion}" source="${sourceVersion}" srcdir="${test}" destdir="${build-test}" includeantruntime="false"> | |
<classpath> | |
<pathelement path="${classpath}"/> | |
<pathelement path="${build}" /> | |
<fileset dir="${build-lib}" includes="*.jar"/> | |
</classpath> | |
</javac> | |
</target> | |
<!-- Run unit tests --> | |
<target name="test" depends="compile-test"> | |
<junit printsummary="yes" failureproperty="testFailed" showoutput="true"> | |
<classpath> | |
<pathelement path="${classpath}"/> | |
<pathelement path="${build}" /> | |
<pathelement path="${build-test}" /> | |
<fileset dir="${build-lib}" includes="*.jar"/> | |
</classpath> | |
<batchtest fork="yes" todir="${test-reports}"> | |
<fileset dir="${test}"> | |
<include name="**/*Test.java"/> | |
</fileset> | |
<formatter type="plain"/> | |
<!--formatter type="plain" usefile="false"/--> <!-- to screen --> | |
</batchtest> | |
</junit> | |
<fail if="testFailed" status="1" message="Unit test failed."/> | |
</target> | |
<!-- Create BEAST 2 package --> | |
<target name="build" depends="compile,copy-resources"> | |
<property name="fullName" value="${projName}.v${projVersion}"/> | |
<mkdir dir="${pack}"/> | |
<mkdir dir="${pack}/examples"/> | |
<mkdir dir="${pack}/templates"/> | |
<mkdir dir="${pack}/lib"/> | |
<mkdir dir="${pack}/doc"/> | |
<jar jarfile="${pack}/${fullName}.src.jar" basedir="${src}" /> | |
<mkdir dir="${lib}" /> | |
<copy todir="${pack}/lib"> | |
<fileset dir="${lib}" includes="*.jar" /> | |
</copy> | |
<jar jarfile="${pack}/lib/${fullName}.jar" basedir="${build}" /> | |
<copy file="README.md" tofile="${pack}/README" failonerror="false" quiet="true" /> | |
<copy file="README.md" tofile="${pack}/README" failonerror="false" quiet="true" /> | |
<copy file="COPYING" todir="${pack}" /> | |
<copy todir="${pack}"> | |
<fileset dir="${lib}" includes="LICENSE*" /> | |
</copy> | |
<mkdir dir="${examples}" /> | |
<copy todir="${pack}/examples"> | |
<fileset dir="${examples}" includes="**/*.xml" /> | |
<fileset dir="${examples}" includes="**/*.fasta" /> | |
</copy> | |
<mkdir dir="${templates}" /> | |
<copy todir="${pack}/templates"> | |
<fileset dir="${templates}" includes="*.xml" /> | |
</copy> | |
<mkdir dir="${doc}" /> | |
<copy todir="${pack}/doc"> | |
<fileset dir="${doc}" includes="*.tex,*.doc,*.lyx,*.txt"/> | |
</copy> | |
<copy file="version.xml" todir="${pack}" /> | |
<zip destfile="${dist}/${fullName}.zip" basedir="${pack}" /> | |
<delete dir="${pack}"/> | |
<echo/> | |
<echo/> | |
<echo>** Package ${dist}/${fullName}.zip created successfuly! **</echo> | |
</target> | |
<!-- Revert to pristine state. --> | |
<target name="clean"> | |
<delete dir="${build}" /> | |
<delete dir="${build-lib}" /> | |
<delete dir="${dist}" /> | |
<delete dir="${build-test}" /> | |
<delete dir="${test-reports}" /> | |
</target> | |
<!-- Create skeleton package layout in current directory --> | |
<target name="skeleton"> | |
<fail> | |
<condition> | |
<or> | |
<resourcecount when="gt" count="1"> | |
<fileset dir="${basedir}"/> | |
</resourcecount> | |
<resourcecount when="gt" count="1"> | |
<dirset dir="${basedir}"/> | |
</resourcecount> | |
</or> | |
</condition> | |
** This directory contains files besides the build script. ** | |
You should run "ant skeleton" in a directory containing only the build script. | |
</fail> | |
<echo>===============================</echo> | |
<echo>Create skeleton BEAST 2 package</echo> | |
<echo>===============================</echo> | |
<echo/> | |
<echo>First, we need some information...</echo> | |
<echo/> | |
<basename property="defaultProjName" file="${basedir}"/> | |
<input addproperty="projName" defaultvalue="${defaultProjName}">Enter package name</input> | |
<input addproperty="license" defaultvalue="gpl3" validargs="gpl3,lgpl3,lgpl2.1,apache2">Select open source software license</input> | |
<input addproperty="projVersion" defaultvalue="1.0.0">Enter package version</input> | |
<input addproperty="beastVersionReq" defaultvalue="2.4.0">Enter minimum required BEAST 2 version</input> | |
<echo>Assembling files and directory structure...</echo> | |
<echo file="version.xml"><addon name="${projName}" version="${projVersion}"> | |
<depends on="BEAST" atleast="${beastVersionReq}"/> | |
<!-- Add other dependencies as necessary. --> | |
</addon> | |
</echo> | |
<echo file="README.md" message="README for my package.${line.separator}"/> | |
<condition property="licenseURL" value="https://www.gnu.org/licenses/gpl-3.0.txt"> | |
<equals arg1="${license}" arg2="gpl3"/> | |
</condition> | |
<condition property="licenseURL" value="https://www.gnu.org/licenses/lgpl-3.0.txt"> | |
<equals arg1="${license}" arg2="lgpl3"/> | |
</condition> | |
<condition property="licenseURL" value="https://www.gnu.org/licenses/lgpl-2.1.txt"> | |
<equals arg1="${license}" arg2="lgpl2.1"/> | |
</condition> | |
<condition property="licenseURL" value="http://www.apache.org/licenses/LICENSE-2.0.txt"> | |
<equals arg1="${license}" arg2="apache2"/> | |
</condition> | |
<get src="${licenseURL}" dest="COPYING"/> | |
<mkdir dir="${src}"/> | |
<mkdir dir="${test}"/> | |
<mkdir dir="${lib}"/> | |
<mkdir dir="${examples}"/> | |
<mkdir dir="${templates}"/> | |
<mkdir dir="${doc}"/> | |
<echo/> | |
<echo>Done.</echo> | |
<echo/> | |
<echo>The directory structure is as follows:</echo> | |
<echo>${src} - your java source goes here</echo> | |
<echo>${test} - your junit tests go here (You _are_ going to write, those, aren't you!)</echo> | |
<echo>${doc} - your documentation goes here</echo> | |
<echo>${examples} - your example XML scripts go here</echo> | |
<echo>${templates} - your BEAUti templates go here</echo> | |
<echo/> | |
<echo>To build your package, just type "ant" at the command line.</echo> | |
<echo/> | |
<echo>To run unit tests, type "ant test".</echo> | |
<echo/> | |
<echo>That's it! Happy coding!</echo> | |
</target> | |
</project> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment