# # Build file for packaging Psi/Mac. # # The DMG packager looks for a template.dmg.bz2 for using as its # DMG template. If it doesn't find one, it generates a clean one. # # If you create a DMG template, you should make one containing all # the files listed in $(FILES) below, and arrange everything to suit # your style. The contents of the files themselves does not matter, so # they can be empty. # # Parameters: # * BUILD: Set this to 'no' if you do not want to build the source tree or # check dependencies of the 'disk' dir when building the DMG. # # Remko Troncon # # Change these according to your own setup QTDIR=/Developer/qt QCADIR=/Developer/qca GROWLDIR=/Library/Frameworks PSI_DIR=.. NAME=Psi #VERSION=0.10_CVS_$(shell date +"%Y%m%d") VERSION=0.10 FILES=Psi.app DISK_DIR=disk ifneq ($(BUILD),no) DISK_FILES=$(foreach f,$(FILES), $(addprefix $(DISK_DIR)/,$(f))) endif MASTER_DMG=$(NAME)-$(VERSION).dmg .PHONY: buildall all: build-psi $(DISK_FILES) .PHONY: dmg dmg: build-psi $(DISK_FILES) $(MASTER_DMG) # Cleanup .PHONY: clean clean: clean-dmg -rm -rf $(DISK_DIR) # Help .PHONY: help help: @echo "Usage:" @echo " make : Build a distributable binary in $(DISK_DIR)/" @echo " make dmg : Build a DMG disk image" # Building the main source tree .PHONY: build-psi ifneq ($(BUILD),no) build-psi: @echo @echo --------------------- Building Source Tree -------------------- $(MAKE) -C $(PSI_DIR) @echo else build-psi: endif ################################################################################ # Generation of the final files ################################################################################ # The binary $(DISK_DIR)/Psi.app: $(PSI_DIR)/src/psi.app @echo @echo --------------------- Packaging Binary -------------------- rm -rf "$@" ditto -rsrc "$<" "$@" mkdir -p "$@/Contents/Resources/crypto" cp -f "$(QTDIR)/plugins/crypto/libqca-tls.dylib" "$@/Contents/Resources/crypto/" mkdir -p "$@/Contents/Frameworks" -ditto -rsrc "$(GROWLDIR)/Growl.framework" "$@/Contents/Frameworks/Growl.framework" cp -f "$(QTDIR)/lib/libqt-mt.3.dylib" "$@/Contents/Frameworks/" cp -f "$(QCADIR)/lib/libqca.1.dylib" "$@/Contents/Frameworks/" strip "$@/Contents/MacOS/psi" install_name_tool -id @executable_path/../Frameworks/libqt-mt.3.dylib "$@/Contents/Frameworks/libqt-mt.3.dylib" install_name_tool -change libqt-mt.3.dylib "@executable_path/../Frameworks/libqt-mt.3.dylib" "$@/Contents/MacOS/psi" install_name_tool -change libqt-mt.3.dylib "@executable_path/../Frameworks/libqt-mt.3.dylib" "$@/Contents/Frameworks/libqca.1.dylib" install_name_tool -change libqt-mt.3.dylib "@executable_path/../Frameworks/libqt-mt.3.dylib" "$@/Contents/Resources/crypto/libqca-tls.dylib" install_name_tool -id @executable_path/../Frameworks/libqca.1.dylib "$@/Contents/Frameworks/libqca.1.dylib" install_name_tool -change libqca.1.dylib "@executable_path/../Frameworks/libqca.1.dylib" "$@/Contents/MacOS/psi" @echo # The rest $(DISK_DIR)/%: $(PSI_DIR)/% ditto -rsrc "$<" $@ ################################################################################ # Disk image creation ################################################################################ WC_DMG=wc.dmg WC_DIR=wc TEMPLATE_DMG=template.dmg $(TEMPLATE_DMG): $(TEMPLATE_DMG).bz2 bunzip2 -k $< $(TEMPLATE_DMG).bz2: @echo @echo --------------------- Generating empty template -------------------- mkdir template hdiutil create -size 40m "$(TEMPLATE_DMG)" -srcfolder template -format UDRW -volname "$(NAME)" -quiet rmdir template bzip2 "$(TEMPLATE_DMG)" @echo $(WC_DMG): $(TEMPLATE_DMG) cp $< $@ $(MASTER_DMG): $(WC_DMG) $(DISK_FILES) @echo @echo --------------------- Creating Disk Image -------------------- mkdir -p $(WC_DIR) hdiutil attach "$(WC_DMG)" -noautoopen -quiet -mountpoint "$(WC_DIR)" for i in $(DISK_DIR)/*; do \ file=`basename $$i`; \ rm -rf "$(WC_DIR)/$$file"; \ ditto -rsrc "$(DISK_DIR)/$$file" "$(WC_DIR)/$$file"; \ done #rm -f "$@" #hdiutil create -srcfolder "$(WC_DIR)" -format UDZO -imagekey zlib-level=9 "$@" -volname "$(NAME) $(VERSION)" -scrub -quiet WC_DEV=`hdiutil info | grep "$(WC_DIR)" | grep "Apple_HFS" | awk '{print $$1}'` && \ hdiutil detach $$WC_DEV -quiet -force rm -f "$(MASTER_DMG)" hdiutil convert "$(WC_DMG)" -quiet -format UDZO -imagekey zlib-level=9 -o "$@" rm -rf $(WC_DIR) -hdiutil internet-enable -yes -quiet "$@" @echo .PHONY: clean-dmg clean-dmg: -rm -rf $(TEMPLATE_DMG) $(MASTER_DMG) $(WC_DMG) $(NAME)-*.dmg