#  (C) COPYRIGHT International Business Machines Corp. 1995, 2000
#  All Rights Reserved.
#
#  US Government Users Restricted Rights - Use, duplication or
#  disclosure restricted by GSA ADP Schedule Contract with IBM Corp.


# makefile for DB2 Universal Database
# CLI sample programs -- Windows 32-bit operating systems
                         

# Enter one of the following commands 
#
#  nmake <app_name>        - Builds the program designated by <app_name>
#
#  nmake all               - Builds the all the supplied sample programs
#  nmake udfspserver       - Builds the examples that implement
#                            stored procedures and UDFs (on the server)
#  nmake udfspclient       - Builds the examples that call stored 
#                            procedures and UDFs ( they can run remotely )
#  nmake otherclient       - Builds the examples that will run successfully
#                            on a client platform ( others than udfspclient )
#  nmake allclient         - Builds programs in udfspclient and otherclient
#                            categories
#
#  nmake clean             - Erases intermediate files
#  nmake cleanall          - Erases all files produced in the build process,
#                            except the original source files

# The makefile contains the following sections:
#    1 -- COMPILERS + VARIABLES
#    2 -- MAKE CATEGORIES
#    3 -- COMMANDS TO MAKE INDIVIDUAL SAMPLES


##################################################################################
#                  1 -- COMPILERS + VARIABLES                                     
##################################################################################

# Note: The default compiler options are set for the Microsoft Visual C++ 
#       compiler. If you use the IBM VisualAge C++ compiler, remove the
#       "COMPILER=MS" below and uncomment "COMPILER=IBM" that follows.

# Set Compiler
COMPILER=MS
#COMPILER=IBM

!IF "$(COMPILER)" == "MS"
# Microsoft Visual C++ compiler
CC=cl
LINK=link
# Compile and link options.
CFLAGS=-Z7 -Od -c -W2 -D_X86_=1 -DWIN32 -I:"$(DB2PATH)\include"
LFLAGS=-debug:full -debugtype:cv
LFLAGSSRV=-debug:full -debugtype:cv -dll
!ENDIF

!IF "$(COMPILER)" == "IBM"
# IBM VisualAge C++ compiler
CC=icc
LINK=ilink
CFLAGS=-c -Ti -W1
CFLAGSSRV=-c+ -Ti -Ge- -Gm+ -W1
LFLAGS=/MAP /DEBUG /ST:96000 /PM:VIO
LFLAGSSRV=/MAP /DEBUG /ST:96000 /PM:VIO /DLL
!ENDIF

LIBS="$(DB2PATH)\lib\db2cli.lib"
LIBSAPI="$(DB2PATH)\lib\db2api.lib"

# To connect to a remote SAMPLE database cataloged on the client machine
# with another name, update the DB variable.
DB=sample
# Set UID and PWD if neccesary  
UID=
PWD=

COPY=copy
ERASE=del

#############################################################################
#  2 -- MAKE CATEGORIES
#              2a - nmake all(= allclient + udfspserver)
#              2b - nmake udfspserver
#              2c - nmake udfspclient
#              2d - nmake otherclient
#              2e - nmake allclient(= udfspclient + otherclient)
#
#              2f - nmake clean
#              2g - nmake cleanall
#############################################################################


#****************************************************************************
#                  2a - nmake all
#****************************************************************************

all : \
	allclient \
	udfspserver

#****************************************************************************
#                  2b - nmake udfspserver
#****************************************************************************

udfspserver : \
	spserver \
	udfsrv

#****************************************************************************
#                  2c - nmake udfspclient 
#****************************************************************************

udfspclient : \
	spclient \
	udfcli

#****************************************************************************
#                  2d - nmake otherclient
#****************************************************************************

otherclient : \
	aphndls apinfo apsqlca \
	dbconn dbinfo dbmconn dbmuse dbnative dbuse dbusemx \
	dtinfo dtlob dtudt \
	ilinfo \
	ininfo \
	tbconstr tbdefine tbinfo tbmod tbread 

#****************************************************************************
#                  2e - nmake allclient(= udfspclient + otherclient)
#****************************************************************************

allclient : \
	udfspclient \
	otherclient


#****************************************************************************
#                  2f - nmake clean
#****************************************************************************

clean :	\
	cleangen \
	cleanemb \
	cleanexp

cleangen :
	$(ERASE) *.obj *.ilk *.pdb *.map *.lib *.txt *.dll *.bmp *.gif *.xwd

cleanemb :
	$(ERASE) dbusemx.c 

