blob: edb4c4e9a259f104e0bd6c250dd762074a903b02 (
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
|
import sbt._
import java.util.jar.{Manifest}
import java.io.{FileInputStream}
import AdditionalResources._
/**
* Additional tasks that are required to obtain a complete compiler and library pair, but that are not part of the
* compilation task. It copies additional files and generates the properties files
* @author Grégory Moix
*/
trait AdditionalResources {
self : BasicLayer =>
def writeProperties: Option[String] = {
def write0(steps: List[Step]): Option[String] = steps match {
case x :: xs => x match {
case c: PropertiesToWrite => {
c.writeProperties orElse write0(xs)
}
case _ => write0(xs)
}
case Nil => None
}
write0(allSteps.topologicalSort)
}
}
object AdditionalResources {
/**
* A FileFilter that defines what are the files that will be copied
*/
lazy val basicFilter = "*.tmpl" | "*.xml" | "*.js" | "*.css" | "*.properties" | "*.swf" | "*.png"
implicit def stringToGlob(s: String): NameFilter = GlobFilter(s)
}
trait ResourcesToCopy {
self : CompilationStep =>
def getResources(from: Path, filter: FileFilter): PathFinder = (from ##)** filter
def getResources(from: Path): PathFinder = getResources(from, AdditionalResources.basicFilter)
def copyDestination: Path
def filesToCopy: PathFinder
def copy = {
log.info("Copying files for "+name)
try { FileUtilities.copy(filesToCopy.get, copyDestination, log) }
catch { case e => Some(e.toString) }
None
}
}
trait PropertiesToWrite {
self : CompilationStep =>
def propertyList: List[(String, String)]
def propertyDestination: Path
def writeProperties: Option[String] ={
import java.io._
import java.util.Properties
val properties = new Properties
def insert(list: List[(String, String)]): Unit =
list foreach { case (k, v) => properties.setProperty(k, v) }
try {
insert(propertyList)
val destFile = propertyDestination.asFile
val stream = new FileOutputStream(destFile)
properties.store(stream, null)
}
catch {
case e: Exception => Some(e.toString)
}
None
}
}
|