#
# Makefile for Linux Packet Filter(kernel 2.4.x)
# created by Hui,Zhang May. 6th, 2001
#
# If you do not have gcc etc., change the settings.
# 
COMPILER = gcc
AS = as
LD = ld
SHELL = /bin/bash
GREP = grep
RM = rm -f
#
# If the ar command fails on your system,consult the ar manpage
# for your system.
#
AR = ar
#
# If you don't have any special features enabled,keep the following
# untouched.
# 
# Check the kernel version to determine the path where the compiled
# new modules should be installed.
# for kernel 2.2.x: the path should be /lib/modules/2.2.x/lpf
# for kernel 2.4.x: the path should be /lib/modules/2.4.x/kernel/drivers/lpf
#
ifneq (,$(wildcard /usr/src/linux))
	KRNL_INCLUDEDIR = /usr/src/linux/include
else
	KRNL_INCLUDEDIR = /usr/src/linux/include
endif

VERSION_FILE = $(KRNL_INCLUDEDIR)/linux/version.h
CONFIG_FILE = $(KRNL_INCLUDEDIR)/linux/config.h

KRNLV = $(shell $(GREP) UTS_RELEASE $(VERSION_FILE) | cut -f 2 -d '"')

ifneq (,$(wildcard /lib/modules/$(KRNLV)/kernel))
	LPFMODPATH = /lib/modules/$(KRNLV)/kernel/drivers/lpf
else
	LPFMODPATH = /lib/modules/$(KRNLV)/lpf
endif
# 
# Check for SMP kernel
#
DEFAULT_SMP = 0
ifndef SMP
	SMP = $(shell [ -e $(CONFIG_FILE) ] || echo -n $(DEFAULT_SMP))
	ifneq ($(SMP), $(DEFAULT_SMP))
		SMP = $(shell $(COMPILER) -E -dM $(CONFIG_FILE) | $(GREP) CONFIG_SMP | cut -f 3 -d ' ')
		ifneq ($(SMP), 1)
			SMP = 0
		endif
	endif
endif
#
# Optional optimization flags:
# Check for SMP kernel
#
CFLAGS := -O2 -D__KERNEL__ -DMODULE
ifeq ($(SMP), 1)
	CFLAGS += -D__SMP__
endif
#CFLAGS += -DCPU=686 -DEXPORT_SYMTAB -DMODVERSIONS
#CFLAGS += $(shell [ -f $(KRNL_INCLUDEDIR)/linux/modversion.h ] && echo -DMODVERSIONS)
#CFLAGS += -include $(KRNL_INCLUDEDIR)/linux/modversions.h
#CFLAGS += -Wall -Wstrict-prototypes -fomit-frame-pointer -pipe -fno-strength-reduce
#CFLAGS += -m486 -malign-loops=2 -malign-jumps=2 -malign-functions=2
#CFLAGS += -mcpu=i486 -falign-loops=2 -falign-jumps=2 -falign-functions=2
CFLAGS += -DCPU=686 -DEXPORT_SYMTAB -DMODVERSIONS
CFLAGS += $(shell [ -f $(KRNL_INCLUDEDIR)/linux/modversion.h ] && echo -DMODVERSIONS)
CFLAGS += -include $(KRNL_INCLUDEDIR)/linux/modversions.h
CFLAGS += -Wall -Wstrict-prototypes -Wno-trigraphs
CFLAGS += -fno-strict-aliasing -fno-common -fomit-frame-pointer -pipe -mpreferred-stack-boundary=2
CFLAGS += -march=i686 -nostdinc -iwithprefix include -DKBUILD_BASENAME=lpf
#
# Sybase SQL Server ASE 
#
SYBASE = /opt/sybase
#
# *.h 
#
INCLUDEDIRS = -I. -I./include -I$(KRNL_INCLUDEDIR)
#
# sybase *.h
#
DBINCLUDEDIRS = $(INCLUDEDIRS) -I$(SYBASE)/include
#
# lib*.so or lib*.a
#
LIBDIRS = -L. -L./lib -L/usr/local/lib -L/usr/lib/X11 -L/usr/X11R6/lib
#
# sybase lib*.so or lib*.a
#
DBLIBDIRS = $(LIBDIRS) -L$(SYBASE)/lib
#
# Link 
#
LIBS = -lm
#
#
#
DBLIBS = $(LIBS) -lsybdb
#
#
#