cleanexp :
	$(ERASE) udfsrv.exp
	$(ERASE) spserver.exp

#****************************************************************************
#                  2g - nmake cleanall
#****************************************************************************

cleanall : \
	clean 
	$(ERASE) *.bnd *.exe

#############################################################################
#  3 -- COMMANDS TO MAKE INDIVIDUAL SAMPLES
#                  3a -  utilities
#                  3b -  non embedded SQL, non client/server samples
#                  3c -  embedded SQL, non client/server samples
#                  3d -  client/server samples (mixed)
#############################################################################



#****************************************************************************
#                  3a -  utilities
#****************************************************************************

utilcli.obj :
	$(CC) utilcli.c $(CFLAGS)

utilapi.obj :
	$(CC) utilapi.c $(CFLAGS)	

#****************************************************************************
#                  3b -  non embedded SQL, non client/server samples
#****************************************************************************

aphndls.obj : aphndls.c
	$(CC) $(CFLAGS) aphndls.c
aphndls : aphndls.obj utilcli.obj
	$(LINK) $(LFLAGS) -out:aphndls.exe aphndls.obj utilcli.obj $(LIBS)

apinfo.obj : apinfo.c
	$(CC) $(CFLAGS) apinfo.c
apinfo : apinfo.obj utilcli.obj
	$(LINK) $(LFLAGS) -out:apinfo.exe apinfo.obj utilcli.obj $(LIBS)

apsqlca.obj : apsqlca.c
	$(CC) $(CFLAGS) apsqlca.c
apsqlca : apsqlca.obj utilcli.obj
	$(LINK) $(LFLAGS) -out:apsqlca.exe apsqlca.obj utilcli.obj $(LIBS)

dbconn.obj : dbconn.c
	$(CC) $(CFLAGS) dbconn.c
dbconn : dbconn.obj utilcli.obj
	$(LINK) $(LFLAGS) -out:dbconn.exe dbconn.obj utilcli.obj $(LIBS)
	
dbinfo.obj : dbinfo.c
	$(CC) $(CFLAGS) dbinfo.c
dbinfo : dbinfo.obj utilcli.obj
	$(LINK) $(LFLAGS) -out:dbinfo.exe dbinfo.obj utilcli.obj $(LIBS)

dbmconn.obj : dbmconn.c
	$(CC) $(CFLAGS) dbmconn.c
dbmconn : dbmconn.obj utilcli.obj utilapi.obj
	$(LINK) $(LFLAGS) -out:dbmconn.exe dbmconn.obj utilcli.obj utilapi.obj \
	$(LIBS) $(LIBSAPI)

dbmuse.obj : dbmuse.c
	$(CC) $(CFLAGS) dbmuse.c
dbmuse : dbmuse.obj utilcli.obj utilapi.obj
	$(LINK) $(LFLAGS) -out:dbmuse.exe dbmuse.obj utilcli.obj utilapi.obj \
	$(LIBS) $(LIBSAPI)

dbnative.obj : dbnative.c
	$(CC) $(CFLAGS) dbnative.c
dbnative : dbnative.obj utilcli.obj
	$(LINK) $(LFLAGS) -out:dbnative.exe dbnative.obj utilcli.obj $(LIBS)

dbuse.obj : dbuse.c
	$(CC) $(CFLAGS) dbuse.c
dbuse : dbuse.obj utilcli.obj
	$(LINK) $(LFLAGS) -out:dbuse.exe dbuse.obj utilcli.obj $(LIBS)

dtinfo.obj : dtinfo.c
	$(CC) $(CFLAGS) dtinfo.c
dtinfo : dtinfo.obj utilcli.obj
	$(LINK) $(LFLAGS) -out:dtinfo.exe dtinfo.obj utilcli.obj $(LIBS)

dtlob.obj : dtlob.c
	$(CC) $(CFLAGS) dtlob.c
dtlob : dtlob.obj utilcli.obj
	$(LINK) $(LFLAGS) -out:dtlob.exe dtlob.obj utilcli.obj $(LIBS)

dtudt.obj : dtudt.c
	$(CC) $(CFLAGS) dtudt.c
dtudt : dtudt.obj utilcli.obj
	$(LINK) $(LFLAGS) -out:dtudt.exe dtudt.obj utilcli.obj $(LIBS)

ilinfo.obj : ilinfo.c
	$(CC) $(CFLAGS) ilinfo.c
ilinfo : ilinfo.obj utilcli.obj
	$(LINK) $(LFLAGS) -out:ilinfo.exe ilinfo.obj utilcli.obj $(LIBS)

