##############################################################################
#   $Id: makefile 1.1 1995/01/11 19:37:31 ron Exp $
#
#   Copyright (C) 1990-94 Tarma Software Research. All rights reserved.
#
#   Project:	Tarma Library for C++ V5.0
#   Author:	Ron van der Wal
#
#   MAKEFILE for Tarma Library for C++, compiler versions:
#
#   - Symantec C++ 7.0 for DOS
#   - Symantec C++ 7.0 for Windows
#
#   Syntax depends on the target platform, as follows:
#
#   - DOS:	MAKE -DDOS [-DEBUG] [M=(t|s|c|m|l|h)] [flags..]
#   - Windows:	MAKE -DWIN [-DEBUG] [-DLL] [M=(s|c|m|l)] [flags..]
#
#   $Log: makefile $
    Revision 1.1  1995/01/11  19:37:31  ron
    Initial revision
    
##############################################################################

#-----------------------------------------------------------------------------
#	MAKE parameters
#-----------------------------------------------------------------------------

!if !$d(DOS) && !$d(WIN)
!error Must specify -DDOS, or -DWIN
!endif

#-----------------------------------------------------------------------------
#	TLX version number (used with DLLs)
#-----------------------------------------------------------------------------

TLXVER	= 500		# TLX version number

#-----------------------------------------------------------------------------
#	Compiler information
#	--------------------
#
#	The following macros are automatically defined, and in most cases,
#	they should work as given. However, check them before you use this
#	MAKEFILE.
#
#	CCDIR = base directory of your compiler. You may need to adjust
#		the names given below if your compiler is somewhere else.
#
#	CCVER = version number of your compiler. You may need to adjust it
#		if the automatic detection fails.
#-----------------------------------------------------------------------------

CCDIR	= C:\SC
CCVER	= 0x0700

#-----------------------------------------------------------------------------
#	Names for files and tools
#-----------------------------------------------------------------------------

AS		= TASM
CC		= SC
LINK		= LINK
LIBR		= LIB

MAKEFILE	= makefile
DEPEND		= makefile.dep

#-----------------------------------------------------------------------------
#    Platform-dependent options
#    --------------------------
#
#    DOS:
#
#	- M (memory model)	= t, s, m, c, l, h (default = l)
#	- POSTFIX (base name)	= d<model>[d]
#	- TARGET		= tlx<POSTFIX>.lib
#	- SUBTARGET		= (undefined)
#
#    Windows:
#
#	- M (memory model)	= s, m, c, l (default = l)
#	- POSTFIX (base name)	= w<model>[d].lib
#
#	Target depends on DLL or static lib compilation:
#	Static (default):
#
#	- TARGET		= tlx<POSTFIX>.lib
#	- SUBTARGET		= (undefined)
#
#	DLL (option -DLL):
#
#	- TARGET		= tlx<POSTFIX>i.lib
#	- SUBTARGET		= tlx<POSTFIX>.dll
#
#-----------------------------------------------------------------------------

!if $d(DOS)	#--------- DOS target ----------------------------------------

!ifndef M
M		= l
!endif

POSTFIX 	= d$(M)
AFLAGS		= /mx
CFLAGS		= -c -w -D_TLXBUILD -m$(M) -EH -ER
LFLAGS		= /c /yx
BFLAGS		= /C

!ifdef EBUG	#-----	Debugging version

POSTFIX 	= $(POSTFIX)d
AFLAGS		= $(AFLAGS) /zi
CFLAGS		= $(CFLAGS) -s -g -D_TLXDBG
LFLAGS		= $(LFLAGS) /m /v
BFLAGS		= $(BFLAGS) /P64

!else		#-----	Distribution version

AFLAGS		= $(AFLAGS)
CFLAGS		= $(CFLAGS) -o+size
LFLAGS		= $(LFLAGS) /x
BFLAGS		= $(BFLAGS) /0

!endif	# EBUG

!ifdef LL
!error DLLs not supported under DOS
!endif

CCONFIG 	= tlx$(POSTFIX).cfg
DEFFILE 	= tlx$(POSTFIX).def
OBJDIR		= $(POSTFIX)
TARGET		= tlx$(POSTFIX).lib
TEST		= tlx$(POSTFIX).exe
STARTUP 	= C0$(M).OBJ
RUNTIME 	= EMU.LIB MATH$(M).LIB C$(M).LIB

