# shadowfs is Copyright (C) 2003 - 2004 Clifford Wolf
# shadowfs is Copyright (C) 2003 - 2004 LINBIT Information Technologies
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version. A copy of the GNU General
# Public License can be found at COPYING.

CC = gcc
CFLAGS = -Wall -O2 -fPIC -ggdb
LDLIBS = -ldl

prefix=/usr/local

# older binutils have a broken objcopy
BROKEN_OBJCOPY = $(shell objcopy --version | grep objcopy | egrep -vq ' 2.1([0-4]|5$$)'; echo $$?)

all: libcowfs.so liblogfs.so

install:
	cp libcowfs.so $(prefix)/lib/
	cp liblogfs.so $(prefix)/lib/

%.so: %.o
	$(CC) -shared $(LDFLAGS) -o $@ $^ $(LDLIBS)

libcowfs.o: cowfs.o wrapper_wr_wait.o getrealfn.o getdlsym.o symbols.txt
	ld -r -o $@ $(filter-out symbols.txt, $^)
ifeq ($(BROKEN_OBJCOPY),0)
	objcopy --keep-global-symbols=symbols.txt $@
else
	@echo "!!!! you seam to be running a broken version of objcopy !!!!"
endif

liblogfs.o: logfs.o wrapper.o getrealfn_readlink.o getdlsym.o symbols.txt
	ld -r -o $@ $(filter-out symbols.txt, $^)
ifeq ($(BROKEN_OBJCOPY),0)
	objcopy --keep-global-symbols=symbols.txt $@
else
	@echo "!!!! you seam to be running a broken version of objcopy !!!!"
endif

getrealfn_readlink.o: getrealfn.c
	$(CC) -c $(CFLAGS) -DWRAPPED_READLINK -o $@ $^

wrapper_wr_wait.o: wrapper.c
	$(CC) -c $(CFLAGS) -DWRAP_WRITE_ONLY -DWRAP_WAIT -o $@ $^

symbols.txt: wrapper_func.h
	grep '^WRAPPER' wrapper_func.h | cut -f2 -d, | tr -d ' ' > symbols.txt

nfsroot: libcowfs.so
	bash nfsroot.sh

test: all
	bash test.sh

clean:
	rm -rf test.*/ *.o *~ symbols.txt core core.*

distclean: clean
	rm -rf *.so nfsroot

.PHONY: all nfsroot test clean distclean