ininfo.obj : ininfo.c
	$(CC) $(CFLAGS) ininfo.c
ininfo : ininfo.obj utilcli.obj
	$(LINK) $(LFLAGS) -out:ininfo.exe ininfo.obj utilcli.obj $(LIBS)

spcall.obj : spcall.c
	$(CC) $(CFLAGS) spcall.c
spcall : spcall.obj utilcli.obj
	$(LINK) $(LFLAGS) -out:spcall.exe spcall.obj utilcli.obj $(LIBS)

tbconstr.obj : tbconstr.c
	$(CC) $(CFLAGS) tbconstr.c
tbconstr : tbconstr.obj utilcli.obj
	$(LINK) $(LFLAGS) -out:tbconstr.exe tbconstr.obj utilcli.obj $(LIBS)

tbdefine.obj : tbdefine.c
	$(CC) $(CFLAGS) tbdefine.c
tbdefine : tbdefine.obj utilcli.obj
	$(LINK) $(LFLAGS) -out:tbdefine.exe tbdefine.obj utilcli.obj $(LIBS)

tbinfo.obj : tbinfo.c
	$(CC) $(CFLAGS) tbinfo.c
tbinfo : tbinfo.obj utilcli.obj
	$(LINK) $(LFLAGS) -out:tbinfo.exe tbinfo.obj utilcli.obj $(LIBS)

tbread.obj : tbread.c
	$(CC) $(CFLAGS) tbread.c
tbread : tbread.obj utilcli.obj
	$(LINK) $(LFLAGS) -out:tbread.exe tbread.obj utilcli.obj $(LIBS)

tbmod.obj : tbmod.c
	$(CC) $(CFLAGS) tbmod.c
tbmod : tbmod.obj utilcli.obj
	$(LINK) $(LFLAGS) -out:tbmod.exe tbmod.obj utilcli.obj $(LIBS)

#****************************************************************************
#                  3c -  embedded SQL non client/server samples
#****************************************************************************

dbusemx.c : dbusemx.sqc
	embprep dbusemx $(DB) $(UID) $(PWD)
dbusemx.obj : dbusemx.c
	$(CC) $(CFLAGS) dbusemx.c
dbusemx : dbusemx.obj utilcli.obj
	$(LINK) $(LFLAGS) -out:dbusemx.exe dbusemx.obj utilcli.obj \
	$(LIBS) $(LIBSAPI)

#****************************************************************************
#                  3d -  client/server samples 
#        Note: once you create the new stp, drop what you don't need
#              from this section
#****************************************************************************

#--------------------spclient/spserver--------------------------------------#

spclient.obj : spclient.c
	$(CC) $(CFLAGS) spclient.c
spclient : spclient.obj utilcli.obj
	$(LINK) $(LFLAGS) -out:spclient.exe spclient.obj utilcli.obj $(LIBS)

spserver :
!IF "$(COMPILER)" == "MS"
	$(CC) $(CFLAGS) utilcli.c
	$(CC) $(CFLAGS) spserver.c
	$(LINK) $(LFLAGSSRV) -out:spserver.dll \
	spserver.obj utilcli.obj -def:spserver.def $(LIBS)
!ELSE
	$(ERASE) utilcli.obj
	$(CC) $(CFLAGSSRV) utilcli.c
	$(CC) $(CFLAGSSRV) spserver.c
	ilib /GI spserverva.def
	$(LINK) $(LFLAGSSRV) -out:spserver.dll \
	spserver.obj utilcli.obj spserver.exp $(LIBS)
	$(ERASE) utilcli.obj
!ENDIF
	$(COPY) spserver.dll "$(DB2PATH)\function"


#-------------------- udfcli / udfsrv --------------------------------------#

udfcli.obj : udfcli.c
	$(CC) $(CFLAGS) udfcli.c
udfcli : udfcli.obj utilcli.obj
	$(LINK) $(LFLAGS) -out:udfcli.exe udfcli.obj utilcli.obj $(LIBS)


udfsrv : 
!IF "$(COMPILER)" == "MS"
	$(CC) $(CFLAGS) udfsrv.c
	$(LINK) $(LFLAGSSRV) -out:udfsrv.dll udfsrv.obj -def:udfsrv.def $(LIBSAPI)
!ELSE
	$(CC) $(CFLAGSSRV) udfsrv.c
	ilib /GI udfsrvva.def
	$(LINK) $(LFLAGSSRV) -out:udfsrv.dll udfsrv.obj udfsrv.exp $(LIBSAPI)
!ENDIF
	$(COPY) udfsrv.dll "$(DB2PATH)\function"