CFLAGS  =   -O
CCFLAGS =   +e2
LDFLAGS =   
WLIB    =   -lsuntool -lsunwindow -lpixrect
MAKEDEP =   ../bin/domakedep
MUNCH   =   /local/lib/munch
LIBCC   =   /local/lib/libC.a
SHELL   =   /bin/sh

.SUFFIXES: .C

.C.o:
	CC -c $(CCFLAGS) $<

#-------------------------------------------------------------------------------
# memory management
#-------------------------------------------------------------------------------
MALLOC          =   MALLOC/storage.o

#-------------------------------------------------------------------------------
# supported window systems
#-------------------------------------------------------------------------------
SUNSERVER       =   SERVER/sunserver.o  # a server for sunwindows/sunview
XSERVER         =   XSERVER/xserver.o   # X11.3
NEWSSERVER      =   NEWS/newsserver.o   # NeWS 1.1
SUNWINDOW       =   SUNWINDOW/sun.o     # sunwindow/sunview

#-------------------------------------------------------------------------------
# supported operating systems
#-------------------------------------------------------------------------------
SUNOS           =   SUNOS/sunos.o

#-------------------------------------------------------------------------------
# supported printers
#-------------------------------------------------------------------------------
POSTSCRIPT      =   POSTSCRIPT/postscript.o 
PIC             =   PIC/pic.o           # pic output to be used with troff

#-------------------------------------------------------------------------------
# programming environment
#-------------------------------------------------------------------------------

ET_PROGENV      =   PROGENV/etprogenv.o

#-------------------------------------------------------------------------------
# configuration
#-------------------------------------------------------------------------------

#---- window system

WS_OFILES       =   $(SUNSERVER) $(NEWSSERVER) $(XSERVER) $(SUNWINDOW)
WS_IFDEFS       =   -DWS_SUNSERVER -DWS_NEWS -DWS_X -DWS_SUNWINDOW
WS_DIRS         =   SUNWINDOW XSERVER SERVER NEWS 

#---- printer

PR_OFILES       =   $(POSTSCRIPT) $(PIC)
PR_IFDEFS       =   -DPR_POSTSCRIPT -DPR_PIC
PR_DIRS         =   POSTSCRIPT PIC

#---- operating system

OS_OFILES       =   $(SUNOS)
OS_DIRS         =   SUNOS
OS_IFDEFS       =   -DOS_SUNOS

#---- programming environment

PE_OFILES       =   $(ET_PROGENV)
PE_IFDEFS       =   -DET_PROGENV
PE_DIRS         =   PROGENV

#-------------------------------------------------------------------------------
# end of configuration
#-------------------------------------------------------------------------------

STORAGEO        =   $(MALLOC)

DIRS            =   $(WS_DIRS) $(PR_DIRS) $(PE_DIRS) $(OS_DIRS)

#-------------------------------------------------------------------------------
# basic data structures (non graphical classes)
#-------------------------------------------------------------------------------

OFILES1=    AssocArray.o \
	    Bag.o \
	    BitSet.o \
	    ByteArray.o \
	    Class.o \
	    Collection.o \
	    Dictionary.o \
	    FileType.o \
	    FixedSizeStorage.o \
	    Error.o \
	    IdDictionary.o \
	    Metric.o \
	    membuf.o \
	    Object.o \
	    ObjectTable.o \
	    ObjArray.o \
	    ObjInt.o \
	    ObjFloat.o \
	    ObjList.o \
	    OrdCollection.o \
	    PathLookup.o \
	    Point.o \
	    ProgEnv.o \
	    Rectangle.o \
	    RegularExp.o \
	    Root.o \
	    Set.o  \
	    Iterator.o \
	    SeqCollection.o \
	    SortedObjList.o \
	    String.o \
	    Storage.o $(STORAGEO) \
	    System.o \
	    Types.o \
	    regex.o \
	    $(OS_OFILES)

#-------------------------------------------------------------------------------
# graphical classes
#-------------------------------------------------------------------------------

OFILES2=    Alert.o \
	    Application.o \
	    BlankWin.o \
	    BorderItems.o \
	    CheapText.o \
	    ClipBoard.o \
	    Clipper.o \
	    Cluster.o \
	    CodeTextView.o \
	    CollectionView.o \
	    Command.o \
	    Dialog.o \
	    DialogItems.o \
	    Document.o \
	    EvtHandler.o \
	    Expander.o \
	    FileDialog.o \
	    FindDialog.o \
	    FixedLineTextView.o \
	    GapText.o \
	    GotoDialog.o \
	    Icon.o \
	    Mark.o \
	    Menu.o \
	    PrintDialog.o \
	    Printer.o \
	    PullDownFrame.o \
	    RestrTextView.o \
	    RunArray.o \
	    Scroller.o \
	    ScrollBar.o \
	    ShellTextView.o \
	    Slider.o \
	    Splitter.o \
	    StaticTextView.o \
	    StyledText.o \
	    Text.o \
	    TextCmd.o \
	    TextView.o \
	    TreeView.o \
	    View.o \
	    VObject.o \
	    VObjectText.o \
	    VObjectTextView.o \
	    Window.o \
	    $(PE_OFILES)

