src/Pure/System/build.scala
changeset 48364 9091b659d7b6
parent 48363 cf081b7042d2
child 48368 dc538eef2cf2
equal deleted inserted replaced
48363:cf081b7042d2 48364:9091b659d7b6
   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