if (File.eq(Path.ISABELLE_HOME, root)) {
error("Repository coincides with ISABELLE_HOME=" + Path.ISABELLE_HOME.expand)
}
for ((threads, _) <- multicore_list if threads < 1) {
error("Bad threads value < 1: " + threads)
} for ((_, processes) <- multicore_list if processes < 1) {
error("Bad processes value < 1: " + processes)
}
if (heap < 100) error("Bad heap value < 100: " + heap)
if (max_heap.isDefined && max_heap.get < heap) {
error("Bad max_heap value < heap: " + max_heap.get)
}
System.getenv("ISABELLE_SETTINGS_PRESENT") match { casenull | "" => case _ => error("Cannot run Admin/build_other within existing Isabelle settings environment")
}
/* Isabelle + AFP directory */
def directory(dir: Path): Mercurial.Hg_Sync.Directory = { val directory = Mercurial.Hg_Sync.directory(dir) if (verbose) progress.echo(directory.log)
directory
}
val isabelle_directory = directory(root) val (afp_directory, afp_build_args) = if (afp) (Some(directory(root + Path.explode("dirs/AFP"))), List("-d", "~~/dirs/AFP/thys")) else (None, Nil)
/* main */
val other_isabelle =
Other_Isabelle(root, isabelle_identifier = isabelle_identifier, progress = progress)
val build_out = other_isabelle.expand_path(Path.explode("$ISABELLE_HOME_USER/log/build.out")) val build_out_progress = new File_Progress(build_out)
build_out.file.delete
/* build */
if (multicore_base && !first_build && isabelle_base_log.is_dir) {
Isabelle_System.copy_dir(isabelle_base_log, isabelle_output_log)
}
val build_start = progress.now() val build_args1 = List("-v", "-j" + processes) ::: afp_build_args ::: build_args
def parse(s: String): (Int, Int) =
s match { case Pat1(Value.Int(x)) => (x, 1) case Pat2(Value.Int(x), Value.Int(y)) => (x, y) case _ => error("Bad multicore configuration: " + quote(s))
}
}
def main(args: Array[String]): Unit = {
Command_Line.tool { var afp = false var multicore_base = false var heap: Option[Int] = None var max_heap: Option[Int] = None var multicore_list = List(default_multicore) var isabelle_identifier = default_isabelle_identifier var clean_platforms: Option[List[Platform.Family]] = None var clean_archives = false var component_repository = Components.static_component_repository var components_base = Components.dynamic_components_base var arch_apple = false val more_settings = new mutable.ListBuffer[String] val more_preferences = new mutable.ListBuffer[String] var fresh = false var hostname = "" var arch_64 = false var output_file = "" var ml_statistics_step = 1 val build_tags = new mutable.ListBuffer[String] var verbose = false var exit_code = false
val getopts = Getopts("""
Usage: Admin/build_other [OPTIONS] ISABELLE_HOME [ARGS ...]
Options are:
-A include $ISABELLE_HOME/AFP directory
-B first multicore build serves as base for scheduling information
-H SIZE minimal ML heap in MB (default: """ + default_heap + """for32bit, """ +
default_heap * 2 + """ for 64bit)
-M MULTICORE multicore configurations (see below)
-N NAME alternative ISABELLE_IDENTIFIER (default: """ + default_isabelle_identifier + """)
-O PLATFORMS clean resolved components, retaining only the given list
platform families (separated by commas; default: do nothing)
-Q clean archives of downloaded components
-R URL remote repository for Isabelle components (default: """ +
Components.static_component_repository + """)
-S DIR base directory for Isabelle components (default: """ +
quote(Components.dynamic_components_base) + """)
-U SIZE maximal ML heap in MB (default: unbounded)
-a processor architecture is Apple Silicon (ARM64)
-e TEXT additional text for generated etc/settings
-f fresh build of Isabelle/Scala components (recommended)
-h NAME override local hostname
-i TEXT initial text for generated etc/settings
-m ARCH processor architecture (32, 64, default: 32)
-n no build: sync only
-o FILE output file for log names (default: stdout)
-p TEXT additional text for generated etc/preferences
-s NUMBER step size for ML statistics (0=none, 1=all, n=step, default: 1)
-t TAG free-form build tag (multiple occurrences possible)
-v verbose
-x return overall exit code from build processes
Build Isabelle sessions from the history of another REPOSITORY clone,
passing ARGS directly to its isabelle build tool.
val more_args = getopts(args) val (root, build_args) =
more_args match { case root :: build_args => (Path.explode(root), build_args) case _ => getopts.usage()
}
val progress = new Console_Progress(stderr = true)
for (line <- split_lines(ssh.read(output_file))) yield { val log = Path.explode(line) val bytes = ssh.read_bytes(log)
ssh.delete(log)
(log.file_name, bytes)
}
}
}
}
}
Messung V0.5 in Prozent
¤ Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.0.13Bemerkung:
(vorverarbeitet am 2026-06-29)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.