| author | wenzelm | 
| Sun, 24 Mar 2024 19:14:56 +0100 | |
| changeset 79980 | ee04ce2ac13f | 
| parent 79499 | d117821a5e82 | 
| child 80004 | 31ebb6be32b0 | 
| 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_zipperposition.scala | 
| 72466 
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 | |
| 77566 
2a99fcb283ee
renamed administrative tools to build Isabelle components (unrelated to "isabelle build");
 wenzelm parents: 
77510diff
changeset | 10 | object Component_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 | progress: Progress = new Progress, | 
| 75393 | 19 | target_dir: Path = Path.current | 
| 20 |   ): Unit = {
 | |
| 75394 | 21 |     Isabelle_System.with_tmp_dir("build") { build_dir =>
 | 
| 74457 
4e317412db48
no patchelf on macOS (undetected due to cached executables?);
 wenzelm parents: 
74368diff
changeset | 22 |       if (Platform.is_linux) Isabelle_System.require_command("patchelf")
 | 
| 72471 | 23 | |
| 24 | ||
| 72466 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 25 | /* component */ | 
| 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 26 | |
| 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 27 | val component_name = "zipperposition-" + version | 
| 76518 | 28 | val component_dir = | 
| 76547 | 29 | Components.Directory(target_dir + Path.basic(component_name)).create(progress = progress) | 
| 72466 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 30 | |
| 
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 | /* platform */ | 
| 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 33 | |
| 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 34 | val platform_name = | 
| 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 35 |         proper_string(Isabelle_System.getenv("ISABELLE_PLATFORM64")) getOrElse
 | 
| 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 36 |         error("No 64bit platform")
 | 
| 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 37 | |
| 76518 | 38 | val platform_dir = | 
| 39 | Isabelle_System.make_directory(component_dir.path + Path.basic(platform_name)) | |
| 72466 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 40 | |
| 
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 | /* build */ | 
| 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 43 | |
| 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 44 |       progress.echo("OCaml/OPAM setup ...")
 | 
| 77510 
f5d6cd98b16a
clarified signature: manage "verbose" flag via "progress";
 wenzelm parents: 
76548diff
changeset | 45 |       progress.bash("isabelle ocaml_setup", echo = progress.verbose).check
 | 
| 72466 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 46 | |
| 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 47 |       progress.echo("Building Zipperposition for " + platform_name + " ...")
 | 
| 77510 
f5d6cd98b16a
clarified signature: manage "verbose" flag via "progress";
 wenzelm parents: 
76548diff
changeset | 48 | progress.bash(cwd = build_dir.file, echo = progress.verbose, | 
| 72466 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 49 | script = "isabelle_opam install -y --destdir=" + File.bash_path(build_dir) + | 
| 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 50 | " zipperposition=" + Bash.string(version)).check | 
| 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 51 | |
| 
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 | /* install */ | 
| 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 54 | |
| 73317 | 55 |       Isabelle_System.copy_file(build_dir + Path.explode("doc/zipperposition/LICENSE"),
 | 
| 76518 | 56 | component_dir.path) | 
| 72466 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 57 | |
| 72467 
0822ff79eed8
proper support for Windows/Cygwin: "zipperposition" vs. "zipperposition.exe";
 wenzelm parents: 
72466diff
changeset | 58 |       val prg_path = Path.basic("zipperposition")
 | 
| 
0822ff79eed8
proper support for Windows/Cygwin: "zipperposition" vs. "zipperposition.exe";
 wenzelm parents: 
72466diff
changeset | 59 | val exe_path = prg_path.platform_exe | 
| 73317 | 60 |       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 | 61 | |
| 72940 | 62 |       if (!Platform.is_windows) {
 | 
| 79499 
d117821a5e82
always use patchelf on Linux: base-line is Ubuntu 18.04 where that works properly (see also e79294c4230c);
 wenzelm parents: 
77566diff
changeset | 63 |         Executable.libraries_closure(platform_dir + exe_path, filter = Set("libgmp"))
 | 
| 72940 | 64 | } | 
| 72466 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 65 | |
| 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 66 | |
| 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 67 | /* settings */ | 
| 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 68 | |
| 76548 | 69 |       component_dir.write_settings("""
 | 
| 72971 
162b71f7e554
rebuild component with proper ZIPPERPOSITION_HOME for sledgehammer;
 wenzelm parents: 
72940diff
changeset | 70 | ZIPPERPOSITION_HOME="$COMPONENT/$ISABELLE_PLATFORM64" | 
| 72466 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 71 | """) | 
| 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 72 | |
| 
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 | /* README */ | 
| 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 75 | |
| 76518 | 76 | File.write(component_dir.README, | 
| 72466 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 77 | """This is Zipperposition """ + version + """ from the OCaml/OPAM repository. | 
| 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 78 | |
| 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 79 | |
| 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 80 | Makarius | 
| 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 81 | """ + Date.Format.date(Date.now()) + "\n") | 
| 75394 | 82 | } | 
| 72466 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 83 | } | 
| 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 84 | |
| 
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 | /* Isabelle tool wrapper */ | 
| 
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 | val isabelle_tool = | 
| 77566 
2a99fcb283ee
renamed administrative tools to build Isabelle components (unrelated to "isabelle build");
 wenzelm parents: 
77510diff
changeset | 89 |     Isabelle_Tool("component_zipperposition", "build prover component from OPAM repository",
 | 
| 75394 | 90 | Scala_Project.here, | 
| 91 |       { args =>
 | |
| 92 | var target_dir = Path.current | |
| 93 | var version = default_version | |
| 94 | var verbose = false | |
| 72466 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 95 | |
| 75394 | 96 |         val getopts = Getopts("""
 | 
| 77566 
2a99fcb283ee
renamed administrative tools to build Isabelle components (unrelated to "isabelle build");
 wenzelm parents: 
77510diff
changeset | 97 | Usage: isabelle component_zipperposition [OPTIONS] | 
| 72466 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 98 | |
| 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 99 | Options are: | 
| 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 100 | -D DIR target directory (default ".") | 
| 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 101 | -V VERSION version (default: """" + default_version + """") | 
| 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 102 | -v verbose | 
| 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 103 | |
| 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 104 | Build prover component from OPAM repository. | 
| 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 105 | """, | 
| 75394 | 106 | "D:" -> (arg => target_dir = Path.explode(arg)), | 
| 107 | "V:" -> (arg => version = arg), | |
| 108 | "v" -> (_ => verbose = true)) | |
| 72466 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 109 | |
| 75394 | 110 | val more_args = getopts(args) | 
| 111 | if (more_args.nonEmpty) getopts.usage() | |
| 72466 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 112 | |
| 77510 
f5d6cd98b16a
clarified signature: manage "verbose" flag via "progress";
 wenzelm parents: 
76548diff
changeset | 113 | val progress = new Console_Progress(verbose = verbose) | 
| 72466 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 114 | |
| 77510 
f5d6cd98b16a
clarified signature: manage "verbose" flag via "progress";
 wenzelm parents: 
76548diff
changeset | 115 | build_zipperposition(version = version, progress = progress, target_dir = target_dir) | 
| 75394 | 116 | }) | 
| 72466 
04403e1ef176
build Isabelle Zipperposition component from OPAM repository;
 wenzelm parents: diff
changeset | 117 | } |