# Dali Clock for MacOS X, Copyright (c) 2005-2007 by Jamie Zawinski.

XCODE_TARGET = "All Targets"

default: release
all: debug release

clean:
	-rm -rf build
#	cd ..; xcodebuild -target $(XCODE_TARGET) clean

distclean:
	-rm -f config.status config.cache config.log \
	  *.bak *.rej TAGS *~ "#"*
	-rm -rf autom4te*.cache
	-rm -rf build

debug: distdepend
	xcodebuild -target $(XCODE_TARGET) -configuration Debug   build

release:: distdepend
	xcodebuild -target $(XCODE_TARGET) -configuration Release build

release:: sign

sign:
	codesign -vfs 'Jamie Zawinski' build/Release/*.{app,saver}
	codesign -vfs 'Jamie Zawinski' build/Release/*.wdgt/*.widgetplugin
#	codesign -vfs 'Jamie Zawinski' build/Release/*.wdgt

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

distdepend:: update_bindist_version
update_bindist_version:
	@								    \
  SS="bindist.rtf" ;							    \
  U=../version.h ;							    \
  V=`sed -n 's/[^0-9]*\([0-9]\.[0-9][^. ;]*\).*/\1/p' < $$U` ;		    \
  D=`date '+%d-%b-%Y'` ;						    \
  for S in $$SS ; do							    \
   T=/tmp/xs.$$$$ ;							    \
   sed -e "s/\(.*version \)[0-9][0-9]*\.[0-9]*[ab]*[0-9]*\(.*\)/\1$$V\2/"   \
       -e "s/\([0-9][0-9]-[A-Z][a-z][a-z]-[0-9][0-9][0-9]*\)/$$D/"	    \
      < $$S > $$T ;							    \
   if cmp -s $$S $$T ; then						    \
    true ;								    \
   else									    \
    cat $$T > $$S ;							    \
    echo "updated $$S to $$V $$D" ;					    \
   fi ;									    \
  done ;								    \
  rm $$T

distdepend:: update_plist_version
update_plist_version:
	@\
  SS="AppInfo.plist SaverInfo.plist PluginInfo.plist *.wdgt/Info.plist" ;   \
  SRC=../version.h ;							    \
  V=`sed -n 's/[^0-9]*\([0-9]\.[0-9][^. ;]*\).*/\1/p' $$SRC` ;		    \
  for S in $$SS ; do							    \
   /bin/echo -n "Updating version number in $$S to \"$$V\"... " ;	    \
   T=/tmp/xs.$$$$ ;							    \
   KEYS1="CFBundleVersion|CFBundleShortVersionString" ;			    \
   KEYS2="NSHumanReadableCopyright|CFBundleLongVersionString|CFBundleGetInfoString" ; \
   perl -0777 -pne							    \
 "s@(<key>($$KEYS1)</key>\s*<string>)[\d.]+(</string>)@\$${1}$$V\$${3}@gs;  \
  s@(<key>($$KEYS2)</key>\s*<string>[^\d]+)[\d.]+(.*?</string>)@\$${1}$$V\$${3}@gs" \
    < $$S > $$T ;							    \
   if cmp -s $$S $$T ; then						    \
     echo "unchanged." ;						    \
   else									    \
    cat $$T > $$S ;							    \
    echo "done." ;							    \
   fi ;									    \
   rm $$T ;								    \
  done


# -format UDBZ saves 4% over UDZO, but that's only 8KB.
dmg:: distdepend
	@								      \
  set -e ;								      \
  SRC=../version.h ;							      \
  V=`sed -n 's/[^0-9]*\([0-9]\.[0-9][^. ;]*\).*/\1/p' $$SRC` ;		      \
  V=`echo $$V | sed 's/\.//g'` ;					      \
  TMPDIR="build" ;							      \
  SRC="build/Release" ;							      \
  BASE="DaliClock-$$V" ;						      \
  OUTDIR="../archive" ;							      \
  DMG="$$OUTDIR/$$BASE.dmg" ;						      \
  TMPDMG="$$TMPDIR/tmp.dmg" ;						      \
  VOLNAME="DaliClock $$V" ;						      \
  STAGE="$$TMPDIR/dmg_stage" ;						      \
  rm -f "$$DMG" ;							      \
  rm -rf "$$STAGE" ;							      \
  echo + mkdir "$$STAGE" ;						      \
         mkdir "$$STAGE" ;						      \
  FILES="$$SRC/*.app $$SRC/*.saver $$SRC/*.wdgt ../palm/daliclock.prc" ;      \
  echo + cp -pr $$FILES "$$STAGE" ;					      \
         cp -pr $$FILES "$$STAGE" ;					      \
  set -x ;								      \
  cp -p bindist.rtf "$$STAGE/ READ ME.rtf" ;				      \
  cp -p bindist-DS_Store "$$STAGE/.DS_Store" ;				      \
  /Developer/Tools/SetFile -a E "$$STAGE/ READ ME.rtf" ;		      \
  /Developer/Tools/SetFile -a e $$STAGE/*.saver ;			      \
  /Developer/Tools/SetFile -a e $$STAGE/*.prc ;				      \
  /Developer/Tools/SetFile -a e $$STAGE/*.wdgt ;			      \
  seticon -d daliclockPRC.icns $$STAGE/*.prc ;				      \
  seticon -d daliclockSaver.icns $$STAGE/*.saver ;			      \
  seticon -d daliclockWidget.icns $$STAGE/*.wdgt ;			      \
  hdiutil makehybrid -quiet -ov -hfs -hfs-volume-name "$$VOLNAME"	      \
    -hfs-openfolder "$$STAGE" "$$STAGE" -o "$$TMPDMG" ;			      \
  rm -rf "$$STAGE" ;							      \
  hdiutil convert -quiet -ov -format UDZO -imagekey zlib-level=9	      \
    "$$TMPDMG" -o "$$DMG" ;						      \
  rm -f "$$TMPDMG" ;							      \
  ls -ldhgF "$$DMG"

# Adding this is cute:
#    hdiutil internet-enable -yes -quiet "$$DMG"
# but means that nobody will ever see the display settings I used!
# When finder copies the .dmg to a folder, it doesn't preserve them.
