blob: 9b8b7a4da3e6c7b85917c89906da3d40e911c8f7 (
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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
|
#!/bin/bash
# Finds in dotty build file a line containing PATTERN
# returns last "" escaped string in this line
function getLastStringOnLineWith {
PATTERN="$1"
grep "$PATTERN" "$DOTTY_ROOT/project/Build.scala"|sed -n 's/.*\"\(.*\)\".*/\1/'p
}
# Configuration
SCALA_VERSION=$(getLastStringOnLineWith "scalaVersion in")
SCALA_BINARY_VERSION=2.11
SCALA_COMPILER_VERSION=$(getLastStringOnLineWith "scala-compiler")
JLINE_VERSION=$(getLastStringOnLineWith "jline")
SBT_VERSION=$(grep "sbt.version=" "$DOTTY_ROOT/project/build.properties" | sed 's/sbt.version=//')
bootcp=true
bootstrapped=false
default_java_opts="-Xmx768m -Xms768m"
programName=$(basename "$0")
# uncomment next line to enable debug output
#debug=true
declare -a java_args scala_args residual_args
unset verbose quiet cygwin toolcp colors saved_stty CDPATH
function find_jar {
# Usage:
# find_jar path/to/location file.jar
local artifact="$1/$2"
if [ ! -f "$artifact" ]; then
artifact=$(find "$HOME/.coursier/cache" -iname "$2" 2> /dev/null)
fi
echo "$artifact"
}
function build_jar {
# Usage:
# build_jar package path/to/jar/dir ['/some/sed/command']
#
# Last arg is optional
cd $DOTTY_ROOT >& /dev/null
local build_output=$(sbt "$1")
local jar=$(echo $build_output | sed -n 's/.*Packaging //g; s/ \.\.\..*//g; /^\/.*/p')
local sedjar="$3"
if [ "$sedjar" == "" ]; then
sedjar="/.*\.jar/p"
fi
if [ "$jar" == "" ]; then
# Didn't build a jar - could've run sbt by oneself, get latest jar in target:
jar="$DOTTY_ROOT/$2/$(ls -1t "$2" | sed -n "$sedjar" | awk 'NR==1')"
fi
cd - >& /dev/null
echo $jar
}
function update_packages {
echo "$INTERFACES_JAR" > $DOTTY_ROOT/.packages
echo "$MAIN_JAR" >> $DOTTY_ROOT/.packages
echo "$TEST_JAR" >> $DOTTY_ROOT/.packages
}
function build_all {
echo "The script is going to build the required jar files"
printf "Building dotty-interfaces..."
INTERFACES_JAR=$(build_jar dotty-interfaces/package interfaces/target)
printf "done\n"
printf "Building dotty..."
MAIN_JAR=$(build_jar package "target/scala-$SCALA_BINARY_VERSION")
printf "done\n"
printf "Building tests..."
TEST_JAR=$(build_jar test:package "target/scala-$SCALA_BINARY_VERSION" '/dotty.*-tests\.jar/p')
printf "done\n"
update_packages
}
# Check if .packages file does not exist - if so assume old build and rebuild all
if [ ! -f "$DOTTY_ROOT/.packages" ]; then
build_all
else
IFS=$'\r\n' GLOBIGNORE='*' command eval 'JARS=($(cat $DOTTY_ROOT/.packages))'
if [ "${#JARS[@]}" == "3" ]; then
INTERFACES_JAR="${JARS[0]}"
MAIN_JAR="${JARS[1]}"
TEST_JAR="${JARS[2]}"
else
echo "Failed to parse .packages file"
build_all
fi
fi
################# After this point, jar variables will be set #################
function check_jar {
# Usage:
# check_jar "name" "path/to/package.jar" "sources/dir" 'lambda to exec on failure'
local new_files="$(find "$3" \( -iname "*.scala" -o -iname "*.java" \) -newer "$2")"
if [ ! -z "$new_files" ]; then
printf "New files detected in $1, rebuilding..."
eval "$4"
printf "done\n"
update_packages
fi
}
check_jar "dotty-interfaces" $INTERFACES_JAR "interfaces" 'INTERFACES_JAR=$(build_jar dotty-interfaces/package interfaces/target)'
check_jar "dotty" $MAIN_JAR "src" 'MAIN_JAR=$(build_jar package target/scala-$SCALA_BINARY_VERSION)'
check_jar "dotty-tests" $TEST_JAR "test" 'TEST_JAR=$(build_jar test:package target/scala-$SCALA_BINARY_VERSION /dotty.*-tests\.jar/p)'
# Autodetecting the scala-library location, in case it wasn't provided by an environment variable
if [ "$SCALA_LIBRARY_JAR" == "" ]; then
SCALA_LIBRARY_JAR=$(find_jar "$HOME/.ivy2/cache/org.scala-lang/scala-library/jars" "scala-library-$SCALA_VERSION.jar")
fi
if [ "$SCALA_REFLECT_JAR" == "" ]; then
SCALA_REFLECT_JAR=$(find_jar "$HOME/.ivy2/cache/org.scala-lang/scala-reflect/jars" "scala-reflect-$SCALA_VERSION.jar")
fi
if [ "$SCALA_COMPILER_JAR" == "" ]; then
SCALA_COMPILER_JAR=$(find_jar "$HOME/.ivy2/cache/me.d-d/scala-compiler/jars" "scala-compiler-$SCALA_COMPILER_VERSION.jar")
fi
if [ "$JLINE_JAR" == "" ]; then
JLINE_JAR=$(find_jar "$HOME/.ivy2/cache/jline/jline/jars" "jline-$JLINE_VERSION.jar")
fi
if [ "$SBT_INTERFACE_JAR" == "" ]; then
SBT_INTERFACE_JAR=$(find_jar "$HOME/.ivy2/cache/org.scala-sbt/interface/jars" "interface-$SBT_VERSION.jar")
fi
|