#       makefile for asntool and ncbi core routines,
#       cdromlib data access functions, vibrant and entrez
#
#       Microsoft C 32-bit MSWindows GUI application
#               [ "nmake MSW=1 WIN32=1" ]
#       Microsoft C 32-bit MSWindows console application
#               [ "nmake MSW=1 WIN32C=1" ]
#       Borland C/C++ 4.5 for 32-bit MSWindows
#               [ "make BWN=1" ]
#
#       Microsoft C large model MSWindows application
#               [ "nmake MSW=1" ]
#
#       Borland C/C++ large model under DOS [ "make -DBOR" ]
#       Microsoft C large model under DOS [ "nmake MSC=1" ]
#
#   Microsoft C medium model uses the -AM flag instead of -AL,
#       and the mlibcew library instead of llibcew
#   Borland C/C++ medium model uses the -mm flag instead of -ml,
#       the C0Wm library instead of C0Wl, CWm instead of CWl,
#       and mathwm (or mathm) instead of mathwl (or mathl)
#


# flags for compiling and loading

RC = rc

# Microsoft C under MSDOS
!ifdef MSC
GOTONE = 1
SUFFIXLCL = msc
SUFFIXENV = dos
CC = cl

LFLAGS0 = /NOE /NOD /ONERROR:NOEXE
!ifdef DBUG
DFLAGS = -Od -Zi -D_DEBUG
LFLAGS = $(LFLAGS0) /CO
!else
DFLAGS = -Os
LFLAGS = $(LFLAGS0)
!endif

CFLAGS0 = -AL -G2s -Gt4 -W3 -D_CONSOLE $(DFLAGS)
CFLAGS1  = $(CFLAGS0) -c
LDFLAGS1 = $(CFLAGS0) -F 1000 -Fm
!endif

# Microsoft C under MS Windows
!ifdef MSW
GOTONE = 1
SUFFIXLCL = msw
CC = cl

!ifdef WIN32C
WIN32 = 1
SUFFIXENV = dos
ADD_DEF = -D "_CONSOLE"
!else
MSWINDOWS = 1
SUFFIXENV = msw
ADD_DEF = -D "_WINDOWS"
!endif

!ifdef WIN32
!ifdef DBUG
DFLAGS = -Od -Zi -FR -D "_DEBUG"
LF_EXTRA = /DEBUG
!else
DFLAGS = -Ot
!endif
CFLAGS1 = -c -YX -D "WIN32" $(ADD_DEF) -W3 $(DFLAGS)
LDFLAGS1 = -YX -W3 $(DFLAGS)
LFLAGS = /SUBSYSTEM:WINDOWS /STACK:0x10240 $(LF_EXTRA)
guilibs= oldnames.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib

!else
LFLAGS0 = /NOE /NOD /ONERROR:NOEXE
!ifdef DBUG
DFLAGS = -Od -Zi -D_DEBUG
LFLAGS = $(LFLAGS0) /CO
!else
DFLAGS = -O
LFLAGS = $(LFLAGS0)
!endif
CFLAGS0 = -AL -G2s -GA -Gt4 -W3 -D "WIN16" $(DFLAGS)
CFLAGS1  = $(CFLAGS0) -c
LDFLAGS1 = $(CFLAGS0)
guilibs= commdlg llibcew libw oldnames shell
!endif
!endif

# Borland C++
!ifdef BOR
GOTONE = 1
BORLAND = 1
SUFFIXLCL = bor
SUFFIXENV = dos
CC = bcc
CFLAGS1 = -c -ml -2 -O -Yo -i65
LDFLAGS1 = -ml -2 -O -i65
!endif


# Borland C++ 4.5 under MSWindows  (( 32-bit ONLY!!! ))
!ifdef BWN
WIN32=1
GOTONE = 1
BORLAND = 1
MSWINDOWS = 1
SUFFIXLCL = bwn
SUFFIXENV = msw
RC = brcc32
CC = bcc32
STD_OBJ = c0w32
STD_LIB = import32 cw32

!ifdef DBUG
D_FLAG  = -v
CFLAGS0 = -Od -N -D_DEBUG $(D_FLAG)
!else
CFLAGS0 = -k- -O2
!endif
CFLAGS1  = -i65 -g250 -c -D_WINDOWS -DWIN32 -Di386 $(CFLAGS0)
LDFLAGS1 = -Tpe -aa -c -m $(D_FLAG)
LIBFLAGS = /C /E /P64
!endif


!ifndef GOTONE
!error PLATFORM NOT DEFINED!! [ MSC, MSW, BOR, BWN ]
!endif

!ifdef WIN32
ASNDIR = asnstat
!else
ASNDIR = asnload
!endif

!ifndef LIBPATH
LIBPATH = .
!endif

