// A Gant script for building the Groovy system. // // Copyright © 2006 Russel Winder // // Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in // compliance with the License. You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software distributed under the License is // distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or // implied. See the License for the specific language governing permissions and limitations under the // License. // // Author : Russel Winder // $Revision$ // $Date$ sourceDirectory = 'src' mainSourceDirectory = sourceDirectory + '/main' testsSourceDirectory = sourceDirectory + '/test' targetDirectory = 'target' mainClassesDirectory = targetDirectory + '/classes' testsClassesDirectory = targetDirectory + '/test-classes' reportsDirectory = targetDirectory + '/test-reports' antlrDirectory = mainSourceDirectory + '/org/codehaus/groovy/antlr' parserDirectory = antlrDirectory + '/parser' javaVersion = '1.4' includeTargets << gant.targets.Clean cleanDirectory << targetDirectory cleanPattern << [ '**.*~' , parserDirectory + '/Groovy*.*' ] dependencies = 'dependencies' Ant.path ( id : dependencies ) { fileset ( dir : System.properties.'groovy.home' + '/lib' , includes : '*.jar' , excludes : 'gant*.jar,*groovy*.jar' ) } Ant.taskdef ( name : 'groovyc' , classname : 'org.codehaus.groovy.ant.Groovyc' , classpath : mainClassesDirectory ) task ( ensureAntlr : 'Ensure all the files generated from the Antlr grammar are up to date.' ) { Ant.mkdir ( dir : parserDirectory ) // Need a way of getting this path in a platform independent way. This is fine fo Ubuntu (and Debian?) but likely fails for all other OSs. def antAntlrJar = '/usr/share/java/ant-antlr.jar' Ant.taskdef ( name : 'antlr' , classname : 'org.apache.tools.ant.taskdefs.optional.ANTLR' , classpath : antAntlrJar ) Ant.antlr ( target : antlrDirectory + '/groovy.g' , outputdirectory : parserDirectory ) { classpath ( refid : dependencies ) } } task ( compileMain : 'Compile the Java and Groovy code in the main source.' ) { depends ( ensureAntlr ) Ant.mkdir ( dir : mainClassesDirectory ) Ant.javac ( srcdir : mainSourceDirectory , destdir : mainClassesDirectory , debug : 'yes' , source : javaVersion , target : javaVersion , classpathref : dependencies , fork : 'true' ) Ant.groovyc ( srcdir : mainSourceDirectory , destdir : mainClassesDirectory ) { // , fork : 'true' ) { classpath { pathelement ( location : mainClassesDirectory ) path ( refid : dependencies ) } } } task ( compileTest : 'Compile the Java and Groovy code in the test source.' ) { depends ( compileMain ) Ant.mkdir ( dir : testsClassesDirectory ) Ant.javac ( srcdir : testsSourceDirectory , destdir : testsClassesDirectory , debug : 'yes' , source : javaVersion , target : javaVersion , excludes : 'UberTestCase*.java' , fork : 'true' ) { classpath { pathelement ( location : mainClassesDirectory ) path ( refid : dependencies ) } } /* * Compiling the tests appears to require 128M of heap space. Since the Groovy compiler Ant task doesn't * yet understand the fork and maxmemory attributes, we have to do things a bit more explicitly so as to * avoid having to use JAVA_OPTS=-Xmx128M gant on the command line. * Ant.groovyc ( srcdir : testsSourceDirectory , destdir : testsClassesDirectory ) { // , fork : 'true', maxmemory : '128M' ) { classpath { pathelement ( location : mainClassesDirectory ) pathelement ( location : testsClassesDirectory ) path ( refid : dependencies ) } } */ Ant.java ( classname : 'org.codehaus.groovy.ant.Groovyc' , fork : 'yes' , maxmemory : '128M' ) { arg ( value : testsClassesDirectory ) arg ( value : testsSourceDirectory ) classpath { pathelement ( location : mainClassesDirectory ) pathelement ( location : testsClassesDirectory ) path ( refid : dependencies ) } } Ant.javac ( srcdir : testsSourceDirectory , destdir : testsClassesDirectory , debug : 'yes' , source : javaVersion , target : javaVersion , includes : 'UberTestCase*.java' , fork : 'true' ) { classpath { pathelement ( location : mainClassesDirectory ) pathelement ( location : testsClassesDirectory ) path ( refid : dependencies ) } } } task ( test : 'Test a build.' ) { depends ( compileTest ) Ant.mkdir ( dir : reportsDirectory ) Ant.junit ( printsummary : 'true' , fork : 'true' , forkmode : 'once' ) { formatter ( type : 'plain' ) batchtest ( todir : reportsDirectory ) { fileset ( dir : testsClassesDirectory , includes : 'UberTest*.class' ) } classpath { pathelement ( location : mainClassesDirectory ) pathelement ( location : testsClassesDirectory ) path ( refid : dependencies ) } } } task ( 'default' : 'Default action is currently test.' ) { test ( ) }