equal
deleted
inserted
replaced
154 /* find sessions */ |
154 /* find sessions */ |
155 |
155 |
156 private val ROOT = Path.explode("ROOT") |
156 private val ROOT = Path.explode("ROOT") |
157 private val SESSIONS = Path.explode("etc/sessions") |
157 private val SESSIONS = Path.explode("etc/sessions") |
158 |
158 |
|
159 private def is_pure(name: String): Boolean = name == "RAW" || name == "Pure" |
|
160 |
159 private def sessions_root(dir: Path, root: File, queue: Session.Queue): Session.Queue = |
161 private def sessions_root(dir: Path, root: File, queue: Session.Queue): Session.Queue = |
160 { |
162 { |
161 (queue /: Parser.parse_entries(root))((queue1, entry) => |
163 (queue /: Parser.parse_entries(root))((queue1, entry) => |
162 try { |
164 try { |
163 if (entry.name == "") error("Bad session name") |
165 if (entry.name == "") error("Bad session name") |
164 |
166 |
165 val full_name = |
167 val full_name = |
166 if (entry.name == "RAW" || entry.name == "Pure") { |
168 if (is_pure(entry.name)) { |
167 if (entry.parent.isDefined) error("Illegal parent session") |
169 if (entry.parent.isDefined) error("Illegal parent session") |
168 else entry.name |
170 else entry.name |
169 } |
171 } |
170 else |
172 else |
171 entry.parent match { |
173 entry.parent match { |
238 |
240 |
239 |
241 |
240 |
242 |
241 /** build **/ |
243 /** build **/ |
242 |
244 |
|
245 private def build_job(build_images: Boolean, // FIXME |
|
246 key: Session.Key, info: Session.Info): Isabelle_System.Bash_Job = |
|
247 { |
|
248 val cwd = Isabelle_System.platform_file(info.dir) |
|
249 val script = |
|
250 if (is_pure(key.name)) "./build " + key.name |
|
251 else """echo "Bad session" >&2; exit 2""" |
|
252 new Isabelle_System.Bash_Job(cwd, null, script) |
|
253 } |
|
254 |
243 def build(all_sessions: Boolean, build_images: Boolean, list_only: Boolean, |
255 def build(all_sessions: Boolean, build_images: Boolean, list_only: Boolean, |
244 more_dirs: List[Path], options: List[String], sessions: List[String]): Int = |
256 more_dirs: List[Path], options: List[String], sessions: List[String]): Int = |
245 { |
257 { |
246 val full_queue = find_sessions(more_dirs) |
258 val full_queue = find_sessions(more_dirs) |
247 |
259 |
252 |
264 |
253 val required_queue = |
265 val required_queue = |
254 if (all_sessions) full_queue |
266 if (all_sessions) full_queue |
255 else full_queue.required(sessions) |
267 else full_queue.required(sessions) |
256 |
268 |
257 for ((key, info) <- required_queue.topological_order) |
269 for ((key, info) <- required_queue.topological_order) { |
258 println(key.name + " in " + info.dir) |
270 if (list_only) println(key.name + " in " + info.dir) |
|
271 else { |
|
272 val (out, err, rc) = build_job(build_images, key, info).join |
|
273 java.lang.System.err.print(err) |
|
274 } |
|
275 } |
259 |
276 |
260 0 |
277 0 |
261 } |
278 } |
262 |
279 |
263 |
280 |