LIB1 = $(LIBPATH)\ncbi.lib
LIB2 = $(LIBPATH)\ncbiobj.lib
LIB3 = $(LIBPATH)\ncbicdr.lib
LIB5 = $(LIBPATH)\ncbiacc.lib
LIB6 = $(LIBPATH)\netcli.lib
LIB7 = $(LIBPATH)\netentr.lib
LIB8 = $(LIBPATH)\ncbinacc.lib
LIB9 = $(LIBPATH)\ncbicacc.lib
# LIB10 is reserved for ncsasock
LIB10 =
LIB22 = $(LIBPATH)\ncbimmdb.lib
!ifdef MSWINDOWS
LIB4  = $(LIBPATH)\vibrant.lib
LIB20 = $(LIBPATH)\ncbidesk.lib
LIB23 = $(LIBPATH)\ncbitool.lib
!ifdef WIN32
LIB30 = $(LIBPATH)\ncbicn3d.lib
!endif
!endif

!ifndef INCPATH
INCPATH = ..\include
!endif

!ifdef NCOPY_BIN
BINPATH  = .
COPY_BIN = echo
!else
BINPATH  = ..\bin
COPY_BIN = copy
!endif

CFLAGS  = $(CFLAGS1) -I$(INCPATH)
LDFLAGS = $(LDFLAGS1)

ASNTOOL  = asntool.exe

!ifdef WIN32
DEL = -del
!else
DEL = del
!endif


##
## some things to make
##

# objects needed for versions of asntool and entrez

XOBJ1 = +ncbibs.obj +ncbicoll.obj +ncbierr.obj +ncbienv.obj +ncbifile.obj \
	+ncbiprop.obj +ncbimain.obj +ncbimath.obj +ncbimem.obj +ncbimisc.obj \
	+ncbimsg.obj +ncbistr.obj +ncbitime.obj +ncbisgml.obj +asnbufo.obj \
	+asndebin.obj +asnenbin.obj +asngen.obj +asngenob.obj +asnio.obj \
	+asnlex.obj +asnlext.obj +asnout.obj +asnprint.obj +asntypes.obj \
	+gifgen.obj +togif.obj +ncbithr.obj +tsprintf.obj
OBJ1 = $(XOBJ1:+=)

XOBJ2 = +objacces.obj +objalign.obj +objall.obj +objbibli.obj \
	+objfeat.obj +objgen.obj +objloc.obj +objmedli.obj +objpub.obj \
	+objres.obj +objseq.obj +objcode.obj +objblock.obj +objsset.obj \
	+objsub.obj +objprt.obj +objfdef.obj +objmime.obj +seqport.obj +sequtil.obj \
	+prtutil.obj +simple.obj +tofasta.obj +tofile.obj \
	+tomedlin.obj +toreport.obj +valid.obj \
	+subutil.obj +edutil.obj +asn2ff1.obj +asn2ff2.obj +asn2ff3.obj \
	+asn2ff4.obj +asn2ff5.obj +asn2ff6.obj +ftusrstr.obj +gbfeat.obj \
	+gbftglob.obj +gbparint.obj +utilpars.obj +utilpub.obj +ffprint.obj \
	+wprint.obj +satutil.obj +seqmgr.obj +gather.obj +objmgr.obj +accmmdbs.obj \
	+acccn3ds.obj +lsqfetch.obj +findrepl.obj
OBJ2 = $(XOBJ2:+=)

XOBJ3 = +cdentrez.obj +cdromlib.obj +cdnewlib.obj +casn.obj +cdconfig.obj +objentr.obj
OBJ3 = $(XOBJ3:+=)

XOBJ4 = +vibbutns.obj +vibextra.obj +vibfiles.obj +vibforms.obj \
	+vibgroup.obj +viblists.obj +vibmenus.obj +vibprmpt.obj \
	+vibsbars.obj +vibslate.obj +vibtexts.obj \
	+vibutils.obj +vibwndws.obj +ncbidraw.obj \
	+drawing.obj +mapping.obj +picture.obj +viewer.obj \
	+document.obj +table.obj +palette.obj +diagnost.obj +image.obj \
	+pictur3d.obj +prim3d1.obj +prim3d2.obj +prim3d3.obj \
	+prim3d4.obj +prim3d5.obj +viewer3d.obj
OBJ4 = $(XOBJ4:+=)

XOBJ5 = +accentr.obj +accutils.obj
OBJ5 = $(XOBJ5:+=)

XOBJ20 = +apparam.obj +drawseq.obj +fstyle.obj +smdlg1.obj +smdlg2.obj \
	+smdlg3.obj +smtools.obj +styleman.obj +stylemui.obj +glbpic.obj \
	+jzcoll.obj +jzmisc.obj +layout.obj +maputil.obj \
	+vsm.obj +vsmfile.obj \
	+vsmutil.obj +dlgutil1.obj +dlgutil2.obj +codon.obj +txalign.obj \
	+medview.obj +mmdbview.obj +seqview.obj +gnomview.obj \
	+biosrc.obj +cdrgn.obj +import.obj +pubdesc.obj +seqsub.obj \
	+saled.obj +salfiles.obj +salpanel.obj +salparam.obj +salsa.obj +salsap.obj \
	+salstruc.obj +salutil.obj
