#  
# Copyright (C) 1999-2002 Wojciech Purczynski <cliph@isec.pl>
#
# 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.
#
# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL,
# BUT WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED  WARRANTY OF
# MERCHANTABILITY OR FITNESS  FOR A PARTICULAR  PURPOSE.  SEE THE
# GNU GENERAL PUBLIC LICENSE FOR MORE DETAILS.
#

LINUX=/usr/src/linux

TARGET=capsel.o

DEVICE="capsel"
DEVTYPE=c
DEVMAJOR=240
DEVMINOR=0

OBJS=rule.o sys.o lib.o ioctl.o module.o

BASEDIR=
MODULEDIR="/lib/modules/`uname -r`/misc"
SBINDIR="/sbin"
ETCDIR="/etc"
DEVDIR="/dev"

CONFIGDIR=${ETCDIR}"/capsel"

MODPROBE="/sbin/modprobe"
RMMOD="/sbin/rmmod"
DEPMOD="/sbin/depmod"

CROSS_COMPILE=
LD=$(CROSS_COMPILE)ld
CC=$(shell if [ -n "$(CROSS_COMPILE)" ]; then \
	echo $(CROSS_COMPILE)gcc; else \
	../scripts/kwhich gcc272 2>/dev/null || \
	../scripts/kwhich kgcc 2>/dev/null || \
	echo cc; fi)
MAKE=make

CFLAGS:=-I$(LINUX)/include
LDFLAGS:=

ifeq ($(LINUX)/.config, $(wildcard $(LINUX)/.config))
include $(LINUX)/.config
endif

ARCH:=$(shell uname -m|sed -e s/i.86/i386/ -e s/sun4u/sparc64/ -e s/arm.*/arm/ -e s/sa110/arm/)
KERNEL:=$(shell sed -ne "s/^.*UTS_RELEASE[^\"]*\"//" -e "s/\\.[^.]\+\"$$//p" $(LINUX)/include/linux/version.h)

ifeq ($(ARCH)/Makefile.inc, $(wildcard $(ARCH)/Makefile.inc))
include ${ARCH}/Makefile.inc
endif

ifeq ($(KERNEL)/Makefile.inc, $(wildcard $(KERNEL)/Makefile.inc))
include ${KERNEL}/Makefile.inc
endif

CFLAGS:=$(CFLAGS) -D__KERNEL__ -DMODULE

ifdef CONFIG_SMP
CFLAGS:=$(CFLAGS) -D__SMP__
endif

LDFLAGS:=$(LDFLAGS) -i

.PHONY .SILENT: build
build: ${TARGET}

all: build install restart

.SILENT: ${TARGET}
${TARGET}: ${OBJS} ${ARCH_OBJS} ${KERNEL_OBJS}
	echo Linking $@
	${LD} ${LDFLAGS} ${OBJS} ${ARCH_OBJS} ${KERNEL_OBJS} -o ${TARGET}

# Architecture/kernel depencies

.PHONY .SILENT: arch-deps
arch-deps:
	for src in ${ARCH_SRCS}; do \
		ln -fsn ${ARCH}/$$src $$src; \
	done

.PHONY .SILENT: kernel-deps
kernel-deps:
	for src in ${KERNEL_SRCS}; do \
		ln -fsn ${KERNEL}/$$src $$src; \
	done

.PHONY .SILENT: dep
dep: arch-deps kernel-deps
	echo Making dependencies

${ARCH_OBJS}: ${ARCH_SRCS}
${ARCH_SRCS}: arch-deps

${KERNEL_OBJS}: ${KERNEL_SRCS}
${KERNEL_SRCS}: kernel-deps

.SILENT: ${OBJS} ${ARCH_OBJS} ${KERNEL_OBJS}
%.o: %.c
	echo Compiling $@
	${CC} ${CFLAGS} -o $@ -c $<

.PHONY .SILENT: clean
clean:
	echo Cleaning
	rm -f core ${TARGET} *~ ${OBJS}
	find -type l -exec rm -f {} \;

.PHONY .SILENT: install
install: ${TARGET}
	echo Installing ${INSTALLDIR}/${TARGET}
	mkdir -m 700 -p ${BASEDIR}${MODULEDIR}
	mkdir -m 755 -p ${BASEDIR}${DEVDIR}
	mkdir -m 700 -p ${BASEDIR}${CONFIGDIR}
	install -m 600 ${TARGET} ${BASEDIR}${MODULEDIR}
	mknod -m 600 ${BASEDIR}${DEVDIR}/${DEVICE} ${DEVTYPE} ${DEVMAJOR} ${DEVMINOR} || true

.PHONY .SILENT: start
start:
	echo Starting CAPSEL module
	sync
	${MODPROBE} $(basename ${TARGET} .o)

.PHONY .SILENT: stop
stop:
	echo Stopping CAPSEL module
	${RMMOD} $(basename ${TARGET} .o) || true

.PHONY: restart
restart: stop start

