#  (C) COPYRIGHT International Business Machines Corp. 1995, 1999
#  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 Version 6.1
# C++ sample programs -- AIX operating system
                         

# Enter one of the following commands 
#
#   make <app_name>        - Builds the program designated by <app_name>
#
#   make all               - Builds the all the supplied sample programs
#   make udfspserver       - Builds the examples that implement
#                            stored procedures and UDFs (on the server)
#   make localclient       - Builds the examples that can only be run
#                            successfully on a server 
#   make udfspclient       - Builds the examples that call stored 
#                            procedures and UDFs ( they can run remotely )
#   make otherremoteclient - Builds the examples that will run successfully
#                            on a client platform ( others than udfspclient )
#   make allremoteclient   - Builds programs in udfspclient and otherremoteclient
#                            categories
#
#   make clean             - Erases intermediate files
#   make 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                                     
##################################################################################

# This file assumes the DB2 instance path is defined by the variable HOME.
# It also assumes DB2 is installed under the DB2 instance.
# If these statements are not correct, update the variable DB2PATH. 
DB2PATH = $(HOME)/sqllib

# Use the xlC compiler
CC= xlC
# Use xlC_r for multi-threaded programs
CM=xlC_r
# For multi-threaded programs on AIX 4.3 or later, use:
# CM=xlC_r7

# The required compiler flags
CFLAGS= -I$(DB2PATH)/include 

# The linker for shared libraries                
LINKSL=makeC++SharedLib -p 1024


# The required libraries 
LIBS= -L$(DB2PATH)/lib -ldb2 
LIBSUDF= -L$(DB2PATH)/lib -ldb2 -ldb2apie

# 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=cp
ERASE=rm -f

#############################################################################
#  2 -- MAKE CATEGORIES
#              2a - make all(= allremoteclient + localclient +udfspserver)
#              2b - make udfspserver
#              2c - make localclient  
#              2d - make udfspclient
#              2e - make otherremoteclient
#              2f - make allremoteclient(= udfspclient + otherremoteclient)
#              2g - make clean
#              2h - make cleanall
#############################################################################


#****************************************************************************
#                  2a - make all
#****************************************************************************

all : \
	allremoteclient \
	localclient \
	udfspserver

#****************************************************************************
#                  2b - make udfspserver
#****************************************************************************

udfspserver : \
	fillsrv \
	inpsrv\
	outsrv \
	udf

#****************************************************************************
#                  2c - make localclient 
#****************************************************************************
# there are not samples in this category for now
localclient :  

#****************************************************************************
#                  2d - make udfspclient
#****************************************************************************

udfspclient : \
	calludf \
	fillcli \
	inpcli \
	outcli 

#****************************************************************************
#                  2e - make otherremoteclient
#****************************************************************************

otherremoteclient : \
	client cursor \
	static \
	thdsrver util \
	updat 

#****************************************************************************
#                  2f - make allremoteclient
#****************************************************************************

allremoteclient : \
	udfspclient \
	otherremoteclient

#****************************************************************************
#                  2g - make clean
#****************************************************************************

clean :	\
	cleangen \
	cleanemb
 
cleangen :
	$(ERASE) *.o *.map

cleanemb :
	$(ERASE) calludf.C cursor.C
	$(ERASE) fillcli.C fillsrv.C
	$(ERASE) inpcli.C inpsrv.C
	$(ERASE) outcli.C outsrv.C
	$(ERASE) static.C
	$(ERASE) thdsrver.C
	$(ERASE) updat.C

#****************************************************************************
#                  2h - make cleanall
#****************************************************************************

cleanall : \
	clean
	$(ERASE) *.bnd
	$(ERASE) calludf client cursor
	$(ERASE) fillcli fillsrv
	$(ERASE) inpcli inpsrv
	$(ERASE) outcli outsrv
	$(ERASE) static
	$(ERASE) thdsrver 
	$(ERASE) updat udf

	$(ERASE) $(DB2PATH)/function/udf
	$(ERASE) $(DB2PATH)/function/fillsrv
	$(ERASE) $(DB2PATH)/function/inpsrv
	$(ERASE) $(DB2PATH)/function/outsrv

#############################################################################
#  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)
#                  3e -  multi-threaded samples
#############################################################################



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

