| author | wenzelm | 
| Sat, 15 Feb 2025 14:37:41 +0100 | |
| changeset 82181 | a0d1d772ccab | 
| parent 81716 | f6c82d6ff862 | 
| child 82448 | 355122727f68 | 
| permissions | -rw-r--r-- | 
| 77566 
2a99fcb283ee
renamed administrative tools to build Isabelle components (unrelated to "isabelle build");
 wenzelm parents: 
77510diff
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: 
77510diff
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 | |
| 80165 | 13 | val default_version = "3.1" | 
| 72408 | 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 | 20 | target_dir: Path = Path.current | 
| 21 |   ): Unit = {
 | |
| 75394 | 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 | 26 | val component_dir = | 
| 76547 | 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 | |
| 80049 | 29 | val platform_name = Isabelle_Platform.self.ISABELLE_PLATFORM(apple = true) | 
| 76518 | 30 | val platform_dir = | 
| 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 | 36 | val archive_url = download_url + "/V_" + version + "/E.tgz" | 
| 37 |       val archive_path = tmp_dir + Path.explode("E.tgz")
 | |
| 73566 | 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: 
76518diff
changeset | 40 | Isabelle_System.extract(archive_path, tmp_dir) | 
| 
83de6e9ae983
clarified signature: prefer Scala functions instead of shell scripts;
 wenzelm parents: 
76518diff
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: 
76518diff
changeset | 42 | |
| 76541 | 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 | 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: 
80224diff
changeset | 50 | // adhoc patch wrt. https://github.com/eprover/eprover/commit/d40e1db7d786 | 
| 
a55b236f9e1d
rebuild E 3.1 on Windows/Cygwin, with patch for proper interrupts;
 wenzelm parents: 
80224diff
changeset | 51 |       if (Platform.is_windows) {
 | 
| 
a55b236f9e1d
rebuild E 3.1 on Windows/Cygwin, with patch for proper interrupts;
 wenzelm parents: 
80224diff
changeset | 52 |         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: 
80224diff
changeset | 53 |           _.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: 
80224diff
changeset | 54 | } | 
| 
a55b236f9e1d
rebuild E 3.1 on Windows/Cygwin, with patch for proper interrupts;
 wenzelm parents: 
80224diff
changeset | 55 | } | 
| 
a55b236f9e1d
rebuild E 3.1 on Windows/Cygwin, with patch for proper interrupts;
 wenzelm parents: 
80224diff
changeset | 56 | |
| 75393 | 57 |       val build_options = {
 | 
| 80224 
db92e0b6a11a
clarified signature: prefer symbolic isabelle.Path over physical java.io.File;
 wenzelm parents: 
80165diff
changeset | 58 |         val result = Isabelle_System.bash("./configure --help", cwd = source_dir)
 | 
| 72363 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 59 |         if (result.check.out.containsSlice("--enable-ho")) " --enable-ho" else ""
 | 
| 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 60 | } | 
| 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 61 | |
| 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 62 | val build_script = "./configure" + build_options + " && make" | 
| 80224 
db92e0b6a11a
clarified signature: prefer symbolic isabelle.Path over physical java.io.File;
 wenzelm parents: 
80165diff
changeset | 63 | Isabelle_System.bash(build_script, cwd = source_dir, | 
| 77510 
f5d6cd98b16a
clarified signature: manage "verbose" flag via "progress";
 wenzelm parents: 
76548diff
changeset | 64 | progress_stdout = progress.echo(_, verbose = true), | 
| 
f5d6cd98b16a
clarified signature: manage "verbose" flag via "progress";
 wenzelm parents: 
76548diff
changeset | 65 | progress_stderr = progress.echo(_, verbose = true)).check | 
| 72363 
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 | /* install */ | 
| 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 69 | |
| 76540 
83de6e9ae983
clarified signature: prefer Scala functions instead of shell scripts;
 wenzelm parents: 
76518diff
changeset | 70 |       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 | 71 | |
| 72406 
a49be9fc83c3
discontinued unused eproof_ram (actually absent in version 2.5);
 wenzelm parents: 
72405diff
changeset | 72 |       val install_files = List("epclextract", "eprover", "eprover-ho")
 | 
