src/Pure/ML/ml_process.scala
changeset 83522 01b548a504dc
parent 83435 0f9bae334ac6
child 83523 fd12aa8c49ba
equal deleted inserted replaced
83521:e3bad2e60f65 83522:01b548a504dc
   128   }
   128   }
   129 
   129 
   130 
   130 
   131   /* Isabelle tool wrapper */
   131   /* Isabelle tool wrapper */
   132 
   132 
   133   val isabelle_tool = Isabelle_Tool("process", "raw ML process (batch mode)",
   133   def tool_body(args: List[String], internal: Boolean = false): Process_Result = {
   134     Scala_Project.here,
   134     var dirs: List[Path] = Nil
   135     { args =>
   135     var eval_args: List[String] = Nil
   136       var dirs: List[Path] = Nil
   136     var logic = Isabelle_System.default_logic()
   137       var eval_args: List[String] = Nil
   137     var modes: List[String] = Nil
   138       var logic = Isabelle_System.default_logic()
   138     var options = Options.init()
   139       var modes: List[String] = Nil
       
   140       var options = Options.init()
       
   141 
   139 
   142       val getopts = Getopts("""
   140     val getopts = Getopts("""
   143 Usage: isabelle process [OPTIONS]
   141 Usage: isabelle process [OPTIONS]
   144 
   142 
   145   Options are:
   143   Options are:
   146     -d DIR       include session directory
   144     -d DIR       include session directory
   147     -e ML_EXPR   evaluate ML expression on startup
   145     -e ML_EXPR   evaluate ML expression on startup
   150     -m MODE      add print mode for output
   148     -m MODE      add print mode for output
   151     -o OPTION    override Isabelle system OPTION (via NAME=VAL or NAME)
   149     -o OPTION    override Isabelle system OPTION (via NAME=VAL or NAME)
   152 
   150 
   153   Run the raw Isabelle ML process in batch mode.
   151   Run the raw Isabelle ML process in batch mode.
   154 """,
   152 """,
   155         "d:" -> (arg => dirs = dirs ::: List(Path.explode(arg))),
   153       "d:" -> (arg => dirs = dirs ::: List(Path.explode(arg))),
   156         "e:" -> (arg => eval_args = eval_args ::: List("--eval", arg)),
   154       "e:" -> (arg => eval_args = eval_args ::: List("--eval", arg)),
   157         "f:" -> (arg => eval_args = eval_args ::: List("--use", arg)),
   155       "f:" -> (arg => eval_args = eval_args ::: List("--use", arg)),
   158         "l:" -> (arg => logic = arg),
   156       "l:" -> (arg => logic = arg),
   159         "m:" -> (arg => modes = arg :: modes),
   157       "m:" -> (arg => modes = arg :: modes),
   160         "o:" -> (arg => options = options + arg))
   158       "o:" -> (arg => options = options + arg))
   161 
   159 
   162       val more_args = getopts(args)
   160     val more_args = getopts(args, internal = internal)
   163       if (args.isEmpty || more_args.nonEmpty) getopts.usage()
   161     if (args.isEmpty || more_args.nonEmpty) getopts.usage(internal = internal)
   164 
   162 
   165       val store = Store(options)
   163     val store = Store(options)
   166       val session_background = Sessions.background(options, logic, dirs = dirs).check_errors
   164     val session_background = Sessions.background(options, logic, dirs = dirs).check_errors
   167       val session_heaps = store.session_heaps(session_background, logic = logic)
   165     val session_heaps = store.session_heaps(session_background, logic = logic)
   168       val result =
   166     ML_Process(options, session_background, session_heaps, args = eval_args, modes = modes)
   169         ML_Process(options, session_background, session_heaps, args = eval_args, modes = modes)
   167       .result(
   170           .result(
   168         progress_stdout = Output.writeln(_, stdout = true),
   171             progress_stdout = Output.writeln(_, stdout = true),
   169         progress_stderr = Output.writeln(_))
   172             progress_stderr = Output.writeln(_))
   170   }
   173 
   171 
   174       sys.exit(result.rc)
   172   val isabelle_tool =
   175     })
   173     Isabelle_Tool("process", "raw ML process (batch mode)", Scala_Project.here,
       
   174       args => sys.exit(tool_body(args).rc))
       
   175 
       
   176   object Scala_Fun extends Scala.Fun_Strings("ML_process", thread = true) {
       
   177     val here = Scala_Project.here
       
   178     def apply(args: List[String]): List[String] =
       
   179       Bash.Server.result(tool_body(args, internal = true))
       
   180   }
   176 }
   181 }