###########################################################################
#
#
#       Makefile  --  Smart Link Soft Modem product Makefile.
#
#       Copyright (C) 2001
#          Smart Link Ltd. (www.smlink.com)
#
#       Author: Sasha K (sashak@smlink.com)
#
#
###########################################################################
#
###########################################################################


# Tools
CC      := gcc
LD      := ld
INSTALL := install
DEPMOD  := /sbin/depmod
MODPROBE:= /sbin/modprobe
RM      := rm
LN      := ln
SED     := sed
GREP    := grep
CP      := cp
MKNOD   := mknod

# debug mode options /* off */
# DEBUG:=0
-include debug.mk

# Definitions
MODULES_DIR  = /lib/modules/$(shell ./kernel-ver)/misc
MODEM_DEV   := ttySL0
MODEM_LINK  := modem
MODULES_CONF:= /etc/modules.conf

# Path to your kernel's includes
ifndef KERNEL_INCLUDES
 KERNEL_INCLUDES:= /usr/src/linux/include
endif

INCLUDES := -I. -I$(KERNEL_INCLUDES) 

ifndef MODVERSIONS_FLAGS
 MODVERSIONS_FLAGS= -DMODVERSIONS --include $(KERNEL_INCLUDES)/linux/modversions.h
endif


# C FLAGS
CFLAGS:= -Wall -O3 -fomit-frame-pointer -D__KERNEL__ -DMODULE -DEXPORT_SYMTAB $(INCLUDES) $(MODVERSIONS_FLAGS)
#CFLAGS:= -Wall -O3 -fomit-frame-pointer -DMODEM_DEBUG=$(DEBUG) -D__KERNEL__ -DMODULE -DEXPORT_SYMTAB $(INCLUDES) $(MODVERSIONS_FLAGS)
ifdef DEBUG
CFLAGS += -DMODEM_DEBUG=$(DEBUG)
endif
LFLAGS=

SLMDM := slmdm.o
SLAMR := slamrmo.o
SLUSB := slusb.o
SLFAX := slfax.o

ALL_MODULES := $(SLAMR) $(SLUSB) $(SLMDM) $(SLFAX)
ALL_TARGETS := $(ALL_MODULES)

SLAMR_OBJ := amrmo.o
SLUSB_OBJ := usb.o
SLMDM_OBJ := mdm.o
SLFAX_OBJ := fax.o

MDM_OBJS        := mdm_init.o mdm_sltty.o mdm_params.o
FAX_OBJS        := fax_init.o
AMR_OBJS        := amrmo_init.o
USB_OBJS        := usb_st7554.o
CUSTOM_OBJ      := editme.o
SYSDEP_OBJ      := sysdep.o
SYSDEP_LINUX_OBJ:= sysdep_linux.o
SYSDEP_PCI_OBJ  := sysdep_pci.o


all: $(ALL_TARGETS) kernel-ver

$(SLAMR): $(SLAMR_OBJ) $(AMR_OBJS) $(SYSDEP_PCI_OBJ)
$(SLUSB): $(SLUSB_OBJ) $(USB_OBJS)
$(SLMDM): $(SLMDM_OBJ) $(MDM_OBJS) $(CUSTOM_OBJ) $(SYSDEP_OBJ) $(SYSDEP_LINUX_OBJ)
$(SLFAX): $(SLFAX_OBJ) $(FAX_OBJS)

$(ALL_MODULES): 
	$(LD) -r -o $@ $^

kernel-ver: kernel-ver.o

install-amr: install config-amr
install-usb: install config-usb

install: kernel-ver all
	$(INSTALL) -D -m 644 slmdm.o $(prefix_dir)/$(MODULES_DIR)/slmdm.o
	$(INSTALL) -D -m 644 slfax.o $(prefix_dir)/$(MODULES_DIR)/slfax.o
	$(INSTALL) -D -m 644 slamrmo.o $(prefix_dir)/$(MODULES_DIR)/slamrmo.o
	$(INSTALL) -D -m 644 slusb.o $(prefix_dir)/$(MODULES_DIR)/slusb.o
	$(INSTALL) -D -m 755 country.dat $(prefix_dir)/etc/country.dat
	$(INSTALL) -d $(prefix_dir)/dev
	$(RM) -f $(prefix_dir)/dev/$(MODEM_DEV)
	$(MKNOD) -m 666  $(prefix_dir)/dev/$(MODEM_DEV) c 212 0
	$(LN) -sf ./$(MODEM_DEV)  $(prefix_dir)/dev/$(MODEM_LINK)

uninstall: kernel-ver cleanup-config unload-modules
	$(RM) -f $(prefix_dir)/$(MODULES_DIR)/slmdm.o
	$(RM) -f $(prefix_dir)/$(MODULES_DIR)/slfax.o
	$(RM) -f $(prefix_dir)/$(MODULES_DIR)/slamrmo.o
	$(RM) -f $(prefix_dir)/$(MODULES_DIR)/slusb.o
	$(RM) -f $(prefix_dir)/etc/country.dat
	$(RM) -f $(prefix_dir)/var/lib/slmdm.data
	$(RM) -f $(prefix_dir)/dev/$(MODEM_DEV)
	$(RM) -f $(prefix_dir)/dev/$(MODEM_LINK)

config-usb: config
	$(CP) $(MODULES_CONF) $(MODULES_CONF).slmdm && \
	  $(SED) -e 's/^alias slmodem .*$$/alias slmodem slusb/' $(MODULES_CONF).slmdm > $(MODULES_CONF)
	-$(DEPMOD) -a

config-amr: config
	$(CP) $(MODULES_CONF) $(MODULES_CONF)\.slmdm && \
	  $(SED) -e 's/^alias slmodem .*$$/alias slmodem slamrmo/' $(MODULES_CONF).slmdm > $(MODULES_CONF)
	-$(DEPMOD) -a

config: cleanup-config
	-$(CP) $(MODULES_CONF) $(MODULES_CONF).slmdm
	echo 'alias char-major-212 slmodem' >> $(MODULES_CONF)
	echo 'alias slmodem off' >> $(MODULES_CONF)

cleanup-config: unload-modules
	-$(CP) $(MODULES_CONF) $(MODULES_CONF).slmdm && \
	  $(GREP) -v 'slmodem' $(MODULES_CONF).slmdm > $(MODULES_CONF)
	-$(DEPMOD) -a

unload-modules:
	-$(MODPROBE) -r slusb
	-$(MODPROBE) -r slamrmo
	-$(MODPROBE) -r slfax
	-$(MODPROBE) -r slmdm

spec-file-lists: slmdm.modules slamr.modules slusb.modules

%.modules: kernel-ver
	@echo "build modules list spec file $@..."
	$(SED) -e 's/%modules_dir/$(subst /,\/,$(MODULES_DIR))/' $@-dist > $@

clean:
	$(RM) -f $(ALL_TARGETS) $(MDM_OBJS) $(FAX_OBJS) $(AMR_OBJS) $(USB_OBJS) $(CUSTOM_OBJ) $(SYSDEP_OBJ) $(SYSDEP_LINUX_OBJ) $(SYSDEP_PCI_OBJ) kernel-ver kernel-ver.o
	$(RM) -f *.modules

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

dep:
	$(CC) -M -c $(CFLAGS) *.c > .depend
-include .depend