#-------------------------------------------------------------------------------
# graphics interface
#-------------------------------------------------------------------------------

OFILES3 =   Bitmap.o \
	    Font.o \
	    PictPort.o \
	    Picture.o \
	    Port.o \
	    PrintPort.o \
	    Token.o \
	    WindowPort.o \
	    WindowSystem.o \
	    $(PR_OFILES) \
	    $(WS_OFILES)

#-------------------------------------------------------------------------------

all:        et col clipboard server app

#-------------------------------------------------------------------------------

ctdtorder:  order
	    mkorder | awk '{ print $$3 }' > ctdtorder

#-------------------------------------------------------------------------------

Init.o:     Init.C
	    CC -c $(WS_IFDEFS) $(PE_IFDEFS) $(OS_IFDEFS) $(PR_IFDEFS) $(CCFLAGS) $<

InitCol.o:  InitCol.C
	    CC -c $(OS_IFDEFS) $(CCFLAGS) $<

ObjectTable.o:     ObjectTable.C
	    CC -c $(PE_IFDEFS) $(CCFLAGS) $<

#-------------------------------------------------------------------------------
# et
#-------------------------------------------------------------------------------

ETO     =   $(OFILES1) $(OFILES2) $(OFILES3) Init.o
ETDIRS  =   MALLOC $(DIRS)

et:     etdirs et.o et.ctdt

etdirs: 
	-@for i in $(ETDIRS); do (echo $$i; cd $$i; $(MAKE)); done

et.o:   $(ETO) libC2.a FRC
	ld -X -r -o $@ $(ETO) libC2.a -lc

et.ctdt:   et.o ctdtorder
	(nm et.o | fgrep "T __ST"; cat ctdtorder) | awk -f ck1 > $@

config:
	touch Init.C ObjectTable.C
	$(MAKE)

#-------------------------------------------------------------------------------
# col
#-------------------------------------------------------------------------------

COLO    =   $(OFILES1) InitCol.o
COLDIRS =   MALLOC SUNOS

col:    coldirs col.o InitCol.o col.ctdt

coldirs:
	-@for i in $(COLDIRS); do (echo $$i; cd $$i; $(MAKE)); done

col.o:  $(COLO) libC2.a FRC
	ld -X -r -o col.o $(COLO) libC2.a -lc

col.ctdt:   col.o ctdtorder
	(nm col.o | fgrep "T __ST"; cat ctdtorder) | awk -f ck1 > $@

#-------------------------------------------------------------------------------
# sunwindow server
#-------------------------------------------------------------------------------

SERVERO =   Server.o \
	    $(OFILES1) \
	    Bitmap.o \
	    Font.o \
	    Picture.o \
	    Port.o \
	    Token.o \
	    WindowPort.o \
	    WindowSystem.o \
	    $(SUNSERVER) \
	    $(SUNWINDOW)

SERVERDIRS  =   MALLOC SUNOS SUNWINDOW

server:  serverdirs $(SERVERO) FRC
	CC -o server $(SERVERO) $(WLIB) -lm

serverdirs:
	-@for i in $(SERVERDIRS); do (echo $$i; cd $$i; $(MAKE)); done

#-------------------------------------------------------------------------------
# clipboard server
#-------------------------------------------------------------------------------

CLIPBOARDO  =   Clipboard.o $(OFILES1)
CLIPDIRS    =   MALLOC SUNOS

clipboard:   clipboarddirs $(CLIPBOARDO) FRC
	CC -o clipboard $(CLIPBOARDO) -lm

clipboarddirs:
	-@for i in $(CLIPDIRS); do (echo $$i; cd $$i; $(MAKE)); done
       
#-------------------------------------------------------------------------------
# generic application
#-------------------------------------------------------------------------------

app:    et.o app.o
	../bin/etld -static $(LDFLAGS) -o $@ app.o

#-------------------------------------------------------------------------------

libC2.a:    $(LIBCC)
	cp $(LIBCC) libC2.a
	ar d libC2.a _dtor.o _ctor.o
	ranlib libC2.a

depend:
	$(MAKEDEP) *.[chC] images/*.image > deps

clean:
	rm -f core *..c errs $(ETO) libC2.a
	-@for i in $(DIRS); do (cd $$i; $(MAKE) $@); done

clobber:    clean
	rm -f *.o *.ctdt ctdtorder server clipboard app
	-@for i in $(DIRS); do (cd $$i; $(MAKE) $@); done

touch:
	-@for i in $(DIRS); do (cd $$i; $(MAKE) $@); done
	$(MAKE) -t
	rm -f et.o col.o server clipboard app etdirs \
					clipboarddirs serverdirs coldirs
	$(MAKE)
	
install:
	mv app clipboard server ../bin

FRC:

include deps
