MYCODEDIR := .
MODULESDIR = /lib/modules/$(shell uname -r)


# Directories to search for header files

SEARCHDIRS := -I- -I${MYCODEDIR} -I/usr/src/linux/include 

# makemake variables

DEPENDFLAGS := -O2 -fomit-frame-pointer -fno-strict-aliasing -pipe -mpreferred-stack-boundary=2  -Wall ${SEARCHDIRS} -DMODULE -D__KERNEL__ -DLINUX -DEXPORT_SYMTAB
# -DFTPFS_DEBUG -DFTPFS_VERBOSE

# C preprocessor (C, C++, FORTRAN)

CPPFLAGS = 

# C compiler

CC     := gcc
CFLAGS  = ${DEPENDFLAGS} 

%.o : %.c
	${CC} ${CPPFLAGS} ${CFLAGS} -c $< -o $@


# C/C++/Eiffel/FORTRAN linker

LINKER    := ld
LDFLAGS    = -m elf_i386 -r
LOADLIBES := 


# ftpfs.o

ftpfs.o : ./cache.o ./dir.o ./file.o ./inode.o ./proc.o ./symlink.o
	${LINKER} ${LDFLAGS} -o $@ ${filter-out %.a %.so, $^} ${LOADLIBES}

# target for making everything

.PHONY : all
all: ftpfs.o


# target for removing all object files

.PHONY : tidy
tidy::
	@${RM} core ./cache.o ./dir.o ./file.o ./inode.o ./proc.o ./symlink.o

# target for removing all object files

.PHONY : clean
clean:: tidy
	@${RM} ftpfs.o

# list of all source files

MM_ALL_SOURCES := ./cache.c ./dir.c ./file.c ./inode.c ./proc.c ./symlink.c


# target for checking a source file

CHECKSYNTAXFILE := ${basename ${filter %${CHECKSTRING}, ${MM_ALL_SOURCES}}}

.PHONY : checksyntax
checksyntax:
  ifneq (${CHECKSYNTAXFILE},)
	@${MAKE} ${addsuffix .o, ${CHECKSYNTAXFILE}}
  else
	@echo No target to make ${CHECKSTRING}
  endif


# target for touching appropriate source files

.PHONY : touch
touch::
	@list=$$(grep -l ${TOUCHSTRING} ${MM_ALL_SOURCES}); \
     for file in $$list; do { echo $$file; touch $$file; } done


# target for calculating dependencies (MAKEMAKE)

.PHONY : jdepend
jdepend:
	@${MAKEMAKE} --depend Makefile -- ${DEPENDFLAGS} --  ./cache.c ./cache.o ./dir.c ./dir.o ./file.c ./file.o ./inode.c ./inode.o ./proc.c ./proc.o ./symlink.c ./symlink.o


install: ftpfs.o
	rm -f ${MODULESDIR}/kernel/fs/ftpfs/ftpfs.o
	install -m644 --owner=0 --group=0 -b -D ftpfs.o ${MODULESDIR}/kernel/fs/ftpfs/ftpfs.o
	depmod -aq
	@echo "FTPfs successfully installed."


uninstall:
	rm -rf ${MODULESDIR}/kernel/fs/ftpfs
	depmod -aq
	@echo "FTPfs is now uninstalled."