util : util.C
	$(CC) -c util.C $(CFLAGS)

util.o : util.C
	$(CC) -c util.C $(CFLAGS)

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

client : client.C util.o
	$(CC) -o client client.C util.o $(CFLAGS) $(LIBS)

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

cursor.C : cursor.sqC
	embprepp cursor $(DB) $(UID) $(PWD)
cursor : cursor.C util.o
	$(CC) -o cursor cursor.C util.o $(CFLAGS) $(LIBS)

static.C : static.sqC
	embprepp static $(DB) $(UID) $(PWD)
static : static.C util.o
	$(CC) -o static static.C util.o $(CFLAGS) $(LIBS)

updat.C : updat.sqC
	embprepp updat $(DB) $(UID) $(PWD)
updat : updat.C util.o
	$(CC) -o updat updat.C util.o $(CFLAGS) $(LIBS)

#****************************************************************************
#                  3d -  client/server samples (mixed)   
#****************************************************************************

#--------------------calludf/udf--------------------------------------------#

calludf.C : calludf.sqC
	embprepp calludf $(DB) $(UID) $(PWD)
calludf : calludf.C util.o
	$(CC) -o calludf calludf.C util.o $(CFLAGS) $(LIBS)

udf : udf.c
	$(CC) -c udf.c $(CFLAGS)
	$(LINKSL) -o udf udf.o $(LIBSUDF) -E udf.exp
	$(ERASE) $(DB2PATH)/function/udf
	$(COPY) udf $(DB2PATH)/function/udf

#--------------------fillcli/fillsrv----------------------------------------#

fillcli.C : fillcli.sqC
	embprepp fillcli $(DB) $(UID) $(PWD)
fillcli : fillcli.C util.o
	$(CC) -o fillcli fillcli.C util.o $(CFLAGS) $(LIBS)

fillsrv.C : fillsrv.sqC
	embprepp fillsrv $(DB) $(UID) $(PWD)
fillsrv : fillsrv.C util.o
	$(CC) -c fillsrv.C $(CFLAGS)
	$(LINKSL) -o fillsrv fillsrv.o util.o $(LIBS) -E fillsrv.exp
	$(ERASE) $(DB2PATH)/function/fillsrv
	$(COPY) fillsrv $(DB2PATH)/function/fillsrv

#--------------------inpcli/inpsrv------------------------------------------#

inpcli.C : inpcli.sqC
	embprepp inpcli $(DB) $(UID) $(PWD)
inpcli : inpcli.C util.o
	$(CC) -o inpcli inpcli.C util.o $(CFLAGS) $(LIBS)

inpsrv.C : inpsrv.sqC
	embprepp inpsrv $(DB) $(UID) $(PWD)
inpsrv : inpsrv.C
	$(CC) -c inpsrv.C $(CFLAGS)
	$(LINKSL) -o inpsrv inpsrv.o $(LIBS) -E inpsrv.exp
	$(ERASE) $(DB2PATH)/function/inpsrv
	$(COPY) inpsrv $(DB2PATH)/function/inpsrv

#--------------------outcli/outsrv------------------------------------------#

outcli.C : outcli.sqC
	embprepp outcli $(DB) $(UID) $(PWD)
outcli : outcli.C util.o
	$(CC) -o outcli outcli.C util.o $(CFLAGS) $(LIBS)

outsrv.C : outsrv.sqC
	embprepp outsrv $(DB) $(UID) $(PWD)
outsrv : outsrv.C
	$(CC) -c outsrv.C $(CFLAGS)
	$(LINKSL) -o outsrv outsrv.o $(LIBS) -E outsrv.exp
	$(ERASE) $(DB2PATH)/function/outsrv
	$(COPY) outsrv $(DB2PATH)/function/outsrv

#****************************************************************************
#                  3e -  multi-threaded samples
#****************************************************************************

thdsrver.C : thdsrver.sqC
	embprepp thdsrver $(DB) $(UID) $(PWD)
thdsrver : thdsrver.C
	$(ERASE) util.o
	$(CM) -c util.C $(CFLAGS)
	$(CM) -c thdsrver.C $(CFLAGS)
	$(CM) -o thdsrver thdsrver.o util.o $(LIBS)
	$(ERASE) util.o