!elif $d(WIN)	#-------- Windows target -------------------------------------

# Under Windows, compilation for static and dynamic libraries differs, and
# we have separate output directories and configuration files for the .OBJ
# files of each variant.

!ifndef M
M		= l
!endif

POSTFIX 	= w$(M)
AFLAGS		= /mx
CFLAGS		= -2 -c -d -O1 -w -D_TLXBUILD -m$(M)
LFLAGS		= /c /C /yx
BFLAGS		= /C

!ifdef EBUG	#-----	Debugging version

POSTFIX 	= $(POSTFIX)d
AFLAGS		= $(AFLAGS) /zi
CFLAGS		= $(CFLAGS) -N -v -D_TLXDBG
LFLAGS		= $(LFLAGS) /m /v
BFLAGS		= $(BFLAGS) /P64

!else		#-----	Distribution version

AFLAGS		= $(AFLAGS)
CFLAGS		= $(CFLAGS) -G-
LFLAGS		= $(LFLAGS) /x
BFLAGS		= $(BFLAGS) /0

!endif	# EBUG

!ifdef LL	#-----	DLL version

CFLAGS		= $(CFLAGS) -WDE
LFLAGS		= $(LFLAGS) /Twd
CCONFIG 	= tlx$(POSTFIX)i.cfg
DEFFILE 	= tlx$(POSTFIX)i.def
STARTUP 	= C0D$(M).OBJ
DEFFILE 	= tlxwin.def
OBJDIR		= $(POSTFIX)i
TARGET		= tlx$(POSTFIX)i.lib
TEST		= tlx$(POSTFIX)i.exe
SUBTARGET	= tlx$(POSTFIX).dll

!else		#-----	Static version

CFLAGS		= $(CFLAGS) -WE
LFLAGS		= $(LFLAGS) /Twe
CCONFIG 	= tlx$(POSTFIX).cfg
DEFFILE 	= tlx$(POSTFIX).def
STARTUP 	= C0W$(M).OBJ
OBJDIR		= $(POSTFIX)
TARGET		= tlx$(POSTFIX).lib
TEST		= tlx$(POSTFIX).exe

!endif	# LL

RUNTIME 	= MATHW$(M).LIB CW$(M).LIB IMPORT.LIB
XLIBS		= tlxtr$(TLXVER).lib

!endif		# DOS - OS/2 - WIN

#-----------------------------------------------------------------------------
#   Directory configuration
#   -----------------------
#
#   BASEDIR		- (May be root dir)
#      |
#      +--TLX		- Holds .h files for TLX
#      |  |
#      |  +--TEMPLATE	- Holds .cpp template files
#      |
#      +--LIB		- Root for libraries of all supproted compilers
#      |  |
#      |  +--BC 	- *Current dir*, holds .lib & .dll files, MAKEFILE
#      |  |
#      |  +--???	- Various .obj output directories, one per lib target
#      |
#      +--SRC	- Holds .c and .cpp files
#
#
#   NOTE: The base directory <BASEDIR> is assumed to be 2 levels up from
#	  the current (compilation) directory.
#-----------------------------------------------------------------------------

.PATH.asm	= ..\..\SRC
.PATH.c 	= ..\..\SRC
.PATH.cpp	= ..\..\SRC
.PATH.h 	= ..\..
.PATH.obj	= $(OBJDIR)
.PATH.dll	= .
.PATH.lib	= .

INCLUDE 	= $(CCDIR)\include
INCPATH 	= $(.PATH.h);$(INCLUDE)
EXCLUDE 	= $(INCLUDE)

LIB		= $(CCDIR)\lib
LIBPATH 	= $(.PATH.lib);$(LIB)

#-----------------------------------------------------------------------------
#	Dependency maker
#-----------------------------------------------------------------------------

MD	= makedep
MDFLAGS = /I$(INCPATH) /X$(EXCLUDE) /O$(DEPEND) /A$(MAKEFILE)

#-----------------------------------------------------------------------------
#	Implicit rules
#-----------------------------------------------------------------------------

.suffixes:
.suffixes: .CPP .C .ASM

.asm.obj:
	$(AS) $(AFLAGS) $<

