VERSION = 0.13a

KERNEL_VERSION = $(shell uname -r)

KERNEL_SRC = /lib/modules/$(KERNEL_VERSION)/build
KERNEL_HEADERS = $(KERNEL_SRC)/include

MODULES = hermes.o orinoco.o orinoco_cs.o orinoco_plx.o orinoco_pci.o nortel_pci.o
ifeq ($(shell uname -m),ppc)
MODULES += airport.o
endif

SRCS = hermes.c \
	orinoco.c \
	airport.c orinoco_cs.c orinoco_plx.c orinoco_pci.c nortel_pci.c \
	userhermes.c
HDRS = hermes.h hermes_rid.h ieee802_11.h orinoco.h
CONF = hermes.conf

MODULE_DIR_TOP = /lib/modules/$(KERNEL_VERSION)
MODULE_DIR_PCMCIA = $(MODULE_DIR_TOP)/pcmcia
MODULE_DIR_WIRELESS = $(MODULE_DIR_TOP)/kernel/drivers/net/wireless
CONF_DIR = /etc/pcmcia
CPPFLAGS = -D__KERNEL__ -DPCMCIA_DEBUG=1 \
	-DMODULE -DEXPORT_SYMTAB \
	-I$(KERNEL_HEADERS)
CFLAGS = -O2 -Wall -Wstrict-prototypes -pipe

MODVER = $(shell if cat $(KERNEL_HEADERS)/linux/autoconf.h 2>/dev/null | \
grep -q '^[[:space:]]*\#define[[:space:]]*CONFIG_MODVERSIONS[[:space:]]*1'; \
then echo 1; else echo 0; fi)

ifeq ($(MODVER),1)
MFLAG = -DMODVERSIONS -include $(KERNEL_HEADERS)/linux/modversions.h
endif

CCDEP = $(CC) $(CFLAGS) -M
TAR = tar

DISTFILES = $(SRCS) $(HDRS) $(CONF) Makefile README.orinoco
TOPDISTFILES = README.orinoco $(CONF)
DISTNAME = orinoco-$(VERSION)
DISTDIR = ../dist
PUSH_WWW = push-www.sh

all: $(MODULES)

userhermes: userhermes.c
	$(CC) $(CFLAGS) -lhistory -lreadline -lncurses -o $@ $<

bufparse: bufparse.c
	$(CC) $(CFLAGS) -o $@ $<

TAGS:
	rm -f TAGS
	find $(KERNEL_SRC)/ -name '*.[ch]' | xargs etags --append
	etags --append $(SRCS) $(HDRS)

install: all
	mkdir -p $(MODULE_DIR_WIRELESS)
	for f in $(MODULES); do \
	    if test -e $(MODULE_DIR_PCMCIA)/$$f; then \
		install -m 644 -o 0 -g 0 $$f $(MODULE_DIR_PCMCIA)/$$f; \
	    else \
		install -m 644 -o 0 -g 0 $$f $(MODULE_DIR_WIRELESS)/$$f; \
	    fi; \
	done
	if [ -d $(CONF_DIR) ]; then install -m 644 -o 0 -g 0 $(CONF) $(CONF_DIR)/$(CONF); fi
	depmod -a

uninstall:
	for f in $(MODULES); do \
	    rm -f $(MODULE_DIR_PCMCIA)/$$f; \
	    rm -f $(MODULE_DIR_WIRELESS)/$$f; \
	done
	rm -f $(CONF_DIR)/$(CONF)

clean:
	rm -f core *.o *~ a.out *.d
	rm -f *.s *.i userhermes bufparse

.PHONY: dist

releasecheck: all clean
	./releasecheck.sh $(VERSION)

newrelease: dist releasecheck
	mkdir $(DISTDIR)/$(DISTNAME)
	cp $(DISTFILES) $(DISTDIR)/$(DISTNAME)
	cd $(DISTDIR); $(TAR) cvfz $(DISTNAME).tar.gz $(DISTNAME)


dist:
	rsync -av -C --exclude=*.d --delete-excluded ./ $(DISTDIR)/testing/
	cp $(TOPDISTFILES) $(DISTDIR)

push: dist
	$(PUSH_WWW)

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

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

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

-include $(SRCS:%.c=%.d)
