(*
    Title:      Bootstrap code.
    Author:     David Matthews
    Copyright   David Matthews 2005-2008, 2017

    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Lesser General Public
    License version 2.1 as published by the Free Software Foundation.
    
    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    Lesser General Public License for more details.
    
    You should have received a copy of the GNU Lesser General Public
    License along with this library; if not, write to the Free Software
    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
*)
val () = RunCall.addOverload Bootstrap.convString Bootstrap.convStringName;
val () = RunCall.addOverload Bootstrap.convInt "convInt";
val () = RunCall.addOverload Bootstrap.convWord "convWord";

(* Build the main basis library. *)
val () = Bootstrap.use "basis/build.sml";

(* We've now set up the new name space so everything has to be
   compiled into that rather than the old space. *)
    (* XWindows/Motif *)
val () =
let
    val xWindowsGeneralCall = RunCall.rtsCallFull1 "PolyXWindowsGeneral"
    val xcall: int*int->int*int = xWindowsGeneralCall
    (* See if the RTS supports the X GetTimeOfDay call. *)
    val isX = (xcall(30, 0); true) handle _ => false
in
   if isX
   then
   (
        PolyML.make "mlsource/extra/XWindows";
        PolyML.make "mlsource/extra/Motif"
   )
   else ()
end;

val () = PolyML.print_depth 10;

(* Write out the result as an export file. *)
local
    val args = CommandLine.arguments();
    (* If we have -o filename use that as the output name.
       N.B.  polyImport takes the first argument that is not recognised as
       an RTS argument and treats that as the file name so any -o must occur
       AFTER the import file. *)
    fun getFile [] = "polyexport" (* Default file name *)
      | getFile ("-o" :: outFile :: _) = outFile
      | getFile (_::tl) = getFile tl
    val fileName = getFile args
in
    val () = PolyML.shareCommonData PolyML.rootFunction;
    val () = PolyML.export(fileName, PolyML.rootFunction)
end;

