| author | desharna | 
| Wed, 20 Sep 2023 17:40:09 +0200 | |
| changeset 78676 | a98e0a816d28 | 
| 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: 
76464 
diff
changeset
 | 
84  | 
|
| 76548 | 85  | 
        component_dir.write_settings("""
 | 
| 
76466
 
730dadb82936
clarified component settings: always update existing version;
 
wenzelm 
parents: 
76464 
diff
changeset
 | 
86  | 
ISABELLE_DOTNET_ROOT="$COMPONENT"  | 
| 
 
730dadb82936
clarified component settings: always update existing version;
 
wenzelm 
parents: 
76464 
diff
changeset
 | 
87  | 
|
| 
 
730dadb82936
clarified component settings: always update existing version;
 
wenzelm 
parents: 
76464 
diff
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: 
76464 
diff
changeset
 | 
89  | 
ISABELLE_DOTNET="$ISABELLE_DOTNET_ROOT/$ISABELLE_WINDOWS_PLATFORM64/dotnet.exe"  | 
| 
 
730dadb82936
clarified component settings: always update existing version;
 
wenzelm 
parents: 
76464 
diff
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: 
76464 
diff
changeset
 | 
91  | 
ISABELLE_DOTNET="$ISABELLE_DOTNET_ROOT/$ISABELLE_APPLE_PLATFORM64/dotnet"  | 
| 
 
730dadb82936
clarified component settings: always update existing version;
 
wenzelm 
parents: 
76464 
diff
changeset
 | 
92  | 
elif [ -d "$ISABELLE_DOTNET_ROOT/$ISABELLE_PLATFORM64" ]; then  | 
| 
 
730dadb82936
clarified component settings: always update existing version;
 
wenzelm 
parents: 
76464 
diff
changeset
 | 
93  | 
ISABELLE_DOTNET="$ISABELLE_DOTNET_ROOT/$ISABELLE_PLATFORM64/dotnet"  | 
| 
 
730dadb82936
clarified component settings: always update existing version;
 
wenzelm 
parents: 
76464 
diff
changeset
 | 
94  | 
fi  | 
| 
 
730dadb82936
clarified component settings: always update existing version;
 
wenzelm 
parents: 
76464 
diff
changeset
 | 
95  | 
|
| 
 
730dadb82936
clarified component settings: always update existing version;
 
wenzelm 
parents: 
76464 
diff
changeset
 | 
96  | 
DOTNET_CLI_TELEMETRY_OPTOUT="true"  | 
| 
76469
 
98cfe33db5a7
further attempts to confine dotnet to $ISABELLE_HOME_USER;
 
wenzelm 
parents: 
76468 
diff
changeset
 | 
97  | 
DOTNET_CLI_HOME="$(platform_path "$ISABELLE_HOME_USER/dotnet")"  | 
| 
76466
 
730dadb82936
clarified component settings: always update existing version;
 
wenzelm 
parents: 
76464 
diff
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: 
76464 
diff
changeset
 | 
107  | 
        for (old <- proper_string(Isabelle_System.getenv("ISABELLE_DOTNET_ROOT"))) {
 | 
| 
 
730dadb82936
clarified component settings: always update existing version;
 
wenzelm 
parents: 
76464 
diff
changeset
 | 
108  | 
Components.update_components(false, Path.explode(old))  | 
| 
 
730dadb82936
clarified component settings: always update existing version;
 
wenzelm 
parents: 
76464 
diff
changeset
 | 
109  | 
}  | 
| 
 
730dadb82936
clarified component settings: always update existing version;
 
wenzelm 
parents: 
76464 
diff
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: 
77369 
diff
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: 
77369 
diff
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: 
77369 
diff
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  | 
}  |