#This make file is written for Fedora VI

SUBDIRS = include driver utility xf86drv diag usb mousedev

MAKE_OPT = -s

##################################################################

TCL = $(shell which tcl 2>/dev/null)
TCLSH = $(shell which tclsh 2>/dev/null)

ifeq ($(TCL),)
ifeq ($(TCLSH),)
	EXEC := $(shell echo '(E) Tcl/Tk not installed' > /dev/tty)
	error stop
else
	TCL := $(shell echo $(TCLSH) | sed 's/tclsh/tcl/')
	EXEC := $(shell ln -s $(TCLSH) $(TCL))
endif
endif

#MODULE_HOME = $(shell find /lib/modules -name input -type d)
MODULE_HOME = /lib/modules

ifeq ($(MODULE_HOME),)
	MODULE_HOME = ""
endif

XMODULE_HOME = /usr/lib/xorg/modules/
XMODULE_CONF = /usr/share/X11/xorg.conf.d/

XINITRC_D = $(shell find /etc -type d -name xinit\*.d)

GLOBAL_SETTING := configSTR.mak
CMD := $(shell make -C include $(GLOBAL_SETTING))
ifneq ($(CMD),0)
	include include/$(GLOBAL_SETTING)
endif

GLOBAL_SETTING := configINT.mak
CMD := $(shell make -C include $(GLOBAL_SETTING))
ifneq ($(CMD),0)
	include include/$(GLOBAL_SETTING)
endif

PRJ_HOME = $($(PRJNAME)_HOME)
PRJ_UTILITY_HOME = $(PRJ_HOME)utility/
PRJ_INCLUDE_HOME = $(PRJ_HOME)include/
PRJ_IMAGE_HOME = $(PRJ_HOME)image/
PRJ_DIAG_HOME = $(PRJ_HOME)diag/

XMODULE = xf86$(MODULE_NAME).so
XDRIVER = $(XDRIVER_NAME)_drv.so

all: 
	for n in $(SUBDIRS); do				\
		$(MAKE) -C $$n || exit 1;		\
	done
	: '+-----------------------------------+'
	: '|  Build-All Complete Successfully  |'
	: '+-----------------------------------+'

clean:
	rm -f *.bak core DEADJOE
	Reverse="" ;					\
	for n in $(SUBDIRS); do			\
		Reverse="$$n $$Reverse" ; 	\
	done;							\
	echo $$Reverse;					\
	for n in $$Reverse; do			\
		$(MAKE) -C $$n clean;		\
	done

new: clean all

##################################################################

USB_PRESENT = $(shell test -d /sys/bus/usb; expr 1 - $$?) 

$(GLOGAL_SETTING):
	$(MAKE) -C $$n $@ || exit 1;

ifeq ($(shell whoami),root)

install:
	@make $(MAKE_OPT) _install

uninstall: $(PRJ_HOME)Makefile
	@make $(MAKE_OPT) _uninstall

else

install:
	:
	: You must have root privilege to do this
	:
		
uninstall:
	:
	: You must have root privilege to do this
	:

endif

DIRECTORY = $(PRJ_HOME) $(PRJ_INCLUDE_HOME) $(PRJ_UTILITY_HOME) \
			$(PRJ_DIAG_HOME) $(PRJ_IMAGE_HOME)

UNINSTALL = uninstall_$(PRJNAME)
	
