PATH1="."
BUILD_DATE:=$(shell date +%g%m%d%H)
BUILD_VERSION:=1.19

##############################################################
# Linux Kernel 2.6
##############################################################
ifneq	"$(findstring 2.4., $(shell uname -a))" "2.4."

all: module secreal2d secreal2d_redund tools
SP1: module secreal2d secreal2d_redund tools
ssl: module SSLsecreal2d secreal2d_redund tools
SP1_ssl: module SSLsecreal2d secreal2d_redund tools
ssl64: module SSL64secreal2d secreal2d_redund tools
SP1_ssl64: module SSL64secreal2d secreal2d_redund tools
ppc64: module ppc64secreal2d secreal2d_redund tools

CC+=$(POLLING) 

secreal2d: secreal2d.o
	cc secreal2d.o -o secreal2d
	strip	secreal2d

secreal2d.o : secreal2d.c secreal2d.h
	$(CC) -c secreal2d.c

secreal2d_redund: 	redund_main.o redund.o
	cc	redund_main.o redund.o -lpthread -o secreal2d_redund
	strip	secreal2d_redund

redund_main.o:	redund_main.c secreal2d.h redund.h
	$(CC) -c redund_main.c

redund.o:	redund.c redund.h secreal2d.h
	$(CC) -c redund.c

SSLsecreal2d: 	SSLsecreal2d.o
	cc	secreal2d.o -o secreal2d libssl.so 
	strip	secreal2d

SSLsecreal2d.o:	secreal2d.c
	$(CC) -c -DSSL_ON -DOPENSSL_NO_KRB5 secreal2d.c -I$(PATH1)/include
	
SSL64secreal2d: 	SSL64secreal2d.o
	cc	-m64 secreal2d.o -o secreal2d libssl.so 
	strip	secreal2d

SSL64secreal2d.o:	secreal2d.c
	$(CC) -c -m64 -DSSL_ON -DOPENSSL_NO_KRB5 secreal2d.c -I$(PATH1)/include
	
ppc64secreal2d: 	ppc64secreal2d.o
	cc	-mpowerpc64 secreal2d.o -o secreal2d libssl.so 
	strip	secreal2d

ppc64secreal2d.o:	secreal2d.c
	$(CC) -c -mpowerpc64 -DSSL_ON -DOPENSSL_NO_KRB5 secreal2d.c -I$(PATH1)/include

ifeq	"$(findstring 2.6.15-1.2054, $(shell uname -r))" "2.6.15-1.2054"
CFLAGS  += -DFEDORA
endif

ifneq ($(KERNELRELEASE),)
obj-m := secreal2.o
else
KDIR	:= /lib/modules/$(shell uname -r)/build
PWD	:= $(shell pwd)

module:
	$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules
	cp -p secreal2.ko /lib/modules/$(shell uname -r)/kernel/drivers/char/
#	cp -p secreal2.ko /lib/modules/$(shell uname -r)/misc/
	depmod -a

endif

tools: wmaddsvr wmdelsvr wmcfmat wmloadsvr wmsetsec

wmaddsvr: wmaddsvr.c
	$(CC) -o wmaddsvr wmaddsvr.c
	strip wmaddsvr

wmdelsvr: wmdelsvr.c
	$(CC) -o wmdelsvr wmdelsvr.c
	strip wmdelsvr

wmcfmat: wmcfmat.c
	$(CC) -o wmcfmat wmcfmat.c
	strip wmcfmat

wmloadsvr: wmloadsvr.c
	$(CC) -o wmloadsvr wmloadsvr.c
	strip wmloadsvr
	
wmsetsec: wmsetsec.c
	$(CC) -o wmsetsec wmsetsec.c
	strip wmsetsec
	
clean:
	rm -f *.o
	rm -rf ./.tmp_versions
	rm -f secreal2.mod*
	rm -f .secreal2*
	rm -f secreal2.ko
	rm -f *.order
	rm -f secreal2d
	rm -f secreal2d_redund
	rm -f /lib/modules/$(shell uname -r)/kernel/drivers/char/secreal2.ko
	rm -f /lib/modules/$(shell uname -r)/misc/secreal2.ko
	rm -f wmaddsvr
	rm -f wmdelsvr
	rm -f wmcfmat
	rm -f wmloadsvr
	rm -f wmsetsec
	rm -f Module.symvers
	rm -f libssl.so

else     
##############################################################
# Linux Kernel 2.4
##############################################################

