| author | wenzelm | 
| Tue, 23 Jan 2024 15:02:52 +0100 | |
| changeset 79518 | ad27859952cb | 
| parent 78610 | fd1fec53665b | 
| child 79803 | 33c93008db03 | 
| permissions | -rw-r--r-- | 
| 76458 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 1 | /* Title: Pure/Tools/dotnet_setup.scala | 
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 2 | Author: Makarius | 
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 3 | |
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 4 | Dynamic setup of dotnet component. | 
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 5 | */ | 
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 6 | |
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 7 | package isabelle | 
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 8 | |
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 9 | |
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 10 | object Dotnet_Setup {
 | 
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 11 | /* platforms */ | 
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 12 | |
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 13 | sealed case class Platform_Info( | 
| 78610 | 14 | family: Platform.Family, | 
| 76458 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 15 | name: String, | 
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 16 | os: String = "", | 
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 17 | arch: String = "x64", | 
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 18 | ext: String = "sh", | 
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 19 | exec: String = "bash", | 
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 20 | check: () => Unit = () => ()) | 
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 21 | |
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 22 | val all_platforms = | 
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 23 | List( | 
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 24 | Platform_Info(Platform.Family.linux_arm, "arm64-linux", os = "linux", arch = "arm64"), | 
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 25 | Platform_Info(Platform.Family.linux, "x86_64-linux", os = "linux"), | 
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 26 | Platform_Info(Platform.Family.macos, "arm64-darwin", os = "osx", arch = "arm64"), | 
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 27 | Platform_Info(Platform.Family.macos, "x86_64-darwin", os = "osx"), | 
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 28 | Platform_Info(Platform.Family.windows, "x86_64-windows", | 
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 29 | ext = "ps1", | 
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 30 | exec = "powershell -ExecutionPolicy ByPass", | 
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 31 |         check = () => Isabelle_System.require_command("powershell", "-NoProfile -Command Out-Null")))
 | 
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 32 | |
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 33 |   def check_platform_spec(spec: String): String = {
 | 
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 34 | val all_specs = | 
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 35 | Library.distinct(all_platforms.map(_.family.toString) ::: all_platforms.map(_.name)) | 
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 36 | if (all_specs.contains(spec)) spec | 
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 37 |     else {
 | 
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 38 |       error("Bad platform specification " + quote(spec) +
 | 
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 39 | "\n expected " + commas_quote(all_specs)) | 
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 40 | } | 
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 41 | } | 
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 42 | |
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 43 | |
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 44 | /* dotnet download and setup */ | 
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 45 | |
| 76461 | 46 |   def default_platform: String = {
 | 
| 47 | val self = Isabelle_Platform.self | |
| 48 | proper_string(self.ISABELLE_WINDOWS_PLATFORM64).getOrElse( | |
| 49 | proper_string(self.ISABELLE_APPLE_PLATFORM64).getOrElse( | |
| 50 | self.ISABELLE_PLATFORM64)) | |
| 51 | } | |
| 52 | ||
| 77084 | 53 | def default_target_dir: Path = Components.default_components_base | 
| 76458 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 54 | def default_install_url: String = "https://dot.net/v1/dotnet-install" | 
| 78288 | 55 | def default_version: String = "6.0.411" | 
| 76458 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 56 | |
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 57 | def dotnet_setup( | 
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 58 | platform_spec: String = default_platform, | 
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 59 | target_dir: Path = default_target_dir, | 
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 60 | install_url: String = default_install_url, | 
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 61 | version: String = default_version, | 
| 76467 | 62 | force: Boolean = false, | 
| 76458 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 63 | dry_run: Boolean = false, | 
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 64 | progress: Progress = new Progress | 
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 65 |   ): Unit = {
 | 
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 66 | check_platform_spec(platform_spec) | 
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 67 | |
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 68 |     for {
 | 
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 69 | platform <- all_platforms | 
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 70 | if platform.family.toString == platform_spec || platform.name == platform_spec | 
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 71 |     } {
 | 
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 72 | progress.expose_interrupt() | 
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 73 | |
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 74 | |
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 75 | /* component directory */ | 
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 76 | |
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 77 | val component_dir = | 
| 76518 | 78 | Components.Directory( | 
| 79 | target_dir + Path.explode(if (version.isEmpty) "dotnet-latest" else "dotnet-" + version)) | |
| 76458 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 80 | |
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 81 |       if (!dry_run) {
 | 
| 76518 | 82 |         progress.echo("Component " + component_dir)
 | 
| 83 | Isabelle_System.make_directory(component_dir.etc) | |
| 76466 
730dadb82936
clarified component settings: always update existing version;
 wenzelm parents: 
76464diff
changeset | 84 | |
| 76548 | 85 |         component_dir.write_settings("""
 | 
| 76466 
730dadb82936
clarified component settings: always update existing version;
 wenzelm parents: 
76464diff
changeset | 86 | ISABELLE_DOTNET_ROOT="$COMPONENT" | 
| 
730dadb82936
clarified component settings: always update existing version;
 wenzelm parents: 
76464diff
changeset | 87 | |
| 
730dadb82936
clarified component settings: always update existing version;
 wenzelm parents: 
76464diff
changeset | 88 | if [ -n "$ISABELLE_WINDOWS_PLATFORM64" -a -d "$ISABELLE_DOTNET_ROOT/$ISABELLE_WINDOWS_PLATFORM64" ]; then | 
| 
730dadb82936
clarified component settings: always update existing version;
 wenzelm parents: 
76464diff
changeset | 89 | ISABELLE_DOTNET="$ISABELLE_DOTNET_ROOT/$ISABELLE_WINDOWS_PLATFORM64/dotnet.exe" | 
| 
730dadb82936
clarified component settings: always update existing version;
 wenzelm parents: 
76464diff
changeset | 90 | elif [ -n "$ISABELLE_APPLE_PLATFORM64" -a -d "$ISABELLE_DOTNET_ROOT/$ISABELLE_APPLE_PLATFORM64" ]; then | 
| 
730dadb82936
clarified component settings: always update existing version;
 wenzelm parents: 
76464diff
changeset | 91 | ISABELLE_DOTNET="$ISABELLE_DOTNET_ROOT/$ISABELLE_APPLE_PLATFORM64/dotnet" | 
| 
730dadb82936
clarified component settings: always update existing version;
 wenzelm parents: 
76464diff
changeset | 92 | elif [ -d "$ISABELLE_DOTNET_ROOT/$ISABELLE_PLATFORM64" ]; then | 
| 
730dadb82936
clarified component settings: always update existing version;
 wenzelm parents: 
76464diff
changeset | 93 | ISABELLE_DOTNET="$ISABELLE_DOTNET_ROOT/$ISABELLE_PLATFORM64/dotnet" | 
| 
730dadb82936
clarified component settings: always update existing version;
 wenzelm parents: 
76464diff
changeset | 94 | fi | 
| 
730dadb82936
clarified component settings: always update existing version;
 wenzelm parents: 
76464diff
changeset | 95 | |
| 
730dadb82936
clarified component settings: always update existing version;
 wenzelm parents: 
76464diff
changeset | 96 | DOTNET_CLI_TELEMETRY_OPTOUT="true" | 
| 76469 
98cfe33db5a7
further attempts to confine dotnet to $ISABELLE_HOME_USER;
 wenzelm parents: 
76468diff
changeset | 97 | DOTNET_CLI_HOME="$(platform_path "$ISABELLE_HOME_USER/dotnet")" | 
| 76466 
730dadb82936
clarified component settings: always update existing version;
 wenzelm parents: 
76464diff
changeset | 98 | """) | 
| 76458 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 99 | |
| 76518 | 100 | File.write(component_dir.README, | 
| 76458 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 101 | """This installation of Dotnet has been produced via "isabelle dotnet_setup". | 
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 102 | |
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 103 | |
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 104 | Makarius | 
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 105 | """ + Date.Format.date(Date.now()) + "\n") | 
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 106 | |
| 76466 
730dadb82936
clarified component settings: always update existing version;
 wenzelm parents: 
76464diff
changeset | 107 |         for (old <- proper_string(Isabelle_System.getenv("ISABELLE_DOTNET_ROOT"))) {
 | 
| 
730dadb82936
clarified component settings: always update existing version;
 wenzelm parents: 
76464diff
changeset | 108 | Components.update_components(false, Path.explode(old)) | 
| 
730dadb82936
clarified component settings: always update existing version;
 wenzelm parents: 
76464diff
changeset | 109 | } | 
| 
730dadb82936
clarified component settings: always update existing version;
 wenzelm parents: 
76464diff
changeset | 110 | |
| 76518 | 111 | Components.update_components(true, component_dir.path) | 
| 76458 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 112 | } | 
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 113 | |
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 114 | |
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 115 | /* platform directory */ | 
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 116 | |
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 117 |       Isabelle_System.with_tmp_file("install", ext = platform.ext) { install =>
 | 
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 118 | Isabelle_System.download_file(install_url + "." + platform.ext, install) | 
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 119 | |
| 76518 | 120 | val platform_dir = component_dir.path + Path.explode(platform.name) | 
| 76467 | 121 |         if (platform_dir.is_dir && !force) {
 | 
| 76458 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 122 |           progress.echo_warning("Platform " + platform.name + " already installed")
 | 
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 123 | } | 
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 124 |         else {
 | 
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 125 |           progress.echo("Platform " + platform.name + " ...")
 | 
| 76463 | 126 | platform.check() | 
| 76467 | 127 | if (platform_dir.is_dir && force) Isabelle_System.rm_tree(platform_dir) | 
| 76458 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 128 | val script = | 
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 129 | platform.exec + " " + File.bash_platform_path(install) + | 
| 77369 | 130 | if_proper(version, " -Version " + Bash.string(version)) + | 
| 76458 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 131 | " -Architecture " + Bash.string(platform.arch) + | 
| 77369 | 132 | if_proper(platform.os, " -OS " + Bash.string(platform.os)) + | 
| 76458 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 133 | " -InstallDir " + Bash.string(platform.name) + | 
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 134 | (if (dry_run) " -DryRun" else "") + | 
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 135 | " -NoPath" | 
| 77510 
f5d6cd98b16a
clarified signature: manage "verbose" flag via "progress";
 wenzelm parents: 
77369diff
changeset | 136 | progress.bash(script, echo = progress.verbose, | 
| 76518 | 137 | cwd = if (dry_run) null else component_dir.path.file).check | 
| 76470 | 138 |           for (exe <- File.find_files(platform_dir.file, pred = _.getName.endsWith(".exe"))) {
 | 
| 78158 | 139 | File.set_executable(File.path(exe)) | 
| 76470 | 140 | } | 
| 76458 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 141 | } | 
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 142 | } | 
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 143 | } | 
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 144 | } | 
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 145 | |
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 146 | |
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 147 | /* Isabelle tool wrapper */ | 
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 148 | |
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 149 | val isabelle_tool = | 
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 150 |     Isabelle_Tool("dotnet_setup", "dynamic setup of dotnet component (for Fsharp)",
 | 
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 151 | Scala_Project.here, | 
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 152 |       { args =>
 | 
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 153 | |
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 154 | var target_dir = default_target_dir | 
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 155 | var install_url = default_install_url | 
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 156 | var version = default_version | 
| 76467 | 157 | var force = false | 
| 76458 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 158 | var dry_run = false | 
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 159 | var platforms = List(default_platform) | 
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 160 | var verbose = false | 
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 161 | |
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 162 |         val getopts = Getopts("""
 | 
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 163 | Usage: isabelle dotnet_setup [OPTIONS] | 
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 164 | |
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 165 | Options are: | 
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 166 | -D DIR target directory (default: """ + default_target_dir.expand + """) | 
| 76468 | 167 | -I URL URL for install script without extension | 
| 168 | (default: """ + quote(default_install_url) + """) | |
| 76458 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 169 | -V VERSION version (empty means "latest", default: """ + quote(default_version) + """) | 
| 76467 | 170 | -f force fresh installation of specified platforms | 
| 76458 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 171 | -n dry run: try download without installation | 
| 76468 | 172 | -p PLATFORMS comma-separated list of platform specifications, | 
| 173 | as family or formal name (default: """ + quote(default_platform) + """) | |
| 76458 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 174 | -v verbose | 
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 175 | |
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 176 | Download the Dotnet / Fsharp platform and configure it as Isabelle component. | 
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 177 | |
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 178 | See also: | 
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 179 | https://fsharp.org | 
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 180 | https://learn.microsoft.com/en-us/dotnet/core/tools/dotnet-install-script | 
| 76464 | 181 | https://learn.microsoft.com/en-us/dotnet/core/tools/telemetry | 
| 76458 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 182 | """, | 
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 183 | "D:" -> (arg => target_dir = Path.explode(arg)), | 
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 184 | "I:" -> (arg => install_url = arg), | 
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 185 | "V:" -> (arg => version = arg), | 
| 76467 | 186 | "f" -> (_ => force = true), | 
| 76458 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 187 | "n" -> (_ => dry_run = true), | 
| 77218 | 188 |           "p:" -> (arg => platforms = space_explode(',', arg).map(check_platform_spec)),
 | 
| 76458 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 189 | "v" -> (_ => verbose = true)) | 
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 190 | |
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 191 | val more_args = getopts(args) | 
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 192 | if (more_args.nonEmpty) getopts.usage() | 
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 193 | |
| 77510 
f5d6cd98b16a
clarified signature: manage "verbose" flag via "progress";
 wenzelm parents: 
77369diff
changeset | 194 | val progress = new Console_Progress(verbose = verbose) | 
| 76458 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 195 | |
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 196 |         for (platform <- platforms) {
 | 
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 197 | dotnet_setup(platform_spec = platform, target_dir = target_dir, install_url = install_url, | 
| 77510 
f5d6cd98b16a
clarified signature: manage "verbose" flag via "progress";
 wenzelm parents: 
77369diff
changeset | 198 | version = version, force = force, dry_run = dry_run, progress = progress) | 
| 76458 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 199 | } | 
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 200 | }) | 
| 
cc6fd1695294
support for Dotnet / Fsharp platform, via dynamically installed Isabelle component;
 wenzelm parents: diff
changeset | 201 | } |