# # 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-4.1.2-universal QCADIR=$(QTDIR) GROWLDIR=/Library/Frameworks PSI_DIR=.. # Jingle variables EXPATDIR=/sw SPEEXDIR=/sw ILBCDIR=/usr/local/ilbc ORTPDIR=/usr/local/ortp GLIBDIR=/sw GLIB_LIBS=libgmodule-2.0.0 libgthread-2.0.0 libglib-2.0.0 libiconv.2 libintl.1 NAME=Psi #VERSION=Qt4_devel_$(shell date +"%Y%m%d") VERSION=beta2 FILES=Psi.app DISK_DIR=disk ifneq ($(BUILD),no) DISK_FILES=$(foreach f,$(FILES), $(addprefix $(DISK_DIR)/,$(f))) endif MASTER_DMG=$(NAME)-$(VERSION).dmg # Other variables QT_FRAMEWORK_VERSION=4.0 QT_FRAMEWORKS=QtCore QtXml QtNetwork QtGui QtSql Qt3Support # The rules .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/Frameworks" -ditto -rsrc "$(GROWLDIR)/Growl.framework" "$@/Contents/Frameworks/Growl.framework" strip "$@/Contents/MacOS/psi" # @echo @echo Installing QCA ... cp -f "$(QCADIR)/lib/libqca.2.dylib" "$@/Contents/Frameworks/" install_name_tool -id "@executable_path/../Frameworks/libqca.2.dylib" "$@/Contents/Frameworks/libqca.2.dylib" install_name_tool -change "libqca.2.dylib" "@executable_path/../Frameworks/libqca.2.dylib" "$@/Contents/MacOS/psi" mkdir -p "$@/Contents/Resources/crypto" cp -f "$(QTDIR)/plugins/crypto/libqca-openssl.dylib" "$@/Contents/Resources/crypto/" install_name_tool -change "libqca.2.dylib" "@executable_path/../Frameworks/libqca.2.dylib" "$@/Contents/Resources/crypto/libqca-openssl.dylib" mkdir -p "$@/Contents/Resources/imageformats" cp -f "$(QTDIR)/plugins/imageformats/libqjpeg.dylib" "$@/Contents/Resources/imageformats/" # @echo @echo Installing Qt Frameworks ... for f in $(QT_FRAMEWORKS); do \ ditto -rsrc "$(QTDIR)/lib/$$f.framework" "$@/Contents/Frameworks/$$f.framework"; \ rm -rf "$@/Contents/Frameworks/$$f.framework/Headers"; \ rm -rf "$@/Contents/Frameworks/$$f.framework/$$f""_debug"; \ rm -rf "$@/Contents/Frameworks/$$f.framework/$$f""_debug.prl"; \ rm -rf "$@/Contents/Frameworks/$$f.framework/Versions/$(QT_FRAMEWORK_VERSION)/Headers"; \ rm -rf "$@/Contents/Frameworks/$$f.framework/Versions/$(QT_FRAMEWORK_VERSION)/$$f""_debug"; \ rm -rf "$@/Contents/Frameworks/$$f.framework/Versions/$(QT_FRAMEWORK_VERSION)/$$f""_debug.prl"; \ install_name_tool -id "@executable_path/../Frameworks/$$f.framework/Versions/$(QT_FRAMEWORK_VERSION)/$$f" "$@/Contents/Frameworks/$$f.framework/$$f"; \ for g in $(QT_FRAMEWORKS); do \ install_name_tool -change "$(QTDIR)/lib/$$g.framework/Versions/$(QT_FRAMEWORK_VERSION)/$$g" "@executable_path/../Frameworks/$$g.framework/Versions/$(QT_FRAMEWORK_VERSION)/$$g" "$@/Contents/Frameworks/$$f.framework/Versions/$(QT_FRAMEWORK_VERSION)/$$f"; \ done; \ install_name_tool -change "$(QTDIR)/lib/$$f.framework/Versions/$(QT_FRAMEWORK_VERSION)/$$f" "@executable_path/../Frameworks/$$f.framework/Versions/$(QT_FRAMEWORK_VERSION)/$$f" "$@/Contents/Frameworks/libqca.2.dylib"; \ install_name_tool -change "$(QTDIR)/lib/$$f.framework/Versions/$(QT_FRAMEWORK_VERSION)/$$f" "@executable_path/../Frameworks/$$f.framework/Versions/$(QT_FRAMEWORK_VERSION)/$$f" "$@/Contents/Resources/crypto/libqca-openssl.dylib"; \ install_name_tool -change "$(QTDIR)/lib/$$f.framework/Versions/$(QT_FRAMEWORK_VERSION)/$$f" "@executable_path/../Frameworks/$$f.framework/Versions/$(QT_FRAMEWORK_VERSION)/$$f" "$@/Contents/Resources/imageformats/libqjpeg.dylib"; \ install_name_tool -change "$(QTDIR)/lib/$$f.framework/Versions/$(QT_FRAMEWORK_VERSION)/$$f" "@executable_path/../Frameworks/$$f.framework/Versions/$(QT_FRAMEWORK_VERSION)/$$f" "$@/Contents/MacOS/psi"; \ done @echo @echo Installing Jingle libs ... cp -f "$(EXPATDIR)/lib/libexpat.0.dylib" "$@/Contents/Frameworks/" install_name_tool -id "@executable_path/../Frameworks/libexpat.0.dylib" "$@/Contents/Frameworks/libexpat.0.dylib" install_name_tool -change "$(EXPATDIR)/lib/libexpat.0.dylib" "@executable_path/../Frameworks/libexpat.0.dylib" "$@/Contents/MacOS/psi" cp -f "$(SPEEXDIR)/lib/libspeex.1.dylib" "$@/Contents/Frameworks/" install_name_tool -id "@executable_path/../Frameworks/libspeex.1.dylib" "$@/Contents/Frameworks/libspeex.1.dylib" install_name_tool -change "$(SPEEXDIR)/lib/libspeex.1.dylib" "@executable_path/../Frameworks/libspeex.1.dylib" "$@/Contents/MacOS/psi" cp -f "$(ILBCDIR)/lib/libilbc.0.dylib" "$@/Contents/Frameworks/" install_name_tool -id "@executable_path/../Frameworks/libilbc.0.dylib" "$@/Contents/Frameworks/libilbc.0.dylib" install_name_tool -change "$(ILBCDIR)/lib/libilbc.0.dylib" "@executable_path/../Frameworks/libilbc.0.dylib" "$@/Contents/MacOS/psi" cp -f "$(ORTPDIR)/lib/libortp.0.dylib" "$@/Contents/Frameworks/" install_name_tool -id "@executable_path/../Frameworks/libortp.0.dylib" "$@/Contents/Frameworks/libortp.0.dylib" install_name_tool -change "$(ORTPDIR)/lib/libortp.0.dylib" "@executable_path/../Frameworks/libortp.0.dylib" "$@/Contents/MacOS/psi" for f in $(GLIB_LIBS); do \ cp -f "$(GLIBDIR)/lib/$$f.dylib" "$@/Contents/Frameworks/"; \ install_name_tool -id "@executable_path/../Frameworks/$$f.dylib" "$@/Contents/Frameworks/$$f.dylib"; \ install_name_tool -change "$(GLIBDIR)/lib/$$f.dylib" "@executable_path/../Frameworks/$$f.dylib" "$@/Contents/MacOS/psi"; \ install_name_tool -change "$(GLIBDIR)/lib/$$f.dylib" "@executable_path/../Frameworks/$$f.dylib" "$@/Contents/Frameworks/libortp.0.dylib"; \ for g in $(GLIB_LIBS); do \ install_name_tool -change "$(GLIBDIR)/lib/$$g.dylib" "@executable_path/../Frameworks/$$g.dylib" "$@/Contents/Frameworks/$$f.dylib"; \ done; \ done # 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 80m "$(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