130 |
132 |
131 /* Isabelle tool wrapper */ |
133 /* Isabelle tool wrapper */ |
132 |
134 |
133 def tool_body(args: List[String], internal: Boolean = false): Process_Result = { |
135 def tool_body(args: List[String], internal: Boolean = false): Process_Result = { |
134 var cwd = Path.current |
136 var cwd = Path.current |
135 var dirs: List[Path] = Nil |
137 val dirs = new mutable.ListBuffer[Path] |
136 var eval_args: List[String] = Nil |
138 val eval_args = new mutable.ListBuffer[String] |
137 var logic = Isabelle_System.default_logic() |
139 var logic = Isabelle_System.default_logic() |
138 var modes: List[String] = Nil |
140 var modes: List[String] = Nil |
139 var options = Options.init() |
141 var options = Options.init() |
140 var redirect = false |
142 var redirect = false |
141 |
143 |
153 -r redirect stderr to stdout |
155 -r redirect stderr to stdout |
154 |
156 |
155 Run the raw ML process without Isabelle/Scala context. |
157 Run the raw ML process without Isabelle/Scala context. |
156 """, |
158 """, |
157 "C:" -> (arg => cwd = Path.explode(arg)), |
159 "C:" -> (arg => cwd = Path.explode(arg)), |
158 "d:" -> (arg => dirs = dirs ::: List(Path.explode(arg))), |
160 "d:" -> (arg => dirs += Path.explode(arg)), |
159 "e:" -> (arg => eval_args = eval_args ::: List("--eval", arg)), |
161 "e:" -> (arg => eval_args ++= List("--eval", arg)), |
160 "f:" -> (arg => eval_args = eval_args ::: List("--use", File.platform_path(arg))), |
162 "f:" -> (arg => eval_args ++= List("--use", File.platform_path(arg))), |
161 "l:" -> (arg => logic = arg), |
163 "l:" -> (arg => logic = arg), |
162 "m:" -> (arg => modes = arg :: modes), |
164 "m:" -> (arg => modes = arg :: modes), |
163 "o:" -> (arg => options = options + arg), |
165 "o:" -> (arg => options = options + arg), |
164 "r" -> (_ => redirect = true)) |
166 "r" -> (_ => redirect = true)) |
165 |
167 |
166 val more_args = getopts(args, internal = internal) |
168 val more_args = getopts(args, internal = internal) |
167 if (more_args.nonEmpty) getopts.usage(internal = internal) |
169 if (more_args.nonEmpty) getopts.usage(internal = internal) |
168 |
170 |
169 val store = Store(options) |
171 val store = Store(options) |
170 val session_background = Sessions.background(options, logic, dirs = dirs).check_errors |
172 val session_background = Sessions.background(options, logic, dirs = dirs.toList).check_errors |
171 val session_heaps = store.session_heaps(session_background, logic = logic) |
173 val session_heaps = store.session_heaps(session_background, logic = logic) |
172 |
174 |
173 val process = |
175 val process = |
174 ML_Process(options, session_background, session_heaps, |
176 ML_Process(options, session_background, session_heaps, |
175 args = eval_args, modes = modes, cwd = cwd, redirect = redirect) |
177 args = eval_args.toList, modes = modes, cwd = cwd, redirect = redirect) |
176 if (internal) process.result() |
178 if (internal) process.result() |
177 else { |
179 else { |
178 process.result( |
180 process.result( |
179 progress_stdout = Output.writeln(_, stdout = true), |
181 progress_stdout = Output.writeln(_, stdout = true), |
180 progress_stderr = Output.writeln(_)) |
182 progress_stderr = Output.writeln(_)) |