| author | wenzelm | 
| Tue, 13 Oct 2020 20:28:43 +0200 | |
| changeset 72470 | e2e9ef9aa2df | 
| parent 72444 | 2d9a70b85009 | 
| child 72763 | 3cc73d00553c | 
| 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 | |
| 
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" | 
| 72408 | 15 | 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 | 16 | |
| 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 17 | def build_e( | 
| 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 18 | version: String = default_version, | 
| 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 19 | download_url: String = default_download_url, | 
| 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 20 | verbose: Boolean = false, | 
| 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 21 | progress: Progress = new Progress, | 
| 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 22 | target_dir: Path = Path.current) | 
| 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 23 |   {
 | 
| 72408 | 24 |     Isabelle_System.with_tmp_dir("build")(tmp_dir =>
 | 
| 72363 
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 | /* component */ | 
| 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 27 | |
| 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 28 | val component_name = "e-" + version | 
| 72377 | 29 | val component_dir = Isabelle_System.new_directory(target_dir + Path.basic(component_name)) | 
| 30 |       progress.echo("Component " + component_dir)
 | |
| 72363 
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 | val platform_name = | 
| 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 33 |         proper_string(Isabelle_System.getenv("ISABELLE_PLATFORM64"))
 | 
| 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 34 |           .getOrElse(error("No 64bit platform"))
 | 
| 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 35 | |
| 72376 | 36 | 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 | 37 | |
| 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 38 | |
| 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 39 | /* download source */ | 
| 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 40 | |
| 72410 | 41 | val archive_url = download_url + "/V_" + version + "/E.tgz" | 
| 42 |       val archive_path = tmp_dir + Path.explode("E.tgz")
 | |
| 43 | Isabelle_System.download(archive_url, archive_path, progress = progress) | |
| 72363 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 44 | |
| 72410 | 45 |       Isabelle_System.bash("tar xzf " + archive_path, cwd = tmp_dir.file).check
 | 
| 46 |       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 | 47 | |
| 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 48 | |
| 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 49 | /* build */ | 
| 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 50 | |
| 72440 | 51 |       progress.echo("Building E prover for " + platform_name + " ...")
 | 
| 72363 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 52 | |
| 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 53 |       val build_dir = tmp_dir + Path.basic("E")
 | 
| 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 54 | val build_options = | 
| 
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 |         val result = Isabelle_System.bash("./configure --help", cwd = build_dir.file)
 | 
| 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 57 |         if (result.check.out.containsSlice("--enable-ho")) " --enable-ho" else ""
 | 
| 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 58 | } | 
| 
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 build_script = "./configure" + build_options + " && make" | 
| 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 61 | Isabelle_System.bash(build_script, | 
| 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 62 | cwd = build_dir.file, | 
| 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 63 | progress_stdout = progress.echo_if(verbose, _), | 
| 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 64 | progress_stderr = progress.echo_if(verbose, _)).check | 
| 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 65 | |
| 
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 | /* install */ | 
| 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 68 | |
| 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 69 |       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 | 70 | |
| 72406 
a49be9fc83c3
discontinued unused eproof_ram (actually absent in version 2.5);
 wenzelm parents: 
72405diff
changeset | 71 |       val install_files = List("epclextract", "eprover", "eprover-ho")
 | 
| 72364 | 72 |       for (name <- install_files ::: install_files.map(_ + ".exe")) {
 | 
| 72363 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 73 |         val path = build_dir + Path.basic("PROVER") + Path.basic(name)
 | 
| 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 74 | if (path.is_file) File.copy(path, platform_dir) | 
| 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 75 | } | 
| 72364 | 76 |       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 | 77 | cwd = platform_dir.file).check | 
| 
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 | |
| 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 80 | /* settings */ | 
| 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 81 | |
| 72376 | 82 |       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 | 83 |       File.write(etc_dir + Path.basic("settings"),
 | 
| 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 84 | """# -*- shell-script -*- :mode=shellscript: | 
| 
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 | E_HOME="$COMPONENT/$ISABELLE_PLATFORM64" | 
| 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 87 | E_VERSION=""" + quote(version) + """ | 
| 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 88 | """) | 
| 
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 | /* README */ | 
| 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 91 | |
| 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 92 |       File.write(component_dir + Path.basic("README"),
 | 
| 72410 | 93 | "This is E prover " + version + " from\n" + archive_url + """ | 
| 72363 
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 | The distribution has been built like this: | 
| 
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 | cd src && """ + build_script + """ | 
| 
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 | 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 | 100 | Isabelle component directory: x86_64-linux etc. | 
| 
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 | |
| 72444 | 103 | Makarius | 
| 104 | """ + Date.Format.date(Date.now()) + "\n") | |
| 72363 
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 | } | 
| 
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 | /* Isabelle tool wrapper */ | 
| 
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 | val isabelle_tool = | 
| 72408 | 111 |     Isabelle_Tool("build_e", "build prover component from source distribution",
 | 
| 72363 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 112 | args => | 
| 
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 | var target_dir = Path.current | 
| 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 115 | var version = default_version | 
| 72395 | 116 | var download_url = default_download_url | 
| 72363 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 117 | var verbose = false | 
| 
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 |       val getopts = Getopts("""
 | 
| 72367 | 120 | Usage: isabelle build_e [OPTIONS] | 
| 72363 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 121 | |
| 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 122 | Options are: | 
| 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 123 | -D DIR target directory (default ".") | 
| 72416 | 124 | -U URL download URL | 
| 72396 
63e83aaec7a8
Fix formatting of default value in help message of "build_e" component.
 desharna parents: 
72395diff
changeset | 125 | (default: """" + default_download_url + """") | 
| 72416 | 126 | -V VERSION version (default: """ + default_version + """) | 
| 72363 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 127 | -v verbose | 
| 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 128 | |
| 72408 | 129 | Build prover component from the specified source distribution. | 
| 72363 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 130 | """, | 
| 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 131 | "D:" -> (arg => target_dir = Path.explode(arg)), | 
| 72395 | 132 | "U:" -> (arg => download_url = arg), | 
| 72363 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 133 | "V:" -> (arg => version = arg), | 
| 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 134 | "v" -> (_ => verbose = true)) | 
| 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 135 | |
| 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 136 | val more_args = getopts(args) | 
| 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 137 | if (more_args.nonEmpty) getopts.usage() | 
| 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 138 | |
| 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 139 | val progress = new Console_Progress() | 
| 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 140 | |
| 72405 
c8e8e3e3d929
discontinued obsolete runepar.pl (see 4a3169d8885c);
 wenzelm parents: 
72396diff
changeset | 141 | build_e(version = version, download_url = download_url, | 
| 72363 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 142 | verbose = verbose, progress = progress, target_dir = target_dir) | 
| 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 143 | }) | 
| 
fc5f10691147
build Isabelle E prover component from official downloads;
 wenzelm parents: diff
changeset | 144 | } |