+
+ val ordered = loop (ready, waiting, [])
+ val provider = {provideC = provideC,
+ provideT = provideT,
+ provideV = provideV}
+ in
+ if !allNaughty then
+ (provider, [])
+ else if SS.isEmpty (!naughtyFiles) then
+ (provider, ordered)
+ else
+ order basisOpt (List.filter (fn fname => not (SS.member (!naughtyFiles, fname))) fnames)
+ end
+
+fun order basisOpt fnames =
+ let
+ val (providers, fnames) = order basisOpt fnames
+
+ val (hasLib, fnames) = foldl (fn (fname, (hasLib, fnames)) =>
+ if OS.Path.file fname = "lib.dtl" then
+ (SOME fname, fnames)
+ else
+ (hasLib, fname :: fnames))
+ (NONE, []) fnames
+
+ val fnames = rev fnames
+ val fnames = case hasLib of
+ NONE => fnames
+ | SOME hasLib => hasLib :: fnames