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 } |