-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbuild.gradle
85 lines (69 loc) · 2.1 KB
/
build.gradle
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
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'commons-io:commons-io:2.5'
}
}
task embeddedInputs( type: EmbeddedInputs ) {
sourceFile = file( 'src/one.src' )
outputDir = new File( buildDir, 'compiled' )
}
class EmbeddedInputs extends DefaultTask {
def m_cachedDeps = null
def sourceFile
def outputDir
@InputFile
File getSrcFile() {
return project.file( sourceFile )
}
List<File> findDeps( File src ) {
logger.info "Processing ${src} for dependencies"
return src.readLines().findResults { line ->
def result = ( line =~ /# dep:(.*)/ )
if( result.matches() ) {
return new File( src.parent, result[0][1] )
}
return null
}
}
@InputFiles
List<File> getDependencies() {
/*
* Since calculating this might be expensive, grab a cached result if possible (Gradle will call this
* method more than once).
* Duplicate dependency detection not present.
*/
if( !m_cachedDeps ) {
m_cachedDeps = []
def toProcess = [srcFile]
while( !toProcess.empty ) {
def current = toProcess.pop()
def deps = findDeps( current )
toProcess.addAll( deps )
m_cachedDeps.addAll( deps )
}
}
return m_cachedDeps
}
@OutputFile
File getOutFile() {
return new File( project.file( outputDir ), "${org.apache.commons.io.FilenameUtils.getBaseName( srcFile.name )}.out" )
}
@TaskAction
void compile() {
logger.lifecycle "Compiling ${inputs.files as List} into ${outFile}"
outFile.parentFile.mkdirs()
outFile.withWriter() { writer ->
inputs.files.each {
logger.info "Processing ${it}"
it.readLines().findResults { line ->
if( !line.startsWith( '#' ) ) {
writer.println line
}
}
}
}
}
}