2009-03-19 03:13:19 +08:00
<project name= "Sting" default= "dist" basedir= "." xmlns:ivy= "antlib:org.apache.ivy.ant" >
2009-03-25 05:16:12 +08:00
<description > Compile and distribute the Sting toolkit</description>
2009-12-08 03:19:29 +08:00
<property name= "build.sysclasspath" value= "first" />
2009-12-05 04:08:41 +08:00
<property name= "build.dir" value= "build" />
2009-12-03 07:27:45 +08:00
<property name= "dist.dir" value= "dist" />
2010-09-25 05:17:16 +08:00
<property name= "external.dir" value= "external" />
2010-06-23 02:39:20 +08:00
<property name= "java.source.dir" value= "java/src" />
<property name= "java.classes" value= "${build.dir}/java/classes" />
2010-01-16 07:31:29 +08:00
<property name= "resource.file" value= "StingText.properties" />
2010-08-10 00:42:48 +08:00
<property name= "resource.path" value= "${java.classes}/StingText.properties" />
2009-12-03 07:27:45 +08:00
2011-01-08 06:03:36 +08:00
<property name= "scala.source.dir" value= "scala/src" />
<property name= "scala.classes" value= "${build.dir}/scala/classes" />
2010-08-10 00:42:48 +08:00
2010-08-14 07:52:24 +08:00
<property name= "queue-extensions.source.dir" value= "${build.dir}/queue-extensions/src" />
2010-08-10 00:42:48 +08:00
2010-08-06 02:47:53 +08:00
<!-- where to find the tribble distro -->
<property name= "tribble.dir" value= "tribble" />
2010-07-09 03:10:19 +08:00
<!-- where to find 'findbugs', which you must set if you plan to use 'ant findbugs' -->
<property name= "findbugs.home" value= "./findbugs" />
2010-11-02 05:31:44 +08:00
<!-- do we want to halt on failure of a unit test? default to yes (Bamboo uses 'no') -->
2009-12-03 14:19:39 +08:00
<property name= "halt" value= "yes" />
2010-11-02 05:31:44 +08:00
<!-- should our unit test output go to a file or the screen?
2009-09-03 23:00:27 +08:00
false means it goes to the screen (default) true to file -->
<property name= "usefile" value= "false" />
2009-06-16 03:41:16 +08:00
<!-- If running the 'package' task, this property controls the name of the xml file to package -->
2010-10-04 08:46:47 +08:00
<property name= "package.xml.dir" value= "packages" />
2009-06-16 03:41:16 +08:00
<property name= "executable" value= "GenomeAnalysisTK" />
2009-03-25 05:16:12 +08:00
<property environment= "env" />
2011-03-09 02:27:08 +08:00
<property name= "drmaa.file" value= "${env.SGE_ROOT}/lib/drmaa.jar" />
2010-09-25 05:17:16 +08:00
<patternset id= "java.source.pattern" >
<include name= "**/*.java" />
<exclude name= "**/playground/**" unless= "include.playground" />
<exclude name= "**/oneoffprojects/**" unless= "include.oneoffs" />
</patternset>
<fileset id= "java.source.files" dir= "${java.source.dir}" >
<patternset refid= "java.source.pattern" />
</fileset>
<fileset id= "external.source.files" dir= "${external.dir}" erroronmissingdir= "false" >
<patternset refid= "java.source.pattern" />
</fileset>
2010-03-30 12:20:19 +08:00
2011-01-11 05:07:29 +08:00
<fileset id= "java.class.files" dir= "${java.classes}" erroronmissingdir= "false" >
<include name= "**/*.class" />
</fileset>
2010-03-30 12:20:19 +08:00
<!-- the path for resources that need to go into the GATK jar;
any additional resources should go into this set. -->
<path id= "gatk.resources" >
2010-06-23 02:39:20 +08:00
<fileset dir= "${java.source.dir}" >
2010-03-30 12:20:19 +08:00
<include name= "**/**/templates/*" />
</fileset>
</path>
2009-12-05 04:08:41 +08:00
<patternset id= "dependency.mask" includes= "*.jar" >
2010-11-02 05:31:44 +08:00
<exclude name= "testng*.jar" />
2009-12-05 04:08:41 +08:00
<exclude name= "bcel*.jar" />
</patternset>
2010-09-09 04:37:54 +08:00
<path id= "external.dependencies" >
2009-12-05 04:08:41 +08:00
<fileset dir= "lib" >
<patternset refid= "dependency.mask" />
</fileset>
</path>
2010-09-09 04:37:54 +08:00
<path id= "build.results" >
<fileset dir= "dist" >
<patternset refid= "dependency.mask" />
</fileset>
</path>
2011-01-08 06:03:36 +08:00
<!-- Path to scala dependencies. -->
<path id= "scala.dependencies" >
2010-09-09 04:37:54 +08:00
<path refid= "external.dependencies" />
2010-08-12 05:58:26 +08:00
<pathelement location= "${java.classes}" />
<!-- Need the resources as we will be running a command line program which needs the help text. -->
<pathelement location= "${resource.path}" />
2011-01-08 06:03:36 +08:00
<!-- Add any previously compiled scala classes to the path. -->
<pathelement location= "${scala.classes}" />
2010-08-12 05:58:26 +08:00
</path>
2010-08-13 01:45:53 +08:00
<target name= "init.resolve" unless= "init.resolve.done" >
2010-08-10 00:42:48 +08:00
<!-- ivy properties -->
2010-11-19 04:22:01 +08:00
<property name= "ivy.install.version" value= "2.2.0" />
2010-08-10 00:42:48 +08:00
<property name= "ivy.home" value= "${user.home}/.ant" />
<property name= "ivy.jar.dir" value= "${ivy.home}/lib" />
<property name= "ivy.jar.file" value= "ivy-${ivy.install.version}.jar" />
<property name= "ivy.settings.dir" value= "settings" />
<property file= "${ivy.settings.dir}/ivysettings.properties" />
2010-08-19 08:42:37 +08:00
2011-03-08 07:52:48 +08:00
<mkdir dir= "lib" />
2009-11-02 14:02:41 +08:00
<mkdir dir= "${ivy.jar.dir}" />
<get src= "http://repo1.maven.org/maven2/org/apache/ivy/ivy/${ivy.install.version}/${ivy.jar.file}"
dest="${ivy.jar.dir}/${ivy.jar.file}"
usetimestamp="true"/>
<taskdef resource= "org/apache/ivy/ant/antlib.xml"
uri="antlib:org.apache.ivy.ant"
classpath="${ivy.jar.dir}/${ivy.jar.file}"/>
<ivy:settings file= "${ivy.settings.dir}/ivysettings.xml" />
2010-08-13 01:45:53 +08:00
<property name= "init.resolve.done" value= "true" />
2010-08-12 13:10:26 +08:00
</target>
2011-03-08 07:52:48 +08:00
<target name= "init.gridengine" depends= "init" if= "include.gridengine" >
2011-03-09 02:27:08 +08:00
<copy todir= "lib" file= "${drmaa.file}" />
2011-03-08 07:52:48 +08:00
</target>
<target name= "resolve" depends= "init.resolve,init,init.gridengine"
2010-08-12 13:10:26 +08:00
description="locate and download library dependencies">
2011-01-08 06:03:36 +08:00
<property name= "ivy.conf" value= "default" />
2009-11-02 14:02:41 +08:00
<ivy:retrieve file= "ivy.xml" conf= "${ivy.conf}" />
2010-11-19 04:22:01 +08:00
<!-- Remove old versions of ivy jars AFTER the ivy:retrieve has been class loaded. -->
<delete file= "${ivy.jar.dir}/ivy-2.0.0.jar" />
<delete file= "${ivy.jar.dir}/ivy-2.2.0-rc1.jar" />
2009-03-25 05:16:12 +08:00
</target>
2010-08-13 01:45:53 +08:00
<target name= "init.buildall" >
2011-01-08 06:03:36 +08:00
<!-- Set the properties needed to build everything -->
2010-08-13 01:45:53 +08:00
<property name= "gatk.target" value= "oneoffs" />
2011-01-08 06:03:36 +08:00
<property name= "scala.target" value= "core" />
2010-08-13 01:45:53 +08:00
</target>
2009-12-03 07:27:45 +08:00
<!-- define some key locations that might change based on how the build is run -->
2009-03-25 05:16:12 +08:00
<target name= "init" >
2010-01-20 00:55:42 +08:00
<!-- define build version and timestamp -->
<exec executable= "svnversion" outputproperty= "build.version" failonerror= "true" >
<arg value= "--no-newline" />
</exec>
<tstamp >
2010-01-20 05:58:36 +08:00
<format property= "build.timestamp" pattern= "yyyy/MM/dd HH:mm:ss" />
2010-01-20 00:55:42 +08:00
</tstamp>
2010-08-10 00:42:48 +08:00
<!-- Set target based on STING_BUILD_TYPE environment variable -->
<condition property= "sting.target" value= "core" else= "${env.STING_BUILD_TYPE}" >
<equals arg1= "${env.STING_BUILD_TYPE}" arg2= "$${env.STING_BUILD_TYPE}" />
</condition>
<!-- Get the gatk build target. Default to the STING_BUILD_TYPE. -->
<condition property= "gatk.target" value= "${sting.target}" else= "${env.GATK_BUILD_TYPE}" >
<equals arg1= "${env.GATK_BUILD_TYPE}" arg2= "$${env.GATK_BUILD_TYPE}" />
</condition>
<!-- Get the queue build target. Default to none. -->
2011-01-08 06:03:36 +08:00
<condition property= "scala.target" value= "none" else= "${env.QUEUE_BUILD_TYPE}" >
2010-08-10 00:42:48 +08:00
<equals arg1= "${env.QUEUE_BUILD_TYPE}" arg2= "$${env.QUEUE_BUILD_TYPE}" />
</condition>
2011-01-08 06:03:36 +08:00
<!-- If the scala target is set, then include all scala tasks. -->
2010-08-10 00:42:48 +08:00
<condition property= "scala.include" >
<or >
2011-01-08 06:03:36 +08:00
<not > <equals arg1= "${scala.target}" arg2= "none" /> </not>
2010-08-10 00:42:48 +08:00
</or>
</condition>
2011-01-08 06:03:36 +08:00
2011-03-08 07:52:48 +08:00
<!-- Include Grid Engine in the compile if SGE_ROOT is available. -->
<!-- Based off of http://wikis.sun.com/display/GridEngine/Automating+Grid+Engine+Functions+Through+DRMAA -->
<condition property= "include.gridengine" >
2011-03-09 02:27:08 +08:00
<available file= "${drmaa.file}" />
2011-03-08 07:52:48 +08:00
</condition>
2010-11-23 06:59:42 +08:00
<!-- Get the pipeline run type. Default to dry. -->
<condition property= "pipeline.run" value= "dry" else= "${pipeline.run}" >
<equals arg1= "${pipeline.run}" arg2= "$${pipeline.run}" />
</condition>
2010-08-10 00:42:48 +08:00
<echo message= "GATK build : ${gatk.target}" />
2011-01-08 06:03:36 +08:00
<echo message= "Scala build : ${scala.target}" />
2010-01-20 00:55:42 +08:00
<echo message= "source revision : ${build.version}" />
<echo message= "build time : ${build.timestamp}" />
2009-12-03 07:27:45 +08:00
<condition property= "include.oneoffs" >
2010-08-10 00:42:48 +08:00
<equals arg1= "${gatk.target}" arg2= "oneoffs" casesensitive= "false" />
2009-12-03 07:27:45 +08:00
</condition>
<condition property= "include.playground" >
<or >
2010-08-10 00:42:48 +08:00
<equals arg1= "${gatk.target}" arg2= "playground" casesensitive= "false" />
<equals arg1= "${gatk.target}" arg2= "oneoffs" casesensitive= "false" />
2009-12-03 07:27:45 +08:00
</or>
</condition>
2010-08-10 00:42:48 +08:00
2009-12-03 07:27:45 +08:00
<!-- Create the build directory structure used by compile -->
2010-06-23 02:39:20 +08:00
<mkdir dir= "${build.dir}" />
<mkdir dir= "${java.classes}" />
2010-11-18 04:41:04 +08:00
<pathconvert property= "external.build.dir" >
<path path= "${java.classes}" />
</pathconvert>
<pathconvert property= "external.dist.dir" >
<path path= "${dist.dir}" />
</pathconvert>
<!-- GATK dependencies consist of 3rd party plugins plus compiled GATK classes -->
<pathconvert property= "external.gatk.classpath" >
<path path= "${java.classes}" />
<path refid= "external.dependencies" />
</pathconvert>
2009-03-25 05:16:12 +08:00
</target>
2011-01-08 06:03:36 +08:00
<target name= "init.scala.compile" depends= "resolve"
2010-08-10 00:42:48 +08:00
description="Initializes the scala ant tasks from scala-compiler.jar">
<path id= "scala.classpath" >
<fileset dir= "lib" >
<include name= "scala-compiler-*.jar" />
<include name= "scala-library-*.jar" />
</fileset>
</path>
<taskdef resource= "scala/tools/ant/antlib.xml" >
<classpath refid= "scala.classpath" />
</taskdef>
</target>
<target name= "gatk.compile" depends= "tribble,init,resolve"
2009-03-25 05:16:12 +08:00
description="compile the source">
2010-09-25 05:17:16 +08:00
<!-- Compile the java code from ${src} into build -->
2010-11-10 03:32:19 +08:00
<javac fork= "true" memoryMaximumSize= "512m" srcdir= "${java.source.dir}" destdir= "${java.classes}" debug= "true" debuglevel= "lines,vars,source" classpathref= "external.dependencies" >
2010-09-25 05:17:16 +08:00
<exclude name= "**/examples/**" />
<exclude name= "**/playground/**" unless= "include.playground" />
<exclude name= "**/oneoffprojects/**" unless= "include.oneoffs" />
</javac>
<subant target= "compile" genericantfile= "build.xml" >
<property name= "build.dir" value= "${external.build.dir}" />
2010-11-18 04:41:04 +08:00
<property name= "dist.dir" value= "${external.dist.dir}" />
2010-09-25 05:17:16 +08:00
<property name= "gatk.classpath" value= "${external.gatk.classpath}" />
2011-02-18 03:22:21 +08:00
<fileset dir= "${external.dir}" includes= "*/build.xml" erroronmissingdir= "false" />
2010-09-25 05:17:16 +08:00
</subant>
2009-03-25 05:16:12 +08:00
</target>
2011-01-08 06:03:36 +08:00
<target name= "init.queue-extensions.generate" depends= "gatk.compile" >
<condition property= "uptodate.queue-extensions.generate" >
<or >
<not >
<isset property= "scala.include" />
</not>
<uptodate targetfile= "${queue-extensions.source.dir}" >
2011-01-11 05:07:29 +08:00
<srcfiles refid= "java.class.files" />
2011-01-08 06:03:36 +08:00
</uptodate>
</or>
</condition>
</target>
2010-08-10 00:42:48 +08:00
<!-- NOTE: Extracting help first to avoid "Unable to load help text. Help output will be sparse." warning message. -->
2011-01-08 06:03:36 +08:00
<target name= "queue-extensions.generate" depends= "extracthelp,init.queue-extensions.generate" unless= "uptodate.queue-extensions.generate" description= "generate GATK modules for Queue" >
2010-08-14 07:52:24 +08:00
<mkdir dir= "${queue-extensions.source.dir}" />
2010-08-10 00:42:48 +08:00
<echo > Generating Queue GATK extensions...</echo>
2011-01-08 06:03:36 +08:00
<java fork= "true" failonerror= "true" classname= "org.broadinstitute.sting.queue.extensions.gatk.GATKExtensionsGenerator" classpathref= "scala.dependencies" >
2010-08-10 00:42:48 +08:00
<arg value= "-outDir" />
2010-08-14 07:52:24 +08:00
<arg path= "${queue-extensions.source.dir}" />
2010-08-12 05:58:26 +08:00
<arg value= "-l" />
<arg value= "WARN" />
2010-08-10 00:42:48 +08:00
</java>
2011-01-08 06:03:36 +08:00
<touch >
<file file= "${queue-extensions.source.dir}" />
</touch>
2010-08-12 05:58:26 +08:00
</target>
2011-01-08 06:03:36 +08:00
<!-- Scala depends on the java compile -->
<target name= "scala.compile" depends= "init,resolve,gatk.compile,queue-extensions.generate,init.scala.compile" if= "scala.include" description= "compile Scala" >
<mkdir dir= "${scala.classes}" />
<echo > Building Scala...</echo>
<scalac fork= "true" jvmargs= "-Xmx512m" destdir= "${scala.classes}" classpathref= "scala.dependencies" deprecation= "yes" unchecked= "yes" >
<src path= "${scala.source.dir}" />
2010-10-05 03:38:29 +08:00
<src path= "${queue-extensions.source.dir}" />
2010-08-10 00:42:48 +08:00
<include name= "**/*.scala" />
2011-03-08 07:52:48 +08:00
<exclude name= "**/gridengine/**" unless= "include.gridengine" />
2010-08-10 00:42:48 +08:00
</scalac>
</target>
2011-02-04 02:07:55 +08:00
<target name= "init.extracthelp" depends= "gatk.compile" >
<loadfile property= "properties.version" srcfile= "${basedir}/${resource.path}" failonerror= "false" quiet= "true" >
<filterchain >
<linecontains >
<contains value= "org.broadinstitute.sting.gatk.CommandLineGATK.version" />
</linecontains>
<tokenfilter >
<replaceregex pattern= "^.*\.(.*?)$" replace= "\1" />
</tokenfilter>
<striplinebreaks />
</filterchain>
</loadfile>
2011-01-08 06:03:36 +08:00
<condition property= "uptodate.extracthelp" >
<or >
<isset property= "disable.help" />
2011-02-04 02:07:55 +08:00
<and >
<uptodate targetfile= "${basedir}/${resource.path}" >
<srcfiles refid= "java.class.files" />
</uptodate>
<equals arg1= "${properties.version}" arg2= "${build.version}" />
</and>
2011-01-08 06:03:36 +08:00
</or>
</condition>
</target>
<target name= "extracthelp" depends= "init.extracthelp"
2009-12-08 05:33:11 +08:00
description="Extract help key/value pair file from the JavaDoc tags."
2011-01-08 06:03:36 +08:00
unless="uptodate.extracthelp">
2010-08-10 00:42:48 +08:00
<path id= "doclet.classpath" >
2010-09-09 04:37:54 +08:00
<path refid= "external.dependencies" />
2010-08-10 00:42:48 +08:00
<pathelement location= "${java.classes}" />
</path>
2010-09-25 05:17:16 +08:00
2010-01-16 07:31:29 +08:00
<javadoc doclet= "org.broadinstitute.sting.utils.help.ResourceBundleExtractorDoclet"
2010-08-10 00:42:48 +08:00
docletpathref="doclet.classpath"
2010-09-09 04:37:54 +08:00
classpathref="external.dependencies"
2010-09-25 05:17:16 +08:00
additionalparam="-build-timestamp " ${build.timestamp}" -version-suffix .${build.version} -out ${basedir}/${resource.path} -quiet">
<fileset refid= "java.source.files" />
<fileset refid= "external.source.files" />
2009-12-05 04:08:41 +08:00
</javadoc>
</target>
2011-01-08 06:03:36 +08:00
<target name= "sting.compile" depends= "gatk.compile, scala.compile" />
2010-08-10 00:42:48 +08:00
<target name= "init.jar" depends= "sting.compile,extracthelp" >
2009-12-03 07:27:45 +08:00
<mkdir dir= "${dist.dir}" />
<copy todir= "${dist.dir}" >
2009-03-25 05:16:12 +08:00
<fileset dir= "lib" includes= "*.jar" />
</copy>
2010-08-10 00:42:48 +08:00
</target>
2009-03-25 05:16:12 +08:00
2010-08-10 00:42:48 +08:00
<target name= "sting-utils.jar" depends= "gatk.compile, init.jar" >
2009-12-03 07:27:45 +08:00
<jar jarfile= "${dist.dir}/StingUtils.jar" >
2010-06-23 02:39:20 +08:00
<fileset dir= "${java.classes}" includes= "**/utils/**/*.class" />
2010-08-10 00:42:48 +08:00
<fileset dir= "${java.classes}" includes= "**/commandline/**/*.class" />
2010-09-23 04:05:22 +08:00
<fileset dir= "${java.classes}" includes= "**/sting/datasources/**/*.class" />
2010-12-10 12:36:06 +08:00
<fileset dir= "${java.classes}" includes= "**/sting/jna/**/*.class" />
2010-09-09 04:37:54 +08:00
<fileset dir= "${java.classes}" includes= "net/sf/picard/**/*.class" />
2011-02-09 09:51:34 +08:00
<fileset dir= "${java.classes}" includes= "net/sf/samtools/**/*.class" />
2010-07-28 02:44:15 +08:00
<manifest >
<attribute name= "Premain-Class" value= "org.broadinstitute.sting.utils.instrumentation.Sizeof" />
</manifest>
2009-03-25 05:16:12 +08:00
</jar>
2010-08-10 00:42:48 +08:00
</target>
2009-03-25 05:16:12 +08:00
2010-08-10 00:42:48 +08:00
<target name= "gatk.jar" depends= "gatk.compile, init.jar"
description="generate the GATK distribution">
2009-12-03 07:27:45 +08:00
<jar jarfile= "${dist.dir}/GenomeAnalysisTK.jar" >
2010-03-30 12:20:19 +08:00
<path refid= "gatk.resources" />
2010-06-23 02:39:20 +08:00
<fileset dir= "${java.classes}" >
2010-03-30 12:20:19 +08:00
<include name= "${resource.file}" />
2009-11-03 08:15:45 +08:00
<include name= "**/gatk/**/*.class" />
<include name= "**/alignment/**/*.class" />
2009-12-03 07:27:45 +08:00
<include name= "**/oneoffprojects/**/*.class" />
2010-09-21 06:28:08 +08:00
<include name= "**/playground/**/*.class" />
2009-11-03 08:15:45 +08:00
</fileset>
2009-03-25 05:16:12 +08:00
<manifest >
2010-07-28 02:44:15 +08:00
<attribute name= "Main-Class" value= "org.broadinstitute.sting.gatk.CommandLineGATK" />
2009-03-25 05:16:12 +08:00
</manifest>
</jar>
2010-11-18 04:41:04 +08:00
<jar jarfile= "${dist.dir}/Aligner.jar" >
<fileset dir= "${java.classes}" includes= "**/alignment/**/*.class" />
</jar>
2009-11-14 06:29:29 +08:00
2009-12-03 07:27:45 +08:00
<jar jarfile= "${dist.dir}/AnalyzeCovariates.jar" whenmanifestonly= "skip" >
2010-06-23 02:39:20 +08:00
<fileset dir= "${java.classes}" >
2009-12-03 00:47:35 +08:00
<include name= "**/analyzecovariates/**/*.class" />
<include name= "**/gatk/walkers/recalibration/*.class" />
2009-04-03 06:13:51 +08:00
</fileset>
<manifest >
2009-12-03 00:47:35 +08:00
<attribute name= "Main-Class" value= "org.broadinstitute.sting.analyzecovariates.AnalyzeCovariates" />
2009-04-03 06:13:51 +08:00
</manifest>
2009-03-25 05:16:12 +08:00
</jar>
2009-12-03 03:04:38 +08:00
2011-02-20 07:24:42 +08:00
<jar jarfile= "${dist.dir}/ReorderSam.jar" whenmanifestonly= "skip" >
<fileset dir= "${java.classes}" >
<include name= "**/tools/**/*.class" />
</fileset>
<manifest >
<attribute name= "Main-Class" value= "org.broadinstitute.sting.playground.tools.ReorderSam" />
</manifest>
</jar>
2011-02-21 22:02:41 +08:00
<jar jarfile= "${dist.dir}/ModifyReadGroup.jar" whenmanifestonly= "skip" >
<fileset dir= "${java.classes}" >
<include name= "**/tools/**/*.class" />
</fileset>
<manifest >
<attribute name= "Main-Class" value= "org.broadinstitute.sting.playground.tools.ModifyReadGroup" />
</manifest>
</jar>
2011-02-20 07:24:42 +08:00
<jar jarfile= "${dist.dir}/CompareBAMAlignments.jar" whenmanifestonly= "skip" >
<fileset dir= "${java.classes}" >
<include name= "**/tools/**/*.class" />
</fileset>
<manifest >
<attribute name= "Main-Class" value= "org.broadinstitute.sting.oneoffprojects.tools.CompareBAMAlignments" />
</manifest>
</jar>
2010-11-18 04:41:04 +08:00
<subant target= "dist" genericantfile= "build.xml" >
<property name= "build.dir" value= "${external.build.dir}" />
<property name= "dist.dir" value= "${external.dist.dir}" />
<property name= "gatk.classpath" value= "${external.gatk.classpath}" />
2011-02-18 04:00:00 +08:00
<fileset dir= "${external.dir}" includes= "*/build.xml" erroronmissingdir= "false" />
2010-11-18 04:41:04 +08:00
</subant>
2010-08-10 00:42:48 +08:00
</target>
2011-01-08 06:03:36 +08:00
<target name= "scala.jar" depends= "scala.compile, init.jar" if= "scala.include" >
<jar jarfile= "${dist.dir}/GATKScala.jar" >
<fileset dir= "${scala.classes}" >
<include name= "org/broadinstitute/sting/scala/**/*.class" />
</fileset>
</jar>
</target>
<target name= "queue.jar" depends= "scala.compile, init.jar" if= "scala.include" >
2010-08-10 00:42:48 +08:00
<jar jarfile= "${dist.dir}/Queue.jar" >
2011-01-08 06:03:36 +08:00
<fileset dir= "${scala.classes}" >
2010-08-10 00:42:48 +08:00
<include name= "org/broadinstitute/sting/queue/**/*.class" />
</fileset>
2010-08-14 07:52:24 +08:00
<fileset dir= "${java.classes}" >
<include name= "org/broadinstitute/sting/queue/**/*.class" />
</fileset>
2010-08-10 00:42:48 +08:00
<manifest >
<attribute name= "Main-Class" value= "org.broadinstitute.sting.queue.QCommandLine" />
</manifest>
</jar>
</target>
2010-08-13 23:54:08 +08:00
<target name= "sting.jar" depends= "sting-utils.jar, gatk.jar, queue.jar" />
2010-08-10 00:42:48 +08:00
<target name= "init.manifests" depends= "sting.jar" >
2009-03-25 05:16:12 +08:00
<pathconvert property= "jar.classpath" pathsep= " " >
<flattenmapper />
2009-12-03 07:27:45 +08:00
<fileset dir= "${dist.dir}" includes= "*.jar" />
2009-11-02 14:02:41 +08:00
<filelist files= "GATKScala.jar" />
2009-03-25 05:16:12 +08:00
</pathconvert>
2010-08-10 00:42:48 +08:00
</target>
2009-03-25 05:16:12 +08:00
2010-08-10 00:42:48 +08:00
<target name= "sting-utils.manifests" depends= "sting-utils.jar, init.manifests" >
<jar jarfile= "${dist.dir}/StingUtils.jar" update= "true" >
2009-12-03 03:04:38 +08:00
<manifest >
2010-08-10 00:42:48 +08:00
<attribute name= "Class-Path" value= "${jar.classpath}" />
2009-12-03 03:04:38 +08:00
</manifest>
</jar>
2010-08-10 00:42:48 +08:00
</target>
2009-12-03 03:04:38 +08:00
2010-08-10 00:42:48 +08:00
<target name= "gatk.manifests" depends= "gatk.jar, init.manifests" >
2009-12-03 07:27:45 +08:00
<jar jarfile= "${dist.dir}/GenomeAnalysisTK.jar" update= "true" >
2009-03-25 05:16:12 +08:00
<manifest >
<attribute name= "Class-Path" value= "${jar.classpath}" />
</manifest>
</jar>
2009-03-19 03:13:19 +08:00
2009-12-03 07:27:45 +08:00
<jar jarfile= "${dist.dir}/AnalyzeCovariates.jar" update= "true" whenmanifestonly= "skip" >
2009-12-03 08:06:02 +08:00
<manifest >
<attribute name= "Class-Path" value= "${jar.classpath}" />
</manifest>
2011-02-20 07:24:42 +08:00
</jar>
<jar jarfile= "${dist.dir}/CompareBAMAlignments.jar" update= "true" whenmanifestonly= "skip" >
<manifest >
<attribute name= "Class-Path" value= "${jar.classpath}" />
</manifest>
</jar>
<jar jarfile= "${dist.dir}/ReorderSam.jar" update= "true" whenmanifestonly= "skip" >
<manifest >
<attribute name= "Class-Path" value= "${jar.classpath}" />
</manifest>
2011-02-21 22:02:41 +08:00
</jar>
<jar jarfile= "${dist.dir}/ModifyReadGroup.jar" update= "true" whenmanifestonly= "skip" >
<manifest >
<attribute name= "Class-Path" value= "${jar.classpath}" />
</manifest>
2009-12-03 08:06:02 +08:00
</jar>
2010-05-10 23:17:51 +08:00
2009-03-25 05:16:12 +08:00
</target>
2011-01-08 06:03:36 +08:00
<target name= "queue.manifests" depends= "queue.jar, init.manifests" if= "scala.include" >
2010-08-10 00:42:48 +08:00
<jar jarfile= "${dist.dir}/Queue.jar" update= "true" >
<manifest >
<attribute name= "Class-Path" value= "${jar.classpath}" />
</manifest>
</jar>
</target>
2010-08-13 23:54:08 +08:00
<target name= "sting.manifests" depends= "sting-utils.manifests, gatk.manifests, queue.manifests" />
2010-08-10 00:42:48 +08:00
<target name= "dist" depends= "sting.manifests" />
2009-03-28 06:32:44 +08:00
<target name= "core" description= "force a build of the Sting core code" >
2010-08-12 05:58:26 +08:00
<antcall target= "dist" inheritAll= "false" >
2010-08-10 00:42:48 +08:00
<param name= "sting.target" value= "core" />
2009-03-28 06:32:44 +08:00
</antcall>
</target>
<target name= "playground" description= "force a build of the Sting experimental code" >
2010-08-12 05:58:26 +08:00
<antcall target= "dist" inheritAll= "false" >
2010-08-10 00:42:48 +08:00
<param name= "sting.target" value= "playground" />
2009-12-03 07:27:45 +08:00
</antcall>
2009-03-28 06:32:44 +08:00
</target>
2009-12-03 07:27:45 +08:00
<target name= "oneoffs" description= "force a build of the Sting experimental code and one-offs" >
2010-08-12 05:58:26 +08:00
<antcall target= "dist" inheritAll= "false" >
2010-08-10 00:42:48 +08:00
<param name= "sting.target" value= "oneoffs" />
2009-12-03 07:27:45 +08:00
</antcall>
</target>
2010-08-10 00:42:48 +08:00
<target name= "queue" description= "force a build of Queue" >
2010-08-10 01:59:51 +08:00
<!--
inheritAll is false so that 'ant queue' does not accidentally import
params if the build was called with 'ant clean oneoffs queue'.
Instead this task resets the parameters and is just like running
2011-01-08 06:03:36 +08:00
a fresh 'ant dist -Dscala.target=core'.
2010-08-10 01:59:51 +08:00
-->
<antcall target= "dist" inheritAll= "false" >
2011-01-08 06:03:36 +08:00
<param name= "scala.target" value= "core" />
2010-08-10 00:42:48 +08:00
</antcall>
</target>
2011-01-08 06:03:36 +08:00
<target name= "test.init.compile" >
2010-06-23 02:39:20 +08:00
<mkdir dir= "${java.test.classes}" />
2011-01-08 06:03:36 +08:00
<mkdir dir= "${scala.test.classes}" />
</target>
<target name= "test.java.compile" depends= "init.buildall,dist,test.init.compile" >
<echo message= "Sting: Compiling test cases!" />
2010-11-10 03:32:19 +08:00
<javac fork= "true" memoryMaximumSize= "512m" destdir= "${java.test.classes}" debug= "true" optimize= "on" >
2010-06-23 02:39:20 +08:00
<src path= "${java.test.sources}" />
2009-03-28 06:32:44 +08:00
<classpath >
2010-09-09 04:37:54 +08:00
<path refid= "external.dependencies" />
2010-06-23 02:39:20 +08:00
<pathelement location= "${java.classes}" />
2010-11-02 05:31:44 +08:00
<pathelement location= "lib/testng-5.14.1.jar" />
2009-03-28 06:32:44 +08:00
</classpath>
</javac>
2011-01-08 06:03:36 +08:00
</target>
2010-08-12 05:58:26 +08:00
2011-01-08 06:03:36 +08:00
<target name= "test.scala.compile" depends= "test.java.compile,scala.compile" if= "scala.include" >
<echo message= "Scala: Compiling test cases!" />
<scalac fork= "true" jvmargs= "-Xmx512m" srcdir= "${scala.test.sources}" destdir= "${scala.test.classes}" deprecation= "yes" unchecked= "yes" >
<include name= "**/*.scala" />
2011-03-08 07:52:48 +08:00
<exclude name= "**/gridengine/**" unless= "include.gridengine" />
2010-08-12 05:58:26 +08:00
<classpath >
2011-01-08 06:03:36 +08:00
<path refid= "scala.dependencies" />
2011-02-01 10:41:07 +08:00
<pathelement location= "${scala.test.classes}" />
2010-08-12 05:58:26 +08:00
<pathelement location= "${java.test.classes}" />
2010-11-02 05:31:44 +08:00
<pathelement location= "lib/testng-5.14.1.jar" />
2010-08-12 05:58:26 +08:00
</classpath>
</scalac>
2009-03-28 06:32:44 +08:00
</target>
2011-01-08 06:03:36 +08:00
<target name= "test.compile" depends= "test.java.compile,test.scala.compile" >
</target>
2009-11-02 14:02:41 +08:00
<!-- new scala target -->
<target name= "scala" description= "build the scala directory" >
2011-01-08 06:03:36 +08:00
<antcall target= "scala.jar" inheritAll= "false" >
<param name= "scala.target" value= "core" />
</antcall>
2010-05-24 04:21:09 +08:00
</target>
2010-04-08 23:37:15 +08:00
<!-- ***************************************************************************** -->
<!-- *********** Tests and associated tasks ********* -->
<!-- ***************************************************************************** -->
2009-12-03 07:27:45 +08:00
<!-- where to put reports and tests -->
2009-12-05 04:08:41 +08:00
<property name= "report" value= "${build.dir}/report" />
2010-10-01 04:42:41 +08:00
<property name= "java.test.classes" value= "${build.dir}/java/testclasses" />
2009-12-03 07:27:45 +08:00
<property name= "test.output" value= "${dist.dir}/test" />
2010-06-23 02:39:20 +08:00
<property name= "java.test.sources" value= "java/test" />
2011-01-08 06:03:36 +08:00
<property name= "scala.test.classes" value= "${build.dir}/scala/testclasses" />
<property name= "scala.test.sources" value= "scala/test" />
2009-12-29 07:42:46 +08:00
<!-- provide a ceiling on the memory that unit/integration tests can consume. -->
2010-10-29 02:37:42 +08:00
<property name= "test.maxmemory" value= "4g" />
2009-08-28 08:15:01 +08:00
2009-03-28 06:32:44 +08:00
<!-- TEST -->
2010-04-08 23:37:15 +08:00
<macrodef name= "run-test" >
<attribute name= "testtype" />
<sequential >
2010-11-02 23:33:42 +08:00
<mkdir dir= "${report}/@{testtype}" />
2010-04-09 21:03:31 +08:00
<echo message= "Sting: Running @{testtype} test cases!" />
2010-11-02 05:31:44 +08:00
<taskdef resource= "testngtasks" classpath= "lib/testng-5.14.1.jar" />
2010-11-02 23:33:42 +08:00
<testng outputDir= "${report}/@{testtype}"
2010-11-03 00:57:15 +08:00
haltOnFailure="false" failureProperty="test.failure"
verbose="2"
2010-11-16 07:43:14 +08:00
workingDir="${basedir}"
useDefaultListeners="false"
listeners="org.testng.reporters.FailedReporter,org.testng.reporters.JUnitXMLReporter,org.broadinstitute.sting.StingTextReporter">
2010-11-17 03:55:20 +08:00
<jvmarg value= "-Xmx${test.maxmemory}" />
<jvmarg value= "-Djava.awt.headless=true" />
2010-11-23 06:59:42 +08:00
<jvmarg value= "-Dpipeline.run=${pipeline.run}" />
2011-01-13 23:16:06 +08:00
<!-- <jvmarg value=" - Xdebug"/> -->
<!-- <jvmarg value=" - Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005"/> -->
2010-04-08 23:37:15 +08:00
<classpath >
2010-11-02 05:31:44 +08:00
<path refid= "external.dependencies" />
2010-11-16 07:43:14 +08:00
<pathelement location= "${java.classes}" />
2011-01-08 06:03:36 +08:00
<pathelement location= "${scala.classes}" />
2010-11-02 05:31:44 +08:00
<pathelement location= "${java.test.classes}" />
2011-01-08 06:03:36 +08:00
<pathelement location= "${scala.test.classes}" />
2010-04-08 23:37:15 +08:00
</classpath>
2010-11-02 05:31:44 +08:00
<classfileset dir= "${java.test.classes}" includes= "**/@{testtype}.class" />
2011-01-08 06:03:36 +08:00
<classfileset dir= "${scala.test.classes}" includes= "**/@{testtype}*.class" />
2010-11-02 05:31:44 +08:00
</testng>
<!-- generate a report for Bamboo or Hudson to read in -->
2010-11-02 23:33:42 +08:00
<junitreport todir= "${report}/@{testtype}" >
<fileset dir= "${report}/@{testtype}" >
2010-11-02 05:31:44 +08:00
<include name= "*/*.xml" />
</fileset>
2010-11-02 23:33:42 +08:00
<report format= "noframes" todir= "${report}/@{testtype}" />
2010-11-02 05:31:44 +08:00
</junitreport>
2010-04-08 23:37:15 +08:00
<fail message= "test failed" if= "test.failure" />
</sequential>
</macrodef>
<!-- our three different test conditions: Test, IntegrationTest, PerformanceTest -->
2010-08-12 05:58:26 +08:00
<target name= "test" depends= "test.compile,tribble.test" description= "Run unit tests" >
2010-04-09 21:03:31 +08:00
<condition property= "ttype" value= "*UnitTest" else= "${single}" >
2010-04-08 23:37:15 +08:00
<not > <isset property= "single" /> </not>
</condition>
<run-test testtype= "${ttype}" />
2009-09-09 23:01:40 +08:00
</target>
2010-08-12 05:58:26 +08:00
<target name= "integrationtest" depends= "test.compile" description= "Run integration tests" >
2010-04-09 21:03:31 +08:00
<condition property= "itype" value= "*IntegrationTest" else= "${single}" >
2010-04-08 23:37:15 +08:00
<not > <isset property= "single" /> </not>
</condition>
2010-04-09 21:03:31 +08:00
<run-test testtype= "${itype}" />
2009-03-28 06:32:44 +08:00
</target>
2010-08-12 05:58:26 +08:00
<target name= "performancetest" depends= "test.compile" description= "Run performance tests" >
2010-04-09 21:03:31 +08:00
<condition property= "ptype" value= "*PerformanceTest" else= "${single}" >
2010-04-08 23:37:15 +08:00
<not > <isset property= "single" /> </not>
</condition>
2010-04-09 21:03:31 +08:00
<run-test testtype= "${ptype}" />
2009-05-07 01:18:23 +08:00
</target>
2010-11-23 06:59:42 +08:00
<target name= "pipelinetest" depends= "test.compile" description= "Run pipeline tests" >
<condition property= "pipetype" value= "*PipelineTest" else= "${single}" >
<not > <isset property= "single" /> </not>
</condition>
<run-test testtype= "${pipetype}" />
</target>
2010-08-06 02:47:53 +08:00
2010-04-08 23:37:15 +08:00
<!-- ***************************************************************************** -->
2010-08-06 02:47:53 +08:00
<!-- *********** Tribble ********* -->
<!-- ***************************************************************************** -->
<!-- compile the library -->
<target name= "tribble.compile" description= "compiles the tribble library" >
<echo message= "Building the Tribble Library..." />
<ant antfile= "build.xml" target= "all" dir= "${tribble.dir}" inheritAll= "false" />
</target>
<!-- build the jar -->
<target name= "tribble" description= "Builds the tribble jar" depends= "tribble.compile" >
<copy todir= "lib" >
<fileset dir= "${tribble.dir}/dist" includes= "*.jar" />
</copy>
</target>
<!-- test tribble using the unit tests set in tribble -->
2010-10-07 09:19:18 +08:00
<target name= "tribble.test" description= "runs the tribble tests" depends= "tribble.compile" unless= "single" >
2010-08-06 02:47:53 +08:00
<echo message= "Testing the Tribble Library..." />
<ant antfile= "build.xml" target= "test" dir= "${tribble.dir}" inheritAll= "false" />
</target>
<!-- clean tribble -->
<target name= "tribble.clean" description= "cleans the tribble library" >
<echo message= "Cleaning the Tribble Library..." />
<ant antfile= "build.xml" target= "clean" dir= "${tribble.dir}" inheritAll= "false" />
</target>
<!-- ***************************************************************************** -->
2010-08-12 05:58:26 +08:00
<target name= "clean.javadoc" >
<delete dir= "javadoc" />
2011-01-08 06:03:36 +08:00
<delete dir= "scaladoc" />
2010-08-12 05:58:26 +08:00
</target>
2011-01-08 06:03:36 +08:00
<target name= "javadoc" depends= "init.buildall,resolve,queue-extensions.generate,init.scala.compile" description= "generates javadoc" >
2009-12-03 07:27:45 +08:00
<mkdir dir= "javadoc" />
<javadoc destdir= "javadoc"
2010-09-09 04:37:54 +08:00
classpathref="external.dependencies">
2011-01-08 06:03:36 +08:00
<fileset refid= "java.source.files" />
<fileset refid= "external.source.files" />
2009-12-03 07:27:45 +08:00
</javadoc>
2011-01-08 06:03:36 +08:00
<mkdir dir= "scaladoc" />
<scaladoc srcdir= "" destdir= "scaladoc" classpathref= "scala.dependencies" deprecation= "yes" unchecked= "yes" >
<src path= "${scala.source.dir}" />
2010-08-14 07:52:24 +08:00
<src path= "${queue-extensions.source.dir}" />
2011-01-08 06:03:36 +08:00
<include name= "**/*.scala" />
2010-08-12 05:58:26 +08:00
</scaladoc>
2009-06-16 03:41:16 +08:00
</target>
<!-- Unzip all classes from their current locations and assemble them in a staging directory -->
<target name= "stage" description= "stage files for distribution" >
<mkdir dir= "staging" />
<unjar dest= "staging" overwrite= "false" >
2009-12-03 07:27:45 +08:00
<fileset dir= "${dist.dir}" >
2009-06-16 03:41:16 +08:00
<patternset refid= "dependency.mask" />
</fileset>
</unjar>
</target>
<!-- Build a package consisting of all supporting files -->
<target name= "package" depends= "dist,stage" description= "bundle up an executable for distribution" >
2011-02-25 05:11:38 +08:00
<mkdir dir= "dist/packages" />
<xslt destdir= "dist/packages" style= "packages/CreatePackager.xsl" useImplicitFileset= "false" >
2010-11-03 04:13:13 +08:00
<flattenmapper />
2011-02-25 05:11:38 +08:00
<fileset dir= "${package.xml.dir}" >
<include name= "${executable}.xml" />
</fileset>
<fileset dir= "${external.dir}" >
<include name= "*/${executable}.xml" />
</fileset>
2010-11-03 04:13:13 +08:00
</xslt>
<ant antfile= "${dist.dir}/packages/${executable}.xml" target= "package" />
2010-01-27 06:50:20 +08:00
</target>
<target name= "release" depends= "package" description= "release a build, putting each file in a location specified by the package" >
2010-11-03 04:13:13 +08:00
<ant antfile= "${dist.dir}/packages/${executable}.xml" target= "release" />
2009-03-25 05:16:12 +08:00
</target>
2009-11-14 03:42:33 +08:00
<!-- Build a subset of picard with only those classes we need by completely abusing the packaging system -->
<!-- TODO: Reuse as much as possible of the 'stage' and 'package' targets -->
<target name= "build-picard-private" depends= "resolve" >
<!-- Build out a classpath -->
<pathconvert property= "required.picard.jars" pathsep= ":" >
<fileset dir= "${basedir}" >
2009-12-03 07:27:45 +08:00
<include name= "staging" />
<include name= "lib/picard-*.*.*.jar" />
<include name= "lib/sam-*.jar" />
</fileset>
2009-11-14 03:42:33 +08:00
</pathconvert>
<echo message= "required.picard.jars=${required.picard.jars}" />
<!-- Stage picard - private -->
<delete dir= "staging" />
<mkdir dir= "staging" />
<unjar src= "${picard.dist.dir}/picard-private.jar" dest= "staging" overwrite= "true" />
<!-- Use the packaging system to extract parts of picard - private we need -->
2009-12-03 07:27:45 +08:00
<mkdir dir= "${dist.dir}/packages" />
<xslt in= "packages/PicardPrivate.xml" out= "${dist.dir}/packages/BuildPicardPrivate.xml" style= "packages/CreatePackager.xsl" />
<ant antfile= "${dist.dir}/packages/BuildPicardPrivate.xml" >
2010-09-25 05:17:16 +08:00
<property name= "additional.jars" value= "${required.picard.jars}" />
2009-11-14 03:42:33 +08:00
</ant>
</target>
2010-07-09 03:10:19 +08:00
<!-- ******************************************************************************** -->
<!-- Find bug tasks -->
<!-- ******************************************************************************** -->
<path id= "findbugs.classpath" >
2010-09-25 05:17:16 +08:00
<fileset dir= "lib" erroronmissingdir= "true" includes= "*.jar" />
2010-07-09 03:10:19 +08:00
</path>
<target name= "findbugs" depends= "dist" >
<antcall target = "resolve" >
<param name = "ivy.conf" value= "findbugs" />
</antcall>
<!-- setup the taskdef, telling ant where to find the defined task for ant -->
<taskdef name= "findbugs" classname= "edu.umd.cs.findbugs.anttask.FindBugsTask" classpathref= "findbugs.classpath" />
<!-- what should findbug look at: we want to aim it at the GATK.jar -->
<findbugs home= "${findbugs.home}"
output="xml"
outputFile="${build.dir}/findbugs.xml"
classpathref="findbugs.classpath"
debug="false">
<auxClasspath >
<fileset dir= "dist" includes= "**/*.jar" excludes= "**/GenomeAnalysisTK.jar" />
</auxClasspath>
<sourcePath path= "../java/src" />
<class location= "dist/GenomeAnalysisTK.jar" />
</findbugs>
2010-09-25 05:17:16 +08:00
</target>
2010-07-09 03:10:19 +08:00
2010-08-12 05:58:26 +08:00
<target name= "clean" description= "clean up" depends= "tribble.clean,clean.javadoc" >
2009-03-25 05:16:12 +08:00
<delete dir= "out" />
2010-06-23 02:39:20 +08:00
<delete dir= "${build.dir}" />
2009-03-25 05:16:12 +08:00
<delete dir= "lib" />
2009-06-16 03:41:16 +08:00
<delete dir= "staging" />
2009-12-03 07:27:45 +08:00
<delete dir= "${dist.dir}" />
2010-11-23 06:59:42 +08:00
<delete dir= "pipelinetests" />
2010-08-06 02:47:53 +08:00
<!-- When we clean, make sure to clean out tribble as well -->
<ant antfile= "tribble/build.xml" target= "clean" />
2009-03-25 05:16:12 +08:00
</target>
* Added an R package, "gsalib", providing a place to store common, useful, documented R methods. To use this module, you must follow three steps:
1) Build the module with the following command:
$ ant gsalib
2) Add the module path to your ~/.Rprofile file:
.libPaths("/path/to/Sting/trunk/R/")
3) At the top of each R script that will use the library, include the line:
library(gsalib)
You can now use the package like any other R package. To get high-level documentation, supply the following command to R:
help(gsalib)
The methods contained herein are:
getargs : A method to easily provide arguments to interactive and non-interactive scripts.
Prints out a help message specifying how the script should be run if no arguments
or "-h" is provided. Very helpful when you're writing an R-script piecemeal in
interactive mode, then want to make it a command-line program.
plot.venn : Plots a two-way or three-way proportional Venn diagram.
read.eval : Reads VariantEval output that's formatted in R style.
read.gatkreport : Reads GATKReport output.
gsa.message : Emits a message with the prefix "[gsalib]" to stdout.
gsa.warn : Emits a warning message with the prefix "[gsalib] Warning:" to stdout.
gsa.error : Emits an error message with the prefix "[gsalib] Error: to stdout, calls traceback()
and halts execution.
Documentation on each of these methods can be obtained by typing "help(method_name)" at the R prompt.
* Retired GATKReport.R, as that functionality has now been moved to gsalib.
* Retired gsacommons, as that functionality has been split between gsalib and VariantReport.R.
* Modified VariantReport.R to make use of gsalib. The script now uses the getargs() method to provide the user with some information as to the proper way to run the script. Documentation on how to prepare output is given at http://www.broadinstitute.org/gsa/wiki/index.php/VariantEval .
* Added 'gsalib' target to build.xml file. Running "ant gsalib" will compile this module and place the R-ready package in R/gsalib .
git-svn-id: file:///humgen/gsa-scr1/gsa-engineering/svn_contents/trunk@4416 348d0f76-0448-11de-a6fe-93d51630548a
2010-10-04 08:27:59 +08:00
<!-- Build gsalib R module -->
<target name= "gsalib" >
<exec executable= "R" failonerror= "true" >
<arg line= "R CMD INSTALL -l R/ R/src/gsalib/" />
</exec>
</target>
2009-03-07 06:58:12 +08:00
</project>