VERSION=0.5.1

.PHONY:	all AJZaurusUSB tgz clean src pkg help check load unload install uninstall

all:	AJZaurusUSB

patch-version-number:
	# here we should patch the version number in InfoPlist.strings, Info.plist, and AJZaurusUSB.pmproj (is a binary PList - root/$objects/53 = version number)

AJZaurusUSB: patch-version-number
	@echo "Building AJZaurusUSB"
	(sudo rm -rf build pkg && mkdir pkg && xcodebuild -target AJZaurusUSB)
	sudo chown -R root pkg/AJZaurusUSB.kext
	sudo chgrp -R wheel pkg/AJZaurusUSB.kext
	sudo chmod -R go-w pkg/AJZaurusUSB.kext

tgz:
	@echo "Packing AJZaurusUSB-$(VERSION).tgz"
	tar cvzf AJZaurusUSB-$(VERSION).tgz ./AJZaurusUSB.pkg ./COPYING ./WELCOME.rtf ./README.rtfd ./HISTORY.rtf

clean:
	@echo "Cleaning AJZaurusUSB"
	sudo rm -rf build pkg
	sudo find . -name .DS_Store -exec rm {} \;

src: clean
	@echo "Packing AJZaurusUSB-$(VERSION)-src.tgz"
	tar cvzf AJZaurusUSB-$(VERSION)-src.tgz \
		./COPYING ./*.rtf* \
		./HOWTO-MAKE ./makefile \
		./Sources \
		./*.plist \
		./*.xcode* ./*.lproj \
		./*.pmproj \
		./*.term \
		./*.gdb

help:
	@echo "Makefile for making AJZaurusUSB"
	@echo ""
	@echo "Supported targets:"
	@echo "make all     - build driver (asks for root password)"
	@echo "make check   - check driver dependencies"
	@echo "make load    - load driver"
	@echo "make unload  - unload driver"
	@echo "make install - permanently install"
	@echo "make uninstall - permanently uninstall"
	@echo "make pkg     - installer package"
	@echo "make src     - source distribution"
	@echo "make tgz     - full distribution file (incl. src)"
	
load:
	@echo "Loading AJZaurusUSB"
	sudo kextload pkg/AJZaurusUSB.kext
	
ld:	# if we have access the package through a network only
	@echo "Loading AJZaurusUSB through /tmp"
	sudo rm -rf /tmp/AJZaurusUSB.kext
	cp -Rf pkg/AJZaurusUSB.kext /tmp/AJZaurusUSB.kext
	sudo chown -R root /tmp/AJZaurusUSB.kext
	sudo kextload /tmp/AJZaurusUSB.kext
	
check:
	@echo "Checking AJZaurusUSB"
	sudo kextload -c -tn -v 3 pkg/AJZaurusUSB.kext
	
unload:
	@echo "Unloading AJZaurusUSB"
	sudo kextunload pkg/AJZaurusUSB.kext

install:
	# permanently install on your local machine
	@echo "Installing AJZaurusUSB"
	sudo sh -c "(cd pkg && tar cf - AJZaurusUSB.kext) | (cd /System/Library/Extensions && tar xvf -)"
	@echo "Loading AJZaurusUSB"
	sudo kextload /System/Library/Extensions/AJZaurusUSB.kext
	@echo "****************************************************"
	@echo "You should now reboot to load the driver permanently"
	@echo "****************************************************"

uninstall:
	# uninstall existing driver
	@echo "Unloading AJZaurusUSB"
	- sudo kextunload /System/Library/Extensions/AJZaurusUSB.kext
	@echo "Uninstalling AJZaurusUSB"
	sudo rm -rf /System/Library/Extensions/AJZaurusUSB.kext
	@echo "****************************************************"
	@echo "You should now reboot to really uninstall the driver"
	@echo "****************************************************"

pkg: AJZaurusUSB
	open AJZaurusUSB.pmproj

# experimental - not working yet

.PHONY:	enable-kdb sudo copy2target loadremote getsymtab gdb

#
# remote debugging
# please refer to http://developer.apple.com/documentation/Darwin/Conceptual/KEXTConcept/KEXTConceptDebugger/hello_debugger.html
#

USER := $(USER)

TARGET := powerbook.local
ETHERNET := 00:03:93:07:23:a2
ARCH := ppc

TARGET := MacBook.local
ETHERNET := 00:17:f2:c4:a1:b4
ARCH := i386

# sometimes ssh and/or sudo may execute the commands in a tcsh even if we expclicity have a /bin/bash

enable-kdb:
	# enable kernel debugging on target machine (and switch a Core2 Duo to single processor mode)
	ssh $(USER)@$(TARGET) sh -c 'sudo nvram boot-args="cpus=1 debug=0x14e"'

disable-kdb:
	# disable kernel debugging on target machine
	ssh $(USER)@$(TARGET) sh -c 'sudo nvram boot-args=""'

sudo:
	@echo "*** reset sudo timeout ***"
	@echo "first password is for authentication of target ssh access, second one is for target sudo"
	ssh $(USER)@$(TARGET) sudo -v	# update timestamp

copy2target:
	@echo "*** determine address of target machine ***"
	ping -c 1 $(TARGET)
	@echo "*** copy kernel extension to target machine ***"
	@echo "next password is for authentication of target ssh access"
	(cd pkg && tar czpf - AJZaurusUSB.kext) | ssh $(USER)@$(TARGET) sh -c 'cd; cd /tmp && sudo rm -rf AJZaurusUSB.kext && tar xzf - && sudo chown -R root:wheel /tmp/AJZaurusUSB.kext'
			
getsymtab:
	@echo "*** create symbol files, fetch from target ***"
	@echo "next password is for authentication of target ssh access"
	ssh $(USER)@$(TARGET) sh -c 'cd; cd /tmp && sudo kextload -lvs /tmp AJZaurusUSB.kext'
	@echo "next password is for authentication of target ssh access"
	ssh $(USER)@$(TARGET) sh -c 'cd; cd /tmp && tar czf - *.sym' | (cd pkg && tar xvzf - -m)

loadremote:
	@echo "*** finally load/match driver on remote side ***"
	@echo "next password is for authentication of target ssh access"
	ssh $(USER)@$(TARGET) sudo /bin/bash -c 'cd; cd /tmp && kextload -m AJZaurusUSB.kext'

prepare: sudo copy2target getsymtab loadremote

gdb:
	gdb -arch $(ARCH) -x prepare.gdb /mach_kernel

debug: sudo copy2target getsymtab loadremote gdb

