72886
|
1 |
/* Title: Pure/Admin/build_vampire.scala
|
|
2 |
Author: Makarius
|
|
3 |
|
|
4 |
Build Isabelle Vampire component from repository.
|
|
5 |
*/
|
|
6 |
|
|
7 |
package isabelle
|
|
8 |
|
|
9 |
|
|
10 |
object Build_Vampire
|
|
11 |
{
|
|
12 |
val default_repository = "https://github.com/vprover/vampire.git"
|
|
13 |
val default_version1 = "4.5.1"
|
|
14 |
val default_version2 = "7638614fc288"
|
|
15 |
val default_component_name = "vampire-" + default_version1
|
|
16 |
|
|
17 |
|
|
18 |
/* build Vampire */
|
|
19 |
|
|
20 |
def build_vampire(
|
|
21 |
repository: String = default_repository,
|
|
22 |
version1: String = default_version1,
|
|
23 |
version2: String = default_version2,
|
|
24 |
component_name: String = default_component_name,
|
|
25 |
verbose: Boolean = false,
|
|
26 |
progress: Progress = new Progress,
|
|
27 |
target_dir: Path = Path.current)
|
|
28 |
{
|
|
29 |
Isabelle_System.with_tmp_dir("build")(tmp_dir =>
|
|
30 |
{
|
|
31 |
/* component and platform */
|
|
32 |
|
|
33 |
val component_dir = Isabelle_System.new_directory(target_dir + Path.basic(component_name))
|
|
34 |
progress.echo("Component " + component_dir)
|
|
35 |
|
|
36 |
val platform_name =
|
|
37 |
proper_string(Isabelle_System.getenv("ISABELLE_PLATFORM64")) getOrElse
|
|
38 |
error("No 64bit platform")
|
|
39 |
val platform_dir = Isabelle_System.make_directory(component_dir + Path.basic(platform_name))
|
|
40 |
|
|
41 |
|
|
42 |
/* clone repository */
|
|
43 |
|
|
44 |
progress.echo("Cloning repository " + repository)
|
|
45 |
progress.bash("git clone " + Bash.string(repository) + " vampire",
|
|
46 |
cwd = tmp_dir.file, echo = verbose).check
|
|
47 |
|
|
48 |
val build_dir = tmp_dir + Path.explode("vampire")
|
|
49 |
|
|
50 |
File.copy(build_dir + Path.explode("LICENCE"), component_dir)
|
|
51 |
|
|
52 |
|
|
53 |
/* build versions */
|
|
54 |
|
|
55 |
for { (rev, exe) <- List(version1 -> "vampire", version2 -> "vampire_polymorphic") } {
|
|
56 |
progress.echo("Building " + exe + " (rev " + rev + ")")
|
|
57 |
progress.bash(
|
|
58 |
List("git checkout --quiet --detach " + Bash.string(rev),
|
|
59 |
"make clean",
|
|
60 |
"make vampire_rel").mkString(" && "),
|
|
61 |
cwd = build_dir.file, echo = verbose).check
|
|
62 |
|
|
63 |
val rev_count =
|
|
64 |
progress.bash("git rev-list HEAD --count", cwd = build_dir.file).check.out
|
|
65 |
val build = Path.basic("vampire_rel_detached_" + rev_count)
|
|
66 |
File.copy(build_dir + build.platform_exe, platform_dir + Path.basic(exe).platform_exe)
|
|
67 |
}
|
|
68 |
|
|
69 |
|
|
70 |
/* settings */
|
|
71 |
|
|
72 |
val etc_dir = Isabelle_System.make_directory(component_dir + Path.basic("etc"))
|
|
73 |
File.write(etc_dir + Path.basic("settings"),
|
|
74 |
"""# -*- shell-script -*- :mode=shellscript:
|
|
75 |
|
|
76 |
VAMPIRE_HOME="$COMPONENT/$ISABELLE_PLATFORM64"
|
|
77 |
|
|
78 |
ISABELLE_VAMPIRE="$VAMPIRE_HOME/vampire"
|
|
79 |
ISABELLE_VAMPIRE_POLYMORPHIC="$VAMPIRE_HOME/vampire_polymorphic"
|
|
80 |
|
|
81 |
VAMPIRE_EXTRA_OPTIONS=""
|
|
82 |
""")
|
|
83 |
|
|
84 |
|
|
85 |
/* README */
|
|
86 |
|
|
87 |
File.write(component_dir + Path.basic("README"),
|
|
88 |
"This Isabelle component provides two versions of Vampire from\n" + repository + """
|
|
89 |
|
|
90 |
* vampire: standard version (regular stable release)
|
|
91 |
* vampire_polymorphic: special version for polymorphic FOL and HOL
|
|
92 |
(intermediate repository version)
|
|
93 |
|
|
94 |
The executables have been built like this:
|
|
95 |
|
|
96 |
git checkout COMMIT
|
|
97 |
make clean
|
|
98 |
make vampire_rel
|
|
99 |
|
|
100 |
The precise commit id is revealed by executing "vampire --version".
|
|
101 |
|
|
102 |
|
|
103 |
Makarius
|
|
104 |
""" + Date.Format.date(Date.now()) + "\n")
|
|
105 |
})
|
|
106 |
}
|
|
107 |
|
|
108 |
|
|
109 |
/* Isabelle tool wrapper */
|
|
110 |
|
|
111 |
val isabelle_tool =
|
|
112 |
Isabelle_Tool("build_vampire", "build prover component from repository", Scala_Project.here,
|
|
113 |
args =>
|
|
114 |
{
|
|
115 |
var target_dir = Path.current
|
|
116 |
var repository = default_repository
|
|
117 |
var version1 = default_version1
|
|
118 |
var version2 = default_version2
|
|
119 |
var component_name = default_component_name
|
|
120 |
var verbose = false
|
|
121 |
|
|
122 |
val getopts = Getopts("""
|
|
123 |
Usage: isabelle build_vampire [OPTIONS]
|
|
124 |
|
|
125 |
Options are:
|
|
126 |
-D DIR target directory (default ".")
|
|
127 |
-U URL repository (default: """" + default_repository + """")
|
|
128 |
-V REV standard version (default: """" + default_version1 + """")
|
|
129 |
-W REV polymorphic version (default: """" + default_version2 + """")
|
|
130 |
-n NAME component name (default: """" + default_component_name + """")
|
|
131 |
-v verbose
|
|
132 |
|
|
133 |
Build prover component from official download.
|
|
134 |
""",
|
|
135 |
"D:" -> (arg => target_dir = Path.explode(arg)),
|
|
136 |
"U:" -> (arg => repository = arg),
|
|
137 |
"V:" -> (arg => version1 = arg),
|
|
138 |
"W:" -> (arg => version2 = arg),
|
|
139 |
"n:" -> (arg => component_name = arg),
|
|
140 |
"v" -> (_ => verbose = true))
|
|
141 |
|
|
142 |
val more_args = getopts(args)
|
|
143 |
if (more_args.nonEmpty) getopts.usage()
|
|
144 |
|
|
145 |
val progress = new Console_Progress()
|
|
146 |
|
|
147 |
build_vampire(repository = repository, version1 = version1, version2 = version2,
|
|
148 |
component_name = component_name, verbose = verbose, progress = progress,
|
|
149 |
target_dir = target_dir)
|
|
150 |
})
|
|
151 |
}
|