author | wenzelm |
Wed, 06 Jan 2021 13:47:50 +0100 | |
changeset 73081 | 120ffea2c244 |
parent 72894 | bd2269b6cd99 |
child 73082 | e67d659d7a41 |
permissions | -rw-r--r-- |
64929 | 1 |
/* Title: Pure/Admin/build_jdk.scala |
2 |
Author: Makarius |
|
3 |
||
4 |
Build Isabelle jdk component from original platform installations. |
|
5 |
*/ |
|
6 |
||
7 |
package isabelle |
|
8 |
||
9 |
||
64933 | 10 |
import java.nio.file.Files |
64934 | 11 |
import java.nio.file.attribute.PosixFilePermission |
64933 | 12 |
|
64929 | 13 |
import scala.util.matching.Regex |
14 |
||
15 |
||
16 |
object Build_JDK |
|
17 |
{ |
|
73081
120ffea2c244
prefer OpenJDK from Azul: supports more versions and platforms;
wenzelm
parents:
72894
diff
changeset
|
18 |
/* platform and version information */ |
64929 | 19 |
|
73081
120ffea2c244
prefer OpenJDK from Azul: supports more versions and platforms;
wenzelm
parents:
72894
diff
changeset
|
20 |
sealed case class JDK_Platform( |
120ffea2c244
prefer OpenJDK from Azul: supports more versions and platforms;
wenzelm
parents:
72894
diff
changeset
|
21 |
platform_name: String, |
120ffea2c244
prefer OpenJDK from Azul: supports more versions and platforms;
wenzelm
parents:
72894
diff
changeset
|
22 |
platform_regex: Regex, |
120ffea2c244
prefer OpenJDK from Azul: supports more versions and platforms;
wenzelm
parents:
72894
diff
changeset
|
23 |
exe: String = "java", |
120ffea2c244
prefer OpenJDK from Azul: supports more versions and platforms;
wenzelm
parents:
72894
diff
changeset
|
24 |
macos_home: Boolean = false, |
120ffea2c244
prefer OpenJDK from Azul: supports more versions and platforms;
wenzelm
parents:
72894
diff
changeset
|
25 |
jdk_version: String = "", |
120ffea2c244
prefer OpenJDK from Azul: supports more versions and platforms;
wenzelm
parents:
72894
diff
changeset
|
26 |
jdk_home: String = "") |
64929 | 27 |
{ |
73081
120ffea2c244
prefer OpenJDK from Azul: supports more versions and platforms;
wenzelm
parents:
72894
diff
changeset
|
28 |
override def toString: String = platform_name |
120ffea2c244
prefer OpenJDK from Azul: supports more versions and platforms;
wenzelm
parents:
72894
diff
changeset
|
29 |
|
120ffea2c244
prefer OpenJDK from Azul: supports more versions and platforms;
wenzelm
parents:
72894
diff
changeset
|
30 |
def platform_path: Path = Path.explode(platform_name) |
120ffea2c244
prefer OpenJDK from Azul: supports more versions and platforms;
wenzelm
parents:
72894
diff
changeset
|
31 |
|
120ffea2c244
prefer OpenJDK from Azul: supports more versions and platforms;
wenzelm
parents:
72894
diff
changeset
|
32 |
def detect(jdk_dir: Path): Option[JDK_Platform] = |
120ffea2c244
prefer OpenJDK from Azul: supports more versions and platforms;
wenzelm
parents:
72894
diff
changeset
|
33 |
{ |
120ffea2c244
prefer OpenJDK from Azul: supports more versions and platforms;
wenzelm
parents:
72894
diff
changeset
|
34 |
val major_version = |
120ffea2c244
prefer OpenJDK from Azul: supports more versions and platforms;
wenzelm
parents:
72894
diff
changeset
|
35 |
{ |
120ffea2c244
prefer OpenJDK from Azul: supports more versions and platforms;
wenzelm
parents:
72894
diff
changeset
|
36 |
val Major_Version = """.*jdk(\d+).*$""".r |
120ffea2c244
prefer OpenJDK from Azul: supports more versions and platforms;
wenzelm
parents:
72894
diff
changeset
|
37 |
val jdk_name = jdk_dir.file.getName |
120ffea2c244
prefer OpenJDK from Azul: supports more versions and platforms;
wenzelm
parents:
72894
diff
changeset
|
38 |
jdk_name match { |
120ffea2c244
prefer OpenJDK from Azul: supports more versions and platforms;
wenzelm
parents:
72894
diff
changeset
|
39 |
case Major_Version(s) => s |
120ffea2c244
prefer OpenJDK from Azul: supports more versions and platforms;
wenzelm
parents:
72894
diff
changeset
|
40 |
case _ => error("Cannot determine major version from " + quote(jdk_name)) |
120ffea2c244
prefer OpenJDK from Azul: supports more versions and platforms;
wenzelm
parents:
72894
diff
changeset
|
41 |
} |
120ffea2c244
prefer OpenJDK from Azul: supports more versions and platforms;
wenzelm
parents:
72894
diff
changeset
|
42 |
} |
120ffea2c244
prefer OpenJDK from Azul: supports more versions and platforms;
wenzelm
parents:
72894
diff
changeset
|
43 |
val jdk_home = if (macos_home) "zulu-" + major_version + ".jdk/Contents/Home" else "" |
120ffea2c244
prefer OpenJDK from Azul: supports more versions and platforms;
wenzelm
parents:
72894
diff
changeset
|
44 |
|
120ffea2c244
prefer OpenJDK from Azul: supports more versions and platforms;
wenzelm
parents:
72894
diff
changeset
|
45 |
val path = jdk_dir + Path.explode(jdk_home) + Path.explode("bin") + Path.explode(exe) |
120ffea2c244
prefer OpenJDK from Azul: supports more versions and platforms;
wenzelm
parents:
72894
diff
changeset
|
46 |
if (path.is_file) { |
120ffea2c244
prefer OpenJDK from Azul: supports more versions and platforms;
wenzelm
parents:
72894
diff
changeset
|
47 |
val file_descr = Isabelle_System.bash("file -b " + File.bash_path(path)).check.out |
120ffea2c244
prefer OpenJDK from Azul: supports more versions and platforms;
wenzelm
parents:
72894
diff
changeset
|
48 |
if (platform_regex.pattern.matcher(file_descr).matches) { |
120ffea2c244
prefer OpenJDK from Azul: supports more versions and platforms;
wenzelm
parents:
72894
diff
changeset
|
49 |
val Version = ("^(" + major_version + """\.[0-9.]+\+\d+)(?:-LTS)?$""").r |
120ffea2c244
prefer OpenJDK from Azul: supports more versions and platforms;
wenzelm
parents:
72894
diff
changeset
|
50 |
val version_lines = |
120ffea2c244
prefer OpenJDK from Azul: supports more versions and platforms;
wenzelm
parents:
72894
diff
changeset
|
51 |
Isabelle_System.bash("strings " + File.bash_path(path)).check |
120ffea2c244
prefer OpenJDK from Azul: supports more versions and platforms;
wenzelm
parents:
72894
diff
changeset
|
52 |
.out_lines.flatMap({ case Version(s) => Some(s) case _ => None }) |
120ffea2c244
prefer OpenJDK from Azul: supports more versions and platforms;
wenzelm
parents:
72894
diff
changeset
|
53 |
version_lines match { |
120ffea2c244
prefer OpenJDK from Azul: supports more versions and platforms;
wenzelm
parents:
72894
diff
changeset
|
54 |
case List(jdk_version) => |
120ffea2c244
prefer OpenJDK from Azul: supports more versions and platforms;
wenzelm
parents:
72894
diff
changeset
|
55 |
Some(copy(jdk_version = jdk_version, jdk_home = jdk_home)) |
120ffea2c244
prefer OpenJDK from Azul: supports more versions and platforms;
wenzelm
parents:
72894
diff
changeset
|
56 |
case _ => error("Expected unique version within executable " + path) |
120ffea2c244
prefer OpenJDK from Azul: supports more versions and platforms;
wenzelm
parents:
72894
diff
changeset
|
57 |
} |
120ffea2c244
prefer OpenJDK from Azul: supports more versions and platforms;
wenzelm
parents:
72894
diff
changeset
|
58 |
} |
120ffea2c244
prefer OpenJDK from Azul: supports more versions and platforms;
wenzelm
parents:
72894
diff
changeset
|
59 |
else None |
120ffea2c244
prefer OpenJDK from Azul: supports more versions and platforms;
wenzelm
parents:
72894
diff
changeset
|
60 |
} |
120ffea2c244
prefer OpenJDK from Azul: supports more versions and platforms;
wenzelm
parents:
72894
diff
changeset
|
61 |
else None |
64929 | 62 |
} |
63 |
} |
|
64 |
||
73081
120ffea2c244
prefer OpenJDK from Azul: supports more versions and platforms;
wenzelm
parents:
72894
diff
changeset
|
65 |
val templates: List[JDK_Platform] = |
66906 | 66 |
List( |
73081
120ffea2c244
prefer OpenJDK from Azul: supports more versions and platforms;
wenzelm
parents:
72894
diff
changeset
|
67 |
JDK_Platform("arm64-darwin", """.*Mach-O 64-bit.*arm64.*""".r, macos_home = true), |
120ffea2c244
prefer OpenJDK from Azul: supports more versions and platforms;
wenzelm
parents:
72894
diff
changeset
|
68 |
JDK_Platform("arm64-linux", """.*ELF 64-bit.*ARM aarch64.*""".r), |
120ffea2c244
prefer OpenJDK from Azul: supports more versions and platforms;
wenzelm
parents:
72894
diff
changeset
|
69 |
JDK_Platform("x86_64-darwin", """.*Mach-O 64-bit.*x86[-_]64.*""".r, macos_home = true), |
120ffea2c244
prefer OpenJDK from Azul: supports more versions and platforms;
wenzelm
parents:
72894
diff
changeset
|
70 |
JDK_Platform("x86_64-linux", """.*ELF 64-bit.*x86[-_]64.*""".r), |
120ffea2c244
prefer OpenJDK from Azul: supports more versions and platforms;
wenzelm
parents:
72894
diff
changeset
|
71 |
JDK_Platform("x86_64-windows", """.*PE32\+ executable.*x86[-_]64.*""".r, exe = "java.exe")) |
64929 | 72 |
|
73 |
||
74 |
/* README */ |
|
75 |
||
73081
120ffea2c244
prefer OpenJDK from Azul: supports more versions and platforms;
wenzelm
parents:
72894
diff
changeset
|
76 |
def readme(jdk_version: String): String = |
120ffea2c244
prefer OpenJDK from Azul: supports more versions and platforms;
wenzelm
parents:
72894
diff
changeset
|
77 |
"""This is OpenJDK """ + jdk_version + """ based on downloads by Azul, see also |
120ffea2c244
prefer OpenJDK from Azul: supports more versions and platforms;
wenzelm
parents:
72894
diff
changeset
|
78 |
https://www.azul.com/downloads/zulu-community/?package=jdk |
64929 | 79 |
|
73081
120ffea2c244
prefer OpenJDK from Azul: supports more versions and platforms;
wenzelm
parents:
72894
diff
changeset
|
80 |
The main license is GPL2, but some modules are covered by other (more liberal) |
120ffea2c244
prefer OpenJDK from Azul: supports more versions and platforms;
wenzelm
parents:
72894
diff
changeset
|
81 |
licenses, see legal/* for details. |
64929 | 82 |
|
73081
120ffea2c244
prefer OpenJDK from Azul: supports more versions and platforms;
wenzelm
parents:
72894
diff
changeset
|
83 |
Linux, Windows, macOS all work uniformly, depending on platform-specific |
120ffea2c244
prefer OpenJDK from Azul: supports more versions and platforms;
wenzelm
parents:
72894
diff
changeset
|
84 |
subdirectories. |
64929 | 85 |
""" |
86 |
||
87 |
||
88 |
/* settings */ |
|
89 |
||
73081
120ffea2c244
prefer OpenJDK from Azul: supports more versions and platforms;
wenzelm
parents:
72894
diff
changeset
|
90 |
def settings(jdk_home: String): String = |
64929 | 91 |
"""# -*- shell-script -*- :mode=shellscript: |
92 |
||
93 |
case "$ISABELLE_PLATFORM_FAMILY" in |
|
94 |
linux) |
|
66906 | 95 |
ISABELLE_JAVA_PLATFORM="$ISABELLE_PLATFORM64" |
64929 | 96 |
ISABELLE_JDK_HOME="$COMPONENT/$ISABELLE_JAVA_PLATFORM" |
97 |
;; |
|
98 |
windows) |
|
66906 | 99 |
ISABELLE_JAVA_PLATFORM="$ISABELLE_WINDOWS_PLATFORM64" |
64929 | 100 |
ISABELLE_JDK_HOME="$COMPONENT/$ISABELLE_JAVA_PLATFORM" |
101 |
;; |
|
102 |
macos) |
|
73081
120ffea2c244
prefer OpenJDK from Azul: supports more versions and platforms;
wenzelm
parents:
72894
diff
changeset
|
103 |
if [ -n "$ISABELLE_APPLE_PLATFORM64" -a -d "$COMPONENT/$ISABELLE_APPLE_PLATFORM64/""" + jdk_home + """" ] |
120ffea2c244
prefer OpenJDK from Azul: supports more versions and platforms;
wenzelm
parents:
72894
diff
changeset
|
104 |
then |
120ffea2c244
prefer OpenJDK from Azul: supports more versions and platforms;
wenzelm
parents:
72894
diff
changeset
|
105 |
ISABELLE_JAVA_PLATFORM="$ISABELLE_APPLE_PLATFORM64" |
120ffea2c244
prefer OpenJDK from Azul: supports more versions and platforms;
wenzelm
parents:
72894
diff
changeset
|
106 |
else |
120ffea2c244
prefer OpenJDK from Azul: supports more versions and platforms;
wenzelm
parents:
72894
diff
changeset
|
107 |
ISABELLE_JAVA_PLATFORM="$ISABELLE_PLATFORM64" |
120ffea2c244
prefer OpenJDK from Azul: supports more versions and platforms;
wenzelm
parents:
72894
diff
changeset
|
108 |
fi |
120ffea2c244
prefer OpenJDK from Azul: supports more versions and platforms;
wenzelm
parents:
72894
diff
changeset
|
109 |
ISABELLE_JDK_HOME="$COMPONENT/$ISABELLE_JAVA_PLATFORM/""" + jdk_home + """" |
64929 | 110 |
;; |
111 |
esac |
|
112 |
""" |
|
113 |
||
114 |
||
115 |
/* extract archive */ |
|
116 |
||
69186
573b7fbd96a8
updated to jdk-11+28 from https://adoptopenjdk.net -- with proper font rendering on Linux;
wenzelm
parents:
69128
diff
changeset
|
117 |
private def suppress_name(name: String): Boolean = name.startsWith("._") |
573b7fbd96a8
updated to jdk-11+28 from https://adoptopenjdk.net -- with proper font rendering on Linux;
wenzelm
parents:
69128
diff
changeset
|
118 |
|
73081
120ffea2c244
prefer OpenJDK from Azul: supports more versions and platforms;
wenzelm
parents:
72894
diff
changeset
|
119 |
def extract_archive(dir: Path, archive: Path): JDK_Platform = |
64929 | 120 |
{ |
121 |
try { |
|
72376 | 122 |
val tmp_dir = Isabelle_System.make_directory(dir + Path.explode("tmp")) |
69128 | 123 |
|
69367 | 124 |
if (archive.get_ext == "zip") { |
69128 | 125 |
Isabelle_System.bash( |
126 |
"unzip -x " + File.bash_path(archive.absolute), cwd = tmp_dir.file).check |
|
127 |
} |
|
128 |
else { |
|
69425 | 129 |
Isabelle_System.gnutar("-xzf " + File.bash_path(archive), dir = tmp_dir).check |
69128 | 130 |
} |
131 |
||
64929 | 132 |
val dir_entry = |
71601 | 133 |
File.read_dir(tmp_dir).filterNot(suppress_name) match { |
64929 | 134 |
case List(s) => s |
135 |
case _ => error("Archive contains multiple directories") |
|
136 |
} |
|
137 |
||
138 |
val jdk_dir = tmp_dir + Path.explode(dir_entry) |
|
139 |
val platform = |
|
73081
120ffea2c244
prefer OpenJDK from Azul: supports more versions and platforms;
wenzelm
parents:
72894
diff
changeset
|
140 |
templates.view.flatMap(_.detect(jdk_dir)) |
120ffea2c244
prefer OpenJDK from Azul: supports more versions and platforms;
wenzelm
parents:
72894
diff
changeset
|
141 |
.headOption.getOrElse(error("Failed to detect JDK platform")) |
64929 | 142 |
|
73081
120ffea2c244
prefer OpenJDK from Azul: supports more versions and platforms;
wenzelm
parents:
72894
diff
changeset
|
143 |
val platform_dir = dir + platform.platform_path |
64929 | 144 |
if (platform_dir.is_dir) error("Directory already exists: " + platform_dir) |
69128 | 145 |
|
73081
120ffea2c244
prefer OpenJDK from Azul: supports more versions and platforms;
wenzelm
parents:
72894
diff
changeset
|
146 |
File.link(Path.current, jdk_dir + Path.explode(platform.jdk_home) + Path.explode("jre")) |
69128 | 147 |
|
64930 | 148 |
File.move(jdk_dir, platform_dir) |
64929 | 149 |
|
73081
120ffea2c244
prefer OpenJDK from Azul: supports more versions and platforms;
wenzelm
parents:
72894
diff
changeset
|
150 |
platform |
64929 | 151 |
} |
152 |
catch { case ERROR(msg) => cat_error(msg, "The error(s) above occurred for " + archive) } |
|
153 |
} |
|
154 |
||
155 |
||
156 |
/* build jdk */ |
|
157 |
||
158 |
def build_jdk( |
|
159 |
archives: List[Path], |
|
71726
a5fda30edae2
clarified signature: more uniform treatment of stopped/interrupted state;
wenzelm
parents:
71602
diff
changeset
|
160 |
progress: Progress = new Progress, |
64929 | 161 |
target_dir: Path = Path.current) |
162 |
{ |
|
163 |
if (Platform.is_windows) error("Cannot build jdk on Windows") |
|
164 |
||
165 |
Isabelle_System.with_tmp_dir("jdk")(dir => |
|
166 |
{ |
|
167 |
progress.echo("Extracting ...") |
|
73081
120ffea2c244
prefer OpenJDK from Azul: supports more versions and platforms;
wenzelm
parents:
72894
diff
changeset
|
168 |
val platforms = archives.map(extract_archive(dir, _)) |
64929 | 169 |
|
73081
120ffea2c244
prefer OpenJDK from Azul: supports more versions and platforms;
wenzelm
parents:
72894
diff
changeset
|
170 |
val jdk_version = |
120ffea2c244
prefer OpenJDK from Azul: supports more versions and platforms;
wenzelm
parents:
72894
diff
changeset
|
171 |
platforms.map(_.jdk_version).distinct match { |
64929 | 172 |
case List(version) => version |
173 |
case Nil => error("No archives") |
|
174 |
case versions => |
|
69128 | 175 |
error("Archives contain multiple JDK versions: " + commas_quote(versions)) |
64929 | 176 |
} |
177 |
||
73081
120ffea2c244
prefer OpenJDK from Azul: supports more versions and platforms;
wenzelm
parents:
72894
diff
changeset
|
178 |
templates.filterNot(p1 => platforms.exists(p2 => p1.platform_name == p2.platform_name)) |
120ffea2c244
prefer OpenJDK from Azul: supports more versions and platforms;
wenzelm
parents:
72894
diff
changeset
|
179 |
match { |
120ffea2c244
prefer OpenJDK from Azul: supports more versions and platforms;
wenzelm
parents:
72894
diff
changeset
|
180 |
case Nil => |
120ffea2c244
prefer OpenJDK from Azul: supports more versions and platforms;
wenzelm
parents:
72894
diff
changeset
|
181 |
case missing => error("Missing platforms: " + commas_quote(missing.map(_.platform_name))) |
120ffea2c244
prefer OpenJDK from Azul: supports more versions and platforms;
wenzelm
parents:
72894
diff
changeset
|
182 |
} |
64929 | 183 |
|
73081
120ffea2c244
prefer OpenJDK from Azul: supports more versions and platforms;
wenzelm
parents:
72894
diff
changeset
|
184 |
val jdk_home = |
120ffea2c244
prefer OpenJDK from Azul: supports more versions and platforms;
wenzelm
parents:
72894
diff
changeset
|
185 |
platforms.flatMap(platform => proper_string(platform.jdk_home)) |
120ffea2c244
prefer OpenJDK from Azul: supports more versions and platforms;
wenzelm
parents:
72894
diff
changeset
|
186 |
.headOption.getOrElse(error("Missing JDK home for macOS")) |
120ffea2c244
prefer OpenJDK from Azul: supports more versions and platforms;
wenzelm
parents:
72894
diff
changeset
|
187 |
|
120ffea2c244
prefer OpenJDK from Azul: supports more versions and platforms;
wenzelm
parents:
72894
diff
changeset
|
188 |
val jdk_name = "jdk-" + jdk_version |
64929 | 189 |
val jdk_path = Path.explode(jdk_name) |
190 |
val component_dir = dir + jdk_path |
|
191 |
||
72375 | 192 |
Isabelle_System.make_directory(component_dir + Path.explode("etc")) |
73081
120ffea2c244
prefer OpenJDK from Azul: supports more versions and platforms;
wenzelm
parents:
72894
diff
changeset
|
193 |
File.write(Components.settings(component_dir), settings(jdk_home)) |
120ffea2c244
prefer OpenJDK from Azul: supports more versions and platforms;
wenzelm
parents:
72894
diff
changeset
|
194 |
File.write(component_dir + Path.explode("README"), readme(jdk_version)) |
64929 | 195 |
|
73081
120ffea2c244
prefer OpenJDK from Azul: supports more versions and platforms;
wenzelm
parents:
72894
diff
changeset
|
196 |
for (platform <- platforms) File.move(dir + platform.platform_path, component_dir) |
64929 | 197 |
|
64933 | 198 |
for (file <- File.find_files(component_dir.file, include_dirs = true)) { |
199 |
val path = file.toPath |
|
200 |
val perms = Files.getPosixFilePermissions(path) |
|
64934 | 201 |
perms.add(PosixFilePermission.OWNER_READ) |
202 |
perms.add(PosixFilePermission.GROUP_READ) |
|
203 |
perms.add(PosixFilePermission.OTHERS_READ) |
|
204 |
perms.add(PosixFilePermission.OWNER_WRITE) |
|
64933 | 205 |
if (file.isDirectory) { |
64934 | 206 |
perms.add(PosixFilePermission.OWNER_WRITE) |
207 |
perms.add(PosixFilePermission.OWNER_EXECUTE) |
|
208 |
perms.add(PosixFilePermission.GROUP_EXECUTE) |
|
209 |
perms.add(PosixFilePermission.OTHERS_EXECUTE) |
|
64933 | 210 |
} |
211 |
Files.setPosixFilePermissions(path, perms) |
|
212 |
} |
|
64931 | 213 |
|
214 |
File.find_files((component_dir + Path.explode("x86_64-darwin")).file, |
|
69186
573b7fbd96a8
updated to jdk-11+28 from https://adoptopenjdk.net -- with proper font rendering on Linux;
wenzelm
parents:
69128
diff
changeset
|
215 |
file => suppress_name(file.getName)).foreach(_.delete) |
64929 | 216 |
|
217 |
progress.echo("Sharing ...") |
|
64934 | 218 |
val main_dir :: other_dirs = |
73081
120ffea2c244
prefer OpenJDK from Azul: supports more versions and platforms;
wenzelm
parents:
72894
diff
changeset
|
219 |
platforms.map(platform => (component_dir + platform.platform_path).file.toPath) |
64934 | 220 |
for { |
221 |
file1 <- File.find_files(main_dir.toFile).iterator |
|
222 |
path1 = file1.toPath |
|
223 |
dir2 <- other_dirs.iterator |
|
224 |
} { |
|
225 |
val path2 = dir2.resolve(main_dir.relativize(path1)) |
|
226 |
val file2 = path2.toFile |
|
65879
a43a079156a6
avoid mixture of symlinks and hardlinks, which causes problems with BSD tar on macOS Sierra;
wenzelm
parents:
65873
diff
changeset
|
227 |
if (!Files.isSymbolicLink(path2) && file2.isFile && File.eq_content(file1, file2)) { |
64934 | 228 |
file2.delete |
229 |
Files.createLink(path2, path1) |
|
230 |
} |
|
231 |
} |
|
64929 | 232 |
|
233 |
progress.echo("Archiving ...") |
|
69425 | 234 |
Isabelle_System.gnutar( |
235 |
"-czf " + File.bash_path(target_dir + jdk_path.ext("tar.gz")) + " " + jdk_name, |
|
236 |
dir = dir).check |
|
64929 | 237 |
}) |
238 |
} |
|
239 |
||
240 |
||
241 |
/* Isabelle tool wrapper */ |
|
242 |
||
243 |
val isabelle_tool = |
|
69128 | 244 |
Isabelle_Tool("build_jdk", "build Isabelle jdk component from original archives", |
72763 | 245 |
Scala_Project.here, args => |
64929 | 246 |
{ |
247 |
var target_dir = Path.current |
|
248 |
||
249 |
val getopts = Getopts(""" |
|
65873 | 250 |
Usage: isabelle build_jdk [OPTIONS] ARCHIVES... |
64929 | 251 |
|
252 |
Options are: |
|
253 |
-D DIR target directory (default ".") |
|
254 |
||
69128 | 255 |
Build jdk component from tar.gz archives, with original jdk archives |
73081
120ffea2c244
prefer OpenJDK from Azul: supports more versions and platforms;
wenzelm
parents:
72894
diff
changeset
|
256 |
for Linux, Windows, and macOS. |
64929 | 257 |
""", |
258 |
"D:" -> (arg => target_dir = Path.explode(arg))) |
|
259 |
||
260 |
val more_args = getopts(args) |
|
261 |
if (more_args.isEmpty) getopts.usage() |
|
262 |
||
71601 | 263 |
val archives = more_args.map(Path.explode) |
64929 | 264 |
val progress = new Console_Progress() |
265 |
||
266 |
build_jdk(archives = archives, progress = progress, target_dir = target_dir) |
|
69277
258bef08b31e
support for user-defined Isabelle/Scala command-line tools;
wenzelm
parents:
69186
diff
changeset
|
267 |
}) |
64929 | 268 |
} |