Home My Page Projects Code Snippets Project Openings SML/NJ
Summary Activity Forums Tracker Lists Tasks Docs Surveys News SCM Files

SCM Repository

[smlnj] Diff of /sml/trunk/src/cm/tools/shell/tool.sml
ViewVC logotype

Diff of /sml/trunk/src/cm/tools/shell/tool.sml

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 872, Fri Jul 6 22:17:03 2001 UTC revision 873, Mon Jul 9 15:26:20 2001 UTC
# Line 21  Line 21 
21          fun badspec kw = err (concat ["bad specification for keyword `",          fun badspec kw = err (concat ["bad specification for keyword `",
22                                        kw, "'"])                                        kw, "'"])
23    
24          fun rule { spec, context, native2pathmaker, defaultClassOf } = let          fun rule { spec, context, native2pathmaker, defaultClassOf, sysinfo } = let
25              val { name = str, mkpath, opts = too, derived, ... } : spec = spec              val { name = str, mkpath, opts = too, derived, ... } : spec = spec
26                val { symval, archos } = sysinfo
27              val specpath = srcpath (mkpath ())              val specpath = srcpath (mkpath ())
28              val specname = nativeSpec specpath              val specname = nativeSpec specpath
29              val (sname, tname, tclass, topts, cmdline) =              val (sname, tname, tclass, topts, cmdline) =
# Line 45  Line 46 
46                                | _ => badspec kw_class                                | _ => badspec kw_class
47                          val topts = matches kw_options                          val topts = matches kw_options
48                          fun return (sname, tname) = let                          fun return (sname, tname) = let
49                              fun subst "%s" = sname                              fun subst s = let
50                                | subst "%t" = tname                                  fun otherpercents ss =
51                                | subst "" = ""                                      if Substring.size ss = 2 then
52                                | subst s = if String.sub (s, 0) <> #"%" then s                                          SOME (String.str (Substring.sub (ss, 1)))
53                                            else String.extract (s, 1, NONE)                                      else NONE
54                                    fun sv ss =
55                                        SOME (case symval (Substring.string ss) of
56                                                  NONE => ""
57                                                | SOME i => Int.toString i)
58                                    fun qsv ss = let
59                                        val sslen = Substring.size ss
60                                        fun doqsv (var, value) =
61                                            case symval (Substring.string var) of
62                                                NONE => SOME ""
63                                              | SOME _ => SOME (Substring.string value)
64                                        fun findcolon i =
65                                            if i >= sslen then doqsv (ss, ss)
66                                            else if Substring.sub (ss, i) = #":" then
67                                                doqsv (Substring.slice (ss, 0, SOME i),
68                                                       Substring.slice (ss, i+1,
69                                                                        SOME (sslen-i-1)))
70                                            else findcolon (i+1)
71                                    in
72                                        findcolon 0
73                                    end
74                                in
75                                    Subst.substitute [{ prefix = "$?(",
76                                                        substitutions =
77                                                        [Subst.submap (3, #")") qsv] },
78                                                      { prefix = "$(",
79                                                        substitutions =
80                                                        [Subst.submap (2, #")") sv] },
81                                                      { prefix = "%",
82                                                        substitutions =
83                                                        [Subst.subfor "%s" sname,
84                                                         Subst.subfor "%t" tname,
85                                                         Subst.subfor "%a" archos,
86                                                         otherpercents] }]
87                                                     s
88                                end
89                              fun ad (x, l) = " " :: subst x :: l                              fun ad (x, l) = " " :: subst x :: l
90                              val cmdline =                              val cmdline =
91                                  case restoptions of                                  case restoptions of
# Line 61  Line 97 
97                      in                      in
98                          case (fmatch kw_source, fmatch kw_target) of                          case (fmatch kw_source, fmatch kw_target) of
99                              (NONE, NONE) => err                              (NONE, NONE) => err
100                                "either `source=' or `target=' must be specified"                                "either `source:' or `target:' must be specified"
101                            | (SOME src, NONE) => return (src, specname)                            | (SOME src, NONE) => return (src, specname)
102                            | (NONE, SOME tgt) => return (specname, tgt)                            | (NONE, SOME tgt) => return (specname, tgt)
103                            | (SOME _, SOME _) => err                            | (SOME _, SOME _) => err
104                           "only one of `source=' and `target=' can be specified"                           "only one of `source:' and `target:' can be specified"
105                      end                      end
106              val spath = srcpath (native2pathmaker sname ())              val spath = srcpath (native2pathmaker sname ())
107              val partial_expansion =              val partial_expansion =

Legend:
Removed from v.872  
changed lines
  Added in v.873

root@smlnj-gforge.cs.uchicago.edu
ViewVC Help
Powered by ViewVC 1.0.0