CC=gcc -B./
CFLAGS=-O -g
PIC=-fPIC

PROGS=main1 main2 main3 libfoo.a libshared1.so libshared3.so

all: $(PROGS)
	./main1
	./main2
	./main3

# The interposed case. This is what we would like to have work properly, but
# fails miserably
main1: main.o libshared1.so libfoo.a
	$(CC) -o $@ $^ -Wl,-rpath,.

# The non-interposed case. This works as everyone expects and agrees it should
main2: main.o libfoo.a
	$(CC) -o $@ $^

# The bodged interposed case. Works, but not as we would like too.
main3: main.o libshared3.so libfoo.a
	$(CC) -o $@ $^ -Wl,-rpath,.

libshared1.so: shared.o
	$(CC) -shared -o $@ $^

libshared3.so: shared.o libfoo.a
	$(CC) -shared -o $@ $^

shared.o: foo.c
	$(CC) $(CFLAGS) $(PIC) -c $< -o $@

libfoo.a: libfoo.a(bar.o)

bar.o: bar.c
	$(CC) $(CFLAGS) $(PIC) -c $< -o $@

clean:
	rm -f $(PROGS) *.so *.o *.s


tar:
	tar cfz bug.tar.gz *.c Makefile