OBJ20 = $(XOBJ20:+=)

XOBJ22 = +corematx.obj +dvncode.obj +objmmdb1.obj +objmmdb2.obj +objmmdb3.obj \
	+mmdbapi.obj +mmdbapi1.obj +mmdbapi2.obj +mmdbapi3.obj +mmdbapi4.obj
OBJ22 = $(XOBJ22:+=)

XOBJ23 = +csim.obj +db_slist.obj +dust.obj +falign.obj +g_any.obj \
	+sim2.obj +sim3.obj +simutil.obj +slist.obj +sec.obj +tfuns.obj +toasn3.obj \
	+toporg.obj +pobutil.obj +suggadj.obj +suggest.obj +suggslp.obj \
	+blast.obj +blastasn.obj +blastkar.obj +lookup.obj +readdb.obj
OBJ23 = $(XOBJ23:+=)

XOBJ30 = +algorend.obj +cn3dmain.obj +cn3dmsel.obj +cn3dopen.obj +cn3dsave.obj \
	+cn3dslct.obj +cn3dwipe.obj +cn3dxprt.obj +naybor.obj
OBJ30 = $(XOBJ30:+=)


##########################################################
## All things to make
##
all:    copy nocopy

##
##
!ifdef MSWINDOWS
nocopy: $(LIB1) $(LIB2) $(LIB3) $(LIB5) $(LIB20) $(LIB22) $(LIB23) \
$(LIB4) $(LIB30) $(ASNTOOL)
!else
nocopy: $(LIB1) $(LIB2) $(LIB3) $(LIB5) $(LIB20) $(LIB22) $(LIB23) \
$(ASNTOOL)
!endif



## To clean out the directory without removing make
##
clean :
	$(DEL) *.c
	$(DEL) *.h
	$(DEL) *.obj
	$(DEL) *.lib
	$(DEL) *.def
	$(DEL) *.rc

## Implicit actions
##
.c.obj:
	$(CC) $(CFLAGS) $*.c

## get all the source files
##
copy :
!ifndef NC
	copy ..\corelib\tsprintf.h $(INCPATH)
	copy ..\corelib\gifgen.h $(INCPATH)
	copy ..\corelib\ncbi*.h $(INCPATH)
	copy ..\corelib\ncbilcl.$(SUFFIXLCL) $(INCPATH)\ncbilcl.h
	copy ..\corelib\*.c .
	copy ..\corelib\core*.h .
	copy ..\corelib\ncbimain.$(SUFFIXENV) ncbimain.c
	copy ..\asnlib\*.h .
	copy asn.h $(INCPATH)
	$(DEL) asn.h
	copy ..\asnlib\*.c .
	copy ..\object\*.c .
	copy ..\object\*.h $(INCPATH)
	copy ..\$(ASNDIR)\*.h $(INCPATH)
	copy ..\api\*.h $(INCPATH)
	copy ..\api\*.c .
	copy ..\cdromlib\*.h $(INCPATH)
	copy ..\cdromlib\*.c .
	copy ..\biostruc\*.h $(INCPATH)
	copy ..\biostruc\*.c .
	copy ..\tools\*.h $(INCPATH)
	copy ..\tools\*.c .
	copy ..\network\blast2\client\*.h $(INCPATH)
	copy ..\network\blast2\client\*.c .
!ifdef MSWINDOWS
	copy ..\vibrant\*.h $(INCPATH)
	copy ..\vibrant\*.c .
	copy ..\desktop\*.h $(INCPATH)
	copy ..\desktop\*.c .
	copy ..\link\mswin\*.*
!ifdef WIN32
	copy ..\cn3d\*.h $(INCPATH)
	copy ..\cn3d\*.c .
!endif
!endif
!endif
!ifdef NC
	echo no copy
!endif


##########################################################

##########################################################
## make libraries
##
##########################################################
!ifdef LIB1
$(LIB1) : $(OBJ1)
	$(DEL) $@
!ifdef BORLAND
	tlib $@ $(LIBFLAGS) @<<
$(XOBJ1)
<<
!else
!ifdef WIN32
	lib /OUT:$@ $(OBJ1)
!else
	lib /PAGESIZE:128 @<<
$@
y
$(OBJ1)
;
<<
!endif
!endif
!endif
##########################################################
!ifdef LIB2
$(LIB2) : $(OBJ2)
	$(DEL) $@
!ifdef BORLAND
	tlib $@ $(LIBFLAGS) @<<
