OBJS=psignal.o  pbacktrace.o  ptrace.o  internalfile.o  impread.o  internal.o
SRCS=psignal.c  pbacktrace.c  ptrace.c  internalfile.c  impread.c  internal.c
CC=gcc -g

all: psignal-test visible-test $(OBJS) libperms.a libperms.so Makefile
	echo All up to date

# lib components
psignal.o: psignal.h psignal.c libperms.so Makefile
	$(CC) -c psignal.c

pbacktrace.o: pbacktrace.h pbacktrace.c libperms.so Makefile
	$(CC) -c pbacktrace.c

ptrace.o: ptrace.h ptrace.c libperms.so Makefile
	$(CC) -c ptrace.c

impread.o: impread.h impread.c internalfile.h libperms.so Makefile
	$(CC) -c impread.c

internalfile.o: internalfile.c internalfile.h imptypes.h libperms.so Makefile
	$(CC) -c internalfile.c

# headers
internalfile.h: imptypes.h

internal.h: imptypes.h

perms.h: pbacktrace.h psignal.h ptrace.h visible.h

psignal.h: imptypes.h

visible.h: imptypes.h internalfile.h internal.h

# tests
psignal-test: psignal-test.c psignal.h pbacktrace.h libperms.a Makefile
	$(CC) --static -o psignal-test psignal-test.c -L. -lperms -lbacktrace

visible-test: visible.c perms.h libperms.a
	$(CC) --static -o visible-test visible.c -L. -lperms

# static library:
libperms.a: $(OBJS) Makefile
	ar rcs libperms.a $(OBJS)

# dynamically loadable library:
libperms.so: $(SRCS) Makefile
	$(CC) -c -fPIC $(SRCS)
	$(CC) -shared -o libperms.so $(OBJS)
	rm -rf $(OBJS)

clean: Makefile
	rm -f \#*\# *~ *.o libperms.a  libperms.so psignal-test visible-test
