CC=gcc
CFLAGS=-Wall -g
LIBFAKETIME=libfaketime.so

%.so: %.c
	$(CC) -fPIC $(CFLAGS) -c -o $@ $<

all: timetest $(LIBFAKETIME)

timetest: timetest.o
	$(CC) $(CFLAGS) -o $@ $<

ld-so.h: dummy.c
	$(CC) -o tmp-dummy dummy.c
	objcopy --only-section .interp --output-target binary tmp-dummy tmp-dummy.interp
	awk 'BEGIN{printf("#ifdef LD_SO\n#undef LD_SO\n#endif\n\n");} NR==1{gsub (/\000/, "", $$1); printf("#define LD_SO \"%s\"\n", $$1);}' tmp-dummy.interp > ld-so.h
	rm -f tmp-dummy*
	
$(LIBFAKETIME): faketime.so
	$(CC) -shared -o $@ -Wl,-soname,$(LIBFAKETIME) $< -ldl -e __faketime_main

faketime.so: faketime.c ld-so.h

test: all
	@echo ==== Without preloaded library...
	./timetest
	@echo
	@echo ==== Set the date to yesterday...
	FAKE_TIME_OFFSET=-86400 LD_PRELOAD=./libfaketime.so ./timetest
	@echo
	@echo ==== Set the date to 2000/01/01 12:13:14...
	FAKE_TIME_START=946725194 LD_PRELOAD=./libfaketime.so ./timetest

clean: 
	-rm -f *.o *.so core timetest $(LIBFAKETIME) ld-so.h tmp-dummy*
