1structure HM_BaseEnv :> HM_BaseEnv =
2struct
3
4  open Systeml Holmake_tools
5
6  fun make_base_env (optv : HM_Cline.t) =
7    let
8      open Holmake_types
9      val nob2002 = Systeml.HAVE_BASIS2002 orelse #no_basis2002 optv
10      val MOSMLDIR = case #mosmldir optv of
11                         NONE => Systeml.MOSMLDIR
12                       | SOME s => s
13      val MOSMLCOMP = fullPath [MOSMLDIR, "mosmlc"]
14      val basis_string = if nob2002 then [] else [LIT " basis2002.ui"]
15      val alist = [
16        ("DEBUG_FLAG", if #debug (#core optv) then [LIT "--dbg"] else []),
17        ("MOSML_INCLUDES",
18         [VREF "if $(findstring NO_SIGOBJ,$(OPTIONS)),,-I \
19                                   \$(protect $(SIGOBJ))", LIT " "] @
20         [VREF ("patsubst %,-I %,$(INCLUDES) $(PREINCLUDES)")]),
21        ("HOLMOSMLC", [VREF "MOSMLCOMP", LIT (" -q "), VREF "MOSML_INCLUDES"] @
22                      basis_string),
23        ("HOLMOSMLC-C",
24         [VREF "MOSMLCOMP", LIT (" -q "), VREF "MOSML_INCLUDES", LIT " -c "] @
25         basis_string @ [LIT " "] @
26         [VREF ("if $(findstring NO_OVERLAY,$(OPTIONS)),,"^DEFAULT_OVERLAY)]),
27        ("MOSMLC",  [VREF "MOSMLCOMP", LIT " ", VREF "MOSML_INCLUDES"]),
28        ("MOSMLDIR", [LIT MOSMLDIR]),
29        ("MOSMLCOMP", [VREF "protect $(MOSMLDIR)/mosmlc"]),
30        ("MOSMLLEX", [VREF "protect $(MOSMLDIR)/mosmllex"]),
31        ("MOSMLYAC",
32         [VREF "protect $(MOSMLDIR)/mosmlyac"])] @
33         (if Systeml.HAVE_BASIS2002 then [("HAVE_BASIS2002", [LIT "1"])]
34          else [])
35    in
36      List.foldl (fn (kv,acc) => env_extend kv acc) (base_environment()) alist
37    end
38
39  fun debug_info (optv : HM_Cline.t) =
40    let
41      val MOSMLDIR = case #mosmldir optv of
42                         NONE => Systeml.MOSMLDIR
43                       | SOME s => s
44    in
45      "MOSMLDIR = "^MOSMLDIR
46    end
47
48end (* struct *)
49