| 72364 | 73 |       for (name <- install_files ::: install_files.map(_ + ".exe")) {
 | 
| 76540 
83de6e9ae983
clarified signature: prefer Scala functions instead of shell scripts;
 wenzelm parents: 
76518diff
changeset | 74 |         val path = source_dir + Path.basic("PROVER") + Path.basic(name)
 | 
| 73317 | 75 | 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 | 76 | } | 
| 72364 | 77 |       Isabelle_System.bash("if [ -f eprover-ho ]; then mv eprover-ho eprover; fi",
 | 
| 80224 
db92e0b6a11a
clarified signature: prefer symbolic isabelle.Path over physical java.io.File;
 wenzelm parents: 
80165diff
changeset | 78 | cwd = platform_dir).check | 
| 72363 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 79 | |
| 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 80 | |
| 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 81 | /* settings */ | 
| 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 82 | |
| 76548 | 83 |       component_dir.write_settings("""
 | 
| 79752 
788f11af9822
provide e-3.0.03 on all platforms, including arm64-linux and arm64-darwin --- still inactive;
 wenzelm parents: 
79629diff
changeset | 84 | E_HOME="$COMPONENT/${ISABELLE_APPLE_PLATFORM64:-$ISABELLE_PLATFORM64}"
 | 
| 72363 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 85 | E_VERSION=""" + quote(version) + """ | 
| 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 86 | """) | 
| 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 87 | |
| 76548 | 88 | |
| 72363 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 89 | /* README */ | 
| 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 90 | |
| 76518 | 91 | File.write(component_dir.README, | 
| 72410 | 92 | "This is E prover " + version + " from\n" + archive_url + """ | 
| 72363 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 93 | |
| 81711 
a55b236f9e1d
rebuild E 3.1 on Windows/Cygwin, with patch for proper interrupts;
 wenzelm parents: 
80224diff
changeset | 94 | * 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: 
80224diff
changeset | 95 | PROVER/eprover.c | 
| 
a55b236f9e1d
rebuild E 3.1 on Windows/Cygwin, with patch for proper interrupts;
 wenzelm parents: 
80224diff
changeset | 96 | |
| 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: 
80049diff
changeset | 97 | * The distribution has been built like this: | 
| 72363 
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 | cd src && """ + build_script + """ | 
| 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 100 | |
| 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: 
80049diff
changeset | 101 | * 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 | 102 | Isabelle component directory: x86_64-linux etc. | 
| 
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 | |
| 72444 | 105 | Makarius | 
| 106 | """ + Date.Format.date(Date.now()) + "\n") | |
| 75394 | 107 | } | 
| 72363 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 108 | } | 
| 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 109 | |
| 79629 | 110 | |
| 72363 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 111 | /* Isabelle tool wrapper */ | 
| 
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 | val isabelle_tool = | 
| 77566 
2a99fcb283ee
renamed administrative tools to build Isabelle components (unrelated to "isabelle build");
 wenzelm parents: 
77510diff
changeset | 114 |     Isabelle_Tool("component_e", "build prover component from source distribution", Scala_Project.here,
 | 
| 75394 | 115 |       { args =>
 | 
| 116 | var target_dir = Path.current | |
| 117 | var version = default_version | |
| 118 | var download_url = default_download_url | |
| 119 | var verbose = false | |
| 72363 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 120 | |
| 75394 | 121 |         val getopts = Getopts("""
 | 
| 77566 
2a99fcb283ee
renamed administrative tools to build Isabelle components (unrelated to "isabelle build");
 wenzelm parents: 
77510diff
changeset | 122 | Usage: isabelle component_e [OPTIONS] | 
| 72363 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 123 | |
| 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 124 | Options are: | 
| 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 125 | -D DIR target directory (default ".") | 
| 72416 | 126 | -U URL download URL | 
| 72396 
63e83aaec7a8
Fix formatting of default value in help message of "build_e" component.
 desharna parents: 
72395diff
changeset | 127 | (default: """" + default_download_url + """") | 
| 72416 | 128 | -V VERSION version (default: """ + default_version + """) | 
| 72363 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 129 | -v verbose | 
| 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 130 | |
| 72408 | 131 | Build prover component from the specified source distribution. | 
| 72363 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 132 | """, | 
| 75394 | 133 | "D:" -> (arg => target_dir = Path.explode(arg)), | 
| 134 | "U:" -> (arg => download_url = arg), | |
| 135 | "V:" -> (arg => version = arg), | |
| 136 | "v" -> (_ => verbose = true)) | |
| 72363 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 137 | |
| 75394 | 138 | val more_args = getopts(args) | 
| 139 | if (more_args.nonEmpty) getopts.usage() | |
| 72363 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 140 | |
| 77510 
f5d6cd98b16a
clarified signature: manage "verbose" flag via "progress";
 wenzelm parents: 
76548diff
changeset | 141 | val progress = new Console_Progress(verbose = verbose) | 
| 72363 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 142 | |
| 75394 | 143 | build_e(version = version, download_url = download_url, | 
| 77510 
f5d6cd98b16a
clarified signature: manage "verbose" flag via "progress";
 wenzelm parents: 
76548diff
changeset | 144 | progress = progress, target_dir = target_dir) | 
| 75394 | 145 | }) | 
| 72363 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 146 | } |