CC=cc -DLINUX $(POLLING) 
ARCH=$(shell uname -m | sed s/i.86/i86/)
VERSION=$(shell uname -r | sed s/smp//)

ifeq	($(ARCH),i86)
OPTS=-DMODVERSIONS -DMODULE -D__KERNEL__ -Wall -Wstrict-prototypes -O2 \
-fomit-frame-pointer -pipe -march=i486 \
-I/usr/src/linux-$(VERSION)/include -I/usr/src/linux-2.4/include -I/usr/src/linux/include
else
ifeq	($(ARCH),x86_64)
OPTS=-DMODVERSIONS -DMODULE -D__KERNEL__ -Wall -Wstrict-prototypes -O2 \
-fomit-frame-pointer -pipe -m64 -mcmodel=kernel \
-I/usr/src/linux-$(VERSION)/include -I/usr/src/linux-2.4/include -I/usr/src/linux/include
else 
OPTS=-DMODVERSIONS -DMODULE -D__KERNEL__ -Wall -Wstrict-prototypes -O2 \
-fomit-frame-pointer -pipe -I/usr/src/linux/include -ffixed-8
endif
endif


ifeq	"$(findstring SMP, $(shell uname -a))" "SMP"
OPTS+=-D__SMP__
endif

ifeq	"$(findstring SMP, $(shell cat /proc/version))" "debian"
OPTS+=-D_DEBIAN_
endif



all: module secreal2d secreal2d_redund tools
SP1: modulesp1 secreal2d secreal2d_redund tools
ssl: module SSLsecreal2d secreal2d_redund tools
SP1_ssl: modulesp1 SSLsecreal2d secreal2d_redund tools
ssl64: module SSL64secreal2d secreal2d_redund tools
SP1_ssl64: modulesp1 SSL64secreal2d secreal2d_redund tools
ppc64: modulesp1 ppc64secreal2d secreal2d_redund tools

SSLsecreal2d: 	SSLsecreal2d.o
	cc	secreal2d.o -o secreal2d libssl.so 
	strip	secreal2d

SSLsecreal2d.o:	secreal2d.c
	$(CC) -c -DSSL_ON -DOPENSSL_NO_KRB5 secreal2d.c -I$(PATH1)/include
	
SSL64secreal2d: 	SSL64secreal2d.o
	cc	-m64 secreal2d.o -o secreal2d libssl.so 
	strip	secreal2d

SSL64secreal2d.o:	secreal2d.c
	$(CC) -c -m64 -DSSL_ON -DOPENSSL_NO_KRB5 secreal2d.c -I$(PATH1)/include
	
ppc64secreal2d: 	ppc64secreal2d.o
	cc	-mpowerpc64 secreal2d.o -o secreal2d libssl.so 
	strip	secreal2d

ppc64secreal2d.o:	secreal2d.c
	$(CC) -c -mpowerpc64 -DSSL_ON -DOPENSSL_NO_KRB5 secreal2d.c -I$(PATH1)/include

secreal2d: 	secreal2d.o
	cc	secreal2d.o -o secreal2d
	strip	secreal2d

secreal2d.o:	secreal2d.c secreal2d.h
	$(CC) -c secreal2d.c

secreal2d_redund:	redund_main.o redund.o
	cc -lpthread redund_main.o redund.o -o secreal2d_redund
	strip	secreal2d_redund

redund_main.o:	redund_main.c secreal2d.h redund.h
	$(CC) -c redund_main.c

redund.o:	redund.c redund.h secreal2d.h
	$(CC) -c redund.c

module:
	$(CC) -c $(OPTS) secreal2.c
	cp -p secreal2.o /lib/modules/$(shell uname -r)/kernel/drivers/char/
	cp -p secreal2.o /lib/modules/$(shell uname -r)/misc/
	depmod -a

modulesp1:
	$(CC) -c $(OPTS) -DSP1 secreal2.c
	cp -p secreal2.o /lib/modules/$(shell uname -r)/kernel/drivers/char/
	cp -p secreal2.o /lib/modules/$(shell uname -r)/misc/
	depmod -a
	
tools: wmaddsvr wmdelsvr wmcfmat wmloadsvr wmsetsec

wmaddsvr: wmaddsvr.c
	$(CC) -o wmaddsvr wmaddsvr.c
	strip wmaddsvr

wmdelsvr: wmdelsvr.c
	$(CC) -o wmdelsvr wmdelsvr.c
	strip wmdelsvr

wmcfmat: wmcfmat.c
	$(CC) -o wmcfmat wmcfmat.c
	strip wmcfmat

wmloadsvr: wmloadsvr.c
	$(CC) -o wmloadsvr wmloadsvr.c
	strip wmloadsvr

wmsetsec: wmsetsec.c
	$(CC) -o wmsetsec wmsetsec.c
	strip wmsetsec

clean:
	rm -rf *.o
	rm -f secreal2d
	rm -f /lib/modules/$(shell uname -r)/kernel/drivers/char/secreal2.ko
	rm -f /lib/modules/$(shell uname -r)/misc/secreal2.ko
	rm -f wmaddsvr
	rm -f wmdelsvr
	rm -f wmcfmat
	rm -f wmloadsvr
	rm -f wmsetsec
	rm -f *.order
	rm -f libssl.so
endif

pack:
	rm -rf ../../disk/weidmueller
	mkdir ../../disk/weidmueller
	cp * ../../disk/weidmueller
	tar -C ../../disk -zcvf ../../disk/secreal2_kernel2.x_v${BUILD_VERSION}_build_${BUILD_DATE}.tgz weidmueller
	rm -rf ../../disk/weidmueller