.c.obj:
	$(CC) @$(CCONFIG) $< -o$(.PATH.obj)\$&

.cpp.obj:
	-$(CC) @$(CCONFIG) $< -o$(.PATH.obj)\$&

#-----------------------------------------------------------------------------
#	Object files
#-----------------------------------------------------------------------------

OBJECTS = \
	allocato.obj	\
	asserts.obj	\
	batchapp.obj	\
	bbsearch.obj	\
	bbsrchdf.obj	\
	bincon.obj	\
	bitvect.obj	\
	btsearch.obj	\
	conac6.obj	\
	constrai.obj	\
	cspnode.obj	\
	csptmpl1.obj	\
	csptmpl2.obj	\
	dlbase.obj	\
	dlcbase.obj	\
	dlink.obj	\
	dlqbase.obj	\
	dlstbase.obj	\
	domac6.obj	\
	domain.obj	\
	domelem.obj	\
	dommonit.obj	\
	domremov.obj	\
	except.obj	\
	getopt.obj	\
	iter.obj	\
	nodecon.obj	\
	nodelist.obj	\
	partprbm.obj	\
	propagat.obj	\
	propac3.obj	\
	propac6.obj	\
	propfc.obj	\
	rcbtsrch.obj	\
	ref.obj 	\
	refptr.obj	\
	searcher.obj	\
	slbase.obj	\
	slcbase.obj	\
	slink.obj	\
	slqbase.obj	\
	slstbase.obj	\
	srchnode.obj	\
	strdupnw.obj	\
	strings.obj	\
	suplist.obj	\
	swaps.obj	\
	tlx.obj 	\
	trace.obj	\
	varac6.obj	\
	variable.obj	\
	vparray.obj	\
	vpqueue.obj	\
	vpseq.obj	\
	vpset.obj	\
	vpstack.obj	\
	vpvector.obj	\
	vvlink.obj	\

#-----------------------------------------------------------------------------
#	Default target checks if output directory exists, then builds
#	compiler configuration file and target library
#-----------------------------------------------------------------------------

all:	start $(CCONFIG) $(TARGET) $(TEST)

start:
	-@if not exist $(OBJDIR)\*.* md $(OBJDIR)

#-----------------------------------------------------------------------------
#	Test program target
#-----------------------------------------------------------------------------

!ifdef DOS

$(TEST): $(TARGET) maintest.obj
	$(LINK) @&&|
$(LFLAGS) /L$(LIBPATH)	+
$(STARTUP)		+
$(OBJDIR)\maintest.obj
$(TEST)

$(TARGET) $(RUNTIME)
|
	$(TEST)

!else

$(TEST): $(TARGET) maintest.obj $(DEFFILE)
	$(LINK) @&&|
$(LFLAGS) /L$(LIBPATH)	+
$(STARTUP)		+
$(OBJDIR)\maintest.obj
$(TEST)

$(TARGET) $(RUNTIME)
$(DEFFILE)
|
	$(TEST)

!endif

#-----------------------------------------------------------------------------
#	Library file target
#-----------------------------------------------------------------------------

!ifdef LL	#-------- DLL target

$(TARGET): $(SUBTARGET)
	implib $(.PATH.lib)\$(TARGET) $(.PATH.dll)\$(SUBTARGET)

$(SUBTARGET): $(OBJECTS) libmain.obj $(XLIBS)
	if exist $(.PATH.dll)\$(SUBTARGET) del $(.PATH.dll)\$(SUBTARGET) >nul
	$(LINK) $(LFLAGS) /L$(LIBPATH) @&&|
