| author | wenzelm | 
| Thu, 29 Dec 2022 12:27:55 +0100 | |
| changeset 76811 | 56d76e8cecf4 | 
| parent 76548 | 0af64cc2eee9 | 
| child 77510 | f5d6cd98b16a | 
| permissions | -rw-r--r-- | 
| 72466 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 1 | /* Title: Pure/Admin/build_zipperposition.scala | 
| 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 2 | Author: Makarius | 
| 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 3 | |
| 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 4 | Build Isabelle Zipperposition component from OPAM repository. | 
| 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 5 | */ | 
| 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 6 | |
| 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 7 | package isabelle | 
| 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 8 | |
| 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 9 | |
| 75393 | 10 | object Build_Zipperposition {
 | 
| 74368 | 11 | val default_version = "2.1" | 
| 72466 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 12 | |
| 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 13 | |
| 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 14 | /* build Zipperposition */ | 
| 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 15 | |
| 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 16 | def build_zipperposition( | 
| 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 17 | version: String = default_version, | 
| 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 18 | verbose: Boolean = false, | 
| 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 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") { build_dir =>
 | 
| 74457 
4e317412db48
no patchelf on macOS (undetected due to cached executables?);
 wenzelm parents: 
74368diff
changeset | 23 |       if (Platform.is_linux) Isabelle_System.require_command("patchelf")
 | 
| 72471 | 24 | |
| 25 | ||
| 72466 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 26 | /* component */ | 
| 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 27 | |
| 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 28 | val component_name = "zipperposition-" + version | 
| 76518 | 29 | val component_dir = | 
| 76547 | 30 | Components.Directory(target_dir + Path.basic(component_name)).create(progress = progress) | 
| 72466 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 31 | |
| 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 32 | |
| 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 33 | /* platform */ | 
| 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 34 | |
| 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 35 | val platform_name = | 
| 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 36 |         proper_string(Isabelle_System.getenv("ISABELLE_PLATFORM64")) getOrElse
 | 
| 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 37 |         error("No 64bit platform")
 | 
| 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 38 | |
| 76518 | 39 | val platform_dir = | 
| 40 | Isabelle_System.make_directory(component_dir.path + Path.basic(platform_name)) | |
| 72466 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 41 | |
| 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 42 | |
| 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 43 | /* build */ | 
| 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 44 | |
| 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 45 |       progress.echo("OCaml/OPAM setup ...")
 | 
| 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 46 |       progress.bash("isabelle ocaml_setup", echo = verbose).check
 | 
| 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 47 | |
| 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 48 |       progress.echo("Building Zipperposition for " + platform_name + " ...")
 | 
| 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 49 | progress.bash(cwd = build_dir.file, echo = verbose, | 
| 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 50 | script = "isabelle_opam install -y --destdir=" + File.bash_path(build_dir) + | 
| 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 51 | " zipperposition=" + Bash.string(version)).check | 
| 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 52 | |
| 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 53 | |
| 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 54 | /* install */ | 
| 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 55 | |
| 73317 | 56 |       Isabelle_System.copy_file(build_dir + Path.explode("doc/zipperposition/LICENSE"),
 | 
| 76518 | 57 | component_dir.path) | 
| 72466 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 58 | |
| 72467 
0822ff79eed8
proper support for Windows/Cygwin: "zipperposition" vs. "zipperposition.exe";
 wenzelm parents: 
72466diff
changeset | 59 |       val prg_path = Path.basic("zipperposition")
 | 
| 
0822ff79eed8
proper support for Windows/Cygwin: "zipperposition" vs. "zipperposition.exe";
 wenzelm parents: 
72466diff
changeset | 60 | val exe_path = prg_path.platform_exe | 
| 73317 | 61 |       Isabelle_System.copy_file(build_dir + Path.basic("bin") + prg_path, platform_dir + exe_path)
 | 
| 72466 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 62 | |
| 72940 | 63 |       if (!Platform.is_windows) {
 | 
| 64 | Executable.libraries_closure( | |
| 65 |           platform_dir + exe_path, filter = Set("libgmp"), patchelf = true)
 | |
| 66 | } | |
| 72466 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 67 | |
| 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 68 | |
| 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 69 | /* settings */ | 
| 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 70 | |
| 76548 | 71 |       component_dir.write_settings("""
 | 
| 72971 
162b71f7e554
rebuild component with proper ZIPPERPOSITION_HOME for sledgehammer;
 wenzelm parents: 
72940diff
changeset | 72 | ZIPPERPOSITION_HOME="$COMPONENT/$ISABELLE_PLATFORM64" | 
| 72466 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 73 | """) | 
| 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 74 | |
| 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 75 | |
| 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 76 | /* README */ | 
| 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 77 | |
| 76518 | 78 | File.write(component_dir.README, | 
| 72466 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 79 | """This is Zipperposition """ + version + """ from the OCaml/OPAM repository. | 
| 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 80 | |
| 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 81 | |
| 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 82 | Makarius | 
| 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 83 | """ + Date.Format.date(Date.now()) + "\n") | 
| 75394 | 84 | } | 
| 72466 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 85 | } | 
| 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 86 | |
| 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 87 | |
| 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 88 | /* Isabelle tool wrapper */ | 
| 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 89 | |
| 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 90 | val isabelle_tool = | 
| 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 91 |     Isabelle_Tool("build_zipperposition", "build prover component from OPAM repository",
 | 
| 75394 | 92 | Scala_Project.here, | 
| 93 |       { args =>
 | |
| 94 | var target_dir = Path.current | |
| 95 | var version = default_version | |
| 96 | var verbose = false | |
| 72466 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 97 | |
| 75394 | 98 |         val getopts = Getopts("""
 | 
| 72466 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 99 | Usage: isabelle build_zipperposition [OPTIONS] | 
| 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 100 | |
| 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 101 | Options are: | 
| 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 102 | -D DIR target directory (default ".") | 
| 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 103 | -V VERSION version (default: """" + default_version + """") | 
| 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 104 | -v verbose | 
| 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 105 | |
| 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 106 | Build prover component from OPAM repository. | 
| 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 107 | """, | 
| 75394 | 108 | "D:" -> (arg => target_dir = Path.explode(arg)), | 
| 109 | "V:" -> (arg => version = arg), | |
| 110 | "v" -> (_ => verbose = true)) | |
| 72466 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 111 | |
| 75394 | 112 | val more_args = getopts(args) | 
| 113 | if (more_args.nonEmpty) getopts.usage() | |
| 72466 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 114 | |
| 75394 | 115 | val progress = new Console_Progress() | 
| 72466 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 116 | |
| 75394 | 117 | build_zipperposition(version = version, verbose = verbose, progress = progress, | 
| 118 | target_dir = target_dir) | |
| 119 | }) | |
| 72466 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 120 | } |