364 |
make = make } |
make = make } |
365 |
end |
end |
366 |
|
|
367 |
|
(* This function works on behalf of the ml-build script. |
368 |
|
* Having it here avoids certain startup-costs and also |
369 |
|
* keeps ML code together. (It used to be part of the |
370 |
|
* script, but that proved difficult to maintain.) *) |
371 |
|
fun mlbuild buildargs = |
372 |
|
OS.Process.exit |
373 |
|
(case buildargs of |
374 |
|
[root, cmfile, heap, listfile, link] => |
375 |
|
(case mk_standalone NONE { project = root, |
376 |
|
wrapper = cmfile, |
377 |
|
target = heap } of |
378 |
|
NONE => (Say.say ["Compilation failed.\n"]; |
379 |
|
OS.Process.failure) |
380 |
|
| SOME [] => (Say.say ["Heap was already up-to-date.\n"]; |
381 |
|
OS.Process.success) |
382 |
|
| SOME l => let |
383 |
|
val s = TextIO.openOut listfile |
384 |
|
fun wr str = TextIO.output (s, str ^ "\n") |
385 |
|
val n = length l |
386 |
|
fun maxsz (s, n) = Int.max (size s, n) |
387 |
|
val m = foldl maxsz 0 l |
388 |
|
in |
389 |
|
wr (concat ["%", Int.toString n, " ", |
390 |
|
Int.toString m]); |
391 |
|
app wr l; |
392 |
|
TextIO.closeOut s; |
393 |
|
OS.Process.system (concat [link, |
394 |
|
" @SMLboot=", listfile]) |
395 |
|
end |
396 |
|
handle _ => OS.Process.failure) |
397 |
|
| _ => (Say.say ["bad arguments to @CMbuild\n"]; |
398 |
|
OS.Process.failure)) |
399 |
|
|
400 |
fun al_ginfo () = { param = param (), |
fun al_ginfo () = { param = param (), |
401 |
groupreg = al_greg, |
groupreg = al_greg, |
402 |
errcons = EM.defaultConsumer (), |
errcons = EM.defaultConsumer (), |
582 |
| carg (_, f, mk) = p (f, mk, |
| carg (_, f, mk) = p (f, mk, |
583 |
String.map Char.toLower |
String.map Char.toLower |
584 |
(getOpt (OS.Path.ext f, "<none>"))) |
(getOpt (OS.Path.ext f, "<none>"))) |
585 |
fun arg ("-a", _) = autoload |
|
586 |
| arg ("-m", _) = make |
fun args ("-a" :: rest, _) = args (rest, autoload) |
587 |
| arg (f, mk) = (carg (String.substring (f, 0, 2), f, mk) |
| args ("-m" :: rest, _) = args (rest, make) |
588 |
|
| args ("@CMbuild" :: rest, _) = mlbuild rest |
589 |
|
| args (f :: rest, mk) = |
590 |
|
(carg (String.substring (f, 0, 2), f, mk) |
591 |
handle General.Subscript => (); |
handle General.Subscript => (); |
592 |
mk) |
args (rest, mk)) |
593 |
|
| args ([], _) = () |
594 |
in |
in |
595 |
case SMLofNJ.getArgs () of |
case SMLofNJ.getArgs () of |
596 |
["@CMslave"] => (#set StdConfig.verbose false; slave ()) |
["@CMslave"] => (#set StdConfig.verbose false; slave ()) |
597 |
| l => ignore (foldl arg autoload l) |
| l => args (l, autoload) |
598 |
end |
end |
599 |
in |
in |
600 |
initTheValues (bootdir, de, er, |
initTheValues (bootdir, de, er, |