import("ldb-template")
import("m3psgen")

  import("libm3")
  import("nrlib")

  Noweb_multiples("InterpUTextX", 
   ["InterpUText", "InterpUTextF", "InterpUTextX", "InterpUTextFuns", "InterpUTextWr"],
   ["InterpUTextFuns", "InterpUText", "InterpUTextWr"], 
   [], [])

  Nwmodules(["InterpBasics", "InterpScan", "InterpPrint", "InterpDict", 
             "InterpDictSugar"])
  Friends_interface("Interp")
  Noweb_interface("Interp", "control interface", "InterpControl")
     % this whole thing is a crock; the interp interfaces ought to be 
     % reworked.  I did a lot of interface splitting to fix initialization
     % order and the results are really ugly.
  opsmodules(["Stack", "Arith", "Array", "Dict", "Bool", "String", "File", 
               "Control", "Convert", "Misc"])
  Psmodules(["Formatter", "Interp"])
  psimplementations(["Pickle", "Filename", "RTHeap"])
  Nwmodules(["TokenStream"])
  Noweb_interface("TokenStream", "rep interface", "TokenStreamRep")
  noweb_implementation("TokenStream", "unsafe module", "UnsafeTokenStream")

  Nwinterfaces(["InterpOps"])

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  %% weird error stuff

  Nwmodule("Error")

  proc error_notangle(x, root, dest) is
    notangle([path_of(x & ".nw"), path_of("error-chunks.nw")], M3LINE, root, dest)
  end
  proc Error_int(x) is
    error_notangle(x, "interface", x & ".i3")
    derived_interface(x, VISIBLE)
  end  
  proc error_mod(x) is
    error_notangle(x, "*", x & ".m3")
    derived_implementation(x)
  end  

  Error_int("InterpTypes")
  Error_int("Interp")
  error_mod("Interp")


  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  %
  %	alternative targets

  if defined("_smallinterp")
    error_mod("Main")
    Program("smallinterp")
  else
    Library("m3ps")
    write("Try defining _smallinterp for standalone interpreter", CR)
  end





/************* old mkfile stuff

################################################################
# special rules for particular targets

optimize:V: InterpScan.mo TextHash.mo InterpUText.mo InterpDict.mo UnsafeTokenStream.mo  	    TokenStream.mo

InterpScan.mo: InterpScan.m3
  	m3 $M3SEARCH -c -X1/-Olimit/1700/ -O -w1 $prereq	# optimize hot spot
TextHash.mo: TextHash.m3
 	m3 $M3SEARCH -c -O -w1 $prereq	# optimize hot spot
InterpUText.mo: InterpUText.m3
 	m3 $M3SEARCH -c -O -w1 $prereq	# optimize hot spot
InterpDict.mo: InterpDict.m3
 	m3 $M3SEARCH -c -O -w1 $prereq	# optimize hot spot
UnsafeTokenStream.mo: UnsafeTokenStream.m3
 	m3 $M3SEARCH -c -O -w1 $prereq	# optimize hot spot
TokenStream.mo: TokenStream.m3
 	m3 $M3SEARCH -c -O -w1 $prereq	# optimize hot spot

******************/


