# Makefile -- recipe for building and testing ELF transfer vector
#  Copyright 2000,2001 BitWagon Software LLC.  All rights reserved.
#  This file may be used, modified, and distributed under the terms
#  of the GNU General Public License version 2.

CFLAGS= -g -Wall -Wstrict-prototypes -pedantic

all: expvec impvec retrovec retroimp recovervec imptest dyn4exec relvec rpathrm

imptest: impvec foo.vec testmain.o foo.so.5
	export LD_LIBRARY_PATH=$$LD_LIBRARY_PATH:`pwd`; \
		./impvec '^malloc$$ ^calloc$$ ^realloc$$ ^free$$' foo.vec \
			gcc -o testmain testmain.o foo.so.5  > foo_imp.s
	gcc -c foo_imp.s
	gcc -o testmain testmain.o foo_imp.o foo.so.5
	export LD_LIBRARY_PATH=$$LD_LIBRARY_PATH:`pwd`; \
		./testmain

impvec: impvec.o elflib.o syslib.o veclib.o
	gcc $(CFLAGS) -o impvec impvec.o elflib.o syslib.o veclib.o

foo.so.5 foo.vec: expvec vscript foo.o
	./expvec @foo.order '' vscript \
		gcc -shared -Wl,-soname=foo.so.5 -o foo.so.5 foo.o  \
		>foo.vec  3> foo.vec.o

expvec: expvec.o elflib.o syslib.o veclib.o
	gcc $(CFLAGS) -o expvec expvec.o elflib.o syslib.o veclib.o

retroimp: retroimp.o elflib.o syslib.o veclib.o
	gcc -o retroimp retroimp.o elflib.o syslib.o veclib.o

retrovec: retrovec.o elflib.o syslib.o veclib.o
	gcc -o retrovec retrovec.o elflib.o syslib.o veclib.o

recovervec: recovervec.o elflib.o syslib.o veclib.o
	gcc -o recovervec recovervec.o elflib.o syslib.o veclib.o

dyn4exec: dyn4exec.o
	gcc -o dyn4exec dyn4exec.c

relvec: relvec.o elflib.o syslib.o veclib.o
	gcc -o relvec relvec.o elflib.o syslib.o veclib.o

elflib.o: elflib.c elflib.h

syslib.o: syslib.c syslib.h

veclib.o: veclib.c veclib.h

clean:
	rm -f elflib.o expvec expvec.o \
		foo.o foo.so.5 foo.vec.o foo_imp.o \
		impvec impvec.o recovervec recovervec.o \
		retroimp retroimp.o retrovec retrovec.o \
		syslib.o testmain.o veclib.o dyn4exec dyn4exec.o testmain

FILES=\
	COPYING \
	Makefile \
	README \
	dyn4exec.c \
	elfvector.html \
	elflib.h elflib.c \
	syslib.h syslib.c \
	veclib.h veclib.c \
	expvec.c \
	impvec.c \
	relvec.c \
	retrovec.c \
	retroimp.c \
	recovervec.c \
	rpathrm.c \
	testmain.c foo.c \
	foo.order vscript \
	foo.vec foo_imp.s \
	vec.libc vec.sh \
	vectool

RELDIR=elfvector-0.7a

tar: $(FILES)
	rm -rf $(RELDIR); mkdir $(RELDIR)
	cd $(RELDIR); for i in $(FILES); do cp -a ../$$i .; done
	tar cvfz $(RELDIR).tgz $(RELDIR)
