| author | wenzelm | 
| Tue, 06 Sep 2022 21:06:20 +0200 | |
| changeset 76074 | 2456721602b2 | 
| parent 75394 | 42267c650205 | 
| child 76518 | b30b8e23383c | 
| permissions | -rw-r--r-- | 
| 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 | |
| 75393 | 10 | object Build_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 | |
| 74359 | 13 | val default_version = "2.6" | 
| 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 | verbose: Boolean = false, | 
| 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 20 | progress: Progress = new Progress, | 
| 75393 | 21 | target_dir: Path = Path.current | 
| 22 |   ): Unit = {
 | |
| 75394 | 23 |     Isabelle_System.with_tmp_dir("build") { tmp_dir =>
 | 
| 72363 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 24 | /* component */ | 
| 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 25 | |
| 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 26 | val component_name = "e-" + version | 
| 72377 | 27 | val component_dir = Isabelle_System.new_directory(target_dir + Path.basic(component_name)) | 
| 28 |       progress.echo("Component " + component_dir)
 | |
| 72363 
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 | val platform_name = | 
| 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 31 |         proper_string(Isabelle_System.getenv("ISABELLE_PLATFORM64"))
 | 
| 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 32 |           .getOrElse(error("No 64bit platform"))
 | 
| 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 33 | |
| 72376 | 34 | 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 | 35 | |
| 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 36 | |
| 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 37 | /* download source */ | 
| 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 38 | |
| 72410 | 39 | val archive_url = download_url + "/V_" + version + "/E.tgz" | 
| 40 |       val archive_path = tmp_dir + Path.explode("E.tgz")
 | |
| 73566 | 41 | Isabelle_System.download_file(archive_url, archive_path, progress = progress) | 
| 72363 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 42 | |
| 72410 | 43 |       Isabelle_System.bash("tar xzf " + archive_path, cwd = tmp_dir.file).check
 | 
| 44 |       Isabelle_System.bash("tar xzf " + archive_path + " && mv E src", cwd = component_dir.file).check
 | |
| 72363 
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 | |
| 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 47 | /* build */ | 
| 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 48 | |
| 72440 | 49 |       progress.echo("Building E prover for " + platform_name + " ...")
 | 
| 72363 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 50 | |
| 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 51 |       val build_dir = tmp_dir + Path.basic("E")
 | 
| 75393 | 52 |       val build_options = {
 | 
| 72363 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 53 |         val result = Isabelle_System.bash("./configure --help", cwd = build_dir.file)
 | 
| 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 54 |         if (result.check.out.containsSlice("--enable-ho")) " --enable-ho" else ""
 | 
| 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 55 | } | 
| 
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 | val build_script = "./configure" + build_options + " && make" | 
| 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 58 | Isabelle_System.bash(build_script, | 
| 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 59 | cwd = build_dir.file, | 
| 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 60 | progress_stdout = progress.echo_if(verbose, _), | 
| 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 61 | progress_stderr = progress.echo_if(verbose, _)).check | 
| 
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 | |
| 73317 | 66 |       Isabelle_System.copy_file(build_dir + Path.basic("COPYING"),
 | 
| 67 |         component_dir + Path.basic("LICENSE"))
 | |
| 72363 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 68 | |
| 72406 
a49be9fc83c3
discontinued unused eproof_ram (actually absent in version 2.5);
 wenzelm parents: 
72405diff
changeset | 69 |       val install_files = List("epclextract", "eprover", "eprover-ho")
 | 
| 72364 | 70 |       for (name <- install_files ::: install_files.map(_ + ".exe")) {
 | 
| 72363 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 71 |         val path = build_dir + Path.basic("PROVER") + Path.basic(name)
 | 
| 73317 | 72 | 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 | 73 | } | 
| 72364 | 74 |       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 | 75 | cwd = platform_dir.file).check | 
| 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 76 | |
| 
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 | /* settings */ | 
| 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 79 | |
| 72376 | 80 |       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 | 81 |       File.write(etc_dir + Path.basic("settings"),
 | 
| 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 82 | """# -*- shell-script -*- :mode=shellscript: | 
| 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 83 | |
| 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 84 | E_HOME="$COMPONENT/$ISABELLE_PLATFORM64" | 
| 
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 | |
| 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 88 | /* README */ | 
| 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 89 | |
| 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 90 |       File.write(component_dir + Path.basic("README"),
 | 
| 72410 | 91 | "This is E prover " + version + " from\n" + archive_url + """ | 
| 72363 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 92 | |
| 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 93 | The distribution has been built like this: | 
| 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 94 | |
| 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 95 | cd src && """ + build_script + """ | 
| 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 96 | |
| 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 97 | 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 | 98 | Isabelle component directory: x86_64-linux etc. | 
| 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 99 | |
| 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 100 | |
| 72444 | 101 | Makarius | 
| 102 | """ + Date.Format.date(Date.now()) + "\n") | |
| 75394 | 103 | } | 
| 72363 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 104 | } | 
| 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 105 | |
| 
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 = | 
| 72763 | 109 |     Isabelle_Tool("build_e", "build prover component from source distribution", Scala_Project.here,
 | 
| 75394 | 110 |       { args =>
 | 
| 111 | var target_dir = Path.current | |
| 112 | var version = default_version | |
| 113 | var download_url = default_download_url | |
| 114 | var verbose = false | |
| 72363 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 115 | |
| 75394 | 116 |         val getopts = Getopts("""
 | 
| 72367 | 117 | Usage: isabelle build_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 | 121 | -U URL download URL | 
| 72396 
63e83aaec7a8
Fix formatting of default value in help message of "build_e" component.
 desharna parents: 
72395diff
changeset | 122 | (default: """" + default_download_url + """") | 
| 72416 | 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 | 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 | 128 | "D:" -> (arg => target_dir = Path.explode(arg)), | 
| 129 | "U:" -> (arg => download_url = arg), | |
| 130 | "V:" -> (arg => version = arg), | |
| 131 | "v" -> (_ => verbose = true)) | |
| 72363 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 132 | |
| 75394 | 133 | val more_args = getopts(args) | 
| 134 | if (more_args.nonEmpty) getopts.usage() | |
| 72363 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 135 | |
| 75394 | 136 | val progress = new Console_Progress() | 
| 72363 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 137 | |
| 75394 | 138 | build_e(version = version, download_url = download_url, | 
| 139 | verbose = verbose, progress = progress, target_dir = target_dir) | |
| 140 | }) | |
| 72363 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 141 | } |