KVERS ?= $(shell uname -r)
KERNEL_PATH ?= /lib/modules/$(KVERS)/build
INCLUDES=-I$(KERNEL_PATH)/include
INSTDIR = /lib/modules/$(KVERS)/kernel/net/sched

CC = gcc

PWD = $(shell pwd)

KERNEL_VERSION = $(shell sed -ne 's/"//g;s/^\#define UTS_RELEASE //p' \
		 $(KERNEL_PATH)/include/linux/version.h)

INSTDIR = /lib/modules/$(KVERS)/kernel/net/sched
		 
DOT_CONFIG = $(wildcard $(KERNEL_PATH)/.config)
ifeq (,$(DOT_CONFIG))
$(error The kernel source is not configured)
endif

include $(DOT_CONFIG)

ifndef CONFIG_NET_SCHED
$(error Network scheduling are not enabled)
endif

OLDMAKE = $(filter 2.4%, $(KERNEL_VERSION))

MODULES = sch_srr.o

ifeq (,$(OLDMAKE))

obj-m += $(MODULES)

CFLAGS += -DKERNEL26

all: 2.6
install: install_2.6
clean: clean_2.6

else

CPPFLAGS = -D__KERNEL__ -DMODULE $(INCLUDES)
CFLAGS = -O2 -Wall -Wstrict-prototypes -fno-strict-aliasing -fno-common \
	-pipe $(EXTRACFLAGS)

ifdef CONFIG_MODVERSIONS
MFLAG = -DMODVERSIONS -include $(KERNEL_PATH)/include/linux/modversions.h
endif

SRCS = sch_srr.c

all: 2.4
install: install_2.4
clean: clean_2.4

endif

2.6:
	$(MAKE) -C $(KERNEL_PATH) SUBDIRS=$(PWD) modules

install_2.6:
	install -m 644 sch_srr.ko $(INSTDIR)
	depmod -ae

clean_2.6:
	rm -f sch_srr.ko
	rm -f .sch_srr.ko.cmd
	rm -f sch_srr.mod.c
	rm -f sch_srr.mod.o
	rm -f .sch_srr.mod.o.cmd
	rm -f sch_srr.o
	rm -f .sch_srr.o.cmd
	rm -rf .tmp_versions

2.4: $(MODULES)

install_2.4:
	install -m 644 sch_srr.o $(INSTDIR)
	depmod -ae

clean_2.4:
	rm -f sch_srr.d
	rm -f sch_srr.o

%.o: %.c
	$(CC) -MD $(CFLAGS) $(CPPFLAGS) $(MFLAG) -c $<

%.s: %.c
	$(CC) -MD $(CFLAGS) $(CPPFLAGS) -S $<

%.i: %.c
	$(CC) -MD $(CPPFLAGS) -E $< -o $@

ifneq (,$(OLDMAKE))
-include $(SRCS:%.c=%.d)
endif
