| author | wenzelm | 
| Mon, 23 Jan 2023 11:12:02 +0100 | |
| changeset 77050 | 92509e4274eb | 
| parent 77044 | a4380a2d6d2c | 
| child 77055 | f56800b8b085 | 
| permissions | -rw-r--r-- | 
| 64188 | 1  | 
/* Title: Pure/Admin/other_isabelle.scala  | 
2  | 
Author: Makarius  | 
|
3  | 
||
4  | 
Manage other Isabelle distributions.  | 
|
5  | 
*/  | 
|
6  | 
||
7  | 
package isabelle  | 
|
8  | 
||
9  | 
||
| 75393 | 10  | 
object Other_Isabelle {
 | 
| 77050 | 11  | 
def apply(  | 
12  | 
isabelle_home: Path,  | 
|
13  | 
isabelle_identifier: String = "",  | 
|
14  | 
user_home: Path = Path.USER_HOME,  | 
|
15  | 
progress: Progress = new Progress  | 
|
16  | 
  ): Other_Isabelle = {
 | 
|
| 
69408
 
fb26935838c7
more robust, notably for macos /var vs. /private/var;
 
wenzelm 
parents: 
69404 
diff
changeset
 | 
17  | 
new Other_Isabelle(isabelle_home.canonical, isabelle_identifier, user_home, progress)  | 
| 77050 | 18  | 
}  | 
| 67045 | 19  | 
}  | 
20  | 
||
| 77041 | 21  | 
final class Other_Isabelle private(  | 
| 67045 | 22  | 
val isabelle_home: Path,  | 
23  | 
val isabelle_identifier: String,  | 
|
| 67046 | 24  | 
user_home: Path,  | 
| 75393 | 25  | 
progress: Progress  | 
26  | 
) {
 | 
|
| 64188 | 27  | 
other_isabelle =>  | 
28  | 
||
| 
69404
 
de88761edbe2
clarified absolute isabelle_home and (implicitly) isabelle_home_user;
 
wenzelm 
parents: 
69401 
diff
changeset
 | 
29  | 
override def toString: String = isabelle_home.toString  | 
| 67046 | 30  | 
|
| 77042 | 31  | 
  if (proper_string(System.getenv("ISABELLE_SETTINGS_PRESENT")).isDefined) {
 | 
| 67046 | 32  | 
    error("Cannot initialize with enclosing ISABELLE_SETTINGS_PRESENT")
 | 
| 77042 | 33  | 
}  | 
| 67046 | 34  | 
|
| 64188 | 35  | 
|
36  | 
/* static system */  | 
|
37  | 
||
| 65930 | 38  | 
def bash(  | 
| 77042 | 39  | 
script: String,  | 
40  | 
redirect: Boolean = false,  | 
|
41  | 
echo: Boolean = false,  | 
|
42  | 
strict: Boolean = true  | 
|
43  | 
  ): Process_Result = {
 | 
|
| 67046 | 44  | 
progress.bash(  | 
45  | 
"export USER_HOME=" + File.bash_path(user_home) + "\n" +  | 
|
46  | 
Isabelle_System.export_isabelle_identifier(isabelle_identifier) + script,  | 
|
| 65930 | 47  | 
env = null, cwd = isabelle_home.file, redirect = redirect, echo = echo, strict = strict)  | 
| 77042 | 48  | 
}  | 
| 64188 | 49  | 
|
| 77042 | 50  | 
  def resolve_components(echo: Boolean): Unit = {
 | 
| 77044 | 51  | 
other_isabelle.bash(  | 
52  | 
      "bin/isabelle env ISABELLE_TOOLS=" + Bash.string(Isabelle_System.getenv("ISABELLE_TOOLS")) +
 | 
|
| 
73243
 
7f55a3e28c88
more robust: resolve historic components via current tool to access current server;
 
wenzelm 
parents: 
73240 
diff
changeset
 | 
53  | 
" isabelle components -a", redirect = true, echo = echo).check  | 
| 77042 | 54  | 
}  | 
| 64188 | 55  | 
|
| 69166 | 56  | 
def getenv(name: String): String =  | 
| 77044 | 57  | 
    other_isabelle.bash("bin/isabelle getenv -b " + Bash.string(name)).check.out
 | 
| 69166 | 58  | 
|
59  | 
  val isabelle_home_user: Path = Path.explode(getenv("ISABELLE_HOME_USER"))
 | 
|
| 64188 | 60  | 
|
| 68754 | 61  | 
  val etc: Path = isabelle_home_user + Path.explode("etc")
 | 
62  | 
  val etc_settings: Path = etc + Path.explode("settings")
 | 
|
63  | 
  val etc_preferences: Path = etc + Path.explode("preferences")
 | 
|
| 64188 | 64  | 
|
| 
73625
 
f8f065e20837
misc tuning and clarification: more explicit types Release_Context, Release_Archive;
 
wenzelm 
parents: 
73522 
diff
changeset
 | 
65  | 
|
| 69388 | 66  | 
/* components */  | 
67  | 
||
68  | 
def init_components(  | 
|
| 
73240
 
3e963d68d394
more robust ISABELLE_COMPONENT_REPOSITORY: use current value of managing process to avoid its fluctuation in ancient history;
 
wenzelm 
parents: 
72375 
diff
changeset
 | 
69  | 
component_repository: String = Components.default_component_repository,  | 
| 69434 | 70  | 
components_base: Path = Components.default_components_base,  | 
| 69396 | 71  | 
catalogs: List[String] = Nil,  | 
| 75393 | 72  | 
components: List[String] = Nil  | 
73  | 
  ): List[String] = {
 | 
|
| 
69404
 
de88761edbe2
clarified absolute isabelle_home and (implicitly) isabelle_home_user;
 
wenzelm 
parents: 
69401 
diff
changeset
 | 
74  | 
val dir = Components.admin(isabelle_home)  | 
| 
73240
 
3e963d68d394
more robust ISABELLE_COMPONENT_REPOSITORY: use current value of managing process to avoid its fluctuation in ancient history;
 
wenzelm 
parents: 
72375 
diff
changeset
 | 
75  | 
|
| 
 
3e963d68d394
more robust ISABELLE_COMPONENT_REPOSITORY: use current value of managing process to avoid its fluctuation in ancient history;
 
wenzelm 
parents: 
72375 
diff
changeset
 | 
76  | 
    ("ISABELLE_COMPONENT_REPOSITORY=" + Bash.string(component_repository)) ::
 | 
| 69396 | 77  | 
catalogs.map(name =>  | 
| 69434 | 78  | 
"init_components " + File.bash_path(components_base) + " " +  | 
79  | 
File.bash_path(dir + Path.basic(name))) :::  | 
|
| 69396 | 80  | 
components.map(name =>  | 
| 69434 | 81  | 
"init_component " + File.bash_path(components_base + Path.basic(name)))  | 
| 69388 | 82  | 
}  | 
83  | 
||
84  | 
||
| 
69168
 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 
wenzelm 
parents: 
69166 
diff
changeset
 | 
85  | 
/* settings */  | 
| 
 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 
wenzelm 
parents: 
69166 
diff
changeset
 | 
86  | 
|
| 
 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 
wenzelm 
parents: 
69166 
diff
changeset
 | 
87  | 
def clean_settings(): Boolean =  | 
| 
 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 
wenzelm 
parents: 
69166 
diff
changeset
 | 
88  | 
if (!etc_settings.is_file) true  | 
| 
 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 
wenzelm 
parents: 
69166 
diff
changeset
 | 
89  | 
    else if (File.read(etc_settings).startsWith("# generated by Isabelle")) {
 | 
| 77042 | 90  | 
etc_settings.file.delete  | 
91  | 
true  | 
|
| 
69168
 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 
wenzelm 
parents: 
69166 
diff
changeset
 | 
92  | 
}  | 
| 
 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 
wenzelm 
parents: 
69166 
diff
changeset
 | 
93  | 
else false  | 
| 64188 | 94  | 
|
| 75393 | 95  | 
  def init_settings(settings: List[String]): Unit = {
 | 
| 77042 | 96  | 
    if (!clean_settings()) {
 | 
| 64188 | 97  | 
      error("Cannot proceed with existing user settings file: " + etc_settings)
 | 
| 77042 | 98  | 
}  | 
| 64188 | 99  | 
|
| 72375 | 100  | 
Isabelle_System.make_directory(etc_settings.dir)  | 
| 64188 | 101  | 
File.write(etc_settings,  | 
102  | 
"# generated by Isabelle " + Date.now() + "\n" +  | 
|
| 69388 | 103  | 
"#-*- shell-script -*- :mode=shellscript:\n" +  | 
104  | 
      settings.mkString("\n", "\n", "\n"))
 | 
|
| 64188 | 105  | 
}  | 
| 
69168
 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 
wenzelm 
parents: 
69166 
diff
changeset
 | 
106  | 
|
| 
 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 
wenzelm 
parents: 
69166 
diff
changeset
 | 
107  | 
|
| 
 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 
wenzelm 
parents: 
69166 
diff
changeset
 | 
108  | 
/* cleanup */  | 
| 
 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 
wenzelm 
parents: 
69166 
diff
changeset
 | 
109  | 
|
| 75393 | 110  | 
  def cleanup(): Unit = {
 | 
| 
69168
 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 
wenzelm 
parents: 
69166 
diff
changeset
 | 
111  | 
clean_settings()  | 
| 
 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 
wenzelm 
parents: 
69166 
diff
changeset
 | 
112  | 
etc.file.delete  | 
| 
 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 
wenzelm 
parents: 
69166 
diff
changeset
 | 
113  | 
isabelle_home_user.file.delete  | 
| 
 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 
wenzelm 
parents: 
69166 
diff
changeset
 | 
114  | 
}  | 
| 64188 | 115  | 
}  |