src/Pure/Admin/build_e.scala
author wenzelm
Wed, 07 Oct 2020 21:33:07 +0200
changeset 72395 5fac6c50e6d5
parent 72378 075f3cbc7546
child 72396 63e83aaec7a8
permissions -rw-r--r--
tuned signature;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
72363
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
     1
/*  Title:      Pure/Admin/build_e.scala
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
     2
    Author:     Makarius
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
     3
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
     4
Build Isabelle E prover component from official downloads.
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
     5
*/
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
     6
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
     7
package isabelle
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
     8
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
     9
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    10
object Build_E
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    11
{
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    12
  /* build E prover */
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    13
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    14
  val default_version = "2.5"
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    15
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    16
  val default_download_url =
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    17
    "https://wwwlehre.dhbw-stuttgart.de/~sschulz/WORK/E_DOWNLOAD"
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    18
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    19
  val default_runepar_url =
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    20
    "https://raw.githubusercontent.com/JUrban/MPTP2/66f03e5b6df8/MaLARea/bin/runepar.pl"
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    21
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    22
  def build_e(
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    23
    version: String = default_version,
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    24
    download_url: String = default_download_url,
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    25
    runepar_url: String = default_runepar_url,
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    26
    verbose: Boolean = false,
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    27
    progress: Progress = new Progress,
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    28
    target_dir: Path = Path.current)
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    29
  {
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    30
    Isabelle_System.with_tmp_dir("e")(tmp_dir =>
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    31
    {
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    32
      /* component */
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    33
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    34
      val component_name = "e-" + version
72377
c7741f767e3e clarified signature;
wenzelm
parents: 72376
diff changeset
    35
      val component_dir = Isabelle_System.new_directory(target_dir + Path.basic(component_name))
c7741f767e3e clarified signature;
wenzelm
parents: 72376
diff changeset
    36
      progress.echo("Component " + component_dir)
72363
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    37
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    38
      val platform_name =
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    39
        proper_string(Isabelle_System.getenv("ISABELLE_PLATFORM64"))
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    40
          .getOrElse(error("No 64bit platform"))
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    41
72376
04bce3478688 clarified signature;
wenzelm
parents: 72375
diff changeset
    42
      val platform_dir = Isabelle_System.make_directory(component_dir + Path.basic(platform_name))
72363
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    43
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    44
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    45
      /* runepar.pl */
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    46
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    47
      val runepar_path = platform_dir + Path.basic("runepar.pl")
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    48
      Isabelle_System.download(runepar_url, runepar_path, progress = progress)
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    49
72378
075f3cbc7546 clarified signature;
wenzelm
parents: 72377
diff changeset
    50
      File.change(runepar_path,
075f3cbc7546 clarified signature;
wenzelm
parents: 72377
diff changeset
    51
       _.replace("#!/usr/bin/perl", "#!/usr/bin/env perl")
075f3cbc7546 clarified signature;
wenzelm
parents: 72377
diff changeset
    52
        .replace("bin/eprover", "$ENV{E_HOME}/eprover")
075f3cbc7546 clarified signature;
wenzelm
parents: 72377
diff changeset
    53
        .replace("bin/eproof", "$ENV{E_HOME}/eproof"))
72363
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    54
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    55
      File.set_executable(runepar_path, true)
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    56
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    57
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    58
      /* download source */
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    59
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    60
      val e_url = download_url + "/V_" + version + "/E.tgz"
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    61
      val e_path = tmp_dir + Path.explode("E.tgz")
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    62
      Isabelle_System.download(e_url, e_path, progress = progress)
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    63
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    64
      Isabelle_System.bash("tar xzf " + e_path, cwd = tmp_dir.file).check
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    65
      Isabelle_System.bash("tar xzf " + e_path + " && mv E src", cwd = component_dir.file).check
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    66
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    67
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    68
      /* build */
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    69
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    70
      progress.echo("Building E prover ...")
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    71
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    72
      val build_dir = tmp_dir + Path.basic("E")
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    73
      val build_options =
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    74
      {
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    75
        val result = Isabelle_System.bash("./configure --help", cwd = build_dir.file)
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    76
        if (result.check.out.containsSlice("--enable-ho")) " --enable-ho" else ""
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    77
      }
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    78
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    79
      val build_script = "./configure" + build_options + " && make"
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    80
      Isabelle_System.bash(build_script,
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    81
        cwd = build_dir.file,
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    82
        progress_stdout = progress.echo_if(verbose, _),
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    83
        progress_stderr = progress.echo_if(verbose, _)).check
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    84
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    85
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    86
      /* install */
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    87
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    88
      File.copy(build_dir + Path.basic("COPYING"), component_dir + Path.basic("LICENSE"))
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    89
72364
374aafa52e92 clarified installed files;
wenzelm
parents: 72363
diff changeset
    90
      val install_files = List("epclextract", "eproof_ram", "eprover", "eprover-ho")
374aafa52e92 clarified installed files;
wenzelm
parents: 72363
diff changeset
    91
      for (name <- install_files ::: install_files.map(_ + ".exe")) {
72363
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    92
        val path = build_dir + Path.basic("PROVER") + Path.basic(name)
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    93
        if (path.is_file) File.copy(path, platform_dir)
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    94
      }
72364
374aafa52e92 clarified installed files;
wenzelm
parents: 72363
diff changeset
    95
      Isabelle_System.bash("if [ -f eprover-ho ]; then mv eprover-ho eprover; fi",
72363
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    96
        cwd = platform_dir.file).check
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    97
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    98
      val eproof_ram = platform_dir + Path.basic("eproof_ram")
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    99
      if (eproof_ram.is_file) {
72378
075f3cbc7546 clarified signature;
wenzelm
parents: 72377
diff changeset
   100
        File.change(eproof_ram, _.replace("EXECPATH=.", "EXECPATH=`dirname \"$0\"`"))
72363
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
   101
      }
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
   102
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
   103
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
   104
      /* settings */
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
   105
72376
04bce3478688 clarified signature;
wenzelm
parents: 72375
diff changeset
   106
      val etc_dir = Isabelle_System.make_directory(component_dir + Path.basic("etc"))
72363
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
   107
      File.write(etc_dir + Path.basic("settings"),
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
   108
        """# -*- shell-script -*- :mode=shellscript:
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
   109
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
   110
E_HOME="$COMPONENT/$ISABELLE_PLATFORM64"
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
   111
E_VERSION=""" + quote(version) + """
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
   112
""")
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
   113
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
   114
      /* README */
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
   115
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
   116
      File.write(component_dir + Path.basic("README"),
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
   117
        "This is E prover " + version + " from\n" + e_url + """
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
   118
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
   119
The distribution has been built like this:
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
   120
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
   121
    cd src && """ + build_script + """
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
   122
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
   123
Only a few executables from PROVERS/ have been moved to the platform-specific
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
   124
Isabelle component directory: x86_64-linux etc.
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
   125
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
   126
This includes a copy of Josef Urban's "runepar.pl" script, modified to use
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
   127
the correct path.
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
   128
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
   129
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
   130
    Makarius
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
   131
    """ + Date.Format.date(Date.now()) + "\n")
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
   132
    })
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
   133
}
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
   134
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
   135
  /* Isabelle tool wrapper */
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
   136
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
   137
  val isabelle_tool =
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
   138
    Isabelle_Tool("build_e", "build Isabelle E prover component from official download",
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
   139
    args =>
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
   140
    {
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
   141
      var target_dir = Path.current
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
   142
      var runepar_url = default_runepar_url
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
   143
      var version = default_version
72395
5fac6c50e6d5 tuned signature;
wenzelm
parents: 72378
diff changeset
   144
      var download_url = default_download_url
72363
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
   145
      var verbose = false
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
   146
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
   147
      val getopts = Getopts("""
72367
d3069e7e1175 proper usage;
wenzelm
parents: 72364
diff changeset
   148
Usage: isabelle build_e [OPTIONS]
72363
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
   149
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
   150
  Options are:
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
   151
    -D DIR       target directory (default ".")
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
   152
    -R URL       URL for runepar.pl by Josef Urban
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
   153
                 (default: """ + default_runepar_url + """)
72395
5fac6c50e6d5 tuned signature;
wenzelm
parents: 72378
diff changeset
   154
    -U URL       E prover download URL
5fac6c50e6d5 tuned signature;
wenzelm
parents: 72378
diff changeset
   155
                 (default: \"\"\" + default_download_url + \"\"\")
72363
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
   156
    -V VERSION   E prover version (default: """ + default_version + """)
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
   157
    -v           verbose
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
   158
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
   159
  Build E prover component from the specified download URLs and version.
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
   160
""",
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
   161
        "D:" -> (arg => target_dir = Path.explode(arg)),
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
   162
        "R:" -> (arg => runepar_url = arg),
72395
5fac6c50e6d5 tuned signature;
wenzelm
parents: 72378
diff changeset
   163
        "U:" -> (arg => download_url = arg),
72363
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
   164
        "V:" -> (arg => version = arg),
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
   165
        "v" -> (_ => verbose = true))
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
   166
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
   167
      val more_args = getopts(args)
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
   168
      if (more_args.nonEmpty) getopts.usage()
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
   169
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
   170
      val progress = new Console_Progress()
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
   171
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
   172
      build_e(version = version, download_url = download_url, runepar_url = runepar_url,
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
   173
        verbose = verbose, progress = progress, target_dir = target_dir)
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
   174
    })
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
   175
}