src/Pure/Admin/component_e.scala
author wenzelm
Mon, 16 Jun 2025 12:19:23 +0200
changeset 82729 d8986d88295e
parent 82610 3133f9748ea8
permissions -rw-r--r--
support for explicit ML platform identifier;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
77566
2a99fcb283ee renamed administrative tools to build Isabelle components (unrelated to "isabelle build");
wenzelm
parents: 77510
diff changeset
     1
/*  Title:      Pure/Admin/component_e.scala
72363
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
77566
2a99fcb283ee renamed administrative tools to build Isabelle components (unrelated to "isabelle build");
wenzelm
parents: 77510
diff changeset
    10
object Component_E {
72363
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    11
  /* build E prover */
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    12
82448
355122727f68 update to e-3.2, which is actually 3.2.5;
wenzelm
parents: 81716
diff changeset
    13
  val default_version = "3.2"
72408
2daa5f549687 misc tuning;
wenzelm
parents: 72406
diff changeset
    14
  val default_download_url = "https://wwwlehre.dhbw-stuttgart.de/~sschulz/WORK/E_DOWNLOAD"
72363
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
  def build_e(
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    17
    version: String = default_version,
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    18
    download_url: String = default_download_url,
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    19
    progress: Progress = new Progress,
75393
87ebf5a50283 clarified formatting, for the sake of scala3;
wenzelm
parents: 74359
diff changeset
    20
    target_dir: Path = Path.current
87ebf5a50283 clarified formatting, for the sake of scala3;
wenzelm
parents: 74359
diff changeset
    21
  ): Unit = {
75394
42267c650205 tuned formatting;
wenzelm
parents: 75393
diff changeset
    22
    Isabelle_System.with_tmp_dir("build") { tmp_dir =>
72363
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    23
      /* component */
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    24
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    25
      val component_name = "e-" + version
76518
b30b8e23383c clarified signature: more explicit types;
wenzelm
parents: 75394
diff changeset
    26
      val component_dir =
76547
9fe5d8c70352 tuned signature;
wenzelm
parents: 76541
diff changeset
    27
        Components.Directory(target_dir + Path.basic(component_name)).create(progress = progress)
72363
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    28
82610
3133f9748ea8 clarified signature;
wenzelm
parents: 82450
diff changeset
    29
      val platform_name = Isabelle_Platform.local.ISABELLE_PLATFORM(apple = true)
76518
b30b8e23383c clarified signature: more explicit types;
wenzelm
parents: 75394
diff changeset
    30
      val platform_dir =
b30b8e23383c clarified signature: more explicit types;
wenzelm
parents: 75394
diff changeset
    31
        Isabelle_System.make_directory(component_dir.path + Path.basic(platform_name))
72363
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    32
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
      /* download source */
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    35
72410
wenzelm
parents: 72408
diff changeset
    36
      val archive_url = download_url + "/V_" + version + "/E.tgz"
wenzelm
parents: 72408
diff changeset
    37
      val archive_path = tmp_dir + Path.explode("E.tgz")
73566
4e6b31ed7197 clarified signature: avoid tmp file;
wenzelm
parents: 73340
diff changeset
    38
      Isabelle_System.download_file(archive_url, archive_path, progress = progress)
72363
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    39
76540
83de6e9ae983 clarified signature: prefer Scala functions instead of shell scripts;
wenzelm
parents: 76518
diff changeset
    40
      Isabelle_System.extract(archive_path, tmp_dir)
83de6e9ae983 clarified signature: prefer Scala functions instead of shell scripts;
wenzelm
parents: 76518
diff changeset
    41
      val source_dir = File.get_dir(tmp_dir, title = archive_url)
83de6e9ae983 clarified signature: prefer Scala functions instead of shell scripts;
wenzelm
parents: 76518
diff changeset
    42
76541
3706b88035d2 more direct target directory;
wenzelm
parents: 76540
diff changeset
    43
      Isabelle_System.extract(archive_path, component_dir.src, strip = true)
72363
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
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    46
      /* build */
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    47
72440
d0ba71b3297e tuned messages;
wenzelm
parents: 72416
diff changeset
    48
      progress.echo("Building E prover for " + platform_name + " ...")
72363
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    49
81711
a55b236f9e1d rebuild E 3.1 on Windows/Cygwin, with patch for proper interrupts;
wenzelm
parents: 80224
diff changeset
    50
      // adhoc patch wrt. https://github.com/eprover/eprover/commit/d40e1db7d786
82450
a4a8d98a173b more comments;
wenzelm
parents: 82449
diff changeset
    51
      // obsolete after https://github.com/eprover/eprover/commit/5ae1a2c66da6
81711
a55b236f9e1d rebuild E 3.1 on Windows/Cygwin, with patch for proper interrupts;
wenzelm
parents: 80224
diff changeset
    52
      if (Platform.is_windows) {
a55b236f9e1d rebuild E 3.1 on Windows/Cygwin, with patch for proper interrupts;
wenzelm
parents: 80224
diff changeset
    53
        File.change_lines(source_dir + Path.explode("PROVER/eprover.c"), strict = true) {
a55b236f9e1d rebuild E 3.1 on Windows/Cygwin, with patch for proper interrupts;
wenzelm
parents: 80224
diff changeset
    54
          _.map(line => if (line.containsSlice("setpgid(0, 0)")) "" else line)
a55b236f9e1d rebuild E 3.1 on Windows/Cygwin, with patch for proper interrupts;
wenzelm
parents: 80224
diff changeset
    55
        }
a55b236f9e1d rebuild E 3.1 on Windows/Cygwin, with patch for proper interrupts;
wenzelm
parents: 80224
diff changeset
    56
      }
a55b236f9e1d rebuild E 3.1 on Windows/Cygwin, with patch for proper interrupts;
wenzelm
parents: 80224
diff changeset
    57
82449
4a4240199643 mandatory option --enable-ho (see also fc5f10691147);
wenzelm
parents: 82448
diff changeset
    58
      val build_script = "./configure --enable-ho && make"
80224
db92e0b6a11a clarified signature: prefer symbolic isabelle.Path over physical java.io.File;
wenzelm
parents: 80165
diff changeset
    59
      Isabelle_System.bash(build_script, cwd = source_dir,
77510
f5d6cd98b16a clarified signature: manage "verbose" flag via "progress";
wenzelm
parents: 76548
diff changeset
    60
        progress_stdout = progress.echo(_, verbose = true),
f5d6cd98b16a clarified signature: manage "verbose" flag via "progress";
wenzelm
parents: 76548
diff changeset
    61
        progress_stderr = progress.echo(_, verbose = true)).check
72363
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    62
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
      /* install */
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    65
76540
83de6e9ae983 clarified signature: prefer Scala functions instead of shell scripts;
wenzelm
parents: 76518
diff changeset
    66
      Isabelle_System.copy_file(source_dir + Path.basic("COPYING"), component_dir.LICENSE)
72363
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    67
82449
4a4240199643 mandatory option --enable-ho (see also fc5f10691147);
wenzelm
parents: 82448
diff changeset
    68
      val install_files = List("epclextract", "eprover-ho")
72364
374aafa52e92 clarified installed files;
wenzelm
parents: 72363
diff changeset
    69
      for (name <- install_files ::: install_files.map(_ + ".exe")) {
76540
83de6e9ae983 clarified signature: prefer Scala functions instead of shell scripts;
wenzelm
parents: 76518
diff changeset
    70
        val path = source_dir + Path.basic("PROVER") + Path.basic(name)
73317
df49ca5da9d0 clarified modules: more like ML;
wenzelm
parents: 72763
diff changeset
    71
        if (path.is_file) Isabelle_System.copy_file(path, platform_dir)
72363
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    72
      }
82449
4a4240199643 mandatory option --enable-ho (see also fc5f10691147);
wenzelm
parents: 82448
diff changeset
    73
      Isabelle_System.bash("mv eprover-ho eprover", cwd = platform_dir).check
72363
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
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    76
      /* settings */
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    77
76548
0af64cc2eee9 tuned signature;
wenzelm
parents: 76547
diff changeset
    78
      component_dir.write_settings("""
79752
788f11af9822 provide e-3.0.03 on all platforms, including arm64-linux and arm64-darwin --- still inactive;
wenzelm
parents: 79629
diff changeset
    79
E_HOME="$COMPONENT/${ISABELLE_APPLE_PLATFORM64:-$ISABELLE_PLATFORM64}"
72363
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    80
E_VERSION=""" + quote(version) + """
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    81
""")
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    82
76548
0af64cc2eee9 tuned signature;
wenzelm
parents: 76547
diff changeset
    83
72363
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    84
      /* README */
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    85
76518
b30b8e23383c clarified signature: more explicit types;
wenzelm
parents: 75394
diff changeset
    86
      File.write(component_dir.README,
72410
wenzelm
parents: 72408
diff changeset
    87
        "This is E prover " + version + " from\n" + archive_url + """
72363
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    88
81711
a55b236f9e1d rebuild E 3.1 on Windows/Cygwin, with patch for proper interrupts;
wenzelm
parents: 80224
diff changeset
    89
* On Windows/Cygwin, the sources have been patched to remove setpgid in
a55b236f9e1d rebuild E 3.1 on Windows/Cygwin, with patch for proper interrupts;
wenzelm
parents: 80224
diff changeset
    90
  PROVER/eprover.c
a55b236f9e1d rebuild E 3.1 on Windows/Cygwin, with patch for proper interrupts;
wenzelm
parents: 80224
diff changeset
    91
80153
8e3730b527e9 minor patch for E Prover, based on "git diff -w -r E-3.0.03 E-3.0.08": proper support for trivial statements;
wenzelm
parents: 80049
diff changeset
    92
* The distribution has been built like this:
72363
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    93
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    94
    cd src && """ + build_script + """
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    95
80153
8e3730b527e9 minor patch for E Prover, based on "git diff -w -r E-3.0.03 E-3.0.08": proper support for trivial statements;
wenzelm
parents: 80049
diff changeset
    96
* Some executables from PROVERS/ have been moved to the platform-specific
72363
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    97
Isabelle component directory: x86_64-linux etc.
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    98
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
    99
72444
2d9a70b85009 tuned whitespace;
wenzelm
parents: 72440
diff changeset
   100
        Makarius
2d9a70b85009 tuned whitespace;
wenzelm
parents: 72440
diff changeset
   101
        """ + Date.Format.date(Date.now()) + "\n")
75394
42267c650205 tuned formatting;
wenzelm
parents: 75393
diff changeset
   102
    }
72363
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
79629
4d81c0391da2 tuned comments;
wenzelm
parents: 77566
diff changeset
   105
72363
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
   106
  /* Isabelle tool wrapper */
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
   107
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
   108
  val isabelle_tool =
77566
2a99fcb283ee renamed administrative tools to build Isabelle components (unrelated to "isabelle build");
wenzelm
parents: 77510
diff changeset
   109
    Isabelle_Tool("component_e", "build prover component from source distribution", Scala_Project.here,
75394
42267c650205 tuned formatting;
wenzelm
parents: 75393
diff changeset
   110
      { args =>
42267c650205 tuned formatting;
wenzelm
parents: 75393
diff changeset
   111
        var target_dir = Path.current
42267c650205 tuned formatting;
wenzelm
parents: 75393
diff changeset
   112
        var version = default_version
42267c650205 tuned formatting;
wenzelm
parents: 75393
diff changeset
   113
        var download_url = default_download_url
42267c650205 tuned formatting;
wenzelm
parents: 75393
diff changeset
   114
        var verbose = false
72363
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
   115
75394
42267c650205 tuned formatting;
wenzelm
parents: 75393
diff changeset
   116
        val getopts = Getopts("""
77566
2a99fcb283ee renamed administrative tools to build Isabelle components (unrelated to "isabelle build");
wenzelm
parents: 77510
diff changeset
   117
Usage: isabelle component_e [OPTIONS]
72363
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
  Options are:
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
   120
    -D DIR       target directory (default ".")
72416
783c3a47d57c tuned message;
wenzelm
parents: 72410
diff changeset
   121
    -U URL       download URL
72396
63e83aaec7a8 Fix formatting of default value in help message of "build_e" component.
desharna
parents: 72395
diff changeset
   122
                 (default: """" + default_download_url + """")
72416
783c3a47d57c tuned message;
wenzelm
parents: 72410
diff changeset
   123
    -V VERSION   version (default: """ + default_version + """)
72363
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
   124
    -v           verbose
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
   125
72408
2daa5f549687 misc tuning;
wenzelm
parents: 72406
diff changeset
   126
  Build prover component from the specified source distribution.
72363
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
   127
""",
75394
42267c650205 tuned formatting;
wenzelm
parents: 75393
diff changeset
   128
          "D:" -> (arg => target_dir = Path.explode(arg)),
42267c650205 tuned formatting;
wenzelm
parents: 75393
diff changeset
   129
          "U:" -> (arg => download_url = arg),
42267c650205 tuned formatting;
wenzelm
parents: 75393
diff changeset
   130
          "V:" -> (arg => version = arg),
42267c650205 tuned formatting;
wenzelm
parents: 75393
diff changeset
   131
          "v" -> (_ => verbose = true))
72363
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
   132
75394
42267c650205 tuned formatting;
wenzelm
parents: 75393
diff changeset
   133
        val more_args = getopts(args)
42267c650205 tuned formatting;
wenzelm
parents: 75393
diff changeset
   134
        if (more_args.nonEmpty) getopts.usage()
72363
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
   135
77510
f5d6cd98b16a clarified signature: manage "verbose" flag via "progress";
wenzelm
parents: 76548
diff changeset
   136
        val progress = new Console_Progress(verbose = verbose)
72363
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
   137
75394
42267c650205 tuned formatting;
wenzelm
parents: 75393
diff changeset
   138
        build_e(version = version, download_url = download_url,
77510
f5d6cd98b16a clarified signature: manage "verbose" flag via "progress";
wenzelm
parents: 76548
diff changeset
   139
          progress = progress, target_dir = target_dir)
75394
42267c650205 tuned formatting;
wenzelm
parents: 75393
diff changeset
   140
      })
72363
fc5f10691147 build Isabelle E prover component from official downloads;
wenzelm
parents:
diff changeset
   141
}