# Dali Clock for Palm WebOS, Copyright (c) 2009 by Jamie Zawinski.

TITLE		= Dali Clock
TARGET		= DaliClock
TARGET2		= daliclock
VENDOR		= Jamie Zawinski
VERSION		= $(shell sed -n \
			's/^.*\([0-9][0-9]*\.[0-9][0-9]*\).*$$/\1.0/p' \
			< ../version.h)
ID		= org.jwz.$(TARGET2)
IPK		= $(ID)_$(VERSION)_all.ipk
DEVDIR		= /opt/PalmSDK/Current/bin
DEVICE		= tcp
CERT		= cert.pem

CC		= gcc
CFLAGS		= -g -Wall -Wstrict-prototypes -Wnested-externs
LDFLAGS		= 
DEFINES		= -DBUILTIN_FONTS
INCLUDES	= -I. -I../font -I../OSX
OBJS		= buildnumbers.o

FONTDIR		= $(TARGET)/images
NUMBERS		= $(FONTDIR)/font0.json \
		  $(FONTDIR)/font1.json \
		  $(FONTDIR)/font2.json \
		  $(FONTDIR)/font3.json \
		  $(FONTDIR)/font4.json \
		  $(FONTDIR)/font5.json

default: ipk

clean:
	rm -f *.o buildnumbers

distclean: clean
	find . \( \
	  -name '*.bak' -o -name '*.rej' -o -name '*~' -o -name '#*' \
	  \) -exec rm '{}' \;

distdepend:: update_release_date

echo_tarfiles:
	@echo `find . \
	  \( \( -name '.??*' -o -name CVS -o -name '*~*' -o -name '*.o' \
		-o -name buildnumbers -o -name '*.pem' -o -name '*.ipk' \
		-o -name '*.jpg' \
	      \) \
	     -prune \) \
	  -o -type f -print \
	| sed 's@^\./@@' \
	| sort`


buildnumbers.o:
	$(CC) -c $(INCLUDES) $(DEFINES) $(CFLAGS) ../font/buildnumbers.c

buildnumbers: buildnumbers.o
	$(CC) $(LDFLAGS) -o $@ $(OBJS)

$(NUMBERS): buildnumbers

$(FONTDIR)/font0.json:
	./buildnumbers 0 > $@
$(FONTDIR)/font1.json:
	./buildnumbers 1 > $@
$(FONTDIR)/font2.json:
	./buildnumbers 2 > $@
$(FONTDIR)/font3.json:
	./buildnumbers 3 > $@
$(FONTDIR)/font4.json:
	./buildnumbers 4 > $@
$(FONTDIR)/font5.json:
	./buildnumbers 5 > $@

all:: $(NUMBERS)


# Create cert.pem with:
#  openssl req -x509 -nodes -days 3650 -newkey rsa:1024 \
#   -keyout cert.pem -out cert.pem
# Keep that file secret!  It is your private key.

sign:
	@\
  if [ ! -f "$(CERT)" ]; then						      \
    echo "$(CERT) does not exist! Generate one. See Makefile." ;	      \
    exit 1 ;								      \
  fi ;									      \
  /bin/echo -n "Generating signature for \"$(IPK)\"... " ;		      \
  STAGE=sign-$$$$ ;							      \
  rm -rf $$STAGE ;							      \
  mkdir $$STAGE ;							      \
  cd $$STAGE ;								      \
  PUBKEY=pubkey.pem ;							      \
  SIG=signature.sha1 ;							      \
  openssl rsa -in ../$(CERT) -pubout -out $$PUBKEY 2>/dev/null ;	      \
  ar -x ../$(IPK) ;							      \
  FILES="control.tar.gz data.tar.gz debian-binary" ;			      \
  cat $$FILES | openssl dgst -sha1 -sign ../$(CERT) -out $$SIG ;	      \
  cat $$FILES | openssl dgst -sha1 -verify $$PUBKEY -signature $$SIG ;	      \
  FILES="$$FILES $$PUBKEY $$SIG" ;					      \
  touch -r ../$(IPK) $$FILES ;						      \
  ar -cr $(IPK) $$FILES ;						      \
  if cmp -s $(IPK) ../$(IPK) ; then					      \
    echo "Unchanged." ;							      \
  else									      \
    cat $(IPK) > ../$(IPK) ;						      \
    echo "Signature installed." ;					      \
  fi ;									      \
  cd .. ;								      \
  rm -rf $$STAGE


ipk: $(NUMBERS) ../version.h update_release_date
	$(DEVDIR)/palm-package --exclude CVS --exclude '*~' $(TARGET)
	$(MAKE) sign


update_release_date::
	@S="$(TARGET)/appinfo.json" ;					      \
  DATE=`date +%d-%h-%Y` ;						      \
  /bin/echo -n "Updating version in $$S to $(VERSION)/$$DATE... " ;	      \
  T=/tmp/xs.$$$$ ;							      \
  sed -e "s/^\(.*\"release_date\":.*\"\).*\(\".*\)$$/\1$$DATE\2/"	      \
      -e "s/^\(.*\"version\":.*\"\).*\(\".*\)$$/\1$(VERSION)\2/"	      \
     < $$S > $$T ;							      \
  if cmp -s $$S $$T ; then						      \
    echo "unchanged." ;							      \
  else									      \
    cat $$T > $$S ;							      \
    echo "done." ;							      \
  fi ;									      \
  rm $$T


palm-generate-app:
	@								      \
  if [ -d $(TARGET) ]; then						      \
    echo "$(TARGET)/ already exists" ;					      \
    exit 1 ;								      \
  fi
	$(DEVDIR)/palm-generate \
	  -p "{title:'$(TITLE)', id:$(ID), version:'$(VERSION)'}" $(TARGET)
	perl -pi -e 's/My Company/$(VENDOR)/g' $(TARGET)/appinfo.json

palm-generate-scene:
	@D=$(TARGET)/app/views/clock ;					      \
  if [ -d $$D ]; then							      \
    echo "$$D/ already exists" ;					      \
    exit 1 ;								      \
  fi
	$(DEVDIR)/palm-generate -t new_scene -p "name=Clock" $(TARGET)


palm-install:
	$(DEVDIR)/palm-install -d $(DEVICE) $(IPK)

palm-launch:
	$(DEVDIR)/palm-launch -d $(DEVICE) $(ID)

palm-kill:
	$(DEVDIR)/palm-launch -d $(DEVICE) -c $(ID) ; exit 0

reset-emulator:
	killall VirtualBoxVM
	rm $$HOME/Library/VirtualBox/Machines/Palm*/*.xml

test:: ipk palm-kill palm-install palm-launch