#######################DON'T EDIT BELOW#####################
CC = $(COMPILER) $(INCLUDEDIRS)
LINK = $(CC) $(LIBDIRS) $(LIBS)
DEP=headfields.h cap_type.h
OBJMODS = af_capture.o cap_type.o cap_pack.o
ALL = $(OBJMODS) capdump_hdr

LPFRC = lpf100 lpf1000
LPFRC_ALL = lpf
RCDINITD = /etc/rc.d/init.d
PWD=$(shell pwd)

all: $(ALL)

modules: $(OBJMODS)

capdump_hdr: capdump_hdr.c $(DEP)
	$(COMPILER) $(INCLUDEDIRS) -O2 -Wall -m486 -DCPU=686 -o $@ $< $(LIBS)
	@strip $@

capdump: capdump.c
	$(COMPILER) $(INCLUDEDIRS) -O2 -Wall -m486 -DCPU=686 -o $@ $< $(LIBS)
	@strip $@

capdump3: capdump3.c
	$(COMPILER) $(INCLUDEDIRS) -O2 -Wall -m486 -DCPU=686 -o $@ $< $(LIBS)
	@strip $@

modules_install:
	mkdir -p $(LPFMODPATH); \
	for i in $(OBJMODS); do \
		install -o root -g root -m 644 $$i $(LPFMODPATH); \
	done

rc_all_install:
	for j in $(LPFRC_ALL); do \
	cd $(RCDINITD); \
	[ -f $$j ] && rm -f $$j; \
	cd $(PWD); \
	install -o root -g root -m 755 $$j $(RCDINITD); \
	for i in 2 3 5; do \
		cd /etc/rc.d/rc$$i.d; [ -f S??$$j ] && rm -f S??$$j; ln -s ../init.d/$$j S20$$j; \
	done; \
	for i in 0 1 4 6; do \
		cd /etc/rc.d/rc$$i.d; [ -f K??$$j ] && rm -f K??$$j; ln -s ../init.d/$$j K90$$j; \
	done; \
	done 

rc_all_uninstall:
	find /etc/rc.d/ -name $(LPFRC_ALL) -exec rm -f {} \; ; \
	find /etc/rc.d/ -name [SK]??$(LPFRC_ALL) -exec rm -f {} \; ; 

rc_install:
	for j in $(LPFRC); do \
		cd $(RCDINITD); \
		[ -f $$j ] && rm -f $$j; \
		cd $(PWD); \
		install -o root -g root -m 755 $$j $(RCDINITD); \
		for i in 2 3 5; do \
			cd /etc/rc.d/rc$$i.d; [ -f S??$$j ] && rm -f S??$$j; ln -s ../init.d/$$j S20$$j; \
		done; \
		for i in 0 1 4 6; do \
			cd /etc/rc.d/rc$$i.d; [ -f K??$$j ] && rm -f K??$$j; ln -s ../init.d/$$j K90$$j; \
		done; \
	done

rc_uninstall:
	for j in $(LPFRC); do \
		find /etc/rc.d/ -name $$j -exec rm -f {} \; ; \
		find /etc/rc.d/ -name [SK]??$$j -exec rm -f {} \; ; \
	done
install_prog:
	mkdir -p /database/proc/bin; \
	install -o sybase -g sybase -m 755 capdump3 /database/proc/bin/capdump3; \
	cd /database/proc/bin; \
	[ -f capdump ] && rm -f capdump; \
	ln -s /database/proc/bin/capdump3 /database/proc/bin/capdump

.PHONY: clean
clean: 
	-$(RM) *.o *.a $(ALL) *~ core a.out
