| 
									
										
										
										
											2004-04-14 19:14:13 +00:00
										 |  |  | # Makefile for the plustek scanner driver (kernel-module)
 | 
					
						
							|  |  |  | #
 | 
					
						
							|  |  |  | ###############################################################################
 | 
					
						
							|  |  |  | #
 | 
					
						
							|  |  |  | # define the directories
 | 
					
						
							|  |  |  | #
 | 
					
						
							|  |  |  | HOME_DIR := . | 
					
						
							|  |  |  | SRC_DIR  := $(HOME_DIR) | 
					
						
							|  |  |  | INC_DIR  := $(SRC_DIR) | 
					
						
							|  |  |  | OBJ_DIR  := $(HOME_DIR)/obj | 
					
						
							|  |  |  | DOC_DIR  := $(HOME_DIR)/doc | 
					
						
							|  |  |  | BACKEND  := $(SRC_DIR) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #
 | 
					
						
							|  |  |  | # define the used tools
 | 
					
						
							|  |  |  | #
 | 
					
						
							|  |  |  | MD  = mkdir -p | 
					
						
							|  |  |  | CC  = gcc | 
					
						
							|  |  |  | TAR = tar | 
					
						
							|  |  |  | REF = cxref | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #
 | 
					
						
							|  |  |  | # Comment/uncomment the following line to disable/enable debugging
 | 
					
						
							|  |  |  | # can also be set by commandline parameter: make all DEBUG=y
 | 
					
						
							|  |  |  | #
 | 
					
						
							|  |  |  | #DEBUG = y
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #
 | 
					
						
							|  |  |  | # common compiler options
 | 
					
						
							|  |  |  | #
 | 
					
						
							| 
									
										
										
										
											2004-07-16 11:32:04 +00:00
										 |  |  | OPT = -fomit-frame-pointer -D_PTDRV_VERSTR=\"$(VERSIONSTR)\" | 
					
						
							| 
									
										
										
										
											2004-04-14 19:14:13 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | #
 | 
					
						
							|  |  |  | # cxref options
 | 
					
						
							|  |  |  | #
 | 
					
						
							|  |  |  | REFOPT = -xref-all -index-all -html32 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #
 | 
					
						
							|  |  |  | # Comment out if you are not running SMP. Someone take this out of here
 | 
					
						
							|  |  |  | # when the SMP stuff gets moved out of the kernel Makefile.
 | 
					
						
							|  |  |  | # SMP = 1
 | 
					
						
							|  |  |  | # SMP_PROF = 1
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #
 | 
					
						
							|  |  |  | # add the following to get assembly listing
 | 
					
						
							|  |  |  | # -Wa,-alh,-L -g 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #
 | 
					
						
							|  |  |  | # get some version numbers
 | 
					
						
							|  |  |  | #
 | 
					
						
							|  |  |  | ifeq ($(LINUXVERSION),) | 
					
						
							|  |  |  |  LINUXVERSION = $(shell uname -r) | 
					
						
							|  |  |  | endif | 
					
						
							| 
									
										
										
										
											2004-07-16 11:32:04 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | VERSIONSTR = $(shell grep "define BACKEND_VERSION" $(SRC_DIR)/plustek_pp.c | cut -b25-50 ) | 
					
						
							| 
									
										
										
										
											2004-04-14 19:14:13 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | # Change it here or specify it on the "make" commandline
 | 
					
						
							|  |  |  | ifeq ($(HEADER_PATH),) | 
					
						
							|  |  |  | MACHTYPE = $(shell env | grep debian-linux | wc -l | sed 's/ //g') | 
					
						
							|  |  |  | ifeq ($(MACHTYPE),1) | 
					
						
							|  |  |  | #  debian
 | 
					
						
							|  |  |  |   HEADER_PATH = /usr/src/kernel-headers-$(LINUXVERSION)/include | 
					
						
							|  |  |  | else | 
					
						
							|  |  |  | #  redhat, slackware
 | 
					
						
							|  |  |  |   HEADER_PATH = /usr/src/linux/include | 
					
						
							|  |  |  | endif | 
					
						
							|  |  |  | #   HEADER_PATH = /usr/include
 | 
					
						
							|  |  |  | endif | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ifeq ($(DEBUG),y) | 
					
						
							|  |  |  |   DEBFLAGS = -O -g -DDEBUG # "-O" is needed to expand inlines | 
					
						
							|  |  |  | else | 
					
						
							|  |  |  |   DEBFLAGS = -O2 | 
					
						
							|  |  |  | endif | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #
 | 
					
						
							|  |  |  | # the new style reference
 | 
					
						
							|  |  |  | #
 | 
					
						
							|  |  |  | K24_HEADER_PATH = /lib/modules/$(LINUXVERSION)/build/include | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #
 | 
					
						
							|  |  |  | # try to autodetect if we can use the new style header include references
 | 
					
						
							|  |  |  | #
 | 
					
						
							|  |  |  | KERNEL_HEADERS = $(shell if test -d $(K24_HEADER_PATH); then \
 | 
					
						
							|  |  |  | 							echo $(K24_HEADER_PATH); 		 \
 | 
					
						
							|  |  |  | 				 	     else 								 \
 | 
					
						
							|  |  |  | 							echo $(HEADER_PATH); 			 \
 | 
					
						
							|  |  |  | 					     fi; ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #
 | 
					
						
							|  |  |  | # seems to be necessary for kernels 2.4.x
 | 
					
						
							|  |  |  | #
 | 
					
						
							|  |  |  | MODVERFILE = $(shell if [ -e $(KERNEL_HEADERS)/linux/modversions.h ]; then \
 | 
					
						
							|  |  |  | 						echo $(KERNEL_HEADERS)/linux/modversions.h ;	   \
 | 
					
						
							|  |  |  | 					 else											       \
 | 
					
						
							|  |  |  | 						echo $(KERNEL_HEADERS)/linux/modsetver.h ;		   \
 | 
					
						
							|  |  |  | 					 fi ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | MODFLAGS = -DMODULE | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #
 | 
					
						
							|  |  |  | # set MODVERSIONS if the kernel uses it
 | 
					
						
							|  |  |  | #
 | 
					
						
							|  |  |  | VERSUSED = $(shell grep 'define CONFIG_MODVERSIONS' \
 | 
					
						
							|  |  |  |                    $(KERNEL_HEADERS)/linux/autoconf.h | wc -l | sed 's/ //g') | 
					
						
							|  |  |  | ifeq ($(VERSUSED),1) | 
					
						
							|  |  |  |   MODFLAGS += -DMODVERSIONS -include $(MODVERFILE) | 
					
						
							|  |  |  | endif | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | WARNFLAGS = -Wall -Wstrict-prototypes | 
					
						
							|  |  |  | CFLAGS    = $(WARNFLAGS) $(OPT) -D__KERNEL__ -I$(KERNEL_HEADERS) -I$(INC_DIR) -I$(BACKEND) $(DEBFLAGS) $(MODFLAGS) | 
					
						
							|  |  |  | MODLIB    = /lib/modules/$(LINUXVERSION) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ifdef SMP | 
					
						
							|  |  |  | CFLAGS += -D__SMP__ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ifdef SMP_PROF | 
					
						
							|  |  |  | CFLAGS += -D__SMP_PROF__ | 
					
						
							|  |  |  | endif | 
					
						
							|  |  |  | endif | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TARGET = pt_drv | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | OBJ  = $(TARGET).o | 
					
						
							|  |  |  | NAMES := dac detect genericio image map misc models io procfs | 
					
						
							|  |  |  | NAMES := $(NAMES) motor p9636 ptdrv scale tpa p48xx p12 p12ccd | 
					
						
							|  |  |  | NAMES := $(addprefix plustek-pp_, $(NAMES)) | 
					
						
							|  |  |  | SRCS  := $(addprefix $(SRC_DIR)/, $(NAMES)) | 
					
						
							|  |  |  | SRCS  := $(addsuffix .c, $(SRCS)) | 
					
						
							|  |  |  | OBJS  := $(addprefix $(OBJ_DIR)/, $(NAMES)) | 
					
						
							|  |  |  | OBJS  := $(addsuffix .o, $(OBJS)) | 
					
						
							|  |  |  | INCS  := scan dbg types scandata procs hwdefs sysdep | 
					
						
							|  |  |  | INCS  := $(addsuffix .h, $(INCS)) | 
					
						
							|  |  |  | HDRS  = $(addprefix $(INC_DIR)/plustek-pp_, $(INCS)) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #
 | 
					
						
							|  |  |  | # the header files we need from the backend
 | 
					
						
							|  |  |  | #
 | 
					
						
							|  |  |  | BACKINCS := plustek-pp.h | 
					
						
							|  |  |  | BACKINCS := $(addprefix $(BACKEND)/, $(BACKINCS)) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | group = "root" | 
					
						
							|  |  |  | mode  = "644" | 
					
						
							|  |  |  | INST_DIR = /lib/modules/$(LINUXVERSION)/kernel/drivers/char | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | info: | 
					
						
							|  |  |  | 	@clear | 
					
						
							|  |  |  | 	@echo "Makefile to create the Plustek-Scanner kernel-module:" | 
					
						
							|  |  |  | 	@echo "all          ... builds the module" | 
					
						
							|  |  |  | 	@echo "all DEBUG=y  ... builds the module with debug-messages enabled" | 
					
						
							|  |  |  | 	@echo "clean        ... cleans up the show" | 
					
						
							|  |  |  | 	@echo "install      ... installs the module to the library path" | 
					
						
							|  |  |  | 	@echo "uninstall    ... removes the module from the library path" | 
					
						
							|  |  |  | 	@echo "load         ... tries to load the module and creates device nodes" | 
					
						
							|  |  |  | 	@echo "unload       ... unloads the module" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | all: .depend chkdir $(OBJ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #
 | 
					
						
							|  |  |  | # create object directory
 | 
					
						
							|  |  |  | #
 | 
					
						
							|  |  |  | .PHONY : chkdir | 
					
						
							|  |  |  | chkdir: | 
					
						
							|  |  |  | 	@-$(MD) $(OBJ_DIR) | 
					
						
							|  |  |  | 	@-$(MD) $(DOC_DIR) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | $(OBJ): $(OBJS) | 
					
						
							|  |  |  | 	$(LD) -r $^ -o $@ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | $(OBJS): Makefile $(HDRS) $(BACKINCS) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | $(OBJ_DIR)/%.o : $(SRC_DIR)/%.c | 
					
						
							|  |  |  | 	$(CC) $(CFLAGS) -c $< -o $@ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | $(OBJ_DIR)/$(OBJ): VERSION1 VERSION0 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #
 | 
					
						
							|  |  |  | # copy the driver to the modules directory
 | 
					
						
							|  |  |  | #
 | 
					
						
							|  |  |  | install: | 
					
						
							|  |  |  | 	mkdir -p $(INST_DIR) | 
					
						
							|  |  |  | 	install -c -m $(mode) $(OBJ) $(INST_DIR) | 
					
						
							|  |  |  | 	/sbin/depmod -a | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #
 | 
					
						
							|  |  |  | # remove it
 | 
					
						
							|  |  |  | #
 | 
					
						
							|  |  |  | uninstall: | 
					
						
							|  |  |  | 	rm -f $(INST_DIR)/$(OBJ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #
 | 
					
						
							|  |  |  | # use modprobe to load the driver, remember to set the
 | 
					
						
							|  |  |  | # parameter in /etc/modules.conf (see sane-plustek_pp.man for more details)
 | 
					
						
							|  |  |  | #
 | 
					
						
							|  |  |  | load:   $(INST_DIR)/$(OBJ) | 
					
						
							|  |  |  | # invoke modprobe with all arguments we got
 | 
					
						
							|  |  |  | 	/sbin/modprobe $(TARGET) || exit 1 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # Remove stale nodes and replace them, then give gid and perms
 | 
					
						
							|  |  |  | 	rm -f /dev/$(TARGET)* | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # when using the devfs support, we check the /dev/scanner entries
 | 
					
						
							|  |  |  | # and only create links to the devfs nodes
 | 
					
						
							|  |  |  | # at least we create one link
 | 
					
						
							|  |  |  | 	@if [ -e /dev/scanner/$(TARGET)* ]; then 				\
 | 
					
						
							|  |  |  | 		ln -s /dev/scanner/$(TARGET)0 /dev/$(TARGET);		\
 | 
					
						
							|  |  |  | 		for name in `ls /dev/scanner | grep $(TARGET)`; do	\
 | 
					
						
							|  |  |  | 			ln -s /dev/scanner/$$name /dev/$$name ;     	\
 | 
					
						
							|  |  |  | 		done												\
 | 
					
						
							|  |  |  | 	else                      								\
 | 
					
						
							|  |  |  | 		mknod /dev/$(TARGET) c `cat /proc/devices | sed -ne "s/\([0-9]*\) pt_drv/\1/p"` 0;  \
 | 
					
						
							|  |  |  | 		mknod /dev/$(TARGET)0 c `cat /proc/devices | sed -ne "s/\([0-9]*\) pt_drv/\1/p"` 0;	\
 | 
					
						
							|  |  |  | 		mknod /dev/$(TARGET)1 c `cat /proc/devices | sed -ne "s/\([0-9]*\) pt_drv/\1/p"` 1;	\
 | 
					
						
							|  |  |  | 		mknod /dev/$(TARGET)2 c `cat /proc/devices | sed -ne "s/\([0-9]*\) pt_drv/\1/p"` 2; \
 | 
					
						
							|  |  |  | 		mknod /dev/$(TARGET)3 c `cat /proc/devices | sed -ne "s/\([0-9]*\) pt_drv/\1/p"` 3;	\
 | 
					
						
							|  |  |  | 																							\
 | 
					
						
							|  |  |  | 		chgrp $(group) /dev/$(TARGET)*;	\
 | 
					
						
							|  |  |  | 		chmod $(mode)  /dev/$(TARGET)*;	\
 | 
					
						
							|  |  |  | 	fi | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #
 | 
					
						
							|  |  |  | # unload the driver
 | 
					
						
							|  |  |  | #
 | 
					
						
							|  |  |  | unload: | 
					
						
							|  |  |  | 	/sbin/modprobe -r $(TARGET) || exit 1 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # Remove stale nodes
 | 
					
						
							|  |  |  | 	rm -f /dev/$(TARGET)* | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #
 | 
					
						
							|  |  |  | # create reference docu
 | 
					
						
							|  |  |  | #
 | 
					
						
							|  |  |  | doc: chkdir | 
					
						
							|  |  |  | 	$(REF) $(REFOPT) $(INC_DIR)/*.h $(SRC_DIR)/*.c $(BACKEND)/plustek-share.h \
 | 
					
						
							|  |  |  |     -D__KERNEL__ -I$(KERNEL_HEADERS) -I$(INC_DIR) -I$(BACKEND) $(MODFLAGS) \
 | 
					
						
							|  |  |  |     -D_PTDRV_V1=$(VERSION1) -D_PTDRV_V0=$(VERSION0) -D_PTDRV_BUILD=$(BUILD) -O$(DOC_DIR) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | clean: | 
					
						
							|  |  |  | 	@-rm -f $(OBJ_DIR)/*.o .depend depend dep $(REF).* *.html $(TARGET).o | 
					
						
							|  |  |  | 	@-rm -rf $(OBJ_DIR) | 
					
						
							|  |  |  | 	@-rm -rf $(DOC_DIR) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | depend .depend dep: | 
					
						
							|  |  |  | 	$(CC) $(CFLAGS) -M $(SRCS) > $@ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ifeq (.depend,$(wildcard .depend)) | 
					
						
							|  |  |  | #include .depend
 | 
					
						
							|  |  |  | endif | 
					
						
							|  |  |  | 
 |