_install:
	for n in $(DIRECTORY) ; do					\
		: echo "(*) Create directory [$$n]";	\
		if [ ! -d $$n ] ; then					\
			mkdir $$n || exit 1;				\
		fi;										\
	done
	:
	cp -f include/configSTR.tcl include/configINT.tcl \
			include/configSTR.mak include/configINT.mak \
			include/touch.tcl \
			$(PRJ_INCLUDE_HOME)
	:
	if [ $(USB_PRESENT) -eq 1 ] ; then             			\
		rm -f $(USBPORT)* ;					\
		i=0; while [ $$i -lt $(SCR_MAX_MNR) ] ; do		\
			mknod $(USBPORT)$$i c 13 `expr $(SCR_BASE_MNR) + $$i`;	\
			i=`expr $$i + 1`;					\
		done;								\
		if [ -f usb/utouchkit.ko ] ; then					\
			cp -f usb/utouchkit.ko $(MODULE_HOME)/$(USBMODULE_NAME).ko ;	\
		fi;								\
	fi
	:
	echo "(*) Install touch panel daemon [/usr/bin/$(TPANELD_NAME)]"
	if [ ! -d $($(PRJNAME)_ROMHOME) ] ; then			\
		mkdir $($(PRJNAME)_ROMHOME);					\
	fi
	cp -f driver/tpaneld $(PRJ_HOME)$(TPANELD_NAME)
	cp -f driver/tpaneld-restart.sh $(PRJ_HOME)/tpaneld-restart.sh
	chmod 4755 $(PRJ_HOME)$(TPANELD_NAME)
	chmod 4755 $(PRJ_HOME)/tpaneld-restart.sh
	rm -f /usr/bin/$(TPANELD_NAME)
	ln -s $(PRJ_HOME)$(TPANELD_NAME) /usr/bin/
	if [ "$(XINITRC_D)" != "" ] ; then				\
		echo "#!/bin/sh" > $(XINITRC_D)/$(TPANELD_NAME).sh; 	\
 		echo "/bin/mknod /dev/Serial_Port_0 c 4 64" >> $(XINITRC_D)/$(TPANELD_NAME).sh;   \
                echo "/bin/mknod /dev/Serial_Port_1 c 4 65" >> $(XINITRC_D)/$(TPANELD_NAME).sh;   \
                echo "/bin/mknod /dev/Serial_Port_2 c 4 66" >> $(XINITRC_D)/$(TPANELD_NAME).sh;   \
                echo "/bin/mknod /dev/Serial_Port_3 c 4 67" >> $(XINITRC_D)/$(TPANELD_NAME).sh;   \
                echo "/bin/mknod /dev/Serial_Port_4 c 4 68" >> $(XINITRC_D)/$(TPANELD_NAME).sh;   \
                echo "/bin/mknod /dev/Serial_Port_5 c 4 69" >> $(XINITRC_D)/$(TPANELD_NAME).sh;   \
                echo "/bin/mknod /dev/USB_Port_0 c 13 192" >> $(XINITRC_D)/$(TPANELD_NAME).sh;   \
                echo "/bin/mknod /dev/USB_Port_1 c 13 193" >> $(XINITRC_D)/$(TPANELD_NAME).sh;   \
                echo "/bin/mknod /dev/utouchkit0 c 13 192" >> $(XINITRC_D)/$(TPANELD_NAME).sh;   \
                echo "/bin/mknod /dev/utouchkit1 c 13 193" >> $(XINITRC_D)/$(TPANELD_NAME).sh;   \
                echo "/sbin/insmod /lib/modules/2.6.15-1.2054_FC5/kernel/drivers/input/misc/pcspkr.ko &" >> $(XINITRC_D)/$(TPANELD_NAME).sh;  \
		echo "/sbin/insmod /lib/modules/utouchkit.ko &" >> $(XINITRC_D)/$(TPANELD_NAME).sh;   \
		echo "sleep 2" >> $(XINITRC_D)/$(TPANELD_NAME).sh;   \
		echo "/usr/bin/$(TPANELD_NAME) -f &" >> $(XINITRC_D)/$(TPANELD_NAME).sh; 	\
		chmod 755 $(XINITRC_D)/$(TPANELD_NAME).sh;					\
	else																	\
	#	pushd . > /dev/null;												\
		cd;																	\
		home=`pwd`;															\
	#	popd > /dev/null;													\
		if [ ! -f $$home/.Xclients.bak.tp ] ; then							\
			cp -f $$home/.Xclients $$home/.Xclients.bak.tp;					\
		fi;																	\
		echo "/usr/bin/$(TPANELD_NAME) &" > $$home/.Xclients;				\
		if [ -f $$home/.Xclients.bak.tp ] ; then							\
			cat $$home/.Xclients.bak.tp >> $$home/.Xclients;				\
		fi;																	\
	fi
	:
	echo "(*) Install configuration utility [/usr/bin/$(TOUCHKIT_NAME)]"
	cp -f utility/PanelInfo utility/library.tcl			\
			utility/rclocal.tcl utility/xf86cfg.tcl		\
			utility/xversion.tcl utility/shortcut.tcl	\
			utility/WriteConf $(PRJ_UTILITY_HOME) 
	chmod 4755 $(PRJ_UTILITY_HOME)PanelInfo $(PRJ_UTILITY_HOME)WriteConf
	cp -f image/* $(PRJ_IMAGE_HOME)
	cp -f diag/*.t?? $(PRJ_DIAG_HOME)
	cp -f diag/drawtest $(PRJ_DIAG_HOME)$(DRAW_NAME)
	cp -f diag/4pcal $(PRJ_DIAG_HOME)$(_4PCAL_NAME)
	chmod 4755 $(PRJ_DIAG_HOME)$(DRAW_NAME)  \
					$(PRJ_DIAG_HOME)$(_4PCAL_NAME)
	:
	: Generate $(TOUCHKIT_NAME)
	echo "#!/bin/sh" > $(PRJ_HOME)$(TOUCHKIT_NAME)
	echo "echo puts [catch {wm withdraw .}]\; exit > /tmp/exit_test" >> $(PRJ_HOME)$(TOUCHKIT_NAME)
	echo "rval=\`wish /tmp/exit_test \$$* 2>&1\`" >> $(PRJ_HOME)$(TOUCHKIT_NAME)
	echo "rm -f /tmp/exit_test" >> $(PRJ_HOME)$(TOUCHKIT_NAME)
	: echo "echo \$$rval" >> $(PRJ_HOME)$(TOUCHKIT_NAME)
	echo "if [ \"\$$rval\" == 0 ] ; then" >> $(PRJ_HOME)$(TOUCHKIT_NAME)
	echo "	exec $(PRJ_DIAG_HOME)touchkit.tcl $(PRJ_HOME) \$$*" >> $(PRJ_HOME)$(TOUCHKIT_NAME)
	echo "else" >> $(PRJ_HOME)$(TOUCHKIT_NAME)
	echo "	echo can not open display" >> $(PRJ_HOME)$(TOUCHKIT_NAME)
	echo "fi" >> $(PRJ_HOME)$(TOUCHKIT_NAME)
	chmod 755 $(PRJ_HOME)$(TOUCHKIT_NAME)
	: Generation OK
	:
	rm -f /usr/bin/$(TOUCHKIT_NAME)
	ln -s $(PRJ_HOME)$(TOUCHKIT_NAME) /usr/bin
	:
	if [ 430 -lt 400 ] ; then						\
		echo "(*) Install XFree86 driver [$(XMODULE_HOME)input/$(XDRIVER)]";\
		cp -f xf86drv/bin/touchkit_drv.so $(XMODULE_HOME)input/$(XDRIVER);\
		chmod 755 $(XMODULE_HOME)input/$(XDRIVER);\
	else																\
		echo "(*) Install XFree86 driver [$(XMODULE_HOME)input/$(XDRIVER)]";\
		cp -f xf86drv/bin/touchkit_drv.so $(XMODULE_HOME)input/$(XDRIVER);\
		chmod 755 $(XMODULE_HOME)input/$(XDRIVER);						\
	fi
	:
	# Need shortcut for TOUCHCFG?
	:
	echo "(*) Generate uninstall script [/usr/bin/$(UNINSTALL)]"
	echo '#!/bin/sh'							> $(PRJ_HOME)$(UNINSTALL)
	echo 'echo ===== $(PRJNAME) Uninstaller =====' >> $(PRJ_HOME)$(UNINSTALL)
	echo 'printf "Are you sure to remove driver and utility? (Y)es/(N)o [N]"' >> $(PRJ_HOME)$(UNINSTALL)
	echo 'read cmd'								>> $(PRJ_HOME)$(UNINSTALL)
	echo 'case $$cmd in'						>> $(PRJ_HOME)$(UNINSTALL)
	echo '	[yY]|[yY][eE][sS]) :;;'				>> $(PRJ_HOME)$(UNINSTALL)
	echo '	*) exit 0;;'						>> $(PRJ_HOME)$(UNINSTALL)
	echo 'esac'									>> $(PRJ_HOME)$(UNINSTALL)
	echo 'cd /'									>> $(PRJ_HOME)$(UNINSTALL)
	echo 'make -C $(PRJ_HOME) -s uninstall'	>> $(PRJ_HOME)$(UNINSTALL)
	echo 'ln -f -s /etc/alternatives/x-cursor-theme /usr/share/icons/default/index.theme'  >> $(PRJ_HOME)$(UNINSTALL)
	: Generation OK
	chmod 754 $(PRJ_HOME)$(UNINSTALL)
	rm -rf /usr/bin/$(UNINSTALL)
	ln -s $(PRJ_HOME)$(UNINSTALL) /usr/bin/$(UNINSTALL)
	cp -f Makefile $(PRJ_HOME)
	:
	: update starting up scripts
	tcl utility/rclocal.tcl
	#tcl utility/xf86cfg.tcl
	cp -f xf86drv/02-touchkit.conf $(XMODULE_CONF)
	:
	: create desktop shortcuts for KDE and GNome
	tcl utility/shortcut.tcl $(PRJ_IMAGE_HOME)
	:
	echo "+--------------------------------------+"
	echo "|  Installation Complete Successfully  |"
	echo "+--------------------------------------+"

		
_uninstall:
	tcl utility/rclocal.tcl remove
	#tcl utility/xf86cfg.tcl remove
	rm -f $(XMODULE_CONF)/02-touchkit.conf
	:
	echo "(*) Uninstall touch panel daemon [/usr/bin/$(TPANELD_NAME)]"
	killall -KILL $(TPANELD_NAME) 2> /dev/null || true
	rm -f /usr/bin/$(TPANELD_NAME)
	rm -f  $($(PRJNAME)_CMDIN) $($(PRJNAME)_CMDOUT) 	\
			$($(PRJNAME)_SHRIN) $($(PRJNAME)_SHROUT)	\
			$($(PRJNAME)_CONF) $($(PRJNAME)_LOCK)		\
			$(TOUCHCFG_CMD) $($(PRJNAME)_DAT)[0-9]*
	rm -rf $($(PRJNAME)_ROMHOME)
	if [ "$(XINITRC_D)" != "" ] ; then					\
		rm -f 755 $(XINITRC_D)/$(TPANELD_NAME).sh;							\
	else																\
	#	pushd . > /dev/null;											\
		cd;																\
		home=`pwd`;														\
	#	popd > /dev/null;												\
		if [ -f $$home/.Xclients.bak.tp ] ; then			\
			mv -f $$home/.Xclients.bak.tp $$home/.Xclients;		\
		fi;											\
	fi
	:
	rcpid=`ps x | grep wish`;							\
	rcpid=`echo $$rcpid | grep rbutton.tcl`;			\
	if [ $$? -eq 0 ] ; then								\
		rcpid=`echo $$rcpid | awk '{ print $$1; }'`;	\
		killall -KILL $$rcpid 1> /dev/null 2>&1 || true;	\
	fi
	:
	echo "(*) Uninstall configuration utility [/usr/bin/$(TOUCHKIT_NAME)]"
	rm -f /usr/bin/$(TOUCHKIT_NAME)
	:
	echo "(*) Uninstall XFree86 driver [$(XMODULE_HOME)input/$(XDRIVER)]";
	rm -f $(XMODULE_HOME)input/$(XDRIVER);				
	:
	if [ $(USB_PRESENT) -eq 1 ] ; then             					\
		rm -f $(USBPORT)*;											\
		if lsmod | grep $(USBMODULE_NAME) > /dev/null 2>&1 ; then	\
			rmmod $(USBMODULE_NAME) || true;						\
		fi;															\
		rm -f $(MODULE_HOME)/$(USBMODULE_NAME).ko; 	\
	fi
	:
	tcl utility/shortcut.tcl remove
	:
	:
	echo "(*) Remove directory recursively [$(PRJ_HOME)]"
	cd /;												\
	rm -rf $(PRJ_HOME);									\
	rm -f /usr/bin/$(UNINSTALL);						\
	echo "+----------------------------------------+";	\
	echo "|  Uninstallation Complete Successfully  |";	\
	echo "+----------------------------------------+"

activate:
	@killall -KILL $(TPANELD_NAME) 2> /dev/null || true
	@/usr/bin/$(TPANELD_NAME)
	@sleep 2
	@echo '(I) Start $(PRJNAME) touch panel daemon';		
	@if [ $(USB_PRESENT) -eq 1 ] ; then             			\
		rmmod $(USBMODULE_NAME) > /dev/null 2>&1 || true;		\
		insmod $(MODULE_HOME)/$(USBMODULE_NAME).ko ;			\
		if lsmod | grep $(USBMODULE_NAME) > /dev/null 2>&1 ; then\
			echo '(I) Start USB module';			\
		fi;	\
	fi

auto:
	for n in $(SUBDIRS); do				\
		$(MAKE) -C $$n $@ || exit 1;	\
	done

rebuild:
	for n in $(SUBDIRS); do				\
		$(MAKE) -C $$n $@ || exit 1;	\
	done
	: '+-----------------------------------+'
	: '|  Build-All Complete Successfully  |'
	: '+-----------------------------------+'
	
