-fun regenerateTc context =
- let
- val _ = ErrorMsg.reset ()
-
- val b = basis ()
- val () = Tycheck.disallowExterns ()
-
- val () = Domain.resetGlobal ()
-
- val ok = ref true
-
- fun doUser user =
- let
- val _ = Domain.setUser user
- val _ = ErrorMsg.reset ()
-
- val dname = Config.domtoolDir user
- in
- if Posix.FileSys.access (dname, []) then
- let
- val dir = Posix.FileSys.opendir dname
-
- fun loop files =
- case Posix.FileSys.readdir dir of
- NONE => (Posix.FileSys.closedir dir;
- files)
- | SOME fname =>
- if notTmp fname then
- loop (OS.Path.joinDirFile {dir = dname,
- file = fname}
- :: files)
- else
- loop files
-
- val files = loop []
- val (_, files) = Order.order (SOME b) files
- in
- if !ErrorMsg.anyErrors then
- (ErrorMsg.reset ();
- print ("User " ^ user ^ "'s configuration has errors!\n");
- ok := false)
- else
- app (ignore o check) files
- end
- else
- ()
- end
- handle IO.Io _ => ()
- | OS.SysErr (s, _) => print ("System error processing user " ^ user ^ ": " ^ s ^ "\n")
- | ErrorMsg.Error => (ErrorMsg.reset ();
- print ("User " ^ user ^ " had a compilation error.\n"))
- | _ => print "Unknown exception during -tc regeneration!\n"
- in
- app doUser (Acl.users ());
- !ok
- end