Markus Mottl avatar Markus Mottl committed 9947a2b

Updated to latest Oasis version

Comments (0)

Files changed (2)

 (* OASIS_START *)
-(* DO NOT EDIT (digest: 89a2a8c3cc286a7c0bbf89b32573e9a3) *)
+(* DO NOT EDIT (digest: 8fd8da14601100561d745f586bc6d700) *)
 module OASISGettext = struct
-(* # 21 "/Users/mmottl/local/darwin11.3.0/src/oasis-0.3.0~rc6/src/oasis/OASISGettext.ml" *)
-  
+(* # 21 "/Users/mmottl/local/darwin11.3.0/src/oasis-0.3.0/src/oasis/OASISGettext.ml" *)
+
   let ns_ str =
     str
-  
+
   let s_ str =
     str
-  
+
   let f_ (str : ('a, 'b, 'c, 'd) format4) =
     str
-  
+
   let fn_ fmt1 fmt2 n =
     if n = 1 then
       fmt1^^""
     else
       fmt2^^""
-  
+
   let init =
     []
-  
+
 end
 
 module OASISExpr = struct
-(* # 21 "/Users/mmottl/local/darwin11.3.0/src/oasis-0.3.0~rc6/src/oasis/OASISExpr.ml" *)
-  
-  
-  
+(* # 21 "/Users/mmottl/local/darwin11.3.0/src/oasis-0.3.0/src/oasis/OASISExpr.ml" *)
+
+
+
   open OASISGettext
-  
+
   type test = string 
-  
+
   type flag = string 
-  
+
   type t =
     | EBool of bool
     | ENot of t
     | EFlag of flag
     | ETest of test * string
     
-  
+
   type 'a choices = (t * 'a) list 
-  
+
   let eval var_get t =
     let rec eval' =
       function
         | EBool b ->
             b
-  
+
         | ENot e ->
             not (eval' e)
-  
+
         | EAnd (e1, e2) ->
             (eval' e1) && (eval' e2)
-  
+
         | EOr (e1, e2) ->
             (eval' e1) || (eval' e2)
-  
+
         | EFlag nm ->
             let v =
               var_get nm
             in
               assert(v = "true" || v = "false");
               (v = "true")
-  
+
         | ETest (nm, vl) ->
             let v =
               var_get nm
               (v = vl)
     in
       eval' t
-  
+
   let choose ?printer ?name var_get lst =
     let rec choose_aux =
       function
                          str_lst)
     in
       choose_aux (List.rev lst)
-  
+
 end
 
 
 # 117 "myocamlbuild.ml"
 module BaseEnvLight = struct
-(* # 21 "/Users/mmottl/local/darwin11.3.0/src/oasis-0.3.0~rc6/src/base/BaseEnvLight.ml" *)
-  
+(* # 21 "/Users/mmottl/local/darwin11.3.0/src/oasis-0.3.0/src/base/BaseEnvLight.ml" *)
+
   module MapString = Map.Make(String)
-  
+
   type t = string MapString.t
-  
+
   let default_filename =
     Filename.concat
       (Sys.getcwd ())
       "setup.data"
-  
+
   let load ?(allow_empty=false) ?(filename=default_filename) () =
     if Sys.file_exists filename then
       begin
              "Unable to load environment, the file '%s' doesn't exist."
              filename)
       end
-  
+
   let var_get name env =
     let rec var_expand str =
       let buff =
         Buffer.contents buff
     in
       var_expand (MapString.find name env)
-  
+
   let var_choose lst env =
     OASISExpr.choose
       (fun nm -> var_get nm env)
 
 # 215 "myocamlbuild.ml"
 module MyOCamlbuildFindlib = struct
-(* # 21 "/Users/mmottl/local/darwin11.3.0/src/oasis-0.3.0~rc6/src/plugins/ocamlbuild/MyOCamlbuildFindlib.ml" *)
-  
+(* # 21 "/Users/mmottl/local/darwin11.3.0/src/oasis-0.3.0/src/plugins/ocamlbuild/MyOCamlbuildFindlib.ml" *)
+
   (** OCamlbuild extension, copied from 
     * http://brion.inria.fr/gallium/index.php/Using_ocamlfind_with_ocamlbuild
     * by N. Pouillard and others
     * Modified by Sylvain Le Gall 
     *)
   open Ocamlbuild_plugin
-  
+
   (* these functions are not really officially exported *)
   let run_and_read = 
     Ocamlbuild_pack.My_unix.run_and_read
-  
+
   let blank_sep_strings = 
     Ocamlbuild_pack.Lexers.blank_sep_strings
-  
+
   let split s ch =
     let x = 
       ref [] 
       try
         go s
       with Not_found -> !x
-  
+
   let split_nl s = split s '\n'
-  
+
   let before_space s =
     try
       String.before s (String.index s ' ')
     with Not_found -> s
-  
+
   (* this lists all supported packages *)
   let find_packages () =
     List.map before_space (split_nl & run_and_read "ocamlfind list")
-  
+
   (* this is supposed to list available syntaxes, but I don't know how to do it. *)
   let find_syntaxes () = ["camlp4o"; "camlp4r"]
-  
+
   (* ocamlfind command *)
   let ocamlfind x = S[A"ocamlfind"; x]
-  
+
   let dispatch =
     function
       | Before_options ->
               flag ["ocaml"; "infer_interface"; "pkg_"^pkg] & S[A"-package"; A pkg];
             end 
             (find_packages ());
-  
+
           (* Like -package but for extensions syntax. Morover -syntax is useless
            * when linking. *)
           List.iter begin fun syntax ->
           flag ["ocaml"; "doc";      "syntax_"^syntax] & S[A"-syntax"; A syntax];
           flag ["ocaml"; "infer_interface"; "syntax_"^syntax] & S[A"-syntax"; A syntax];
           end (find_syntaxes ());
-  
+
           (* The default "thread" tag is not compatible with ocamlfind.
            * Indeed, the default rules add the "threads.cma" or "threads.cmxa"
            * options when using this tag. When using the "-linkpkg" option with
           flag ["ocaml"; "pkg_threads"; "doc"] (S[A "-I"; A "+threads"]);
           flag ["ocaml"; "pkg_threads"; "link"] (S[A "-thread"]);
           flag ["ocaml"; "pkg_threads"; "infer_interface"] (S[A "-thread"])
-  
+
       | _ -> 
           ()
-  
+
 end
 
 module MyOCamlbuildBase = struct
-(* # 21 "/Users/mmottl/local/darwin11.3.0/src/oasis-0.3.0~rc6/src/plugins/ocamlbuild/MyOCamlbuildBase.ml" *)
-  
+(* # 21 "/Users/mmottl/local/darwin11.3.0/src/oasis-0.3.0/src/plugins/ocamlbuild/MyOCamlbuildBase.ml" *)
+
   (** Base functions for writing myocamlbuild.ml
       @author Sylvain Le Gall
     *)
-  
-  
-  
+
+
+
   open Ocamlbuild_plugin
   module OC = Ocamlbuild_pack.Ocaml_compiler
-  
+
   type dir = string 
   type file = string 
   type name = string 
   type tag = string 
-  
-(* # 56 "/Users/mmottl/local/darwin11.3.0/src/oasis-0.3.0~rc6/src/plugins/ocamlbuild/MyOCamlbuildBase.ml" *)
-  
+
+(* # 56 "/Users/mmottl/local/darwin11.3.0/src/oasis-0.3.0/src/plugins/ocamlbuild/MyOCamlbuildBase.ml" *)
+
   type t =
       {
         lib_ocaml: (name * dir list) list;
          *)
         includes:  (dir * dir list) list; 
       } 
-  
+
   let env_filename =
     Pathname.basename 
       BaseEnvLight.default_filename
-  
+
   let dispatch_combine lst =
     fun e ->
       List.iter 
         (fun dispatch -> dispatch e)
         lst 
-  
+
   let tag_libstubs nm =
     "use_lib"^nm^"_stubs"
-  
+
   let nm_libstubs nm =
     nm^"_stubs"
-  
+
   let dispatch t e = 
     let env = 
       BaseEnvLight.load 
                   Options.ext_lib, "ext_lib";
                   Options.ext_dll, "ext_dll";
                 ]
-  
-        | Before_rules ->
-          (* TODO: move this into its own file and conditionnaly include it, if
-           * needed.
-           *)
-          (* OCaml cmxs rules: cmxs available in ocamlopt but not ocamlbuild.
-             Copied from ocaml_specific.ml in ocamlbuild sources. *)
-          let has_native_dynlink =
-            try
-              bool_of_string (BaseEnvLight.var_get "native_dynlink" env)
-            with Not_found ->
-              false
-          in
-          if has_native_dynlink && String.sub Sys.ocaml_version 0 4 = "3.11" then
-            begin
-              let ext_lib = !Options.ext_lib in
-              let ext_obj = !Options.ext_obj in
-              let ext_dll = !Options.ext_dll in
-              let x_o = "%"-.-ext_obj in
-              let x_a = "%"-.-ext_lib in
-              let x_dll = "%"-.-ext_dll in
-              let x_p_o = "%.p"-.-ext_obj in
-              let x_p_a = "%.p"-.-ext_lib in
-              let x_p_dll = "%.p"-.-ext_dll in
-  
-              rule "ocaml: mldylib & p.cmx* & p.o* -> p.cmxs & p.so"
-                   ~tags:["ocaml"; "native"; "profile"; "shared"; "library"]
-                   ~prods:["%.p.cmxs"; x_p_dll]
-                   ~dep:"%.mldylib"
-                   (OC.native_profile_shared_library_link_mldylib
-                      "%.mldylib" "%.p.cmxs");
-  
-              rule "ocaml: mldylib & cmx* & o* -> cmxs & so"
-                   ~tags:["ocaml"; "native"; "shared"; "library"]
-                   ~prods:["%.cmxs"; x_dll]
-                   ~dep:"%.mldylib"
-                   (OC.native_shared_library_link_mldylib
-                      "%.mldylib" "%.cmxs");
-  
-              rule "ocaml: p.cmx & p.o -> p.cmxs & p.so"
-                   ~tags:["ocaml"; "native"; "profile"; "shared"; "library"]
-                   ~prods:["%.p.cmxs"; x_p_dll]
-                   ~deps:["%.p.cmx"; x_p_o]
-                   (OC.native_shared_library_link ~tags:["profile"]
-                                                  "%.p.cmx" "%.p.cmxs");
-  
-              rule "ocaml: p.cmxa & p.a -> p.cmxs & p.so"
-                   ~tags:["ocaml"; "native"; "profile"; "shared"; "library"]
-                   ~prods:["%.p.cmxs"; x_p_dll]
-                   ~deps:["%.p.cmxa"; x_p_a]
-                   (OC.native_shared_library_link ~tags:["profile"; "linkall"]
-                                                  "%.p.cmxa" "%.p.cmxs");
-  
-              rule "ocaml: cmx & o -> cmxs"
-                   ~tags:["ocaml"; "native"; "shared"; "library"]
-                   ~prods:["%.cmxs"]
-                   ~deps:["%.cmx"; x_o]
-                   (OC.native_shared_library_link "%.cmx" "%.cmxs");
-  
-              rule "ocaml: cmx & o -> cmxs & so"
-                   ~tags:["ocaml"; "native"; "shared"; "library"]
-                   ~prods:["%.cmxs"; x_dll]
-                   ~deps:["%.cmx"; x_o]
-                   (OC.native_shared_library_link "%.cmx" "%.cmxs");
-  
-              rule "ocaml: cmxa & a -> cmxs & so"
-                   ~tags:["ocaml"; "native"; "shared"; "library"]
-                   ~prods:["%.cmxs"; x_dll]
-                   ~deps:["%.cmxa"; x_a]
-                   (OC.native_shared_library_link ~tags:["linkall"]
-                                                  "%.cmxa" "%.cmxs");
-            end
-  
+
         | After_rules -> 
             (* Declare OCaml libraries *)
             List.iter 
                             ["compile"; "infer_interface"; "doc"])
                        tl)
               t.lib_ocaml;
-  
+
             (* Declare directories dependencies, replace "include" in _tags. *)
             List.iter 
               (fun (dir, include_dirs) ->
                  Pathname.define_context dir include_dirs)
               t.includes;
-  
+
             (* Declare C libraries *)
             List.iter
               (fun (lib, dir, headers) ->
                    flag ["link"; "library"; "ocaml"; "byte"; tag_libstubs lib]
                      (S[A"-dllib"; A("-l"^(nm_libstubs lib)); A"-cclib";
                         A("-l"^(nm_libstubs lib))]);
-  
+
                    flag ["link"; "library"; "ocaml"; "native"; tag_libstubs lib]
                      (S[A"-cclib"; A("-l"^(nm_libstubs lib))]);
                         
                    flag ["link"; "program"; "ocaml"; "byte"; tag_libstubs lib]
                      (S[A"-dllib"; A("dll"^(nm_libstubs lib))]);
-  
+
                    (* When ocaml link something that use the C library, then one
                       need that file to be up to date.
                     *)
-                   dep  ["link"; "ocaml"; "program"; tag_libstubs lib]
+                   dep ["link"; "ocaml"; "program"; tag_libstubs lib]
                      [dir/"lib"^(nm_libstubs lib)^"."^(!Options.ext_lib)];
-  
+
                    dep  ["compile"; "ocaml"; "program"; tag_libstubs lib]
                      [dir/"lib"^(nm_libstubs lib)^"."^(!Options.ext_lib)];
-  
+
                    (* TODO: be more specific about what depends on headers *)
                    (* Depends on .h files *)
                    dep ["compile"; "c"] 
                      headers;
-  
+
                    (* Setup search path for lib *)
                    flag ["link"; "ocaml"; "use_"^lib] 
                      (S[A"-I"; P(dir)]);
               )
               t.lib_c;
-  
+
               (* Add flags *)
               List.iter
               (fun (tags, cond_specs) ->
               t.flags
         | _ -> 
             ()
-  
+
   let dispatch_default t =
     dispatch_combine 
       [
         dispatch t;
         MyOCamlbuildFindlib.dispatch;
       ]
-  
+
 end
 
 
-# 548 "myocamlbuild.ml"
+# 476 "myocamlbuild.ml"
 open Ocamlbuild_plugin;;
 let package_default =
   {
 
 let dispatch_default = MyOCamlbuildBase.dispatch_default package_default;;
 
-# 639 "myocamlbuild.ml"
+# 567 "myocamlbuild.ml"
 (* OASIS_STOP *)
 # 502 "myocamlbuild.ml"
 
 (* setup.ml generated for the first time by OASIS v0.2.0 *)
 
 (* OASIS_START *)
-(* DO NOT EDIT (digest: 594d1a77543fd5675d3f7728888fa9f3) *)
+(* DO NOT EDIT (digest: 7d1909ed8f109836c5f75949d141d423) *)
 (*
-   Regenerated by OASIS v0.3.0~rc6
+   Regenerated by OASIS v0.3.0
    Visit http://oasis.forge.ocamlcore.org for more information and
    documentation about functions used in this file.
 *)
 module OASISGettext = struct
-(* # 21 "/Users/mmottl/local/darwin11.3.0/src/oasis-0.3.0~rc6/src/oasis/OASISGettext.ml" *)
-  
+(* # 21 "/Users/mmottl/local/darwin11.3.0/src/oasis-0.3.0/src/oasis/OASISGettext.ml" *)
+
   let ns_ str =
     str
-  
+
   let s_ str =
     str
-  
+
   let f_ (str : ('a, 'b, 'c, 'd) format4) =
     str
-  
+
   let fn_ fmt1 fmt2 n =
     if n = 1 then
       fmt1^^""
     else
       fmt2^^""
-  
+
   let init =
     []
-  
+
 end
 
 module OASISContext = struct
-(* # 21 "/Users/mmottl/local/darwin11.3.0/src/oasis-0.3.0~rc6/src/oasis/OASISContext.ml" *)
-  
+(* # 21 "/Users/mmottl/local/darwin11.3.0/src/oasis-0.3.0/src/oasis/OASISContext.ml" *)
+
   open OASISGettext
-  
+
   type level =
     [ `Debug
     | `Info
     | `Warning
     | `Error]
-  
+
   type t =
     {
       quiet:                 bool;
       ignore_unknown_fields: bool;
       printf:                level -> string -> unit;
     }
-  
+
   let printf lvl str =
     let beg =
       match lvl with
         | `Debug -> s_ "D: "
     in
       prerr_endline (beg^str)
-  
+
   let default =
     ref
       {
         ignore_unknown_fields = false;
         printf                = printf;
       }
-  
+
   let quiet =
     {!default with quiet = true}
-  
-  
+
+
   let args () =
     ["-quiet",
      Arg.Unit (fun () -> default := {!default with quiet = true}),
      (s_ " Run quietly");
-  
+
      "-info",
      Arg.Unit (fun () -> default := {!default with info = true}),
      (s_ " Display information message");
-  
-  
+
+
      "-debug",
      Arg.Unit (fun () -> default := {!default with debug = true}),
      (s_ " Output debug message")]
 end
 
 module OASISString = struct
-(* # 1 "/Users/mmottl/local/darwin11.3.0/src/oasis-0.3.0~rc6/src/oasis/OASISString.ml" *)
-  
-  
-  
+(* # 1 "/Users/mmottl/local/darwin11.3.0/src/oasis-0.3.0/src/oasis/OASISString.ml" *)
+
+
+
   (** Various string utilities.
      
       Mostly inspired by extlib and batteries ExtString and BatString libraries.
-  
+
       @author Sylvain Le Gall
     *)
-  
+
   let nsplitf str f =
     if str = "" then
       []
         done;
         push ();
         List.rev !lst
-  
+
   (** [nsplit c s] Split the string [s] at char [c]. It doesn't include the
       separator.
     *)
   let nsplit str c =
     nsplitf str ((=) c)
-  
+
   let find ~what ?(offset=0) str =
     let what_idx = ref 0 in
     let str_idx = ref offset in 
         raise Not_found
       else 
         !str_idx - !what_idx
-  
+
   let sub_start str len = 
     let str_len = String.length str in
     if len >= str_len then
       ""
     else
       String.sub str len (str_len - len)
-  
+
   let sub_end ?(offset=0) str len =
     let str_len = String.length str in
     if len >= str_len then
       ""
     else
       String.sub str 0 (str_len - len)
-  
+
   let starts_with ~what ?(offset=0) str =
     let what_idx = ref 0 in
     let str_idx = ref offset in
         true
       else 
         false
-  
+
   let strip_starts_with ~what str =
     if starts_with ~what str then
       sub_start str (String.length what)
     else
       raise Not_found
-  
+
   let ends_with ~what ?(offset=0) str =
     let what_idx = ref ((String.length what) - 1) in
     let str_idx = ref ((String.length str) - 1) in
         true
       else 
         false
-  
+
   let strip_ends_with ~what str =
     if ends_with ~what str then
       sub_end str (String.length what)
     else
       raise Not_found
-  
+
   let replace_chars f s =
     let buf = String.make (String.length s) 'X' in
       for i = 0 to String.length s - 1 do
         buf.[i] <- f s.[i]
       done;
       buf
-  
+
 end
 
 module OASISUtils = struct
-(* # 21 "/Users/mmottl/local/darwin11.3.0/src/oasis-0.3.0~rc6/src/oasis/OASISUtils.ml" *)
-  
+(* # 21 "/Users/mmottl/local/darwin11.3.0/src/oasis-0.3.0/src/oasis/OASISUtils.ml" *)
+
   open OASISGettext
-  
+
   module MapString = Map.Make(String)
-  
+
   let map_string_of_assoc assoc =
     List.fold_left
       (fun acc (k, v) -> MapString.add k v acc)
       MapString.empty
       assoc
-  
+
   module SetString = Set.Make(String)
-  
+
   let set_string_add_list st lst =
     List.fold_left
       (fun acc e -> SetString.add e acc)
       st
       lst
-  
+
   let set_string_of_list =
     set_string_add_list
       SetString.empty
-  
-  
+
+
   let compare_csl s1 s2 =
     String.compare (String.lowercase s1) (String.lowercase s2)
-  
+
   module HashStringCsl =
     Hashtbl.Make
       (struct
          type t = string
-  
+
          let equal s1 s2 =
              (String.lowercase s1) = (String.lowercase s2)
-  
+
          let hash s =
            Hashtbl.hash (String.lowercase s)
        end)
-  
+
   let varname_of_string ?(hyphen='_') s =
     if String.length s = 0 then
       begin
         in
           String.lowercase buf
       end
-  
+
   let varname_concat ?(hyphen='_') p s =
     let what = String.make 1 hyphen in
     let p =
         s
     in
       p^what^s
-  
-  
+
+
   let is_varname str =
     str = varname_of_string str
-  
+
   let failwithf fmt = Printf.ksprintf failwith fmt
-  
+
 end
 
 module PropList = struct
-(* # 21 "/Users/mmottl/local/darwin11.3.0/src/oasis-0.3.0~rc6/src/oasis/PropList.ml" *)
-  
+(* # 21 "/Users/mmottl/local/darwin11.3.0/src/oasis-0.3.0/src/oasis/PropList.ml" *)
+
   open OASISGettext
-  
+
   type name = string
-  
+
   exception Not_set of name * string option
   exception No_printer of name
   exception Unknown_field of name * name
-  
+
   let () =
     Printexc.register_printer
       (function
                (Printf.sprintf (f_ "Field %s is not defined in schema %s") nm schm)
          | _ ->
              None)
-  
+
   module Data =
   struct
-  
+
     type t =
         (name, unit -> unit) Hashtbl.t
-  
+
     let create () =
       Hashtbl.create 13
-  
+
     let clear t =
       Hashtbl.clear t
-  
-(* # 71 "/Users/mmottl/local/darwin11.3.0/src/oasis-0.3.0~rc6/src/oasis/PropList.ml" *)
+
+(* # 71 "/Users/mmottl/local/darwin11.3.0/src/oasis-0.3.0/src/oasis/PropList.ml" *)
   end
-  
+
   module Schema =
   struct
-  
+
     type ('ctxt, 'extra) value =
         {
           get:   Data.t -> string;
           help:  (unit -> string) option;
           extra: 'extra;
         }
-  
+
     type ('ctxt, 'extra) t =
         {
           name:      name;
           order:     name Queue.t;
           name_norm: string -> string;
         }
-  
+
     let create ?(case_insensitive=false) nm =
       {
         name      = nm;
            else
              fun s -> s);
       }
-  
+
     let add t nm set get extra help =
       let key =
         t.name_norm nm
       in
-  
+
         if Hashtbl.mem t.fields key then
           failwith
             (Printf.sprintf
             extra = extra;
           };
         Queue.add nm t.order
-  
+
     let mem t nm =
       Hashtbl.mem t.fields nm
-  
+
     let find t nm =
       try
         Hashtbl.find t.fields (t.name_norm nm)
       with Not_found ->
         raise (Unknown_field (nm, t.name))
-  
+
     let get t data nm =
       (find t nm).get data
-  
+
     let set t data nm ?context x =
       (find t nm).set
         data
         ?context
         x
-  
+
     let fold f acc t =
       Queue.fold
         (fun acc k ->
              f acc k v.extra v.help)
         acc
         t.order
-  
+
     let iter f t =
       fold
         (fun () -> f)
         ()
         t
-  
+
     let name t =
       t.name
   end
-  
+
   module Field =
   struct
-  
+
     type ('ctxt, 'value, 'extra) t =
         {
           set:    Data.t -> ?context:'ctxt -> 'value -> unit;
           help:   (unit -> string) option;
           extra:  'extra;
         }
-  
+
     let new_id =
       let last_id =
         ref 0
       in
         fun () -> incr last_id; !last_id
-  
+
     let create ?schema ?name ?parse ?print ?default ?update ?help extra =
       (* Default value container *)
       let v =
         ref None
       in
-  
+
       (* If name is not given, create unique one *)
       let nm =
         match name with
           | Some s -> s
           | None -> Printf.sprintf "_anon_%d" (new_id ())
       in
-  
+
       (* Last chance to get a value: the default *)
       let default () =
         match default with
           | Some d -> d
           | None -> raise (Not_set (nm, Some (s_ "no default value")))
       in
-  
+
       (* Get data *)
       let get data =
         (* Get value *)
         with Not_found ->
           default ()
       in
-  
+
       (* Set data *)
       let set data ?context x =
         let x =
             nm
             (fun () -> v := Some x)
       in
-  
+
       (* Parse string value, if possible *)
       let parse =
         match parse with
                      nm
                      s)
       in
-  
+
       (* Set data, from string *)
       let sets data ?context s =
         set ?context data (parse ?context s)
       in
-  
+
       (* Output value as string, if possible *)
       let print =
         match print with
           | None ->
               fun _ -> raise (No_printer nm)
       in
-  
+
       (* Get data, as a string *)
       let gets data =
         print (get data)
       in
-  
+
         begin
           match schema with
             | Some t ->
             | None ->
                 ()
         end;
-  
+
         {
           set   = set;
           get   = get;
           help  = help;
           extra = extra;
         }
-  
+
     let fset data t ?context x =
       t.set data ?context x
-  
+
     let fget data t =
       t.get data
-  
+
     let fsets data t ?context s =
       t.sets data ?context s
-  
+
     let fgets data t =
       t.gets data
-  
+
   end
-  
+
   module FieldRO =
   struct
-  
+
     let create ?schema ?name ?parse ?print ?default ?update ?help extra =
       let fld =
         Field.create ?schema ?name ?parse ?print ?default ?update ?help extra
       in
         fun data -> Field.fget data fld
-  
+
   end
 end
 
 module OASISMessage = struct
-(* # 21 "/Users/mmottl/local/darwin11.3.0/src/oasis-0.3.0~rc6/src/oasis/OASISMessage.ml" *)
-  
-  
+(* # 21 "/Users/mmottl/local/darwin11.3.0/src/oasis-0.3.0/src/oasis/OASISMessage.ml" *)
+
+
   open OASISGettext
   open OASISContext
-  
+
   let generic_message ~ctxt lvl fmt =
     let cond =
       if ctxt.quiet then
                ctxt.printf lvl str
              end)
         fmt
-  
+
   let debug ~ctxt fmt =
     generic_message ~ctxt `Debug fmt
-  
+
   let info ~ctxt fmt =
     generic_message ~ctxt `Info fmt
-  
+
   let warning ~ctxt fmt =
     generic_message ~ctxt `Warning fmt
-  
+
   let error ~ctxt fmt =
     generic_message ~ctxt `Error fmt
-  
+
 end
 
 module OASISVersion = struct
-(* # 21 "/Users/mmottl/local/darwin11.3.0/src/oasis-0.3.0~rc6/src/oasis/OASISVersion.ml" *)
-  
+(* # 21 "/Users/mmottl/local/darwin11.3.0/src/oasis-0.3.0/src/oasis/OASISVersion.ml" *)
+
   open OASISGettext
-  
-  
-  
+
+
+
   type s = string
-  
+
   type t = string 
-  
+
   type comparator =
     | VGreater of t
     | VGreaterEqual of t
     | VOr of  comparator * comparator
     | VAnd of comparator * comparator
     
-  
+
   (* Range of allowed characters *)
   let is_digit c =
     '0' <= c && c <= '9'
-  
+
   let is_alpha c =
     ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z')
-  
+
   let is_special =
     function
       | '.' | '+' | '-' | '~' -> true
       | _ -> false
-  
+
   let rec version_compare v1 v2 =
     if v1 <> "" || v2 <> "" then
       begin
           else if is_alpha c then Char.code c
           else (Char.code c) + 256
         in
-  
+
         let len1 = String.length v1 in
         let len2 = String.length v2 in
-  
+
         let p = ref 0 in
-  
+
         (** Compare ascii part *)
         let compare_vascii () =
           let cmp = ref 0 in
           else
             !cmp
         in
-  
+
         (** Compare digit part *)
         let compare_digit () =
           let extract_int v p =
           let i2, tl2 = extract_int v2 (ref !p) in
             i1 - i2, tl1, tl2
         in
-  
+
           match compare_vascii () with
             | 0 ->
                 begin
       begin
         0
       end
-  
-  
+
+
   let version_of_string str = str
-  
+
   let string_of_version t = t
-  
+
   let chop t =
     try
       let pos =
         String.sub t 0 pos
     with Not_found ->
       t
-  
+
   let rec comparator_apply v op =
     match op with
       | VGreater cv ->
           (comparator_apply v op1) || (comparator_apply v op2)
       | VAnd (op1, op2) ->
           (comparator_apply v op1) && (comparator_apply v op2)
-  
+
   let rec string_of_comparator =
     function
       | VGreater v  -> "> "^(string_of_version v)
           (string_of_comparator c1)^" || "^(string_of_comparator c2)
       | VAnd (c1, c2) ->
           (string_of_comparator c1)^" && "^(string_of_comparator c2)
-  
+
   let rec varname_of_comparator =
     let concat p v =
       OASISUtils.varname_concat
             (varname_of_comparator c1)^"_or_"^(varname_of_comparator c2)
         | VAnd (c1, c2) ->
             (varname_of_comparator c1)^"_and_"^(varname_of_comparator c2)
-  
+
   let version_0_3_or_after t =
     comparator_apply t (VGreaterEqual (string_of_version "0.3"))
-  
+
 end
 
 module OASISLicense = struct
-(* # 21 "/Users/mmottl/local/darwin11.3.0/src/oasis-0.3.0~rc6/src/oasis/OASISLicense.ml" *)
-  
+(* # 21 "/Users/mmottl/local/darwin11.3.0/src/oasis-0.3.0/src/oasis/OASISLicense.ml" *)
+
   (** License for _oasis fields
       @author Sylvain Le Gall
     *)
-  
-  
-  
+
+
+
   type license = string 
-  
+
   type license_exception = string 
-  
+
   type license_version =
     | Version of OASISVersion.t
     | VersionOrLater of OASISVersion.t
     | NoVersion
     
-  
+
   type license_dep_5_unit =
     {
       license:   license;
       version:   license_version;
     }
     
-  
+
   type license_dep_5 =
     | DEP5Unit of license_dep_5_unit
     | DEP5Or of license_dep_5 list
     | DEP5And of license_dep_5 list
     
-  
+
   type t =
     | DEP5License of license_dep_5
     | OtherLicense of string (* URL *)
     
-  
+
 end
 
 module OASISExpr = struct
-(* # 21 "/Users/mmottl/local/darwin11.3.0/src/oasis-0.3.0~rc6/src/oasis/OASISExpr.ml" *)
-  
-  
-  
+(* # 21 "/Users/mmottl/local/darwin11.3.0/src/oasis-0.3.0/src/oasis/OASISExpr.ml" *)
+
+
+
   open OASISGettext
-  
+
   type test = string 
-  
+
   type flag = string 
-  
+
   type t =
     | EBool of bool
     | ENot of t
     | EFlag of flag
     | ETest of test * string
     
-  
+
   type 'a choices = (t * 'a) list 
-  
+
   let eval var_get t =
     let rec eval' =
       function
         | EBool b ->
             b
-  
+
         | ENot e ->
             not (eval' e)
-  
+
         | EAnd (e1, e2) ->
             (eval' e1) && (eval' e2)
-  
+
         | EOr (e1, e2) ->
             (eval' e1) || (eval' e2)
-  
+
         | EFlag nm ->
             let v =
               var_get nm
             in
               assert(v = "true" || v = "false");
               (v = "true")
-  
+
         | ETest (nm, vl) ->
             let v =
               var_get nm
               (v = vl)
     in
       eval' t
-  
+
   let choose ?printer ?name var_get lst =
     let rec choose_aux =
       function
                          str_lst)
     in
       choose_aux (List.rev lst)
-  
+
 end
 
 module OASISTypes = struct
-(* # 21 "/Users/mmottl/local/darwin11.3.0/src/oasis-0.3.0~rc6/src/oasis/OASISTypes.ml" *)
-  
-  
-  
-  
+(* # 21 "/Users/mmottl/local/darwin11.3.0/src/oasis-0.3.0/src/oasis/OASISTypes.ml" *)
+
+
+
+
   type name          = string 
   type package_name  = string 
   type url           = string 
   type arg           = string 
   type args          = string list 
   type command_line  = (prog * arg list) 
-  
+
   type findlib_name = string 
   type findlib_full = string 
-  
+
   type compiled_object =
     | Byte
     | Native
     | Best
     
-  
+
   type dependency =
     | FindlibPackage of findlib_full * OASISVersion.comparator option
     | InternalLibrary of name
     
-  
+
   type tool =
     | ExternalTool of name
     | InternalExecutable of name
     
-  
+
   type vcs =
     | Darcs
     | Git
     | Monotone
     | OtherVCS of url
     
-  
+
   type plugin_kind =
       [  `Configure
        | `Build
        | `Install
        | `Extra
       ]
-  
+
   type plugin_data_purpose =
       [  `Configure
        | `Build
        | `Extra
        | `Other of string
       ]
-  
+
   type 'a plugin = 'a * name * OASISVersion.t option 
-  
+
   type all_plugin = plugin_kind plugin
-  
+
   type plugin_data = (all_plugin * plugin_data_purpose * (unit -> unit)) list
-  
-(* # 102 "/Users/mmottl/local/darwin11.3.0/src/oasis-0.3.0~rc6/src/oasis/OASISTypes.ml" *)
-  
+
+(* # 102 "/Users/mmottl/local/darwin11.3.0/src/oasis-0.3.0/src/oasis/OASISTypes.ml" *)
+
   type 'a conditional = 'a OASISExpr.choices 
-  
+
   type custom =
       {
         pre_command:  (command_line option) conditional;
         post_command: (command_line option) conditional;
       }
       
-  
+
   type common_section =
       {
         cs_name: name;
         cs_plugin_data: plugin_data;
       }
       
-  
+
   type build_section =
       {
         bs_build:           bool conditional;
         bs_nativeopt:       args conditional;
       }
       
-  
+
   type library =
       {
         lib_modules:            string list;
         lib_findlib_name:       findlib_name option;
         lib_findlib_containers: findlib_name list;
       } 
-  
+
   type executable =
       {
         exec_custom:          bool;
         exec_main_is:         unix_filename;
       } 
-  
+
   type flag =
       {
         flag_description:  string option;
         flag_default:      bool conditional;
       } 
-  
+
   type source_repository =
       {
         src_repo_type:        vcs;
         src_repo_tag:         string option;
         src_repo_subdir:      unix_filename option;
       } 
-  
+
   type test =
       {
         test_type:               [`Test] plugin;
         test_run:                bool conditional;
         test_tools:              tool list;
       } 
-  
+
   type doc_format =
     | HTML of unix_filename
     | DocText
     | DVI
     | OtherDoc
     
-  
+
   type doc =
       {
         doc_type:        [`Doc] plugin;
         doc_data_files:  (unix_filename * unix_filename option) list;
         doc_build_tools: tool list;
       } 
-  
+
   type section =
     | Library    of common_section * build_section * library
     | Executable of common_section * build_section * executable
     | Test       of common_section * test
     | Doc        of common_section * doc
     
-  
+
   type section_kind =
       [ `Library | `Executable | `Flag | `SrcRepo | `Test | `Doc ]
-  
+
   type package = 
       {
         oasis_version:    OASISVersion.t;
         synopsis:         string;
         description:      string option;
         categories:       url list;
-  
+
         conf_type:        [`Configure] plugin;
         conf_custom:      custom;
-  
+
         build_type:       [`Build] plugin;
         build_custom:     custom;
-  
+
         install_type:     [`Install] plugin;
         install_custom:   custom;
         uninstall_custom: custom;
-  
+
         clean_custom:     custom;
         distclean_custom: custom;
-  
+
         files_ab:         unix_filename list;
         sections:         section list;
         plugins:          [`Extra] plugin list;
         schema_data:      PropList.Data.t;
         plugin_data:      plugin_data;
       } 
-  
+
 end
 
 module OASISUnixPath = struct
-(* # 21 "/Users/mmottl/local/darwin11.3.0/src/oasis-0.3.0~rc6/src/oasis/OASISUnixPath.ml" *)
-  
+(* # 21 "/Users/mmottl/local/darwin11.3.0/src/oasis-0.3.0/src/oasis/OASISUnixPath.ml" *)
+
   type unix_filename = string
   type unix_dirname = string
-  
+
   type host_filename = string
   type host_dirname = string
-  
+
   let current_dir_name = "."
-  
+
   let parent_dir_name = ".."
-  
+
+  let is_current_dir fn =
+    fn = current_dir_name || fn = ""
+
   let concat f1 f2 =
-    if f1 = current_dir_name || f1 = "" then
+    if is_current_dir f1 then
       f2
     else
       let f1' =
         try OASISString.strip_ends_with ~what:"/" f1 with Not_found -> f1
       in
         f1'^"/"^f2
-  
+
   let make =
     function
       | hd :: tl ->
             tl
       | [] ->
           invalid_arg "OASISUnixPath.make"
-  
+
   let dirname f =
     try
       String.sub f 0 (String.rindex f '/')
     with Not_found ->
       current_dir_name
-  
+
   let basename f =
     try
       let pos_start =
         String.sub f pos_start ((String.length f) - pos_start)
     with Not_found ->
       f
-  
+
   let chop_extension f =
     try
       let last_dot =
               f
         with Not_found ->
           sub
-  
+
     with Not_found ->
       f
-  
+
   let capitalize_file f =
     let dir = dirname f in
     let base = basename f in
     concat dir (String.capitalize base)
-  
+
   let uncapitalize_file f =
     let dir = dirname f in
     let base = basename f in
     concat dir (String.uncapitalize base)
-  
+
 end
 
 module OASISHostPath = struct
-(* # 21 "/Users/mmottl/local/darwin11.3.0/src/oasis-0.3.0~rc6/src/oasis/OASISHostPath.ml" *)
-  
-  
+(* # 21 "/Users/mmottl/local/darwin11.3.0/src/oasis-0.3.0/src/oasis/OASISHostPath.ml" *)
+
+
   open Filename
-  
+
   module Unix = OASISUnixPath
-  
+
   let make =
     function
       | [] ->
           invalid_arg "OASISHostPath.make"
       | hd :: tl ->
           List.fold_left Filename.concat hd tl
-  
+
   let of_unix ufn =
     if Sys.os_type = "Unix" then
       ufn
               else
                 p)
            (OASISString.nsplit ufn '/'))
-  
-  
+
+
 end
 
 module OASISSection = struct
-(* # 21 "/Users/mmottl/local/darwin11.3.0/src/oasis-0.3.0~rc6/src/oasis/OASISSection.ml" *)
-  
+(* # 21 "/Users/mmottl/local/darwin11.3.0/src/oasis-0.3.0/src/oasis/OASISSection.ml" *)
+
   open OASISTypes
-  
+
   let section_kind_common = 
     function
       | Library (cs, _, _) -> 
           `Test, cs
       | Doc (cs, _) ->
           `Doc, cs
-  
+
   let section_common sct =
     snd (section_kind_common sct)
-  
+
   let section_common_set cs =
     function
       | Library (_, bs, lib)     -> Library (cs, bs, lib)
       | SrcRepo (_, src_repo)    -> SrcRepo (cs, src_repo)
       | Test (_, tst)            -> Test (cs, tst)
       | Doc (_, doc)             -> Doc (cs, doc)
-  
+
   (** Key used to identify section
     *)
   let section_id sct = 
       section_kind_common sct
     in
       k, cs.cs_name
-  
+
   let string_of_section sct =
     let k, nm =
       section_id sct
          | `Test       -> "test"
          | `Doc        -> "doc")
       ^" "^nm
-  
+
   let section_find id scts =
     List.find
       (fun sct -> id = section_id sct)
       scts
-  
+
   module CSection =
   struct
     type t = section
-  
+
     let id = section_id
-  
+
     let compare t1 t2 = 
       compare (id t1) (id t2)
       
     let equal t1 t2 =
       (id t1) = (id t2)
-  
+
     let hash t =
       Hashtbl.hash (id t)
   end
-  
+
   module MapSection = Map.Make(CSection)
   module SetSection = Set.Make(CSection)
-  
+
 end
 
 module OASISBuildSection = struct
-(* # 21 "/Users/mmottl/local/darwin11.3.0/src/oasis-0.3.0~rc6/src/oasis/OASISBuildSection.ml" *)
-  
+(* # 21 "/Users/mmottl/local/darwin11.3.0/src/oasis-0.3.0/src/oasis/OASISBuildSection.ml" *)
+
 end
 
 module OASISExecutable = struct
-(* # 21 "/Users/mmottl/local/darwin11.3.0/src/oasis-0.3.0~rc6/src/oasis/OASISExecutable.ml" *)
-  
+(* # 21 "/Users/mmottl/local/darwin11.3.0/src/oasis-0.3.0/src/oasis/OASISExecutable.ml" *)
+
   open OASISTypes
-  
+
   let unix_exec_is (cs, bs, exec) is_native ext_dll suffix_program = 
     let dir = 
       OASISUnixPath.concat
         | Best -> is_native ()
         | Byte -> false
     in
-  
+
       OASISUnixPath.concat
         dir
         (cs.cs_name^(suffix_program ())),
-  
+
       if not is_native_exec && 
          not exec.exec_custom && 
          bs.bs_c_sources <> [] then
         Some (dir^"/dll"^cs.cs_name^"_stubs"^(ext_dll ()))
       else
         None
-  
+
 end
 
 module OASISLibrary = struct
-(* # 21 "/Users/mmottl/local/darwin11.3.0/src/oasis-0.3.0~rc6/src/oasis/OASISLibrary.ml" *)
-  
+(* # 21 "/Users/mmottl/local/darwin11.3.0/src/oasis-0.3.0/src/oasis/OASISLibrary.ml" *)
+
   open OASISTypes
   open OASISUtils
   open OASISGettext
   open OASISSection
-  
+
   type library_name = name
   type findlib_part_name = name
   type 'a map_of_findlib_part_name = 'a OASISUtils.MapString.t
-  
+
   exception InternalLibraryNotFound of library_name
   exception FindlibPackageNotFound of findlib_name
-  
+
   type group_t =
     | Container of findlib_name * group_t list
     | Package of (findlib_name *
                   build_section *
                   library *
                   group_t list)
-  
+
   (* Look for a module file, considering capitalization or not. *)
   let find_module source_file_exists (cs, bs, lib) modul =
     let possible_base_fn =
                  acc)
         (`No_sources possible_base_fn)
         possible_base_fn
-  
+
   let source_unix_files ~ctxt (cs, bs, lib) source_file_exists =
     List.fold_left
       (fun acc modul ->
                acc)
       []
       (lib.lib_modules @ lib.lib_internal_modules)
-  
+
   let generated_unix_files
         ~ctxt
         ~is_native
         ~ext_dll
         ~source_file_exists
         (cs, bs, lib) =
-  
+
     let find_modules lst ext = 
       let find_module modul =
         match find_module source_file_exists (cs, bs, lib) modul with
              (find_module nm))
         lst
     in
-  
+
     (* The headers that should be compiled along *)
     let headers =
       if lib.lib_pack then
           lib.lib_modules
           "cmi"
     in
-  
+
     (* The .cmx that be compiled along *)
     let cmxs =
       let should_be_built =
         else
           []
     in
-  
+
     let acc_nopath =
       []
     in
-  
+
     (* Compute what libraries should be built *)
     let acc_nopath =
       (* Add the packed header file if required *)
         add_pack_header ([cs.cs_name^".cma"] :: acc)
       in
       let native acc =
-        let acc = [cs.cs_name^".cmxa"] :: [cs.cs_name^ext_lib] :: acc in
-        add_pack_header
-          (if has_native_dynlink then
-             [cs.cs_name^".cmxs"] :: acc
-           else acc)
+        let acc = 
+          add_pack_header
+            (if has_native_dynlink then
+               [cs.cs_name^".cmxs"] :: acc
+             else acc)
+        in
+          [cs.cs_name^".cmxa"] :: [cs.cs_name^ext_lib] :: acc
       in
         match bs.bs_compiled_object with
           | Native ->
           | Byte | Best ->
               byte acc_nopath
     in
-  
+
     (* Add C library to be built *)
     let acc_nopath =
       if bs.bs_c_sources <> [] then
       else
         acc_nopath
     in
-  
+
       (* All the files generated *)
       List.rev_append
         (List.rev_map
               (OASISUnixPath.concat bs.bs_path))
            acc_nopath)
         (headers @ cmxs)
-  
+
   type data = common_section * build_section * library
   type tree =
     | Node of (data option) * (tree MapString.t)
     | Leaf of data
-  
+
   let findlib_mapping pkg =
     (* Map from library name to either full findlib name or parts + parent. *)
     let fndlb_parts_of_lib_name =
                                (`Solved fndlb_parts)
                                mp
                    end
-  
+
                | Executable _ | Test _ | Flag _ | SrcRepo _ | Doc _ ->
                    mp)
           MapString.empty
           pkg.sections
     in
-  
+
     (* Solve the above graph to be only library name to full findlib name. *)
     let fndlb_name_of_lib_name =
       let rec solve visited mp lib_name lib_name_child =
              | `Unsolved _ -> assert false)
           mp
     in
-  
+
     (* Convert an internal library name to a findlib name. *)
     let findlib_name_of_library_name lib_nm =
       try
       with Not_found ->
         raise (InternalLibraryNotFound lib_nm)
     in
-  
+
     (* Add a library to the tree.
      *)
     let add sct mp =
       in
         add_children (OASISString.nsplit fndlb_fullname '.') mp
     in
-  
+
     let rec group_of_tree mp =
       MapString.fold
         (fun nm node acc ->
              cur :: acc)
         mp []
     in
-  
+
     let group_mp =
       List.fold_left
         (fun mp ->
         MapString.empty
         pkg.sections
     in
-  
+
     let groups =
       group_of_tree group_mp
     in
-  
+
     let library_name_of_findlib_name =
       Lazy.lazy_from_fun
         (fun () ->
       with Not_found ->
         raise (FindlibPackageNotFound fndlb_nm)
     in
-  
+
       groups,
       findlib_name_of_library_name,
       library_name_of_findlib_name
-  
+
   let findlib_of_group =
     function
       | Container (fndlb_nm, _)
       | Package (fndlb_nm, _, _, _, _) -> fndlb_nm
-  
+
   let root_of_group grp =
     let rec root_lib_aux =
       (* We do a DFS in the group. *)
             failwithf
               (f_ "Unable to determine root library of findlib library '%s'")
               (findlib_of_group grp)
-  
+
 end
 
 module OASISFlag = struct
-(* # 21 "/Users/mmottl/local/darwin11.3.0/src/oasis-0.3.0~rc6/src/oasis/OASISFlag.ml" *)
-  
+(* # 21 "/Users/mmottl/local/darwin11.3.0/src/oasis-0.3.0/src/oasis/OASISFlag.ml" *)
+
 end
 
 module OASISPackage = struct
-(* # 21 "/Users/mmottl/local/darwin11.3.0/src/oasis-0.3.0~rc6/src/oasis/OASISPackage.ml" *)
-  
+(* # 21 "/Users/mmottl/local/darwin11.3.0/src/oasis-0.3.0/src/oasis/OASISPackage.ml" *)
+
 end
 
 module OASISSourceRepository = struct
-(* # 21 "/Users/mmottl/local/darwin11.3.0/src/oasis-0.3.0~rc6/src/oasis/OASISSourceRepository.ml" *)
-  
+(* # 21 "/Users/mmottl/local/darwin11.3.0/src/oasis-0.3.0/src/oasis/OASISSourceRepository.ml" *)
+
 end
 
 module OASISTest = struct
-(* # 21 "/Users/mmottl/local/darwin11.3.0/src/oasis-0.3.0~rc6/src/oasis/OASISTest.ml" *)
-  
+(* # 21 "/Users/mmottl/local/darwin11.3.0/src/oasis-0.3.0/src/oasis/OASISTest.ml" *)
+
 end
 
 module OASISDocument = struct
-(* # 21 "/Users/mmottl/local/darwin11.3.0/src/oasis-0.3.0~rc6/src/oasis/OASISDocument.ml" *)
-  
+(* # 21 "/Users/mmottl/local/darwin11.3.0/src/oasis-0.3.0/src/oasis/OASISDocument.ml" *)
+
 end
 
 module OASISExec = struct
-(* # 21 "/Users/mmottl/local/darwin11.3.0/src/oasis-0.3.0~rc6/src/oasis/OASISExec.ml" *)
-  
+(* # 21 "/Users/mmottl/local/darwin11.3.0/src/oasis-0.3.0/src/oasis/OASISExec.ml" *)
+
   open OASISGettext
   open OASISUtils
   open OASISMessage
-  
-  let run ~ctxt ?f_exit_code cmd args =
+
+  (* TODO: I don't like this quote, it is there because $(rm) foo expands to
+   * 'rm -f' foo...
+   *)
+  let run ~ctxt ?f_exit_code ?(quote=true) cmd args =
+    let cmd =
+      if quote then
+        if Sys.os_type = "Win32" then
+          if String.contains cmd ' ' then
+            (* Double the 1st double quote... win32... sigh *)
+            "\""^(Filename.quote cmd)
+          else
+            cmd
+        else
+          Filename.quote cmd
+      else
+        cmd
+    in
     let cmdline =
       String.concat " " (cmd :: args)
     in
               cmdline i
         | Some f, i ->
             f i
-  
+
   let run_read_output ~ctxt ?f_exit_code cmd args =
     let fn =
       Filename.temp_file "oasis-" ".txt"
       with e ->
         (try Sys.remove fn with _ -> ());
         raise e
-  
+
   let run_read_one_line ~ctxt ?f_exit_code cmd args =
     match run_read_output ~ctxt ?f_exit_code cmd args with
       | [fst] ->
 end
 
 module OASISFileUtil = struct
-(* # 21 "/Users/mmottl/local/darwin11.3.0/src/oasis-0.3.0~rc6/src/oasis/OASISFileUtil.ml" *)
-  
+(* # 21 "/Users/mmottl/local/darwin11.3.0/src/oasis-0.3.0/src/oasis/OASISFileUtil.ml" *)
+
   open OASISGettext
-  
+
   let file_exists_case fn =
     let dirname = Filename.dirname fn in
     let basename = Filename.basename fn in
             (Array.to_list (Sys.readdir dirname))
       else
         false
-  
+
   let find_file ?(case_sensitive=true) paths exts =
-  
+
     (* Cardinal product of two list *)
     let ( * ) lst1 lst2 =
       List.flatten
                 lst2)
            lst1)
     in
-  
+
     let rec combined_paths lst =
       match lst with
         | p1 :: p2 :: tl ->
         | [] ->
             []
     in
-  
+
     let alternatives =
       List.map
         (fun (p,e) ->
          else
            Sys.file_exists)
         alternatives
-  
+
   let which ~ctxt prg =
     let path_sep =
       match Sys.os_type with
             [""]
     in
       find_file ~case_sensitive:false [path_lst; [prg]] exec_ext
-  
+
   (**/**)
   let rec fix_dir dn =
     (* Windows hack because Sys.file_exists "src\\" = false when
         fix_dir (String.sub dn 0 (ln - 1))
       else
         dn
-  
+
   let q = Filename.quote
   (**/**)
-  
+
   let cp ~ctxt ?(recurse=false) src tgt =
     if recurse then
       match Sys.os_type with
          | "Win32" -> "copy"
          | _ -> "cp")
         [q src; q tgt]
-  
+
   let mkdir ~ctxt tgt =
     OASISExec.run ~ctxt
       (match Sys.os_type with
          | "Win32" -> "md"
          | _ -> "mkdir")
       [q tgt]
-  
+
   let rec mkdir_parent ~ctxt f tgt =
     let tgt =
       fix_dir tgt
               mkdir ~ctxt tgt
             end
         end
-  
+
   let rmdir ~ctxt tgt =
     if Sys.readdir tgt = [||] then
       begin
           | _ ->
               OASISExec.run ~ctxt "rm" ["-r"; q tgt]
       end
-  
+
   let glob ~ctxt fn =
    let basename =
      Filename.basename fn
 end
 
 
-# 2121 "setup.ml"
+# 2142 "setup.ml"
 module BaseEnvLight = struct
-(* # 21 "/Users/mmottl/local/darwin11.3.0/src/oasis-0.3.0~rc6/src/base/BaseEnvLight.ml" *)
-  
+(* # 21 "/Users/mmottl/local/darwin11.3.0/src/oasis-0.3.0/src/base/BaseEnvLight.ml" *)
+
   module MapString = Map.Make(String)
-  
+
   type t = string MapString.t
-  
+
   let default_filename =
     Filename.concat
       (Sys.getcwd ())
       "setup.data"
-  
+
   let load ?(allow_empty=false) ?(filename=default_filename) () =
     if Sys.file_exists filename then
       begin
              "Unable to load environment, the file '%s' doesn't exist."
              filename)
       end
-  
+
   let var_get name env =
     let rec var_expand str =
       let buff =
         Buffer.contents buff
     in
       var_expand (MapString.find name env)
-  
+
   let var_choose lst env =
     OASISExpr.choose
       (fun nm -> var_get nm env)
 end
 
 
-# 2219 "setup.ml"
+# 2240 "setup.ml"
 module BaseContext = struct
-(* # 21 "/Users/mmottl/local/darwin11.3.0/src/oasis-0.3.0~rc6/src/base/BaseContext.ml" *)
-  
+(* # 21 "/Users/mmottl/local/darwin11.3.0/src/oasis-0.3.0/src/base/BaseContext.ml" *)
+
   open OASISContext
-  
+
   let args = args
-  
+
   let default = default
-  
+
 end
 
 module BaseMessage = struct
-(* # 21 "/Users/mmottl/local/darwin11.3.0/src/oasis-0.3.0~rc6/src/base/BaseMessage.ml" *)
-  
+(* # 21 "/Users/mmottl/local/darwin11.3.0/src/oasis-0.3.0/src/base/BaseMessage.ml" *)
+
   (** Message to user, overrid for Base
       @author Sylvain Le Gall
     *)
   open OASISMessage
   open BaseContext
-  
+
   let debug fmt   = debug ~ctxt:!default fmt
-  
+
   let info fmt    = info ~ctxt:!default fmt
-  
+
   let warning fmt = warning ~ctxt:!default fmt
-  
+
   let error fmt = error ~ctxt:!default fmt
-  
+
 end
 
 module BaseEnv = struct
-(* # 21 "/Users/mmottl/local/darwin11.3.0/src/oasis-0.3.0~rc6/src/base/BaseEnv.ml" *)
-  
+(* # 21 "/Users/mmottl/local/darwin11.3.0/src/oasis-0.3.0/src/base/BaseEnv.ml" *)
+
   open OASISGettext
   open OASISUtils
   open PropList
-  
+
   module MapString = BaseEnvLight.MapString
-  
+
   type origin_t =
     | ODefault
     | OGetEnv
     | OFileLoad
     | OCommandLine
-  
+
   type cli_handle_t =
     | CLINone
     | CLIAuto
     | CLIWith
     | CLIEnable
     | CLIUser of (Arg.key * Arg.spec * Arg.doc) list
-  
+
   type definition_t =
       {
         hide:       bool;
         arg_help:   string option;
         group:      string option;
       }
-  
+
   let schema =
     Schema.create "environment"
-  
+
   (* Environment data *)
   let env =
     Data.create ()
-  
+
   (* Environment data from file *)
   let env_from_file =
     ref MapString.empty
-  
+
   (* Lexer for var *)
   let var_lxr =
     Genlex.make_lexer []
-  
+
   let rec var_expand str =
     let buff =
       Buffer.create ((String.length str) * 2)
                    e)
         str;
       Buffer.contents buff
-  
+
   and var_get name =
     let vl =
       try
         end
     in
       var_expand vl
-  
+
   let var_choose ?printer ?name lst =
     OASISExpr.choose
       ?printer
       ?name
       var_get
       lst
-  
+
   let var_protect vl =
     let buff =
       Buffer.create (String.length vl)
            | c   -> Buffer.add_char   buff c)
         vl;
       Buffer.contents buff
-  
+
   let var_define
         ?(hide=false)
         ?(dump=true)