$(XOBJ2)
<<
!else
!ifdef WIN32
	lib /OUT:$@ $(OBJ2)
!else
	lib /PAGESIZE:128 @<<
$@
y
$(OBJ2)
;
<<
!endif
!endif
!endif
##########################################################
!ifdef LIB3
$(LIB3) : $(OBJ3)
	$(DEL) $@
!ifdef BORLAND
	tlib $@ $(LIBFLAGS) @<<
$(XOBJ3)
<<
!else
!ifdef WIN32
	lib /OUT:$@ $(OBJ3)
!else
	lib /PAGESIZE:128 @<<
$@
y
$(OBJ3)
;
<<
!endif
!endif
!endif
##########################################################
!ifdef LIB4
$(LIB4) : $(OBJ4)
	$(DEL) $@
!ifdef BORLAND
	tlib $@ $(LIBFLAGS) @<<
$(XOBJ4)
<<
!else
!ifdef WIN32
	lib /OUT:$@ $(OBJ4)
!else
	lib /PAGESIZE:128 @<<
$@
y
$(OBJ4)
;
<<
!endif
!endif
!endif
##########################################################
!ifdef LIB5
$(LIB5) : $(OBJ5)
	$(DEL) $@
!ifdef BORLAND
	tlib $@ $(LIBFLAGS) @<<
$(XOBJ5)
<<
!else
!ifdef WIN32
	lib /OUT:$@ $(OBJ5)
!else
	lib /PAGESIZE:128 @<<
$@
y
$(OBJ5)
;
<<
!endif
!endif
!endif
##########################################################
!ifdef LIB20
$(LIB20) : $(OBJ20)
	$(DEL) $@
!ifdef BORLAND
	tlib $@ $(LIBFLAGS) @<<
$(XOBJ20)
<<
!else
!ifdef WIN32
	lib /OUT:$@ $(OBJ20)
!else
	lib /PAGESIZE:128 @<<
$@
y
$(OBJ20)
;
<<
!endif
!endif
!endif
##########################################################
!ifdef LIB22
$(LIB22) : $(OBJ22)
	$(DEL) $@
!ifdef BORLAND
	tlib $@ $(LIBFLAGS) @<<
$(XOBJ22)
<<
!else
!ifdef WIN32
	lib /OUT:$@ $(OBJ22)
!else
	lib /PAGESIZE:128 @<<
$@
y
$(OBJ22)
;
<<
!endif
!endif
!endif
##########################################################
!ifdef LIB23
$(LIB23) : $(OBJ23)
	$(DEL) $@
!ifdef BORLAND
	tlib $@ $(LIBFLAGS) @<<
$(XOBJ23)
<<
!else
!ifdef WIN32
	lib /OUT:$@ $(OBJ23)
!else
	lib /PAGESIZE:128 @<<
$@
y
$(OBJ23)
;
<<
!endif
!endif
!endif
##########################################################
!ifdef LIB30
$(LIB30) : $(OBJ30)
	$(DEL) $@
!ifdef BORLAND
	tlib $@ $(LIBFLAGS) @<<
$(XOBJ30)
<<
!else
!ifdef WIN32
	lib /OUT:$@ $(OBJ30)
!else
	lib /PAGESIZE:128 @<<
$@
y
$(OBJ30)
;
<<
!endif
!endif
!endif
##########################################################
##########################################################


##########################################################
!ifdef ASNTOOL
## make asntool application
##
ASNTOOL_OBJ = asntool.obj

!ifdef MSWINDOWS
ASNTOOL_LIB = $(LIB4) $(LIB1)

asntool.res : asntool.rc asntool.ico
    $(RC) -r -I$(INCPATH) $*.rc

asntool.exe : $(ASNTOOL_OBJ) asntool.res $(ASNTOOL_LIB)
!ifdef BORLAND
	tlink32 @<<
$(LDFLAGS) $(STD_OBJ) $(ASNTOOL_OBJ)
$*.exe
,$(ASNTOOL_LIB) $(STD_LIB)
,$*.res
<<
!else
!ifdef WIN32
	link  @<<
/OUT:$*.exe
/MAP:$*.map
$(ASNTOOL_OBJ) $*.res
$(LFLAGS) $(ASNTOOL_LIB) $(guilibs)
<<
!else
	link  @<<
$(ASNTOOL_OBJ)
$*/align:16
$*/map
$(LFLAGS) $(ASNTOOL_LIB) $(guilibs)
$*.def
<<
	rc -K $*.res $*.exe
!endif
!endif
!else
asntool.exe : $(ASNTOOL_OBJ) $(LIB1)
	$(CC) $(LDFLAGS) $(ASNTOOL_OBJ) $(LIB1)
!endif
	$(COPY_BIN) $*.exe $(BINPATH)

!endif

