src/Pure/Admin/build_doc.scala
changeset 69854 cc0b3e177b49
parent 69277 258bef08b31e
child 71726 a5fda30edae2
equal deleted inserted replaced
69853:f7c9a1be333f 69854:cc0b3e177b49
    17   def build_doc(
    17   def build_doc(
    18     options: Options,
    18     options: Options,
    19     progress: Progress = No_Progress,
    19     progress: Progress = No_Progress,
    20     all_docs: Boolean = false,
    20     all_docs: Boolean = false,
    21     max_jobs: Int = 1,
    21     max_jobs: Int = 1,
    22     system_mode: Boolean = false,
       
    23     docs: List[String] = Nil): Int =
    22     docs: List[String] = Nil): Int =
    24   {
    23   {
    25     val sessions_structure = Sessions.load_structure(options)
    24     val sessions_structure = Sessions.load_structure(options)
    26     val selection =
    25     val selection =
    27       for {
    26       for {
    42 
    41 
    43     progress.echo("Build started for documentation " + commas_quote(selected_docs))
    42     progress.echo("Build started for documentation " + commas_quote(selected_docs))
    44 
    43 
    45     val res1 =
    44     val res1 =
    46       Build.build(options, progress, requirements = true, build_heap = true,
    45       Build.build(options, progress, requirements = true, build_heap = true,
    47         max_jobs = max_jobs, system_mode = system_mode, sessions = sessions)
    46         max_jobs = max_jobs, sessions = sessions)
    48     if (res1.ok) {
    47     if (res1.ok) {
    49       Isabelle_System.with_tmp_dir("document_output")(output =>
    48       Isabelle_System.with_tmp_dir("document_output")(output =>
    50         {
    49         {
    51           val res2 =
    50           val res2 =
    52             Build.build(
    51             Build.build(
    53               options.bool.update("browser_info", false).
    52               options.bool.update("browser_info", false).
    54                 string.update("document", "pdf").
    53                 string.update("document", "pdf").
    55                 string.update("document_output", output.implode),
    54                 string.update("document_output", output.implode),
    56               progress, clean_build = true, max_jobs = max_jobs, system_mode = system_mode,
    55               progress, clean_build = true, max_jobs = max_jobs, sessions = sessions)
    57               sessions = sessions)
       
    58           if (res2.ok) {
    56           if (res2.ok) {
    59             val doc_dir = Path.explode("~~/doc")
    57             val doc_dir = Path.explode("~~/doc")
    60             for (doc <- selected_docs) {
    58             for (doc <- selected_docs) {
    61               val name = Path.explode(doc + ".pdf")
    59               val name = Path.explode(doc + ".pdf")
    62               File.copy(output + name, doc_dir + name)
    60               File.copy(output + name, doc_dir + name)
    74   val isabelle_tool =
    72   val isabelle_tool =
    75     Isabelle_Tool("build_doc", "build Isabelle documentation", args =>
    73     Isabelle_Tool("build_doc", "build Isabelle documentation", args =>
    76     {
    74     {
    77       var all_docs = false
    75       var all_docs = false
    78       var max_jobs = 1
    76       var max_jobs = 1
    79       var system_mode = false
    77       var options = Options.init()
    80 
    78 
    81       val getopts =
    79       val getopts =
    82         Getopts("""
    80         Getopts("""
    83 Usage: isabelle build_doc [OPTIONS] [DOCS ...]
    81 Usage: isabelle build_doc [OPTIONS] [DOCS ...]
    84 
    82 
    85   Options are:
    83   Options are:
    86     -a           select all documentation sessions
    84     -a           select all documentation sessions
    87     -j INT       maximum number of parallel jobs (default 1)
    85     -j INT       maximum number of parallel jobs (default 1)
    88     -s           system build mode
    86     -o OPTION    override Isabelle system OPTION (via NAME=VAL or NAME)
    89 
    87 
    90   Build Isabelle documentation from documentation sessions with
    88   Build Isabelle documentation from documentation sessions with
    91   suitable document_variants entry.
    89   suitable document_variants entry.
    92 """,
    90 """,
    93           "a" -> (_ => all_docs = true),
    91           "a" -> (_ => all_docs = true),
    94           "j:" -> (arg => max_jobs = Value.Int.parse(arg)),
    92           "j:" -> (arg => max_jobs = Value.Int.parse(arg)),
    95           "s" -> (_ => system_mode = true))
    93           "o:" -> (arg => options = options + arg))
    96 
    94 
    97       val docs = getopts(args)
    95       val docs = getopts(args)
    98 
    96 
    99       if (!all_docs && docs.isEmpty) getopts.usage()
    97       if (!all_docs && docs.isEmpty) getopts.usage()
   100 
    98 
   101       val options = Options.init()
       
   102       val progress = new Console_Progress()
    99       val progress = new Console_Progress()
   103       val rc =
   100       val rc =
   104         progress.interrupt_handler {
   101         progress.interrupt_handler {
   105           build_doc(options, progress, all_docs, max_jobs, system_mode, docs)
   102           build_doc(options, progress, all_docs, max_jobs, docs)
   106         }
   103         }
   107       sys.exit(rc)
   104       sys.exit(rc)
   108     })
   105     })
   109 }
   106 }