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