$(STARTUP)+
$(OBJDIR)\allocato.obj	+
$(OBJDIR)\asserts.obj	+
$(OBJDIR)\batchapp.obj	+
$(OBJDIR)\bbsearch.obj	+
$(OBJDIR)\bbsrchdf.obj	+
$(OBJDIR)\bincon.obj	+
$(OBJDIR)\bitvect.obj	+
$(OBJDIR)\btsearch.obj	+
$(OBJDIR)\conac6.obj	+
$(OBJDIR)\constrai.obj	+
$(OBJDIR)\cspnode.obj	+
$(OBJDIR)\csptmpl1.obj	+
$(OBJDIR)\csptmpl2.obj	+
$(OBJDIR)\dlbase.obj	+
$(OBJDIR)\dlcbase.obj	+
$(OBJDIR)\dlink.obj	+
$(OBJDIR)\dlqbase.obj	+
$(OBJDIR)\dlstbase.obj	+
$(OBJDIR)\domac6.obj	+
$(OBJDIR)\domain.obj	+
$(OBJDIR)\domelem.obj	+
$(OBJDIR)\dommonit.obj	+
$(OBJDIR)\domremov.obj	+
$(OBJDIR)\except.obj	+
$(OBJDIR)\getopt.obj	+
$(OBJDIR)\iter.obj	+
$(OBJDIR)\nodecon.obj	+
$(OBJDIR)\nodelist.obj	+
$(OBJDIR)\partprbm.obj	+
$(OBJDIR)\propagat.obj	+
$(OBJDIR)\propac3.obj	+
$(OBJDIR)\propac6.obj	+
$(OBJDIR)\propfc.obj	+
$(OBJDIR)\rcbtsrch.obj	+
$(OBJDIR)\ref.obj	+
$(OBJDIR)\refptr.obj	+
$(OBJDIR)\searcher.obj	+
$(OBJDIR)\slbase.obj	+
$(OBJDIR)\slcbase.obj	+
$(OBJDIR)\slink.obj	+
$(OBJDIR)\slqbase.obj	+
$(OBJDIR)\slstbase.obj	+
$(OBJDIR)\srchnode.obj	+
$(OBJDIR)\strdupnw.obj	+
$(OBJDIR)\strings.obj	+
$(OBJDIR)\suplist.obj	+
$(OBJDIR)\swaps.obj	+
$(OBJDIR)\tlx.obj	+
$(OBJDIR)\trace.obj	+
$(OBJDIR)\varac6.obj	+
$(OBJDIR)\variable.obj	+
$(OBJDIR)\vparray.obj	+
$(OBJDIR)\vpqueue.obj	+
$(OBJDIR)\vpseq.obj	+
$(OBJDIR)\vpset.obj	+
$(OBJDIR)\vpstack.obj	+
$(OBJDIR)\vpvector.obj	+
$(OBJDIR)\vvlink.obj
$(.PATH.dll)\$(SUBTARGET)

$(XLIBS) $(RUNTIME)
$(DEFFILE)
|

!else		#-------- Static library target

$(TARGET): $(OBJECTS)
	if exist $(.PATH.lib)\$(TARGET) del $(.PATH.lib)\$(TARGET) >nul
	$(LIBR) $(.PATH.lib)\$(TARGET) $(BFLAGS) @&&|
+$(OBJDIR)\allocato.obj &
+$(OBJDIR)\asserts.obj	&
+$(OBJDIR)\batchapp.obj &
+$(OBJDIR)\bbsearch.obj &
+$(OBJDIR)\bbsrchdf.obj &
+$(OBJDIR)\bincon.obj	&
+$(OBJDIR)\bitvect.obj	&
+$(OBJDIR)\btsearch.obj &
+$(OBJDIR)\conac6.obj	&
+$(OBJDIR)\constrai.obj &
+$(OBJDIR)\cspnode.obj	&
+$(OBJDIR)\csptmpl1.obj &
+$(OBJDIR)\csptmpl2.obj &
+$(OBJDIR)\dlbase.obj	&
+$(OBJDIR)\dlcbase.obj	&
+$(OBJDIR)\dlink.obj	&
+$(OBJDIR)\dlqbase.obj	&
+$(OBJDIR)\dlstbase.obj &
+$(OBJDIR)\domac6.obj	&
+$(OBJDIR)\domain.obj	&
+$(OBJDIR)\domelem.obj	&
+$(OBJDIR)\dommonit.obj &
+$(OBJDIR)\domremov.obj &
+$(OBJDIR)\except.obj	&
+$(OBJDIR)\getopt.obj	&
+$(OBJDIR)\iter.obj	&
+$(OBJDIR)\nodecon.obj	&
+$(OBJDIR)\nodelist.obj &
+$(OBJDIR)\partprbm.obj &
+$(OBJDIR)\propagat.obj &
+$(OBJDIR)\propac3.obj	&
+$(OBJDIR)\propac6.obj	&
+$(OBJDIR)\propfc.obj	&
+$(OBJDIR)\rcbtsrch.obj &
+$(OBJDIR)\ref.obj	&
+$(OBJDIR)\refptr.obj	&
+$(OBJDIR)\searcher.obj &
+$(OBJDIR)\slbase.obj	&
+$(OBJDIR)\slcbase.obj	&
+$(OBJDIR)\slink.obj	&
+$(OBJDIR)\slqbase.obj	&
+$(OBJDIR)\slstbase.obj &
+$(OBJDIR)\srchnode.obj &
+$(OBJDIR)\strdupnw.obj &
+$(OBJDIR)\strings.obj	&
+$(OBJDIR)\suplist.obj	&
+$(OBJDIR)\swaps.obj	&
+$(OBJDIR)\tlx.obj	&
+$(OBJDIR)\trace.obj	&
+$(OBJDIR)\varac6.obj	&
+$(OBJDIR)\variable.obj &
+$(OBJDIR)\vparray.obj	&
+$(OBJDIR)\vpqueue.obj	&
+$(OBJDIR)\vpseq.obj	&
+$(OBJDIR)\vpset.obj	&
+$(OBJDIR)\vpstack.obj	&
+$(OBJDIR)\vpvector.obj &
+$(OBJDIR)\vvlink.obj
|

