CC=gcc

CFLAGS=-fno-builtin -g

all: foo-old foo-new preload.so libbar-new.so libbar-old.so
	ln -sf libbar-old.so libbar.so
	./foo-old
	LD_PRELOAD=./preload.so ./foo-old
	ln -sf libbar-new.so libbar.so
	./foo-new
	LD_PRELOAD=./preload.so ./foo-new
	./foo-old
	LD_PRELOAD=./preload.so ./foo-old

preload.o bar-new.o bar-old.o: CFLAGS+=-fPIC

preload.so: preload.o
	$(CC) -shared -o $@ $^ -Wl,--version-script=libbar.map

libbar-new.so: bar-new.o
	$(CC) -shared -o $@ $^ -Wl,-soname,libbar.so,--version-script=libbar.map

libbar-old.so: bar-old.o
	$(CC) -shared -o $@ $^ -Wl,-soname,libbar.so,--version-script=libbar-old.map

foo-new: foo.o libbar-new.so
	$(CC) -o $@ $^ -Wl,-R,.

foo-old: foo.o libbar-old.so
	$(CC) -o $@ $^ -Wl,-R,.

clean:
	rm -f *.so *.o

tar:
	tar cfJ test.tar.xz Makefile *.c *.map
