15 |
15 |
16 sealed case class Download_Platform(platform_name: String, url_template: String) { |
16 sealed case class Download_Platform(platform_name: String, url_template: String) { |
17 override def toString: String = platform_name |
17 override def toString: String = platform_name |
18 |
18 |
19 def is_windows: Boolean = url_template.contains("windows") |
19 def is_windows: Boolean = url_template.contains("windows") |
20 def url(base_url: String, version: String): String = |
20 |
|
21 def download(base_url: String, version: String): String = |
21 base_url + "/v" + version + "/" + url_template.replace("{V}", version) |
22 base_url + "/v" + version + "/" + url_template.replace("{V}", version) |
22 } |
23 } |
23 |
24 |
24 val platforms: List[Download_Platform] = |
25 val platforms: List[Download_Platform] = |
25 List( |
26 List( |
51 |
52 |
52 for (platform <- platforms) { |
53 for (platform <- platforms) { |
53 val platform_dir = |
54 val platform_dir = |
54 Isabelle_System.make_directory(component_dir.path + Path.basic(platform.platform_name)) |
55 Isabelle_System.make_directory(component_dir.path + Path.basic(platform.platform_name)) |
55 |
56 |
56 val url = platform.url(base_url, version) |
57 val download = platform.download(base_url, version) |
57 val name = Library.take_suffix(_ != '/', url.toList)._2.mkString |
58 val name = |
|
59 Url.get_base_name(download) getOrElse |
|
60 error("Malformed download name " + quote(download)) |
58 |
61 |
59 val exe = Path.basic("hugo").exe_if(platform.is_windows) |
62 val exe = Path.basic("hugo").exe_if(platform.is_windows) |
60 |
63 |
61 Isabelle_System.with_tmp_dir("download", component_dir.path.file) { download_dir => |
64 Isabelle_System.with_tmp_dir("download", component_dir.path.file) { download_dir => |
62 Isabelle_System.with_tmp_dir("tmp", component_dir.path.file) { tmp_dir => |
65 Isabelle_System.with_tmp_dir("tmp", component_dir.path.file) { tmp_dir => |
63 val archive_file = download_dir + Path.basic(name) |
66 val archive_file = download_dir + Path.basic(name) |
64 |
67 |
65 Isabelle_System.download_file(url, archive_file, progress = progress) |
68 Isabelle_System.download_file(download, archive_file, progress = progress) |
66 Isabelle_System.extract(archive_file, tmp_dir) |
69 Isabelle_System.extract(archive_file, tmp_dir) |
67 Isabelle_System.move_file(tmp_dir + exe, platform_dir) |
70 Isabelle_System.move_file(tmp_dir + exe, platform_dir) |
68 Isabelle_System.move_file(tmp_dir + Path.basic("LICENSE"), component_dir.LICENSE) |
71 Isabelle_System.move_file(tmp_dir + Path.basic("LICENSE"), component_dir.LICENSE) |
69 File.set_executable(platform_dir + exe) |
72 File.set_executable(platform_dir + exe) |
70 } |
73 } |
80 |
83 |
81 |
84 |
82 /* README */ |
85 /* README */ |
83 |
86 |
84 File.write(component_dir.README, |
87 File.write(component_dir.README, |
85 """This Isabelle components provides a hugo extended """ + version + """. |
88 """This Isabelle components provides hugo extended """ + version + """. |
86 |
89 |
87 See also https://gohugo.io and executables from """ + base_url + """ |
90 See also https://gohugo.io and executables from """ + base_url + """ |
88 |
91 |
89 Fabian |
92 Fabian Huch |
90 """ + Date.Format.date(Date.now()) + "\n") |
93 """ + Date.Format.date(Date.now()) + "\n") |
91 } |
94 } |
92 |
95 |
93 |
96 |
94 /* Isabelle tool wrapper */ |
97 /* Isabelle tool wrapper */ |