structure Compiler :> COMPILER =
struct
+ open Settings
+
exception Error
val cgiMode = Posix.FileSys.S.flags [Posix.FileSys.S.irwxu,
flush = fn () => TextIO.flushOut TextIO.stdOut,
linewidth = 80}
- fun getFname path =
- let
- fun look i =
- if i < 0 then
- path
- else if String.sub (path, i) = #"/" then
- String.extract (path, i+1, NONE)
- else
- look (i-1)
- in
- look (size path - 1)
- end
+ val getFname = OS.Path.file
- fun removeExt path =
- let
- val len = size path
-
- fun look i =
- if i >= len then
- path
- else if String.sub (path, i) = #"." then
- String.substring (path, 0, i)
- else
- look (i+1)
- in
- look 0
- end
+ val removeExt = OS.Path.base
fun getExt path =
- let
- val len = size path
-
- fun look i =
- if i >= len then
- path
- else if String.sub (path, i) = #"." then
- String.extract (path, i+1, NONE)
- else
- look (i+1)
- in
- look 0
- end
+ case OS.Path.ext path of
+ NONE => path
+ | SOME ext => ext
val upperOffset = ord #"A" - ord #"a"
fun toUpper ch =
fun loop (smls, mlts) =
(case Posix.FileSys.readdir dir of
- "" => (smls, mlts)
- | fname =>
+ NONE => (smls, mlts)
+ | SOME fname =>
(case getExt fname of
"mlt" => loop (smls, (path ^ "/" ^ fname) :: mlts)
| ("sml"|"sig") =>
val outPath = Config.outPath config
val pubPath = Config.pubPath config
val sml = Config.sml config
- val arch = "x86-linux"
val loc = Environment.staticPart (#get (EnvRef.loc ()) ())
val base = Environment.staticPart (#get (EnvRef.base ()) ())
val _ = TextIO.closeOut outf
val outf = TextIO.openOut (outPath ^ "/.build.sml")
- val _ = TextIO.output (outf, "Control.printWarnings := false;\nCM.make \"sources.cm\";\nSMLofNJ.exportFn (\"" ^ outPath ^ "/heap\", Main.main);\n")
+ val _ = TextIO.output (outf, "Control.printWarnings := false;\nprint \"Here we go\"\n;\nCM.make \"sources.cm\";\nSMLofNJ.exportFn (\"" ^ outPath ^ "/heap\", Main.main);\n")
val _ = TextIO.closeOut outf
val outf = TextIO.openOut (outPath ^ "/sources.cm")
printNames outputs;
TextIO.output (outf, "\n\t(* Driver *)\n\n\t_main.sml\n");
TextIO.closeOut outf;
- if OS.Process.system ("cat " ^ outPath ^ "/.build.sml | " ^ sml ^ "/sml") = OS.Process.success then
+ if OS.Process.system ("cd " ^ outPath ^ " ; cat .build.sml | " ^ sml ^ "/sml") = OS.Process.success then
(ListPair.app makeScript (scripts, exports);
OS.Process.success)
else