| author | haftmann | 
| Thu, 08 Oct 2020 07:30:02 +0000 | |
| changeset 72397 | 48013583e8e6 | 
| parent 72387 | 04be6716cac6 | 
| child 73060 | 4b620e1cb1e9 | 
| permissions | -rw-r--r-- | 
| 64202 | 1 | /* Title: Pure/Admin/build_release.scala | 
| 2 | Author: Makarius | |
| 3 | ||
| 4 | Build full Isabelle distribution from repository. | |
| 5 | */ | |
| 6 | ||
| 7 | package isabelle | |
| 8 | ||
| 9 | ||
| 10 | object Build_Release | |
| 11 | {
 | |
| 69174 | 12 | /** release info **/ | 
| 13 | ||
| 14 | sealed case class Bundle_Info( | |
| 69410 | 15 | platform: Platform.Family.Value, | 
| 69174 | 16 | platform_description: String, | 
| 69432 
d072f3287ffa
discontinued somewhat point dmg: plain .tar.gz is smaller and more convenient to install;
 wenzelm parents: 
69425diff
changeset | 17 | name: String) | 
| 69174 | 18 |   {
 | 
| 69432 
d072f3287ffa
discontinued somewhat point dmg: plain .tar.gz is smaller and more convenient to install;
 wenzelm parents: 
69425diff
changeset | 19 | def path: Path = Path.explode(name) | 
| 69174 | 20 | } | 
| 21 | ||
| 22 | class Release private[Build_Release]( | |
| 69401 
7a1b7b737c02
eliminated old makedist_bundle and remote_dmg: build_release does everything in Scala;
 wenzelm parents: 
69400diff
changeset | 23 | progress: Progress, | 
| 69174 | 24 | val date: Date, | 
| 25 | val dist_name: String, | |
| 26 | val dist_dir: Path, | |
| 27 | val dist_version: String, | |
| 28 | val ident: String) | |
| 29 |   {
 | |
| 30 | val isabelle_dir: Path = dist_dir + Path.explode(dist_name) | |
| 31 | val isabelle_archive: Path = dist_dir + Path.explode(dist_name + ".tar.gz") | |
| 32 | val isabelle_library_archive: Path = dist_dir + Path.explode(dist_name + "_library.tar.gz") | |
| 33 | ||
| 69401 
7a1b7b737c02
eliminated old makedist_bundle and remote_dmg: build_release does everything in Scala;
 wenzelm parents: 
69400diff
changeset | 34 | def other_isabelle(dir: Path): Other_Isabelle = | 
| 
7a1b7b737c02
eliminated old makedist_bundle and remote_dmg: build_release does everything in Scala;
 wenzelm parents: 
69400diff
changeset | 35 | Other_Isabelle(dir + Path.explode(dist_name), | 
| 
7a1b7b737c02
eliminated old makedist_bundle and remote_dmg: build_release does everything in Scala;
 wenzelm parents: 
69400diff
changeset | 36 | isabelle_identifier = dist_name + "-build", | 
| 
7a1b7b737c02
eliminated old makedist_bundle and remote_dmg: build_release does everything in Scala;
 wenzelm parents: 
69400diff
changeset | 37 | progress = progress) | 
| 69174 | 38 | |
| 69410 | 39 | def bundle_info(platform: Platform.Family.Value): Bundle_Info = | 
| 40 |       platform match {
 | |
| 70246 
7c55ea37fbf7
back to gz for linux (and macos) -- xz is too slow and cumbersome;
 wenzelm parents: 
70244diff
changeset | 41 | case Platform.Family.linux => Bundle_Info(platform, "Linux", dist_name + "_linux.tar.gz") | 
| 
7c55ea37fbf7
back to gz for linux (and macos) -- xz is too slow and cumbersome;
 wenzelm parents: 
70244diff
changeset | 42 | case Platform.Family.macos => Bundle_Info(platform, "macOS", dist_name + "_macos.tar.gz") | 
| 69432 
d072f3287ffa
discontinued somewhat point dmg: plain .tar.gz is smaller and more convenient to install;
 wenzelm parents: 
69425diff
changeset | 43 | case Platform.Family.windows => Bundle_Info(platform, "Windows", dist_name + ".exe") | 
| 69177 | 44 | } | 
| 69174 | 45 | } | 
| 46 | ||
| 47 | ||
| 48 | ||
| 69168 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 49 | /** generated content **/ | 
| 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 50 | |
| 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 51 | /* patch release */ | 
| 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 52 | |
| 72378 | 53 |   private val getsettings_path = Path.explode("lib/scripts/getsettings")
 | 
| 69171 
710845a85944
more robust release.read_ident: eliminated odd state files ISABELLE_IDENT, ISABELLE_DIST;
 wenzelm parents: 
69170diff
changeset | 54 | |
| 
710845a85944
more robust release.read_ident: eliminated odd state files ISABELLE_IDENT, ISABELLE_DIST;
 wenzelm parents: 
69170diff
changeset | 55 | private val ISABELLE_ID = """ISABELLE_ID="(.+)"""".r | 
| 
710845a85944
more robust release.read_ident: eliminated odd state files ISABELLE_IDENT, ISABELLE_DIST;
 wenzelm parents: 
69170diff
changeset | 56 | |
| 69174 | 57 | def patch_release(release: Release, is_official: Boolean) | 
| 69168 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 58 |   {
 | 
| 69174 | 59 | val dir = release.isabelle_dir | 
| 60 | ||
| 69168 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 61 |     for (name <- List("src/Pure/System/distribution.ML", "src/Pure/System/distribution.scala"))
 | 
| 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 62 |     {
 | 
| 72378 | 63 | File.change(dir + Path.explode(name), | 
| 72387 | 64 |         _.replace("val is_identified = false", "val is_identified = true")
 | 
| 65 |          .replace("val is_official = false", "val is_official = " + is_official))
 | |
| 69168 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 66 | } | 
| 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 67 | |
| 72378 | 68 | File.change(dir + getsettings_path, | 
| 72387 | 69 |       _.replace("ISABELLE_ID=\"\"", "ISABELLE_ID=" + quote(release.ident))
 | 
| 70 |        .replace("ISABELLE_IDENTIFIER=\"\"", "ISABELLE_IDENTIFIER=" + quote(release.dist_name)))
 | |
| 69168 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 71 | |
| 72378 | 72 |     File.change(dir + Path.explode("lib/html/library_index_header.template"),
 | 
| 72387 | 73 |       _.replace("{ISABELLE}", release.dist_name))
 | 
| 69168 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 74 | |
| 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 75 |     for {
 | 
| 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 76 | name <- | 
| 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 77 | List( | 
| 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 78 | "src/Pure/System/distribution.ML", | 
| 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 79 | "src/Pure/System/distribution.scala", | 
| 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 80 | "lib/Tools/version") } | 
| 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 81 |     {
 | 
| 72387 | 82 |       File.change(dir + Path.explode(name), _.replace("repository version", release.dist_version))
 | 
| 69168 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 83 | } | 
| 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 84 | |
| 72378 | 85 |     File.change(dir + Path.explode("README"),
 | 
| 72387 | 86 |       _.replace("some repository version of Isabelle", release.dist_version))
 | 
| 69168 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 87 | } | 
| 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 88 | |
| 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 89 | |
| 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 90 | /* ANNOUNCE */ | 
| 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 91 | |
| 69174 | 92 | def make_announce(release: Release) | 
| 69168 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 93 |   {
 | 
| 69174 | 94 |     File.write(release.isabelle_dir + Path.explode("ANNOUNCE"),
 | 
| 69168 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 95 | """ | 
| 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 96 | IMPORTANT NOTE | 
| 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 97 | ============== | 
| 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 98 | |
| 69174 | 99 | This is a snapshot of Isabelle/""" + release.ident + """ from the repository. | 
| 69168 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 100 | |
| 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 101 | """) | 
| 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 102 | } | 
| 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 103 | |
| 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 104 | |
| 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 105 | /* NEWS */ | 
| 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 106 | |
| 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 107 | def make_news(other_isabelle: Other_Isabelle, dist_version: String) | 
| 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 108 |   {
 | 
| 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 109 |     val target = other_isabelle.isabelle_home + Path.explode("doc")
 | 
| 72376 | 110 |     val target_fonts = Isabelle_System.make_directory(target + Path.explode("fonts"))
 | 
| 69360 | 111 | other_isabelle.copy_fonts(target_fonts) | 
| 69168 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 112 | |
| 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 113 | HTML.write_document(target, "NEWS.html", | 
| 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 114 |       List(HTML.title("NEWS (" + dist_version + ")")),
 | 
| 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 115 | List( | 
| 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 116 |         HTML.chapter("NEWS"),
 | 
| 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 117 | HTML.source( | 
| 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 118 |           Symbol.decode(File.read(other_isabelle.isabelle_home + Path.explode("NEWS"))))))
 | 
| 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 119 | } | 
| 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 120 | |
| 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 121 | |
| 69395 
d1c4a1dee9e7
more explicit support for Isabelle system components;
 wenzelm parents: 
69392diff
changeset | 122 | /* bundled components */ | 
| 
d1c4a1dee9e7
more explicit support for Isabelle system components;
 wenzelm parents: 
69392diff
changeset | 123 | |
| 69410 | 124 | class Bundled(platform: Option[Platform.Family.Value] = None) | 
| 69395 
d1c4a1dee9e7
more explicit support for Isabelle system components;
 wenzelm parents: 
69392diff
changeset | 125 |   {
 | 
| 
d1c4a1dee9e7
more explicit support for Isabelle system components;
 wenzelm parents: 
69392diff
changeset | 126 | def detect(s: String): Boolean = | 
| 
d1c4a1dee9e7
more explicit support for Isabelle system components;
 wenzelm parents: 
69392diff
changeset | 127 |       s.startsWith("#bundled") && !s.startsWith("#bundled ")
 | 
| 
d1c4a1dee9e7
more explicit support for Isabelle system components;
 wenzelm parents: 
69392diff
changeset | 128 | |
| 
d1c4a1dee9e7
more explicit support for Isabelle system components;
 wenzelm parents: 
69392diff
changeset | 129 | def apply(name: String): String = | 
| 69410 | 130 |       "#bundled" + (platform match { case None => "" case Some(plat) => "-" + plat }) + ":" + name
 | 
| 69391 
a3c776b9d3dd
manage components similar to makedist_bundle (still inactive);
 wenzelm parents: 
69390diff
changeset | 131 | |
| 69395 
d1c4a1dee9e7
more explicit support for Isabelle system components;
 wenzelm parents: 
69392diff
changeset | 132 |     private val Pattern1 = ("""^#bundled:(.*)$""").r
 | 
| 
d1c4a1dee9e7
more explicit support for Isabelle system components;
 wenzelm parents: 
69392diff
changeset | 133 |     private val Pattern2 = ("""^#bundled-(.*):(.*)$""").r
 | 
| 
d1c4a1dee9e7
more explicit support for Isabelle system components;
 wenzelm parents: 
69392diff
changeset | 134 | |
| 
d1c4a1dee9e7
more explicit support for Isabelle system components;
 wenzelm parents: 
69392diff
changeset | 135 | def unapply(s: String): Option[String] = | 
| 
d1c4a1dee9e7
more explicit support for Isabelle system components;
 wenzelm parents: 
69392diff
changeset | 136 |       s match {
 | 
| 
d1c4a1dee9e7
more explicit support for Isabelle system components;
 wenzelm parents: 
69392diff
changeset | 137 | case Pattern1(name) => Some(name) | 
| 69410 | 138 | case Pattern2(Platform.Family(plat), name) if platform == Some(plat) => Some(name) | 
| 69395 
d1c4a1dee9e7
more explicit support for Isabelle system components;
 wenzelm parents: 
69392diff
changeset | 139 | case _ => None | 
| 
d1c4a1dee9e7
more explicit support for Isabelle system components;
 wenzelm parents: 
69392diff
changeset | 140 | } | 
| 
d1c4a1dee9e7
more explicit support for Isabelle system components;
 wenzelm parents: 
69392diff
changeset | 141 | } | 
| 69391 
a3c776b9d3dd
manage components similar to makedist_bundle (still inactive);
 wenzelm parents: 
69390diff
changeset | 142 | |
| 
a3c776b9d3dd
manage components similar to makedist_bundle (still inactive);
 wenzelm parents: 
69390diff
changeset | 143 | def record_bundled_components(dir: Path) | 
| 
a3c776b9d3dd
manage components similar to makedist_bundle (still inactive);
 wenzelm parents: 
69390diff
changeset | 144 |   {
 | 
| 
a3c776b9d3dd
manage components similar to makedist_bundle (still inactive);
 wenzelm parents: 
69390diff
changeset | 145 | val catalogs = | 
| 69395 
d1c4a1dee9e7
more explicit support for Isabelle system components;
 wenzelm parents: 
69392diff
changeset | 146 |       List("main", "bundled").map((_, new Bundled())) :::
 | 
| 
d1c4a1dee9e7
more explicit support for Isabelle system components;
 wenzelm parents: 
69392diff
changeset | 147 | default_platform_families.flatMap(platform => | 
| 69410 | 148 | List(platform.toString, "bundled-" + platform.toString). | 
| 149 | map((_, new Bundled(platform = Some(platform))))) | |
| 69391 
a3c776b9d3dd
manage components similar to makedist_bundle (still inactive);
 wenzelm parents: 
69390diff
changeset | 150 | |
| 69395 
d1c4a1dee9e7
more explicit support for Isabelle system components;
 wenzelm parents: 
69392diff
changeset | 151 | File.append(Components.components(dir), | 
| 69391 
a3c776b9d3dd
manage components similar to makedist_bundle (still inactive);
 wenzelm parents: 
69390diff
changeset | 152 |       terminate_lines("#bundled components" ::
 | 
| 
a3c776b9d3dd
manage components similar to makedist_bundle (still inactive);
 wenzelm parents: 
69390diff
changeset | 153 |         (for {
 | 
| 69395 
d1c4a1dee9e7
more explicit support for Isabelle system components;
 wenzelm parents: 
69392diff
changeset | 154 | (catalog, bundled) <- catalogs.iterator | 
| 71601 | 155 | path = Components.admin(dir) + Path.basic(catalog) | 
| 69391 
a3c776b9d3dd
manage components similar to makedist_bundle (still inactive);
 wenzelm parents: 
69390diff
changeset | 156 | if path.is_file | 
| 
a3c776b9d3dd
manage components similar to makedist_bundle (still inactive);
 wenzelm parents: 
69390diff
changeset | 157 | line <- split_lines(File.read(path)) | 
| 
a3c776b9d3dd
manage components similar to makedist_bundle (still inactive);
 wenzelm parents: 
69390diff
changeset | 158 |           if line.nonEmpty && !line.startsWith("#") && !line.startsWith("jedit_build")
 | 
| 69395 
d1c4a1dee9e7
more explicit support for Isabelle system components;
 wenzelm parents: 
69392diff
changeset | 159 | } yield bundled(line)).toList)) | 
| 
d1c4a1dee9e7
more explicit support for Isabelle system components;
 wenzelm parents: 
69392diff
changeset | 160 | } | 
| 
d1c4a1dee9e7
more explicit support for Isabelle system components;
 wenzelm parents: 
69392diff
changeset | 161 | |
| 69410 | 162 | def get_bundled_components(dir: Path, platform: Platform.Family.Value): (List[String], String) = | 
| 69395 
d1c4a1dee9e7
more explicit support for Isabelle system components;
 wenzelm parents: 
69392diff
changeset | 163 |   {
 | 
| 69410 | 164 | val Bundled = new Bundled(platform = Some(platform)) | 
| 69401 
7a1b7b737c02
eliminated old makedist_bundle and remote_dmg: build_release does everything in Scala;
 wenzelm parents: 
69400diff
changeset | 165 | val components = | 
| 
7a1b7b737c02
eliminated old makedist_bundle and remote_dmg: build_release does everything in Scala;
 wenzelm parents: 
69400diff
changeset | 166 |       for {
 | 
| 
7a1b7b737c02
eliminated old makedist_bundle and remote_dmg: build_release does everything in Scala;
 wenzelm parents: 
69400diff
changeset | 167 | Bundled(name) <- Components.read_components(dir) | 
| 
7a1b7b737c02
eliminated old makedist_bundle and remote_dmg: build_release does everything in Scala;
 wenzelm parents: 
69400diff
changeset | 168 |         if !name.startsWith("jedit_build")
 | 
| 
7a1b7b737c02
eliminated old makedist_bundle and remote_dmg: build_release does everything in Scala;
 wenzelm parents: 
69400diff
changeset | 169 | } yield name | 
| 
7a1b7b737c02
eliminated old makedist_bundle and remote_dmg: build_release does everything in Scala;
 wenzelm parents: 
69400diff
changeset | 170 | val jdk_component = | 
| 
7a1b7b737c02
eliminated old makedist_bundle and remote_dmg: build_release does everything in Scala;
 wenzelm parents: 
69400diff
changeset | 171 |       components.find(_.startsWith("jdk")) getOrElse error("Missing jdk component")
 | 
| 
7a1b7b737c02
eliminated old makedist_bundle and remote_dmg: build_release does everything in Scala;
 wenzelm parents: 
69400diff
changeset | 172 | (components, jdk_component) | 
| 69391 
a3c776b9d3dd
manage components similar to makedist_bundle (still inactive);
 wenzelm parents: 
69390diff
changeset | 173 | } | 
| 
a3c776b9d3dd
manage components similar to makedist_bundle (still inactive);
 wenzelm parents: 
69390diff
changeset | 174 | |
| 69413 | 175 | def activate_components(dir: Path, platform: Platform.Family.Value, more_names: List[String]) | 
| 69391 
a3c776b9d3dd
manage components similar to makedist_bundle (still inactive);
 wenzelm parents: 
69390diff
changeset | 176 |   {
 | 
| 69413 | 177 | def contrib_name(name: String): String = | 
| 178 | Components.contrib(name = name).implode | |
| 179 | ||
| 69410 | 180 | val Bundled = new Bundled(platform = Some(platform)) | 
| 69395 
d1c4a1dee9e7
more explicit support for Isabelle system components;
 wenzelm parents: 
69392diff
changeset | 181 | Components.write_components(dir, | 
| 
d1c4a1dee9e7
more explicit support for Isabelle system components;
 wenzelm parents: 
69392diff
changeset | 182 | Components.read_components(dir).flatMap(line => | 
| 69391 
a3c776b9d3dd
manage components similar to makedist_bundle (still inactive);
 wenzelm parents: 
69390diff
changeset | 183 |         line match {
 | 
| 69395 
d1c4a1dee9e7
more explicit support for Isabelle system components;
 wenzelm parents: 
69392diff
changeset | 184 | case Bundled(name) => | 
| 69413 | 185 | if (Components.check_dir(Components.contrib(dir, name))) Some(contrib_name(name)) | 
| 69395 
d1c4a1dee9e7
more explicit support for Isabelle system components;
 wenzelm parents: 
69392diff
changeset | 186 | else None | 
| 
d1c4a1dee9e7
more explicit support for Isabelle system components;
 wenzelm parents: 
69392diff
changeset | 187 | case _ => if (Bundled.detect(line)) None else Some(line) | 
| 71601 | 188 | }) ::: more_names.map(contrib_name)) | 
| 69391 
a3c776b9d3dd
manage components similar to makedist_bundle (still inactive);
 wenzelm parents: 
69390diff
changeset | 189 | } | 
| 69168 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 190 | |
| 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 191 | def make_contrib(dir: Path) | 
| 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 192 |   {
 | 
| 72375 | 193 | Isabelle_System.make_directory(Components.contrib(dir)) | 
| 69395 
d1c4a1dee9e7
more explicit support for Isabelle system components;
 wenzelm parents: 
69392diff
changeset | 194 | File.write(Components.contrib(dir, "README"), | 
| 69168 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 195 | """This directory contains add-on components that contribute to the main | 
| 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 196 | Isabelle distribution. Separate licensing conditions apply, see each | 
| 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 197 | directory individually. | 
| 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 198 | """) | 
| 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 199 | } | 
| 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 200 | |
| 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 201 | |
| 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 202 | |
| 70099 
9b9c1192f972
support for platform-specific builds on remote server;
 wenzelm parents: 
70098diff
changeset | 203 | /** build release **/ | 
| 69168 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 204 | |
| 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 205 | private def execute(dir: Path, script: String): Unit = | 
| 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 206 | Isabelle_System.bash(script, cwd = dir.file).check | 
| 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 207 | |
| 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 208 | private def execute_tar(dir: Path, args: String): Unit = | 
| 69425 | 209 | Isabelle_System.gnutar(args, dir = dir).check | 
| 69170 | 210 | |
| 70099 
9b9c1192f972
support for platform-specific builds on remote server;
 wenzelm parents: 
70098diff
changeset | 211 | |
| 
9b9c1192f972
support for platform-specific builds on remote server;
 wenzelm parents: 
70098diff
changeset | 212 | /* build heaps on remote server */ | 
| 
9b9c1192f972
support for platform-specific builds on remote server;
 wenzelm parents: 
70098diff
changeset | 213 | |
| 70101 | 214 | private def remote_build_heaps( | 
| 215 | options: Options, | |
| 216 | platform: Platform.Family.Value, | |
| 217 | build_sessions: List[String], | |
| 218 | local_dir: Path) | |
| 70099 
9b9c1192f972
support for platform-specific builds on remote server;
 wenzelm parents: 
70098diff
changeset | 219 |   {
 | 
| 72341 | 220 | val server_option = "build_host_" + platform.toString | 
| 70099 
9b9c1192f972
support for platform-specific builds on remote server;
 wenzelm parents: 
70098diff
changeset | 221 |     options.string(server_option) match {
 | 
| 
9b9c1192f972
support for platform-specific builds on remote server;
 wenzelm parents: 
70098diff
changeset | 222 | case SSH.Target(user, host) => | 
| 
9b9c1192f972
support for platform-specific builds on remote server;
 wenzelm parents: 
70098diff
changeset | 223 | using(SSH.open_session(options, host = host, user = user))(ssh => | 
| 
9b9c1192f972
support for platform-specific builds on remote server;
 wenzelm parents: 
70098diff
changeset | 224 |         {
 | 
| 
9b9c1192f972
support for platform-specific builds on remote server;
 wenzelm parents: 
70098diff
changeset | 225 |           Isabelle_System.with_tmp_file("tmp", "tar")(local_tmp_tar =>
 | 
| 
9b9c1192f972
support for platform-specific builds on remote server;
 wenzelm parents: 
70098diff
changeset | 226 |           {
 | 
| 
9b9c1192f972
support for platform-specific builds on remote server;
 wenzelm parents: 
70098diff
changeset | 227 | execute_tar(local_dir, "-cf " + File.bash_path(local_tmp_tar) + " .") | 
| 
9b9c1192f972
support for platform-specific builds on remote server;
 wenzelm parents: 
70098diff
changeset | 228 | ssh.with_tmp_dir(remote_dir => | 
| 
9b9c1192f972
support for platform-specific builds on remote server;
 wenzelm parents: 
70098diff
changeset | 229 |             {
 | 
| 
9b9c1192f972
support for platform-specific builds on remote server;
 wenzelm parents: 
70098diff
changeset | 230 |               val remote_tmp_tar = remote_dir + Path.basic("tmp.tar")
 | 
| 
9b9c1192f972
support for platform-specific builds on remote server;
 wenzelm parents: 
70098diff
changeset | 231 | ssh.write_file(remote_tmp_tar, local_tmp_tar) | 
| 
9b9c1192f972
support for platform-specific builds on remote server;
 wenzelm parents: 
70098diff
changeset | 232 | val remote_commands = | 
| 
9b9c1192f972
support for platform-specific builds on remote server;
 wenzelm parents: 
70098diff
changeset | 233 | List( | 
| 
9b9c1192f972
support for platform-specific builds on remote server;
 wenzelm parents: 
70098diff
changeset | 234 | "cd " + File.bash_path(remote_dir), | 
| 
9b9c1192f972
support for platform-specific builds on remote server;
 wenzelm parents: 
70098diff
changeset | 235 | "tar -xf tmp.tar", | 
| 
9b9c1192f972
support for platform-specific builds on remote server;
 wenzelm parents: 
70098diff
changeset | 236 | "./bin/isabelle build -o system_heaps -b -- " + Bash.strings(build_sessions), | 
| 
9b9c1192f972
support for platform-specific builds on remote server;
 wenzelm parents: 
70098diff
changeset | 237 | "tar -cf tmp.tar heaps") | 
| 
9b9c1192f972
support for platform-specific builds on remote server;
 wenzelm parents: 
70098diff
changeset | 238 |               ssh.execute(remote_commands.mkString(" && ")).check
 | 
| 
9b9c1192f972
support for platform-specific builds on remote server;
 wenzelm parents: 
70098diff
changeset | 239 | ssh.read_file(remote_tmp_tar, local_tmp_tar) | 
| 
9b9c1192f972
support for platform-specific builds on remote server;
 wenzelm parents: 
70098diff
changeset | 240 | }) | 
| 
9b9c1192f972
support for platform-specific builds on remote server;
 wenzelm parents: 
70098diff
changeset | 241 | execute_tar(local_dir, "-xf " + File.bash_path(local_tmp_tar)) | 
| 
9b9c1192f972
support for platform-specific builds on remote server;
 wenzelm parents: 
70098diff
changeset | 242 | }) | 
| 
9b9c1192f972
support for platform-specific builds on remote server;
 wenzelm parents: 
70098diff
changeset | 243 | }) | 
| 
9b9c1192f972
support for platform-specific builds on remote server;
 wenzelm parents: 
70098diff
changeset | 244 |       case s => error("Bad " + server_option + ": " + quote(s))
 | 
| 
9b9c1192f972
support for platform-specific builds on remote server;
 wenzelm parents: 
70098diff
changeset | 245 | } | 
| 
9b9c1192f972
support for platform-specific builds on remote server;
 wenzelm parents: 
70098diff
changeset | 246 | } | 
| 
9b9c1192f972
support for platform-specific builds on remote server;
 wenzelm parents: 
70098diff
changeset | 247 | |
| 
9b9c1192f972
support for platform-specific builds on remote server;
 wenzelm parents: 
70098diff
changeset | 248 | |
| 
9b9c1192f972
support for platform-specific builds on remote server;
 wenzelm parents: 
70098diff
changeset | 249 | /* main */ | 
| 
9b9c1192f972
support for platform-specific builds on remote server;
 wenzelm parents: 
70098diff
changeset | 250 | |
| 69415 | 251 | private val default_platform_families: List[Platform.Family.Value] = | 
| 69410 | 252 | List(Platform.Family.linux, Platform.Family.windows, Platform.Family.macos) | 
| 64204 | 253 | |
| 64202 | 254 | def build_release(base_dir: Path, | 
| 69401 
7a1b7b737c02
eliminated old makedist_bundle and remote_dmg: build_release does everything in Scala;
 wenzelm parents: 
69400diff
changeset | 255 | options: Options, | 
| 69434 | 256 | components_base: Path = Components.default_components_base, | 
| 71726 
a5fda30edae2
clarified signature: more uniform treatment of stopped/interrupted state;
 wenzelm parents: 
71632diff
changeset | 257 | progress: Progress = new Progress, | 
| 64202 | 258 | rev: String = "", | 
| 64405 
81bac77929d9
just one task to identify Isabelle + AFP repository snapshots and build release;
 wenzelm parents: 
64371diff
changeset | 259 | afp_rev: String = "", | 
| 64202 | 260 | official_release: Boolean = false, | 
| 69168 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 261 | proper_release_name: Option[String] = None, | 
| 69410 | 262 | platform_families: List[Platform.Family.Value] = default_platform_families, | 
| 69413 | 263 | more_components: List[Path] = Nil, | 
| 64211 | 264 | website: Option[Path] = None, | 
| 70101 | 265 | build_sessions: List[String] = Nil, | 
| 64202 | 266 | build_library: Boolean = false, | 
| 69432 
d072f3287ffa
discontinued somewhat point dmg: plain .tar.gz is smaller and more convenient to install;
 wenzelm parents: 
69425diff
changeset | 267 | parallel_jobs: Int = 1): Release = | 
| 64202 | 268 |   {
 | 
| 69174 | 269 |     val hg = Mercurial.repository(Path.explode("$ISABELLE_HOME"))
 | 
| 270 | ||
| 69167 | 271 | val release = | 
| 64203 | 272 |     {
 | 
| 69171 
710845a85944
more robust release.read_ident: eliminated odd state files ISABELLE_IDENT, ISABELLE_DIST;
 wenzelm parents: 
69170diff
changeset | 273 | val date = Date.now() | 
| 
710845a85944
more robust release.read_ident: eliminated odd state files ISABELLE_IDENT, ISABELLE_DIST;
 wenzelm parents: 
69170diff
changeset | 274 |       val dist_name = proper_release_name getOrElse ("Isabelle_" + Date.Format.date(date))
 | 
| 
710845a85944
more robust release.read_ident: eliminated odd state files ISABELLE_IDENT, ISABELLE_DIST;
 wenzelm parents: 
69170diff
changeset | 275 |       val dist_dir = (base_dir + Path.explode("dist-" + dist_name)).absolute
 | 
| 69174 | 276 | |
| 69414 
eab0d3108b46
clarified defaults: explicit "rev" takes precedence;
 wenzelm parents: 
69413diff
changeset | 277 | val version = proper_string(rev) orElse proper_release_name getOrElse "tip" | 
| 69174 | 278 | val ident = | 
| 279 |         try { hg.id(version) }
 | |
| 71936 | 280 |         catch { case ERROR(msg) => cat_error("Bad repository version: " + version, msg) }
 | 
| 69174 | 281 | |
| 282 | val dist_version = | |
| 283 |         proper_release_name match {
 | |
| 284 |           case Some(name) => name + ": " + Date.Format("LLLL uuuu")(date)
 | |
| 285 | case None => "Isabelle repository snapshot " + ident + " " + Date.Format.date(date) | |
| 286 | } | |
| 287 | ||
| 69401 
7a1b7b737c02
eliminated old makedist_bundle and remote_dmg: build_release does everything in Scala;
 wenzelm parents: 
69400diff
changeset | 288 | new Release(progress, date, dist_name, dist_dir, dist_version, ident) | 
| 69171 
710845a85944
more robust release.read_ident: eliminated odd state files ISABELLE_IDENT, ISABELLE_DIST;
 wenzelm parents: 
69170diff
changeset | 289 | } | 
| 
710845a85944
more robust release.read_ident: eliminated odd state files ISABELLE_IDENT, ISABELLE_DIST;
 wenzelm parents: 
69170diff
changeset | 290 | |
| 
710845a85944
more robust release.read_ident: eliminated odd state files ISABELLE_IDENT, ISABELLE_DIST;
 wenzelm parents: 
69170diff
changeset | 291 | |
| 
710845a85944
more robust release.read_ident: eliminated odd state files ISABELLE_IDENT, ISABELLE_DIST;
 wenzelm parents: 
69170diff
changeset | 292 | /* make distribution */ | 
| 64202 | 293 | |
| 69171 
710845a85944
more robust release.read_ident: eliminated odd state files ISABELLE_IDENT, ISABELLE_DIST;
 wenzelm parents: 
69170diff
changeset | 294 |     if (release.isabelle_archive.is_file) {
 | 
| 69400 | 295 |       progress.echo_warning("Release archive already exists: " + release.isabelle_archive)
 | 
| 69175 | 296 | |
| 297 | val archive_ident = | |
| 298 |         Isabelle_System.with_tmp_dir("build_release")(tmp_dir =>
 | |
| 299 |           {
 | |
| 72378 | 300 | val getsettings = Path.explode(release.dist_name) + getsettings_path | 
| 69175 | 301 | execute_tar(tmp_dir, "-xzf " + | 
| 302 | File.bash_path(release.isabelle_archive) + " " + File.bash_path(getsettings)) | |
| 303 | split_lines(File.read(tmp_dir + getsettings)) | |
| 304 |               .collectFirst({ case ISABELLE_ID(ident) => ident })
 | |
| 305 |               .getOrElse(error("Failed to read ISABELLE_ID from " + release.isabelle_archive))
 | |
| 306 | }) | |
| 307 | ||
| 308 |       if (release.ident != archive_ident) {
 | |
| 309 |         error("Mismatch of release identification " + release.ident +
 | |
| 310 | " vs. archive " + archive_ident) | |
| 311 | } | |
| 69171 
710845a85944
more robust release.read_ident: eliminated odd state files ISABELLE_IDENT, ISABELLE_DIST;
 wenzelm parents: 
69170diff
changeset | 312 | } | 
| 
710845a85944
more robust release.read_ident: eliminated odd state files ISABELLE_IDENT, ISABELLE_DIST;
 wenzelm parents: 
69170diff
changeset | 313 |     else {
 | 
| 69400 | 314 |       progress.echo_warning("Producing release archive " + release.isabelle_archive + " ...")
 | 
| 69171 
710845a85944
more robust release.read_ident: eliminated odd state files ISABELLE_IDENT, ISABELLE_DIST;
 wenzelm parents: 
69170diff
changeset | 315 | |
| 72375 | 316 | Isabelle_System.make_directory(release.dist_dir) | 
| 64221 | 317 | |
| 69171 
710845a85944
more robust release.read_ident: eliminated odd state files ISABELLE_IDENT, ISABELLE_DIST;
 wenzelm parents: 
69170diff
changeset | 318 | if (release.isabelle_dir.is_dir) | 
| 
710845a85944
more robust release.read_ident: eliminated odd state files ISABELLE_IDENT, ISABELLE_DIST;
 wenzelm parents: 
69170diff
changeset | 319 |         error("Directory " + release.isabelle_dir + " already exists")
 | 
| 
710845a85944
more robust release.read_ident: eliminated odd state files ISABELLE_IDENT, ISABELLE_DIST;
 wenzelm parents: 
69170diff
changeset | 320 | |
| 
710845a85944
more robust release.read_ident: eliminated odd state files ISABELLE_IDENT, ISABELLE_DIST;
 wenzelm parents: 
69170diff
changeset | 321 | |
| 69400 | 322 |       progress.echo_warning("Retrieving Mercurial repository version " + release.ident)
 | 
| 69168 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 323 | |
| 69174 | 324 | hg.archive(release.isabelle_dir.expand.implode, rev = release.ident, options = "--type files") | 
| 69168 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 325 | |
| 69171 
710845a85944
more robust release.read_ident: eliminated odd state files ISABELLE_IDENT, ISABELLE_DIST;
 wenzelm parents: 
69170diff
changeset | 326 |       for (name <- List(".hg_archival.txt", ".hgtags", ".hgignore", "README_REPOSITORY")) {
 | 
| 
710845a85944
more robust release.read_ident: eliminated odd state files ISABELLE_IDENT, ISABELLE_DIST;
 wenzelm parents: 
69170diff
changeset | 327 | (release.isabelle_dir + Path.explode(name)).file.delete | 
| 
710845a85944
more robust release.read_ident: eliminated odd state files ISABELLE_IDENT, ISABELLE_DIST;
 wenzelm parents: 
69170diff
changeset | 328 | } | 
| 69168 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 329 | |
| 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 330 | |
| 69400 | 331 |       progress.echo_warning("Preparing distribution " + quote(release.dist_name))
 | 
| 69168 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 332 | |
| 69174 | 333 | patch_release(release, proper_release_name.isDefined && official_release) | 
| 69168 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 334 | |
| 69174 | 335 | if (proper_release_name.isEmpty) make_announce(release) | 
| 69168 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 336 | |
| 69171 
710845a85944
more robust release.read_ident: eliminated odd state files ISABELLE_IDENT, ISABELLE_DIST;
 wenzelm parents: 
69170diff
changeset | 337 | make_contrib(release.isabelle_dir) | 
| 69168 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 338 | |
| 69171 
710845a85944
more robust release.read_ident: eliminated odd state files ISABELLE_IDENT, ISABELLE_DIST;
 wenzelm parents: 
69170diff
changeset | 339 | execute(release.isabelle_dir, """find . -print | xargs chmod -f u+rw""") | 
| 69168 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 340 | |
| 69401 
7a1b7b737c02
eliminated old makedist_bundle and remote_dmg: build_release does everything in Scala;
 wenzelm parents: 
69400diff
changeset | 341 | record_bundled_components(release.isabelle_dir) | 
| 
7a1b7b737c02
eliminated old makedist_bundle and remote_dmg: build_release does everything in Scala;
 wenzelm parents: 
69400diff
changeset | 342 | |
| 69168 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 343 | |
| 69171 
710845a85944
more robust release.read_ident: eliminated odd state files ISABELLE_IDENT, ISABELLE_DIST;
 wenzelm parents: 
69170diff
changeset | 344 | /* build tools and documentation */ | 
| 69168 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 345 | |
| 69401 
7a1b7b737c02
eliminated old makedist_bundle and remote_dmg: build_release does everything in Scala;
 wenzelm parents: 
69400diff
changeset | 346 | val other_isabelle = release.other_isabelle(release.dist_dir) | 
| 69168 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 347 | |
| 69388 | 348 | other_isabelle.init_settings( | 
| 69434 | 349 |         other_isabelle.init_components(components_base = components_base, catalogs = List("main")))
 | 
| 69171 
710845a85944
more robust release.read_ident: eliminated odd state files ISABELLE_IDENT, ISABELLE_DIST;
 wenzelm parents: 
69170diff
changeset | 350 | other_isabelle.resolve_components(echo = true) | 
| 69168 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 351 | |
| 69171 
710845a85944
more robust release.read_ident: eliminated odd state files ISABELLE_IDENT, ISABELLE_DIST;
 wenzelm parents: 
69170diff
changeset | 352 |       try {
 | 
| 
710845a85944
more robust release.read_ident: eliminated odd state files ISABELLE_IDENT, ISABELLE_DIST;
 wenzelm parents: 
69170diff
changeset | 353 | val export_classpath = | 
| 
710845a85944
more robust release.read_ident: eliminated odd state files ISABELLE_IDENT, ISABELLE_DIST;
 wenzelm parents: 
69170diff
changeset | 354 |           "export CLASSPATH=" + Bash.string(other_isabelle.getenv("ISABELLE_CLASSPATH")) + "\n"
 | 
| 
710845a85944
more robust release.read_ident: eliminated odd state files ISABELLE_IDENT, ISABELLE_DIST;
 wenzelm parents: 
69170diff
changeset | 355 | other_isabelle.bash(export_classpath + "./Admin/build all", echo = true).check | 
| 
710845a85944
more robust release.read_ident: eliminated odd state files ISABELLE_IDENT, ISABELLE_DIST;
 wenzelm parents: 
69170diff
changeset | 356 | other_isabelle.bash(export_classpath + "./bin/isabelle jedit -b", echo = true).check | 
| 
710845a85944
more robust release.read_ident: eliminated odd state files ISABELLE_IDENT, ISABELLE_DIST;
 wenzelm parents: 
69170diff
changeset | 357 | } | 
| 71936 | 358 |       catch { case ERROR(msg) => cat_error("Failed to build tools:", msg) }
 | 
| 69168 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 359 | |
| 69171 
710845a85944
more robust release.read_ident: eliminated odd state files ISABELLE_IDENT, ISABELLE_DIST;
 wenzelm parents: 
69170diff
changeset | 360 |       try {
 | 
| 
710845a85944
more robust release.read_ident: eliminated odd state files ISABELLE_IDENT, ISABELLE_DIST;
 wenzelm parents: 
69170diff
changeset | 361 | other_isabelle.bash( | 
| 69873 | 362 | "./bin/isabelle build_doc -a -o system_heaps -j " + parallel_jobs, echo = true).check | 
| 69171 
710845a85944
more robust release.read_ident: eliminated odd state files ISABELLE_IDENT, ISABELLE_DIST;
 wenzelm parents: 
69170diff
changeset | 363 | } | 
| 71936 | 364 |       catch { case ERROR(msg) => cat_error("Failed to build documentation:", msg) }
 | 
| 69168 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 365 | |
| 69174 | 366 | make_news(other_isabelle, release.dist_version) | 
| 69168 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 367 | |
| 69171 
710845a85944
more robust release.read_ident: eliminated odd state files ISABELLE_IDENT, ISABELLE_DIST;
 wenzelm parents: 
69170diff
changeset | 368 |       for (name <- List("Admin", "browser_info", "heaps")) {
 | 
| 
710845a85944
more robust release.read_ident: eliminated odd state files ISABELLE_IDENT, ISABELLE_DIST;
 wenzelm parents: 
69170diff
changeset | 369 | Isabelle_System.rm_tree(other_isabelle.isabelle_home + Path.explode(name)) | 
| 
710845a85944
more robust release.read_ident: eliminated odd state files ISABELLE_IDENT, ISABELLE_DIST;
 wenzelm parents: 
69170diff
changeset | 370 | } | 
| 69168 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 371 | |
| 69171 
710845a85944
more robust release.read_ident: eliminated odd state files ISABELLE_IDENT, ISABELLE_DIST;
 wenzelm parents: 
69170diff
changeset | 372 | other_isabelle.cleanup() | 
| 69168 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 373 | |
| 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 374 | |
| 69400 | 375 |       progress.echo_warning("Creating distribution archive " + release.isabelle_archive)
 | 
| 69168 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 376 | |
| 69174 | 377 | def execute_dist_name(script: String): Unit = | 
| 378 | Isabelle_System.bash(script, cwd = release.dist_dir.file, | |
| 379 |           env = Isabelle_System.settings() + ("DIST_NAME" -> release.dist_name)).check
 | |
| 380 | ||
| 381 |       execute_dist_name("""
 | |
| 69168 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 382 | set -e | 
| 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 383 | |
| 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 384 | chmod -R a+r "$DIST_NAME" | 
| 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 385 | chmod -R u+w "$DIST_NAME" | 
| 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 386 | chmod -R g=o "$DIST_NAME" | 
| 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 387 | find "$DIST_NAME" -type f "(" -name "*.thy" -o -name "*.ML" -o -name "*.scala" ")" -print | xargs chmod -f u-w
 | 
| 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 388 | """) | 
| 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 389 | |
| 69425 | 390 | execute_tar(release.dist_dir, "-czf " + | 
| 69171 
710845a85944
more robust release.read_ident: eliminated odd state files ISABELLE_IDENT, ISABELLE_DIST;
 wenzelm parents: 
69170diff
changeset | 391 | File.bash_path(release.isabelle_archive) + " " + Bash.string(release.dist_name)) | 
| 69168 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 392 | |
| 69174 | 393 |       execute_dist_name("""
 | 
| 69168 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 394 | set -e | 
| 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 395 | |
| 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 396 | mv "$DIST_NAME" "${DIST_NAME}-old"
 | 
| 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 397 | mkdir "$DIST_NAME" | 
| 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 398 | |
| 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 399 | mv "${DIST_NAME}-old/README" "${DIST_NAME}-old/NEWS" "${DIST_NAME}-old/ANNOUNCE" \
 | 
| 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 400 |   "${DIST_NAME}-old/COPYRIGHT" "${DIST_NAME}-old/CONTRIBUTORS" "$DIST_NAME"
 | 
| 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 401 | mkdir "$DIST_NAME/doc" | 
| 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 402 | mv "${DIST_NAME}-old/doc/"*.pdf \
 | 
| 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 403 |   "${DIST_NAME}-old/doc/"*.html \
 | 
| 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 404 |   "${DIST_NAME}-old/doc/"*.css \
 | 
| 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 405 |   "${DIST_NAME}-old/doc/fonts" \
 | 
| 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 406 |   "${DIST_NAME}-old/doc/Contents" "$DIST_NAME/doc"
 | 
| 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 407 | |
| 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 408 | rm -f Isabelle && ln -sf "$DIST_NAME" Isabelle | 
| 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 409 | |
| 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 410 | rm -rf "${DIST_NAME}-old"
 | 
| 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 411 | """) | 
| 64203 | 412 | } | 
| 64202 | 413 | |
| 414 | ||
| 415 | /* make application bundles */ | |
| 416 | ||
| 69177 | 417 | val bundle_infos = platform_families.map(release.bundle_info) | 
| 69168 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 418 | |
| 66730 | 419 |     for (bundle_info <- bundle_infos) {
 | 
| 70098 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 420 | val isabelle_name = release.dist_name | 
| 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 421 | val platform = bundle_info.platform | 
| 69401 
7a1b7b737c02
eliminated old makedist_bundle and remote_dmg: build_release does everything in Scala;
 wenzelm parents: 
69400diff
changeset | 422 | |
| 70098 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 423 |       progress.echo("\nApplication bundle for " + platform)
 | 
| 69401 
7a1b7b737c02
eliminated old makedist_bundle and remote_dmg: build_release does everything in Scala;
 wenzelm parents: 
69400diff
changeset | 424 | |
| 70098 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 425 |       Isabelle_System.with_tmp_dir("build_release")(tmp_dir =>
 | 
| 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 426 |       {
 | 
| 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 427 | // release archive | 
| 69401 
7a1b7b737c02
eliminated old makedist_bundle and remote_dmg: build_release does everything in Scala;
 wenzelm parents: 
69400diff
changeset | 428 | |
| 70098 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 429 | execute_tar(tmp_dir, "-xzf " + File.bash_path(release.isabelle_archive)) | 
| 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 430 | val other_isabelle = release.other_isabelle(tmp_dir) | 
| 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 431 | val isabelle_target = other_isabelle.isabelle_home | 
| 69401 
7a1b7b737c02
eliminated old makedist_bundle and remote_dmg: build_release does everything in Scala;
 wenzelm parents: 
69400diff
changeset | 432 | |
| 
7a1b7b737c02
eliminated old makedist_bundle and remote_dmg: build_release does everything in Scala;
 wenzelm parents: 
69400diff
changeset | 433 | |
| 70098 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 434 | // bundled components | 
| 69401 
7a1b7b737c02
eliminated old makedist_bundle and remote_dmg: build_release does everything in Scala;
 wenzelm parents: 
69400diff
changeset | 435 | |
| 70098 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 436 |         progress.echo("Bundled components:")
 | 
| 69401 
7a1b7b737c02
eliminated old makedist_bundle and remote_dmg: build_release does everything in Scala;
 wenzelm parents: 
69400diff
changeset | 437 | |
| 70098 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 438 | val contrib_dir = Components.contrib(isabelle_target) | 
| 69401 
7a1b7b737c02
eliminated old makedist_bundle and remote_dmg: build_release does everything in Scala;
 wenzelm parents: 
69400diff
changeset | 439 | |
| 70098 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 440 | val (bundled_components, jdk_component) = | 
| 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 441 | get_bundled_components(isabelle_target, platform) | 
| 69401 
7a1b7b737c02
eliminated old makedist_bundle and remote_dmg: build_release does everything in Scala;
 wenzelm parents: 
69400diff
changeset | 442 | |
| 70098 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 443 | Components.resolve(components_base, bundled_components, | 
| 70102 | 444 | target_dir = Some(contrib_dir), | 
| 445 |           copy_dir = Some(release.dist_dir + Path.explode("contrib")),
 | |
| 446 | progress = progress) | |
| 69413 | 447 | |
| 70098 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 448 | val more_components_names = | 
| 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 449 | more_components.map(Components.unpack(contrib_dir, _, progress = progress)) | 
| 69401 
7a1b7b737c02
eliminated old makedist_bundle and remote_dmg: build_release does everything in Scala;
 wenzelm parents: 
69400diff
changeset | 450 | |
| 70098 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 451 | Components.purge(contrib_dir, platform) | 
| 69401 
7a1b7b737c02
eliminated old makedist_bundle and remote_dmg: build_release does everything in Scala;
 wenzelm parents: 
69400diff
changeset | 452 | |
| 70098 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 453 | activate_components(isabelle_target, platform, more_components_names) | 
| 69401 
7a1b7b737c02
eliminated old makedist_bundle and remote_dmg: build_release does everything in Scala;
 wenzelm parents: 
69400diff
changeset | 454 | |
| 
7a1b7b737c02
eliminated old makedist_bundle and remote_dmg: build_release does everything in Scala;
 wenzelm parents: 
69400diff
changeset | 455 | |
| 70098 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 456 | // Java parameters | 
| 69401 
7a1b7b737c02
eliminated old makedist_bundle and remote_dmg: build_release does everything in Scala;
 wenzelm parents: 
69400diff
changeset | 457 | |
| 70098 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 458 | val java_options_title = "# Java runtime options" | 
| 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 459 | val java_options: List[String] = | 
| 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 460 |           (for {
 | 
| 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 461 | variable <- | 
| 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 462 | List( | 
| 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 463 | "ISABELLE_JAVA_SYSTEM_OPTIONS", | 
| 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 464 | "JEDIT_JAVA_SYSTEM_OPTIONS", | 
| 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 465 | "JEDIT_JAVA_OPTIONS") | 
| 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 466 | opt <- Word.explode(other_isabelle.getenv(variable)) | 
| 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 467 |           } yield opt) ::: List("-Disabelle.jedit_server=" + isabelle_name)
 | 
| 69401 
7a1b7b737c02
eliminated old makedist_bundle and remote_dmg: build_release does everything in Scala;
 wenzelm parents: 
69400diff
changeset | 468 | |
| 70098 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 469 | val classpath: List[Path] = | 
| 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 470 |         {
 | 
| 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 471 | val base = isabelle_target.absolute | 
| 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 472 |           Path.split(other_isabelle.getenv("ISABELLE_CLASSPATH")).map(path =>
 | 
| 69401 
7a1b7b737c02
eliminated old makedist_bundle and remote_dmg: build_release does everything in Scala;
 wenzelm parents: 
69400diff
changeset | 473 |           {
 | 
| 70098 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 474 | val abs_path = path.absolute | 
| 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 475 |             File.relative_path(base, abs_path) match {
 | 
| 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 476 | case Some(rel_path) => rel_path | 
| 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 477 |               case None => error("Bad ISABELLE_CLASSPATH element: " + abs_path)
 | 
| 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 478 | } | 
| 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 479 |           }) ::: List(Path.explode("src/Tools/jEdit/dist/jedit.jar"))
 | 
| 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 480 | } | 
| 69401 
7a1b7b737c02
eliminated old makedist_bundle and remote_dmg: build_release does everything in Scala;
 wenzelm parents: 
69400diff
changeset | 481 | |
| 71542 
e76692ec6e5a
more usable defaults for high resolution on Linux, where the desktop environment usually lacks automatic scaling;
 wenzelm parents: 
71459diff
changeset | 482 |         val jedit_options = Path.explode("src/Tools/jEdit/etc/options")
 | 
| 70098 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 483 |         val jedit_props = Path.explode("src/Tools/jEdit/dist/properties/jEdit.props")
 | 
| 69401 
7a1b7b737c02
eliminated old makedist_bundle and remote_dmg: build_release does everything in Scala;
 wenzelm parents: 
69400diff
changeset | 484 | |
| 
7a1b7b737c02
eliminated old makedist_bundle and remote_dmg: build_release does everything in Scala;
 wenzelm parents: 
69400diff
changeset | 485 | |
| 70101 | 486 | // build heaps | 
| 487 | ||
| 488 |         if (build_sessions.nonEmpty) {
 | |
| 70103 | 489 |           progress.echo("Building heaps ...")
 | 
| 70101 | 490 | remote_build_heaps(options, platform, build_sessions, isabelle_target) | 
| 491 | } | |
| 492 | ||
| 493 | ||
| 70098 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 494 | // application bundling | 
| 69401 
7a1b7b737c02
eliminated old makedist_bundle and remote_dmg: build_release does everything in Scala;
 wenzelm parents: 
69400diff
changeset | 495 | |
| 70098 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 496 |         platform match {
 | 
| 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 497 | case Platform.Family.linux => | 
| 72378 | 498 | File.change(isabelle_target + jedit_options, | 
| 499 |               _.replaceAll("jedit_reset_font_size : int =.*", "jedit_reset_font_size : int = 24"))
 | |
| 71542 
e76692ec6e5a
more usable defaults for high resolution on Linux, where the desktop environment usually lacks automatic scaling;
 wenzelm parents: 
71459diff
changeset | 500 | |
| 72378 | 501 | File.change(isabelle_target + jedit_props, | 
| 502 |               _.replaceAll("console.fontsize=.*", "console.fontsize=18")
 | |
| 503 |                .replaceAll("helpviewer.fontsize=.*", "helpviewer.fontsize=18")
 | |
| 504 |                .replaceAll("metal.primary.fontsize=.*", "metal.primary.fontsize=18")
 | |
| 505 |                .replaceAll("metal.secondary.fontsize=.*", "metal.secondary.fontsize=18")
 | |
| 506 |                .replaceAll("view.fontsize=.*", "view.fontsize=24")
 | |
| 507 |                .replaceAll("view.gutter.fontsize=.*", "view.gutter.fontsize=16"))
 | |
| 71542 
e76692ec6e5a
more usable defaults for high resolution on Linux, where the desktop environment usually lacks automatic scaling;
 wenzelm parents: 
71459diff
changeset | 508 | |
| 71459 | 509 |             File.write(isabelle_target + Path.explode("Isabelle.options"),
 | 
| 70098 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 510 | terminate_lines(java_options_title :: java_options)) | 
| 69401 
7a1b7b737c02
eliminated old makedist_bundle and remote_dmg: build_release does everything in Scala;
 wenzelm parents: 
69400diff
changeset | 511 | |
| 71364 | 512 |             val isabelle_app = isabelle_target + Path.explode("lib/scripts/Isabelle_app")
 | 
| 513 | File.write(isabelle_app, | |
| 71363 | 514 |               File.read(Path.explode("~~/Admin/Linux/Isabelle_app"))
 | 
| 72387 | 515 |                 .replace("{CLASSPATH}", classpath.map("$ISABELLE_HOME/" + _).mkString(":"))
 | 
| 516 |                 .replace("/jdk/", "/" + jdk_component + "/"))
 | |
| 71364 | 517 | File.set_executable(isabelle_app, true) | 
| 69401 
7a1b7b737c02
eliminated old makedist_bundle and remote_dmg: build_release does everything in Scala;
 wenzelm parents: 
69400diff
changeset | 518 | |
| 70098 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 519 |             val linux_app = isabelle_target + Path.explode("contrib/linux_app")
 | 
| 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 520 |             File.move(linux_app + Path.explode("Isabelle"),
 | 
| 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 521 | isabelle_target + Path.explode(isabelle_name)) | 
| 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 522 | Isabelle_System.rm_tree(linux_app) | 
| 69417 | 523 | |
| 70246 
7c55ea37fbf7
back to gz for linux (and macos) -- xz is too slow and cumbersome;
 wenzelm parents: 
70244diff
changeset | 524 | val archive_name = isabelle_name + "_linux.tar.gz" | 
| 70098 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 525 |             progress.echo("Packaging " + archive_name + " ...")
 | 
| 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 526 | execute_tar(tmp_dir, | 
| 70246 
7c55ea37fbf7
back to gz for linux (and macos) -- xz is too slow and cumbersome;
 wenzelm parents: 
70244diff
changeset | 527 | "-czf " + File.bash_path(release.dist_dir + Path.explode(archive_name)) + " " + | 
| 70242 | 528 | Bash.string(isabelle_name)) | 
| 69424 
840f0cadeba8
clarified application bundling: discontinued redundant archives;
 wenzelm parents: 
69417diff
changeset | 529 | |
| 69432 
d072f3287ffa
discontinued somewhat point dmg: plain .tar.gz is smaller and more convenient to install;
 wenzelm parents: 
69425diff
changeset | 530 | |
| 70098 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 531 | case Platform.Family.macos => | 
| 72378 | 532 | File.change(isabelle_target + jedit_props, | 
| 533 |               _.replaceAll("lookAndFeel=.*", "lookAndFeel=com.apple.laf.AquaLookAndFeel")
 | |
| 534 |                .replaceAll("delete-line.shortcut=.*", "delete-line.shortcut=C+d")
 | |
| 535 |                .replaceAll("delete.shortcut2=.*", "delete.shortcut2=A+d"))
 | |
| 69417 | 536 | |
| 69401 
7a1b7b737c02
eliminated old makedist_bundle and remote_dmg: build_release does everything in Scala;
 wenzelm parents: 
69400diff
changeset | 537 | |
| 70098 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 538 | // MacOS application bundle | 
| 69401 
7a1b7b737c02
eliminated old makedist_bundle and remote_dmg: build_release does everything in Scala;
 wenzelm parents: 
69400diff
changeset | 539 | |
| 70098 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 540 |             File.move(isabelle_target + Path.explode("contrib/macos_app"), tmp_dir)
 | 
| 69401 
7a1b7b737c02
eliminated old makedist_bundle and remote_dmg: build_release does everything in Scala;
 wenzelm parents: 
69400diff
changeset | 541 | |
| 70098 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 542 | val isabelle_app = Path.explode(isabelle_name + ".app") | 
| 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 543 | val app_dir = tmp_dir + isabelle_app | 
| 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 544 |             File.move(tmp_dir + Path.explode("macos_app/Isabelle.app"), app_dir)
 | 
| 69401 
7a1b7b737c02
eliminated old makedist_bundle and remote_dmg: build_release does everything in Scala;
 wenzelm parents: 
69400diff
changeset | 545 | |
| 70098 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 546 |             val app_contents = app_dir + Path.explode("Contents")
 | 
| 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 547 |             val app_resources = app_contents + Path.explode("Resources")
 | 
| 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 548 | File.move(tmp_dir + Path.explode(isabelle_name), app_resources) | 
| 69401 
7a1b7b737c02
eliminated old makedist_bundle and remote_dmg: build_release does everything in Scala;
 wenzelm parents: 
69400diff
changeset | 549 | |
| 70098 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 550 |             File.write(app_contents + Path.explode("Info.plist"),
 | 
| 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 551 |               File.read(Path.explode("~~/Admin/MacOS/Info.plist"))
 | 
| 72387 | 552 |                 .replace("{ISABELLE_NAME}", isabelle_name)
 | 
| 553 |                 .replace("{JAVA_OPTIONS}",
 | |
| 70098 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 554 | terminate_lines(java_options.map(opt => "<string>" + opt + "</string>")))) | 
| 69401 
7a1b7b737c02
eliminated old makedist_bundle and remote_dmg: build_release does everything in Scala;
 wenzelm parents: 
69400diff
changeset | 555 | |
| 70098 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 556 |             for (cp <- classpath) {
 | 
| 69417 | 557 | File.link( | 
| 70098 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 558 |                 Path.explode("../Resources/" + isabelle_name + "/") + cp,
 | 
| 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 559 |                 app_contents + Path.explode("Java"),
 | 
| 69417 | 560 | force = true) | 
| 70098 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 561 | } | 
| 69402 
61f4c406d727
more direct File.link operation: avoid external process;
 wenzelm parents: 
69401diff
changeset | 562 | |
| 70098 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 563 | File.link( | 
| 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 564 |               Path.explode("../Resources/" + isabelle_name + "/contrib/" +
 | 
| 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 565 | jdk_component + "/x86_64-darwin"), | 
| 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 566 |               app_contents + Path.explode("PlugIns/bundled.jdk"),
 | 
| 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 567 | force = true) | 
| 69401 
7a1b7b737c02
eliminated old makedist_bundle and remote_dmg: build_release does everything in Scala;
 wenzelm parents: 
69400diff
changeset | 568 | |
| 70098 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 569 | File.link( | 
| 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 570 |               Path.explode("../../Info.plist"),
 | 
| 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 571 | app_resources + Path.explode(isabelle_name + "/" + isabelle_name + ".plist"), | 
| 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 572 | force = true) | 
| 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 573 | |
| 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 574 | File.link( | 
| 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 575 |               Path.explode("Contents/Resources/" + isabelle_name),
 | 
| 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 576 |               app_dir + Path.explode("Isabelle"),
 | 
| 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 577 | force = true) | 
| 69401 
7a1b7b737c02
eliminated old makedist_bundle and remote_dmg: build_release does everything in Scala;
 wenzelm parents: 
69400diff
changeset | 578 | |
| 69424 
840f0cadeba8
clarified application bundling: discontinued redundant archives;
 wenzelm parents: 
69417diff
changeset | 579 | |
| 70098 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 580 | // application archive | 
| 69424 
840f0cadeba8
clarified application bundling: discontinued redundant archives;
 wenzelm parents: 
69417diff
changeset | 581 | |
| 70244 | 582 | val archive_name = isabelle_name + "_macos.tar.gz" | 
| 70098 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 583 |             progress.echo("Packaging " + archive_name + " ...")
 | 
| 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 584 | execute_tar(tmp_dir, | 
| 70244 | 585 | "-czf " + File.bash_path(release.dist_dir + Path.explode(archive_name)) + " " + | 
| 70242 | 586 | File.bash_path(isabelle_app)) | 
| 69432 
d072f3287ffa
discontinued somewhat point dmg: plain .tar.gz is smaller and more convenient to install;
 wenzelm parents: 
69425diff
changeset | 587 | |
| 69417 | 588 | |
| 70098 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 589 | case Platform.Family.windows => | 
| 72378 | 590 | File.change(isabelle_target + jedit_props, | 
| 591 |               _.replaceAll("lookAndFeel=.*",
 | |
| 70098 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 592 | "lookAndFeel=com.sun.java.swing.plaf.windows.WindowsLookAndFeel") | 
| 72378 | 593 |                .replaceAll("foldPainter=.*", "foldPainter=Square"))
 | 
| 69424 
840f0cadeba8
clarified application bundling: discontinued redundant archives;
 wenzelm parents: 
69417diff
changeset | 594 | |
| 
840f0cadeba8
clarified application bundling: discontinued redundant archives;
 wenzelm parents: 
69417diff
changeset | 595 | |
| 70098 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 596 | // application launcher | 
| 69424 
840f0cadeba8
clarified application bundling: discontinued redundant archives;
 wenzelm parents: 
69417diff
changeset | 597 | |
| 70098 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 598 |             File.move(isabelle_target + Path.explode("contrib/windows_app"), tmp_dir)
 | 
| 69424 
840f0cadeba8
clarified application bundling: discontinued redundant archives;
 wenzelm parents: 
69417diff
changeset | 599 | |
| 70098 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 600 |             val app_template = Path.explode("~~/Admin/Windows/launch4j")
 | 
| 69424 
840f0cadeba8
clarified application bundling: discontinued redundant archives;
 wenzelm parents: 
69417diff
changeset | 601 | |
| 70098 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 602 | File.write(isabelle_target + Path.explode(isabelle_name + ".l4j.ini"), | 
| 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 603 | (java_options_title :: java_options).map(_ + "\r\n").mkString) | 
| 69424 
840f0cadeba8
clarified application bundling: discontinued redundant archives;
 wenzelm parents: 
69417diff
changeset | 604 | |
| 70098 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 605 |             val isabelle_xml = Path.explode("isabelle.xml")
 | 
| 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 606 | val isabelle_exe = Path.explode(isabelle_name + ".exe") | 
| 69424 
840f0cadeba8
clarified application bundling: discontinued redundant archives;
 wenzelm parents: 
69417diff
changeset | 607 | |
| 70098 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 608 | File.write(tmp_dir + isabelle_xml, | 
| 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 609 | File.read(app_template + isabelle_xml) | 
| 72387 | 610 |                 .replace("{ISABELLE_NAME}", isabelle_name)
 | 
| 611 |                 .replace("{OUTFILE}", File.platform_path(isabelle_target + isabelle_exe))
 | |
| 612 |                 .replace("{ICON}",
 | |
| 70098 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 613 |                   File.platform_path(app_template + Path.explode("isabelle_transparent.ico")))
 | 
| 72387 | 614 |                 .replace("{SPLASH}",
 | 
| 70098 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 615 |                   File.platform_path(app_template + Path.explode("isabelle.bmp")))
 | 
| 72387 | 616 |                 .replace("{CLASSPATH}",
 | 
| 70098 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 617 | cat_lines(classpath.map(cp => | 
| 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 618 |                     "    <cp>%EXEDIR%\\" + File.platform_path(cp).replace('/', '\\') + "</cp>")))
 | 
| 72387 | 619 |                 .replace("\\jdk\\", "\\" + jdk_component + "\\"))
 | 
| 69424 
840f0cadeba8
clarified application bundling: discontinued redundant archives;
 wenzelm parents: 
69417diff
changeset | 620 | |
| 70098 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 621 | execute(tmp_dir, | 
| 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 622 |               "\"windows_app/launch4j-${ISABELLE_PLATFORM_FAMILY}/launch4j\" isabelle.xml")
 | 
| 69424 
840f0cadeba8
clarified application bundling: discontinued redundant archives;
 wenzelm parents: 
69417diff
changeset | 623 | |
| 70098 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 624 |             File.copy(app_template + Path.explode("manifest.xml"),
 | 
| 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 625 |               isabelle_target + isabelle_exe.ext("manifest"))
 | 
| 69424 
840f0cadeba8
clarified application bundling: discontinued redundant archives;
 wenzelm parents: 
69417diff
changeset | 626 | |
| 
840f0cadeba8
clarified application bundling: discontinued redundant archives;
 wenzelm parents: 
69417diff
changeset | 627 | |
| 70098 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 628 | // Cygwin setup | 
| 69424 
840f0cadeba8
clarified application bundling: discontinued redundant archives;
 wenzelm parents: 
69417diff
changeset | 629 | |
| 70098 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 630 |             val cygwin_template = Path.explode("~~/Admin/Windows/Cygwin")
 | 
| 69424 
840f0cadeba8
clarified application bundling: discontinued redundant archives;
 wenzelm parents: 
69417diff
changeset | 631 | |
| 70098 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 632 |             File.copy(cygwin_template + Path.explode("Cygwin-Terminal.bat"), isabelle_target)
 | 
| 69424 
840f0cadeba8
clarified application bundling: discontinued redundant archives;
 wenzelm parents: 
69417diff
changeset | 633 | |
| 70098 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 634 | val cygwin_mirror = | 
| 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 635 |               File.read(isabelle_target + Path.explode("contrib/cygwin/isabelle/cygwin_mirror"))
 | 
| 69424 
840f0cadeba8
clarified application bundling: discontinued redundant archives;
 wenzelm parents: 
69417diff
changeset | 636 | |
| 70098 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 637 |             val cygwin_bat = Path.explode("Cygwin-Setup.bat")
 | 
| 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 638 | File.write(isabelle_target + cygwin_bat, | 
| 72387 | 639 |               File.read(cygwin_template + cygwin_bat).replace("{MIRROR}", cygwin_mirror))
 | 
| 70098 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 640 | File.set_executable(isabelle_target + cygwin_bat, true) | 
| 69424 
840f0cadeba8
clarified application bundling: discontinued redundant archives;
 wenzelm parents: 
69417diff
changeset | 641 | |
| 70098 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 642 |             for (name <- List("isabelle/postinstall", "isabelle/rebaseall")) {
 | 
| 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 643 | val path = Path.explode(name) | 
| 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 644 | File.copy(cygwin_template + path, | 
| 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 645 |                 isabelle_target + Path.explode("contrib/cygwin") + path)
 | 
| 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 646 | } | 
| 69424 
840f0cadeba8
clarified application bundling: discontinued redundant archives;
 wenzelm parents: 
69417diff
changeset | 647 | |
| 70098 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 648 | execute(isabelle_target, | 
| 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 649 | """find . -type f -not -name "*.exe" -not -name "*.dll" """ + | 
| 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 650 | (if (Platform.is_macos) "-perm +100" else "-executable") + | 
| 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 651 | " -print0 > contrib/cygwin/isabelle/executables") | 
| 69424 
840f0cadeba8
clarified application bundling: discontinued redundant archives;
 wenzelm parents: 
69417diff
changeset | 652 | |
| 70098 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 653 | execute(isabelle_target, | 
| 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 654 |               """find . -type l -exec echo "{}" ";" -exec readlink "{}" ";" """ +
 | 
| 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 655 | """> contrib/cygwin/isabelle/symlinks""") | 
| 69424 
840f0cadeba8
clarified application bundling: discontinued redundant archives;
 wenzelm parents: 
69417diff
changeset | 656 | |
| 70098 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 657 |             execute(isabelle_target, """find . -type l -exec rm "{}" ";" """)
 | 
| 69424 
840f0cadeba8
clarified application bundling: discontinued redundant archives;
 wenzelm parents: 
69417diff
changeset | 658 | |
| 70098 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 659 |             File.write(isabelle_target + Path.explode("contrib/cygwin/isabelle/uninitialized"), "")
 | 
| 69424 
840f0cadeba8
clarified application bundling: discontinued redundant archives;
 wenzelm parents: 
69417diff
changeset | 660 | |
| 
840f0cadeba8
clarified application bundling: discontinued redundant archives;
 wenzelm parents: 
69417diff
changeset | 661 | |
| 70098 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 662 | // executable archive (self-extracting 7z) | 
| 69424 
840f0cadeba8
clarified application bundling: discontinued redundant archives;
 wenzelm parents: 
69417diff
changeset | 663 | |
| 70098 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 664 | val archive_name = isabelle_name + ".7z" | 
| 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 665 | val exe_archive = tmp_dir + Path.explode(archive_name) | 
| 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 666 | exe_archive.file.delete | 
| 69401 
7a1b7b737c02
eliminated old makedist_bundle and remote_dmg: build_release does everything in Scala;
 wenzelm parents: 
69400diff
changeset | 667 | |
| 70098 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 668 |             progress.echo("Packaging " + archive_name + " ...")
 | 
| 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 669 | execute(tmp_dir, | 
| 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 670 | "7z -y -bd a " + File.bash_path(exe_archive) + " " + Bash.string(isabelle_name)) | 
| 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 671 |             if (!exe_archive.is_file) error("Failed to create archive: " + exe_archive)
 | 
| 69401 
7a1b7b737c02
eliminated old makedist_bundle and remote_dmg: build_release does everything in Scala;
 wenzelm parents: 
69400diff
changeset | 672 | |
| 70098 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 673 |             val sfx_exe = tmp_dir + Path.explode("windows_app/7zsd_All_x64.sfx")
 | 
| 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 674 | val sfx_txt = | 
| 72387 | 675 |               File.read(Path.explode("~~/Admin/Windows/Installer/sfx.txt"))
 | 
| 676 |                 .replace("{ISABELLE_NAME}", isabelle_name)
 | |
| 69401 
7a1b7b737c02
eliminated old makedist_bundle and remote_dmg: build_release does everything in Scala;
 wenzelm parents: 
69400diff
changeset | 677 | |
| 70098 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 678 | Bytes.write(release.dist_dir + isabelle_exe, | 
| 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 679 | Bytes.read(sfx_exe) + Bytes(sfx_txt) + Bytes.read(exe_archive)) | 
| 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 680 | File.set_executable(release.dist_dir + isabelle_exe, true) | 
| 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 681 | } | 
| 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 682 | }) | 
| 
956d2430cb29
more robust: always (re)build platform application bundles;
 wenzelm parents: 
70046diff
changeset | 683 |       progress.echo("DONE")
 | 
| 64202 | 684 | } | 
| 685 | ||
| 686 | ||
| 687 | /* minimal website */ | |
| 688 | ||
| 64361 | 689 |     for (dir <- website) {
 | 
| 690 | val website_platform_bundles = | |
| 691 |         for {
 | |
| 66730 | 692 | bundle_info <- bundle_infos | 
| 69432 
d072f3287ffa
discontinued somewhat point dmg: plain .tar.gz is smaller and more convenient to install;
 wenzelm parents: 
69425diff
changeset | 693 | if (release.dist_dir + bundle_info.path).is_file | 
| 
d072f3287ffa
discontinued somewhat point dmg: plain .tar.gz is smaller and more convenient to install;
 wenzelm parents: 
69425diff
changeset | 694 | } yield (bundle_info.name, bundle_info) | 
| 64206 | 695 | |
| 71275 | 696 | val isabelle_link = | 
| 697 | HTML.link(Isabelle_Cronjob.isabelle_repos_source + "/rev/" + release.ident, | |
| 698 |           HTML.text("Isabelle/" + release.ident))
 | |
| 64405 
81bac77929d9
just one task to identify Isabelle + AFP repository snapshots and build release;
 wenzelm parents: 
64371diff
changeset | 699 | val afp_link = | 
| 70046 | 700 |         HTML.link(AFP.repos_source + "/rev/" + afp_rev, HTML.text("AFP/" + afp_rev))
 | 
| 64405 
81bac77929d9
just one task to identify Isabelle + AFP repository snapshots and build release;
 wenzelm parents: 
64371diff
changeset | 701 | |
| 65838 | 702 | HTML.write_document(dir, "index.html", | 
| 69168 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 703 | List(HTML.title(release.dist_name)), | 
| 65838 | 704 | List( | 
| 71973 | 705 | HTML.section(release.dist_name), | 
| 71275 | 706 |           HTML.subsection("Platforms"),
 | 
| 65838 | 707 | HTML.itemize( | 
| 66730 | 708 |             website_platform_bundles.map({ case (bundle, bundle_info) =>
 | 
| 71275 | 709 | List(HTML.link(bundle, HTML.text(bundle_info.platform_description))) })), | 
| 710 |           HTML.subsection("Repositories"),
 | |
| 711 | HTML.itemize( | |
| 712 | List(List(isabelle_link)) ::: (if (afp_rev == "") Nil else List(List(afp_link)))))) | |
| 64202 | 713 | |
| 64361 | 714 | for ((bundle, _) <- website_platform_bundles) | 
| 69167 | 715 | File.copy(release.dist_dir + Path.explode(bundle), dir) | 
| 64361 | 716 | } | 
| 64202 | 717 | |
| 718 | ||
| 719 | /* HTML library */ | |
| 720 | ||
| 64203 | 721 |     if (build_library) {
 | 
| 69168 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 722 |       if (release.isabelle_library_archive.is_file) {
 | 
| 69400 | 723 |         progress.echo_warning("Library archive already exists: " + release.isabelle_library_archive)
 | 
| 69168 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 724 | } | 
| 64203 | 725 |       else {
 | 
| 64316 | 726 |         Isabelle_System.with_tmp_dir("build_release")(tmp_dir =>
 | 
| 727 |           {
 | |
| 69401 
7a1b7b737c02
eliminated old makedist_bundle and remote_dmg: build_release does everything in Scala;
 wenzelm parents: 
69400diff
changeset | 728 | val bundle = | 
| 70246 
7c55ea37fbf7
back to gz for linux (and macos) -- xz is too slow and cumbersome;
 wenzelm parents: 
70244diff
changeset | 729 | release.dist_dir + Path.explode(release.dist_name + "_" + Platform.family + ".tar.gz") | 
| 
7c55ea37fbf7
back to gz for linux (and macos) -- xz is too slow and cumbersome;
 wenzelm parents: 
70244diff
changeset | 730 | execute_tar(tmp_dir, "-xzf " + File.bash_path(bundle)) | 
| 64316 | 731 | |
| 69401 
7a1b7b737c02
eliminated old makedist_bundle and remote_dmg: build_release does everything in Scala;
 wenzelm parents: 
69400diff
changeset | 732 | val other_isabelle = release.other_isabelle(tmp_dir) | 
| 64316 | 733 | |
| 72375 | 734 | Isabelle_System.make_directory(other_isabelle.etc) | 
| 68755 
67d6f1708ea4
enforce ML_system_64: more robust as cold build, without command_timings;
 wenzelm parents: 
67045diff
changeset | 735 | File.write(other_isabelle.etc_preferences, "ML_system_64 = true\n") | 
| 
67d6f1708ea4
enforce ML_system_64: more robust as cold build, without command_timings;
 wenzelm parents: 
67045diff
changeset | 736 | |
| 70243 | 737 |             other_isabelle.bash("bin/isabelle build -f -j " + parallel_jobs +
 | 
| 69406 | 738 | " -o browser_info -o document=pdf -o document_variants=document:outline=/proof,/ML" + | 
| 69873 | 739 | " -o system_heaps -c -a -d '~~/src/Benchmarks'", echo = true).check | 
| 64316 | 740 | other_isabelle.isabelle_home_user.file.delete | 
| 741 | ||
| 69401 
7a1b7b737c02
eliminated old makedist_bundle and remote_dmg: build_release does everything in Scala;
 wenzelm parents: 
69400diff
changeset | 742 | execute(tmp_dir, "chmod -R a+r " + Bash.string(release.dist_name)) | 
| 
7a1b7b737c02
eliminated old makedist_bundle and remote_dmg: build_release does everything in Scala;
 wenzelm parents: 
69400diff
changeset | 743 | execute(tmp_dir, "chmod -R g=o " + Bash.string(release.dist_name)) | 
| 69425 | 744 | execute_tar(tmp_dir, "-czf " + File.bash_path(release.isabelle_library_archive) + | 
| 69401 
7a1b7b737c02
eliminated old makedist_bundle and remote_dmg: build_release does everything in Scala;
 wenzelm parents: 
69400diff
changeset | 745 | " " + Bash.string(release.dist_name + "/browser_info")) | 
| 64316 | 746 | }) | 
| 64203 | 747 | } | 
| 748 | } | |
| 749 | ||
| 69168 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 750 | release | 
| 64202 | 751 | } | 
| 752 | ||
| 753 | ||
| 754 | ||
| 755 | /** command line entry point **/ | |
| 756 | ||
| 757 | def main(args: Array[String]) | |
| 758 |   {
 | |
| 71632 | 759 |     Command_Line.tool {
 | 
| 64405 
81bac77929d9
just one task to identify Isabelle + AFP repository snapshots and build release;
 wenzelm parents: 
64371diff
changeset | 760 | var afp_rev = "" | 
| 69434 | 761 | var components_base: Path = Components.default_components_base | 
| 64202 | 762 | var official_release = false | 
| 69168 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 763 | var proper_release_name: Option[String] = None | 
| 64211 | 764 | var website: Option[Path] = None | 
| 70101 | 765 | var build_sessions: List[String] = Nil | 
| 69413 | 766 | var more_components: List[Path] = Nil | 
| 64202 | 767 | var parallel_jobs = 1 | 
| 768 | var build_library = false | |
| 69401 
7a1b7b737c02
eliminated old makedist_bundle and remote_dmg: build_release does everything in Scala;
 wenzelm parents: 
69400diff
changeset | 769 | var options = Options.init() | 
| 64208 | 770 | var platform_families = default_platform_families | 
| 64202 | 771 | var rev = "" | 
| 772 | ||
| 773 |       val getopts = Getopts("""
 | |
| 774 | Usage: Admin/build_release [OPTIONS] BASE_DIR | |
| 775 | ||
| 776 | Options are: | |
| 64405 
81bac77929d9
just one task to identify Isabelle + AFP repository snapshots and build release;
 wenzelm parents: 
64371diff
changeset | 777 | -A REV corresponding AFP changeset id | 
| 69434 | 778 | -C DIR base directory for Isabelle components (default: """ + | 
| 779 | Components.default_components_base + """) | |
| 64202 | 780 | -O official release (not release-candidate) | 
| 781 | -R RELEASE proper release with name | |
| 64211 | 782 | -W WEBSITE produce minimal website in given directory | 
| 70101 | 783 | -b SESSIONS build platform-specific session images (separated by commas) | 
| 69413 | 784 | -c ARCHIVE clean bundling with additional component .tar.gz archive | 
| 64202 | 785 | -j INT maximum number of parallel jobs (default 1) | 
| 786 | -l build library | |
| 69401 
7a1b7b737c02
eliminated old makedist_bundle and remote_dmg: build_release does everything in Scala;
 wenzelm parents: 
69400diff
changeset | 787 | -o OPTION override Isabelle system OPTION (via NAME=VAL or NAME) | 
| 65067 | 788 |     -p NAMES     platform families (default: """ + default_platform_families.mkString(",") + """)
 | 
| 64202 | 789 | -r REV Mercurial changeset id (default: RELEASE or tip) | 
| 790 | ||
| 791 | Build Isabelle release in base directory, using the local repository clone. | |
| 792 | """, | |
| 64405 
81bac77929d9
just one task to identify Isabelle + AFP repository snapshots and build release;
 wenzelm parents: 
64371diff
changeset | 793 | "A:" -> (arg => afp_rev = arg), | 
| 69434 | 794 | "C:" -> (arg => components_base = Path.explode(arg)), | 
| 64202 | 795 | "O" -> (_ => official_release = true), | 
| 69168 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 796 | "R:" -> (arg => proper_release_name = Some(arg)), | 
| 64211 | 797 | "W:" -> (arg => website = Some(Path.explode(arg))), | 
| 70101 | 798 |         "b:" -> (arg => build_sessions = space_explode(',', arg)),
 | 
| 69413 | 799 | "c:" -> (arg => | 
| 800 |           {
 | |
| 801 | val path = Path.explode(arg) | |
| 802 | Components.Archive.get_name(path.file_name) | |
| 803 | more_components = more_components ::: List(path) | |
| 804 | }), | |
| 64202 | 805 | "j:" -> (arg => parallel_jobs = Value.Int.parse(arg)), | 
| 64316 | 806 | "l" -> (_ => build_library = true), | 
| 69401 
7a1b7b737c02
eliminated old makedist_bundle and remote_dmg: build_release does everything in Scala;
 wenzelm parents: 
69400diff
changeset | 807 | "o:" -> (arg => options = options + arg), | 
| 69410 | 808 |         "p:" -> (arg => platform_families = space_explode(',', arg).map(Platform.Family.parse)),
 | 
| 64204 | 809 | "r:" -> (arg => rev = arg)) | 
| 64202 | 810 | |
| 811 | val more_args = getopts(args) | |
| 812 |       val base_dir = more_args match { case List(base_dir) => base_dir case _ => getopts.usage() }
 | |
| 813 | ||
| 814 | val progress = new Console_Progress() | |
| 815 | ||
| 69415 | 816 |       if (platform_families.contains(Platform.Family.windows) && !Isabelle_System.bash("7z i").ok)
 | 
| 817 |         error("Building for windows requires 7z")
 | |
| 818 | ||
| 69401 
7a1b7b737c02
eliminated old makedist_bundle and remote_dmg: build_release does everything in Scala;
 wenzelm parents: 
69400diff
changeset | 819 | build_release(Path.explode(base_dir), options, components_base = components_base, | 
| 
7a1b7b737c02
eliminated old makedist_bundle and remote_dmg: build_release does everything in Scala;
 wenzelm parents: 
69400diff
changeset | 820 | progress = progress, rev = rev, afp_rev = afp_rev, official_release = official_release, | 
| 69397 | 821 | proper_release_name = proper_release_name, website = website, | 
| 64204 | 822 | platform_families = | 
| 69168 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 823 | if (platform_families.isEmpty) default_platform_families | 
| 
68816d1c73a7
eliminated "isabelle makedist" -- prefer Scala over bash/perl scripting;
 wenzelm parents: 
69167diff
changeset | 824 | else platform_families, | 
| 70101 | 825 | more_components = more_components, build_sessions = build_sessions, | 
| 826 | build_library = build_library, parallel_jobs = parallel_jobs) | |
| 64202 | 827 | } | 
| 828 | } | |
| 829 | } |