#
#	src/batch/dynlib/Makefile
#	instructions for compiling dynamic library examples
#	after compiling, you may want to try the sanity check:
#       (in unix), type: "nm example.so.1" and you will see
#       rp_init, rp_grad, etc. or sys_init, etc., defined as symbols therein
#
#       You may need to use
#               setenv LD_LIBRARY_PATH
#       to include the directory where you store the dynamic library.
#

cc_alpha = cc
cc_sol2 = gcc
cc_linux = gcc
CC = $(cc_$(arch))

map = linux-function.map

ldflag_alpha	= -expect_unresolved '*' -shared -hidden \
			-exported_symbol rp_init \
			-exported_symbol rp_penalty \
			-exported_symbol rp_newton1
ldflag_sol2	= -G
ldflag_linux	= -shared -Wl,--version-script,$(map)
ldflag = $(ldflag_$(arch))

ld_alpha = ld
ld_sol2 = ld
ld_linux = gcc
ld = $(ld_$(arch)) $(ldflag_$(arch))

cflags_alpha = -std1 -verbose -warnprotos -trapuv
cflags_sol2 = -ansi -Wall -Wshadow -Wpointer-arith -W -Werror
cflags_linux = -ansi -Wall -Wshadow -Wpointer-arith -W -Werror
cflags = $(cflags_$(arch))

CFLAGS= $(DEBUG) $(cflags)

#dllib_sol2	= -ldl

defdir = ../../give/code
defh = $(defdir)/def.h

defsubset = ./def,subset.h

doth_rp = rp,dynlib,proto.h
goal_rp = rp,example,$(arch).so.1
allc_rp = rp,dynlib,examp.c
allo_rp = rp,dynlib,examp,$(arch).o

doth_sy = sys,dynlib,proto.h $(defsubset)
goal_sy = sys,example,$(arch).so.1
allc_sy = sys,dynlib,example.c
allo_sy = sys,dynlib,example,$(arch).o

doth_sp = sys,dynlib,proto.h $(defsubset)
goal_sp = spect,example,$(arch).so.1
allc_sp = spect,example.c
allo_sp = spect,example,$(arch).o

doth = $(doth_sp) $(doth_sy) $(doth_rp)
goal = $(goal_sp) $(goal_sy) $(goal_rp)
allc = $(allc_sp) $(allc_sy) $(allc_rp)

all:	$(defsubset)
	echo use make sol2 or make alpha or make linux

alpha:
	$(MAKE) arch=alpha libs

linux:
	$(MAKE) arch=linux libs

sol2:
	$(MAKE) arch=sol2 libs

libs:	$(goal)
	$(MAKE) $(goal) date=-DDate='\"date='`date +%y,%m,%d,%T`'\"'

$(allo_rp):	$(doth_rp) $(allc_rp)
		@echo date=$(date)
		$(CC) $(date) $(CFLAGS) -o $@ -c $(allc_rp)

$(goal_rp):	$(allo_rp) $(map)
		$(ld) -o $@ $(allo_rp)
#		@rm -i so_locations
#		rm -i *.o

$(allo_sy):	$(doth_sy) $(allc_sy)
		@echo date=$(date)
		$(CC) $(date) $(CFLAGS) -o $@ -c $(allc_sy)

$(goal_sy):	$(allo_sy) $(map)
		$(ld) -o $@ $(allo_sy)

$(allo_sp):	$(doth_sp) $(allc_sp) $(defh)
		@echo date=$(date) Debug=$(DEBUG)
		$(CC) $(date) $(CFLAGS) -o $@ -c $(allc_sp) -I$(defdir)

$(goal_sp):	$(allo_sp) $(map)
		$(ld) -o $@ $(allo_sp)

$(defsubset):	../f3d/def,subset.h
	cat $? | sed -e 's/Const/const/g' | grep -v 'extern' > $@

clean:
	rm -i *.so.1 t0 t1 *.o

tar:
	tar cvf dynlib.tar Makefile $(doth) $(allc) -C doc z.pdf -C ../$(defdir) def.h
	gzip dynlib.tar
