src/Pure/System/build.scala
changeset 48650 47330b712f8f
parent 48649 bf9bff84a61d
child 48660 730ca503e955
equal deleted inserted replaced
48649:bf9bff84a61d 48650:47330b712f8f
   185   private val ROOT = Path.explode("ROOT")
   185   private val ROOT = Path.explode("ROOT")
   186   private val SESSIONS = Path.explode("etc/sessions")
   186   private val SESSIONS = Path.explode("etc/sessions")
   187 
   187 
   188   private def is_pure(name: String): Boolean = name == "RAW" || name == "Pure"
   188   private def is_pure(name: String): Boolean = name == "RAW" || name == "Pure"
   189 
   189 
   190   private def sessions_root(options: Options, dir: Path, root: Path, queue: Session.Queue)
   190   private def sessions_root(options: Options, dir: Path, queue: Session.Queue, root: Path)
   191     : Session.Queue =
   191     : Session.Queue =
   192   {
   192   {
   193     (queue /: Parser.parse_entries(root))((queue1, entry) =>
   193     (queue /: Parser.parse_entries(root))((queue1, entry) =>
   194       try {
   194       try {
   195         if (entry.base_name == "") error("Bad session name")
   195         if (entry.base_name == "") error("Bad session name")
   233           error(msg + "\nThe error(s) above occurred in session entry " +
   233           error(msg + "\nThe error(s) above occurred in session entry " +
   234             quote(entry.base_name) + Position.str_of(root.position))
   234             quote(entry.base_name) + Position.str_of(root.position))
   235       })
   235       })
   236   }
   236   }
   237 
   237 
   238   private def sessions_dir(options: Options, strict: Boolean, dir: Path, queue: Session.Queue)
   238   private def sessions_dir(options: Options, strict: Boolean, queue: Session.Queue, dir: Path)
   239     : Session.Queue =
   239     : Session.Queue =
   240   {
   240   {
   241     val root = dir + ROOT
   241     val root = dir + ROOT
   242     if (root.is_file) sessions_root(options, dir, root, queue)
   242     if (root.is_file) sessions_root(options, dir, queue, root)
   243     else if (strict) error("Bad session root file: " + root.toString)
   243     else if (strict) error("Bad session root file: " + root.toString)
   244     else queue
   244     else queue
   245   }
   245   }
   246 
   246 
   247   private def sessions_catalog(options: Options, dir: Path, catalog: Path, queue: Session.Queue)
       
   248     : Session.Queue =
       
   249   {
       
   250     val dirs =
       
   251       split_lines(File.read(catalog)).filterNot(line => line == "" || line.startsWith("#"))
       
   252     (queue /: dirs)((queue1, dir1) =>
       
   253       try {
       
   254         val dir2 = dir + Path.explode(dir1)
       
   255         if (dir2.is_dir) sessions_dir(options, true, dir2, queue1)
       
   256         else error("Bad session directory: " + dir2.toString)
       
   257       }
       
   258       catch {
       
   259         case ERROR(msg) =>
       
   260           error(msg + "\nThe error(s) above occurred in session catalog " + catalog.toString)
       
   261       })
       
   262   }
       
   263 
       
   264   def find_sessions(options: Options, more_dirs: List[Path]): Session.Queue =
   247   def find_sessions(options: Options, more_dirs: List[Path]): Session.Queue =
   265   {
   248   {
   266     var queue = Session.Queue.empty
   249     val queue1 =
   267 
   250       (Session.Queue.empty /: Isabelle_System.components())(sessions_dir(options, false, _, _))
   268     for (dir <- Isabelle_System.components()) {
   251     val queue2 = (queue1 /: more_dirs)(sessions_dir(options, true, _, _))
   269       queue = sessions_dir(options, false, dir, queue)
   252     queue2
   270 
       
   271       val catalog = dir + SESSIONS
       
   272       if (catalog.is_file) queue = sessions_catalog(options, dir, catalog, queue)
       
   273     }
       
   274 
       
   275     for (dir <- more_dirs) queue = sessions_dir(options, true, dir, queue)
       
   276 
       
   277     queue
       
   278   }
   253   }
   279 
   254 
   280 
   255 
   281 
   256 
   282   /** build **/
   257   /** build **/