ifndef MODULESDIR
MODULESDIR=${ROOT}/lib/modules/$(shell uname -r)
endif

ifndef KERNEL_SOURCES
KERNEL_SOURCES=${MODULESDIR}/build
endif

ifeq (${MODVERSIONS},detect)
  ifeq ($(shell test -e ${KERNEL_SOURCES}/include/linux/modversions.h; echo $$?),0)
    MODVERSIONS=yes
  endif
endif

ifeq (${MODVERSIONS},yes)
MVER=-DMODVERSIONS -DEXPORT_SYMTAB
endif

ifndef DEBUG
DEBUG=0
endif

KERNEL=linux-$(shell uname -r)

ALL_TARGETS := shfs.o

SEARCHDIRS := -I- -I. -I${KERNEL_SOURCES}/include #-I/usr/src/linux/include/

CC     := gcc
CFLAGS  = -O2 -fomit-frame-pointer -fno-strict-aliasing -pipe -Wall ${SEARCHDIRS} -DMODULE ${MVER} -D__KERNEL__ -DLINUX -DDEBUG_LEVEL=${DEBUG}
LINKER    := ld
LDFLAGS    = -m elf_i386 -r
LOADLIBES := 

all: ${ALL_TARGETS}

%.o: %.c $(wildcard shfs*.h)
	${CC} ${CFLAGS} -c $< -o $@

shfs.o: dcache.o dir.o fcache.o file.o inode.o proc.o proto.o symlink.o
	${LINKER} ${LDFLAGS} -o $@ ${filter-out %.a %.so, $^} ${LOADLIBES}

tidy:
	${RM} core dcache.o dir.o fcache.o file.o inode.o proc.o proto.o symlink.o

clean: tidy patch-clean
	${RM} shfs.o

install: shfs.o
	rm -f ${MODULESDIR}/kernel/fs/shfs/shfs.o
	install -m644 -b -D shfs.o ${MODULESDIR}/kernel/fs/shfs/shfs.o
	if [ -x /sbin/depmod -a "${ROOT}" = "/" ]; then /sbin/depmod -aq; fi

uninstall:
	rm -rf ${MODULESDIR}/kernel/fs/shfs
	if [ -x /sbin/depmod -a "${ROOT}" = "/" ]; then /sbin/depmod -aq; fi

patch:
	rm -rf ${KERNEL} ${KERNEL}.orig; mkdir ${KERNEL};
	for i in Documentation fs/shfs; do \
	  mkdir -p ${KERNEL}/$$i; \
	done
	cp ${KERNEL_SOURCES}/Documentation/Configure.help ${KERNEL}/Documentation
	cp ${KERNEL_SOURCES}/fs/{Makefile,Config.in} ${KERNEL}/fs
	cp -r ${KERNEL} ${KERNEL}.orig
	cp ../../Changelog *.c *.h ${KERNEL}/fs/shfs/
	(cd ${KERNEL}; patch -p1 <../kernel-config.diff)
	find . -type f -name "*.orig" -print | xargs rm -f
	diff -urN ${KERNEL}.orig ${KERNEL} >${KERNEL}.diff; true

patch-clean:
	rm -rf ${KERNEL} ${KERNEL}.orig;
	rm -f ${KERNEL}.diff
	
.PHONY : all tidy clean install uninstall patch patch-clean
