summaryrefslogtreecommitdiff
path: root/cli/build.gradle
blob: 145061509507f70a8b9bb51a879c9202671abbe6 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
buildscript {
	dependencies { classpath 'net.saliman:gradle-cobertura-plugin:2.2.2' }
	repositories { mavenCentral() }
}

evaluationDependsOn(':stringmetric-core')

apply from: '../deploy.gradle'
apply plugin: 'cobertura'
apply plugin: 'scala'

cobertura {
	coverageFormats = ['html', 'xml']
	coverageSourceDirs = sourceSets.main.scala.srcDirs
}

compileScala { compileScala.scalaCompileOptions.additionalParameters = ['-target:jvm-1.6', '–Xdisable-assertions'] }
compileTestScala { compileTestScala.scalaCompileOptions.additionalParameters = ['-target:jvm-1.6'] }

dependencies {
	compile project(':stringmetric-core')
	compile'org.scala-lang:scala-compiler:2.10.2'
	compile 'org.scala-lang:scala-library:2.10.2'

	testCompile project(':stringmetric-core').sourceSets.test.output
	testCompile 'com.google.caliper:caliper:0.5-rc1'
	testCompile 'junit:junit:4.11'
	testCompile 'org.scalatest:scalatest_2.10:2.0.M5b'
}

sourceSets {
	main {
		output.resourcesDir "${project.buildDir}/classes/main"

		resources { srcDir 'source/main/resource' }
		scala { srcDir 'source/main/scala' }
	}
	test {
		output.resourcesDir "${project.buildDir}/classes/test"

		resources { srcDir 'source/test/resource' }
		scala { srcDir 'source/test/scala' }
	}
}

task tar(description: 'Assembles a compressed tar archive of source files.', dependsOn: [':stringmetric-cli:jar', ':stringmetric-core:jar']) {
	ext.sourcePath = "${project.projectDir}/source/main/scala"
	ext.outputPath = "${project.buildDir}"
	ext.workingPath = "${project.buildDir}/${project.name}"

	inputs.dir new File(sourcePath)
	outputs.dir new File(outputPath, 'generated')
	outputs.upToDateWhen { new File(workingPath).isDirectory() }

	doLast {
		// Clean up working directory and tar from last execution, should they exist.
		ant.delete(dir: workingPath, failOnError: false)
		ant.delete(file: "${project.buildDir}/${project.name}.tar.gz", failOnError: false)

		// Create project working directory.
		ant.mkdir(dir: workingPath)

		// Create scala.sh header file.
		ant.echo(file: "${workingPath}/scala.sh", message: '#!/bin/bash\ndir="`dirname \\"$0\\"`"\ndir="`( cd \\"$dir\\" && pwd )`"\ncp=`echo $dir/*.jar|sed \'s/ /:/g\'`\nexec scala -classpath "$cp" -savecompiled "$0" "$@"\n!#\n//')

		// Copy source files to working directory.
		ant.copy(toDir: workingPath, force: true, overwrite: true) {
			fileset(dir: sourcePath) {
				exclude(name: '**/cli/*.scala')
				exclude(name: '**/package.scala')
			}
			filterchain {
				concatfilter(prepend: "${workingPath}/scala.sh")
			}
		}

		// Delete scala.sh header file.
		ant.delete(file: "${workingPath}/scala.sh")

		// Flatten and remove file extension.
		ant.move(toDir: workingPath) {
			fileset(dir: workingPath)
			chainedmapper {
				mapper(type: 'flatten')
				mapper(from: '*.scala', to: '*', type: 'glob')
			}
		}

		// Clean up empty folder(s) from flatten.
		ant.delete(dir: "${workingPath}/org", includeEmptyDirs: true)

		// Copy project jars into place.
		ant.copy(toDir: workingPath, force: true, overwrite: true) {
			fileset(dir: "${project.buildDir}/libs")
		}
		ant.copy(toDir: workingPath, force: true, overwrite: true) {
			fileset(dir: "${project(':stringmetric-core').buildDir}/libs")
		}

		// Assemble compressed tar.
		ant.tar(compression: 'gzip', destFile: "${project.buildDir}/${project.name}.tar.gz") {
			tarfileset(dir: workingPath, fileMode: 755, prefix: project.name)
		}
	}
}