src/Pure/Admin/build_release.scala
author wenzelm
Thu, 13 Oct 2016 23:44:40 +0200
changeset 64202 967515846691
child 64203 2f9a1c76f731
permissions -rw-r--r--
replaced shell script by Isabelle/Scala;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
64202
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
     1
/*  Title:      Pure/Admin/build_release.scala
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
     2
    Author:     Makarius
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
     3
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
     4
Build full Isabelle distribution from repository.
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
     5
*/
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
     6
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
     7
package isabelle
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
     8
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
     9
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
    10
object Build_Release
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
    11
{
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
    12
  def build_release(base_dir: Path,
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
    13
    progress: Progress = Ignore_Progress,
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
    14
    rev: String = "",
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
    15
    official_release: Boolean = false,
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
    16
    release_name: String = "",
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
    17
    build_library: Boolean = false,
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
    18
    parallel_jobs: Int = 1,
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
    19
    remote_mac: String = "")
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
    20
  {
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
    21
    /* release info */
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
    22
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
    23
    val release_date = Date.now()
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
    24
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
    25
    val distribution_name =
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
    26
      if (release_name != "") release_name
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
    27
      else "Isabelle_" + Date.Format.date(release_date)
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
    28
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
    29
    val distribution_dir = base_dir + Path.explode("dist-" + distribution_name)
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
    30
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
    31
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
    32
    /* make distribution */
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
    33
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
    34
    progress.bash(
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
    35
      "isabelle makedist -d " + File.bash_path(base_dir) + " -j" + parallel_jobs.toString +
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
    36
        (if (official_release) " -O" else "") +
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
    37
        (if (release_name != "") " -r " + File.bash_string(release_name) else "") +
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
    38
        (if (rev != "") " " + File.bash_string(rev) else ""),
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
    39
      echo = true).check
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
    40
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
    41
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
    42
    /* make application bundles */
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
    43
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
    44
    for (platform_family <- List("linux", "windows", "windows64", "macos")) {
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
    45
      progress.echo("\n*** " + platform_family + " ***")
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
    46
      progress.bash(
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
    47
        "isabelle makedist_bundle " +
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
    48
          File.bash_path(distribution_dir + Path.explode(distribution_name + ".tar.gz")) +
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
    49
          " " + File.bash_string(platform_family) +
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
    50
          (if (remote_mac == "") "" else " " + File.bash_string(remote_mac)),
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
    51
        echo = true).check
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
    52
    }
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
    53
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
    54
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
    55
    /* minimal website */
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
    56
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
    57
    File.write(distribution_dir + Path.explode("index.html"),
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
    58
"""<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
    59
<html>
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
    60
<head>
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
    61
<title>""" + HTML.output(distribution_name) + """</title>
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
    62
</head>
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
    63
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
    64
<body>
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
    65
<h1>""" + HTML.output(distribution_name) + """</h1>
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
    66
<ul>
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
    67
<li><a href=""" + "\"" + HTML.output(distribution_name) + """_app.tar.gz">Linux</a></li>
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
    68
<li><a href=""" + "\"" + HTML.output(distribution_name) + """-win32.exe">Windows</a></li>
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
    69
<li><a href=""" + "\"" + HTML.output(distribution_name) + """-win64.exe">Windows (64bit)</a></li>
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
    70
<li><a href=""" + "\"" + HTML.output(distribution_name) + """.dmg">Mac OS X</a></li>
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
    71
</ul>
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
    72
</body>
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
    73
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
    74
</html>
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
    75
""")
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
    76
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
    77
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
    78
    /* HTML library */
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
    79
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
    80
    if (build_library)
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
    81
      progress.bash("\"$ISABELLE_HOME/Admin/Release/build_library\" -j" + parallel_jobs.toString +
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
    82
        File.bash_path(distribution_dir +
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
    83
          Path.explode(distribution_name + "_" +
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
    84
            Isabelle_System.getenv_strict("ISABELLE_PLATFORM_FAMILY") + ".tar.gz"))).check
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
    85
  }
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
    86
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
    87
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
    88
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
    89
  /** command line entry point **/
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
    90
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
    91
  def main(args: Array[String])
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
    92
  {
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
    93
    Command_Line.tool0 {
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
    94
      var remote_mac = ""
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
    95
      var official_release = false
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
    96
      var release_name = ""
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
    97
      var parallel_jobs = 1
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
    98
      var build_library = false
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
    99
      var rev = ""
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
   100
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
   101
      val getopts = Getopts("""
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
   102
Usage: Admin/build_release [OPTIONS] BASE_DIR
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
   103
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
   104
  Options are:
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
   105
    -M USER@HOST remote Mac OS X for dmg build
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
   106
    -O           official release (not release-candidate)
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
   107
    -R RELEASE   proper release with name
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
   108
    -j INT       maximum number of parallel jobs (default 1)
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
   109
    -l           build library
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
   110
    -r REV       Mercurial changeset id (default: RELEASE or tip)
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
   111
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
   112
  Build Isabelle release in base directory, using the local repository clone.
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
   113
""",
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
   114
        "M:" -> (arg => remote_mac = arg),
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
   115
        "O" -> (_ => official_release = true),
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
   116
        "R:" -> (arg => release_name = arg),
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
   117
        "j:" -> (arg => parallel_jobs = Value.Int.parse(arg)),
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
   118
        "l" -> (_ => build_library))
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
   119
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
   120
      val more_args = getopts(args)
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
   121
      val base_dir = more_args match { case List(base_dir) => base_dir case _ => getopts.usage() }
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
   122
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
   123
      val progress = new Console_Progress()
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
   124
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
   125
      build_release(Path.explode(base_dir), progress = progress, rev = rev,
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
   126
        official_release = official_release, release_name = release_name,
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
   127
        build_library = build_library, parallel_jobs = parallel_jobs, remote_mac = remote_mac)
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
   128
    }
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
   129
  }
967515846691 replaced shell script by Isabelle/Scala;
wenzelm
parents:
diff changeset
   130
}