!endif

#-----------------------------------------------------------------------------
#	Compiler configuration file
#-----------------------------------------------------------------------------

$(CCONFIG): $(MAKEFILE)
	copy &&|
$(CFLAGS)
-I$(INCPATH)
| $(CCONFIG)

#-----------------------------------------------------------------------------
#	Linker definition file
#-----------------------------------------------------------------------------

!if $d(DOS)

$(DEFFILE): $(MAKEFILE)
	copy &&|
; Linker definition file for $(TEST)
;
; Copyright (c) 1994 Tarma Software Research. All rights reserved.
| $(DEFFILE)

!elif $d(OS2)

$(DEFFILE): $(MAKEFILE)
	copy &&|
; Linker definition file for $(TEST)
;
; Copyright (c) 1994 Tarma Software Research. All rights reserved.

EXETYPE 	OS2

CODE	PRELOAD EXECUTEREAD
DATA	PRELOAD MULTIPLE

HEAPSIZE	4096
STACKSIZE	8192
| $(DEFFILE)

!else

$(DEFFILE): $(MAKEFILE)
	copy &&|
; Linker definition file for $(TEST)
;
; Copyright (c) 1994 Tarma Software Research. All rights reserved.

EXETYPE 	WINDOWS

CODE	PRELOAD MOVEABLE DISCARDABLE
DATA	PRELOAD MOVEABLE MULTIPLE

HEAPSIZE	4096
STACKSIZE	8192
| $(DEFFILE)

!endif

#-----------------------------------------------------------------------------
#	Tracing DLL & import library targets
#-----------------------------------------------------------------------------

!if $d(WIN)

tlxtrace: tlxtrace.lib

tlxtrace.lib: tlxtr$(TLXVER).dll
	IMPLIB $(.PATH.lib)\tlxtrace.lib $(.PATH.dll)\tlxtr$(TLXVER).dll

tlxtr$(TLXVER).dll: tracelib.def tracelib.cpp
	$(CC) -v -c -WDE -d -G- -I$(INCPATH) -m$(M) -O1 -w -D_TRACEBUILD $(.PATH.cpp)\tracelib.cpp
	$(LINK) /v /c /yx /L$(LIBPATH) /Twd C0D$(M).OBJ tracelib.obj, \
	     $(.PATH.dll)\tlxtr$(TLXVER).dll,,CW$(M).LIB MATHW$(M).LIB \
	     IMPORT.LIB, tracelib.def

!endif

#-----------------------------------------------------------------------------
#	Explicit rules
#-----------------------------------------------------------------------------

clean:
	del *.bak *.map *.sym *.obj

depend:
	$(MD) $(MDFLAGS) $(.PATH.cpp)\*.cpp

version:
	ci /q /u *.c *.cpp *.h $(MAKEFILE)

#-----------------------------------------------------------------------------
#	File dependencies
#-----------------------------------------------------------------------------

!include $(DEPEND)
