#!/bin/csh ## # Release Script for Macintosh GridRepublic Desktop 4/17/06 by Charlie Fenton ## ## Usage: ## cd to the root directory of the boinc tree, for example: ## cd [path]/boinc ## ## Invoke this script with the three parts of version number as arguments. ## For example, if the version is 3.2.1: ## source [path_to_this_script] 3 2 1 ## ## This will create a director "BOINC_Installer" in the parent directory of ## the current directory ## ## For testing only, you can use the development build by adding a fourth argument -dev ## For example, if the version is 3.2.1: ## source [path_to_this_script] 3 2 1 -dev ## For different branding, modify the following 9 variables: PR_PATH="../BOINC_Installer/GR_Pkg_Root" IR_PATH="../BOINC_Installer/GR_Installer_Resources" NEW_DIR_PATH="../BOINC_Installer/New_Release_GR_$1_$2_$3" README_FILE="mac_installer/GR-ReadMe.rtf" BRANDING_FILE="mac_installer/GR-Branding" ICNS_FILE="GridRepublic.icns" SAVER_SYSPREF_ICON_PATH="clientgui/mac/GridRepublic.tiff" BRAND_NAME="GridRepublic" MANAGER_NAME="GridRepublic Desktop" LC_BRAND_NAME="gridrepublic" if [ $# -lt 3 ]; then echo "Usage:" echo " cd [path]/boinc" echo " source [path_to_this_script] major_version minor_version revision_number" return 1 fi pushd ./ ## XCode 2.x has separate directories for Development and Deployment build products if [ "$4" = "-dev" ]; then if [ -d mac_build/build/Development/ ]; then BUILDPATH="mac_build/build/Development" else BUILDPATH="mac_build/build" fi else if [ -d mac_build/build/Deployment/ ]; then BUILDPATH="mac_build/build/Deployment" else BUILDPATH="mac_build/build" fi fi sudo rm -dfR "${IR_PATH}" sudo rm -dfR "${PR_PATH}" mkdir -p "${IR_PATH}" cp -fp mac_Installer/License.rtf "${IR_PATH}/" cp -fp "${README_FILE}" "${IR_PATH}/ReadMe.rtf" # Create the installer's preinstall and preupgrade scripts from the standard preinstall script ##### We've decided not to customize BOINC Data directory name for branding #### cp -fp mac_installer/preinstall "${IR_PATH}/" #### sed -i "" s/BOINC/temp/g "${IR_PATH}/preinstall" #### sed -i "" s/"${BRAND_NAME}"/BOINC/g "${IR_PATH}/preinstall" #### sed -i "" s/temp/"${BRAND_NAME}"/g "${IR_PATH}/preinstall" #### cp -fp "${IR_PATH}/preinstall" "${IR_PATH}/preupgrade" cp -fp mac_installer/postinstall "${IR_PATH}/" cp -fp mac_installer/postupgrade "${IR_PATH}/" cp -fpR $BUILDPATH/Postinstall.app "${IR_PATH}/" mkdir -p "${PR_PATH}" mkdir -p "${PR_PATH}/Applications" mkdir -p "${PR_PATH}/Library" mkdir -p "${PR_PATH}/Library/Screen Savers" mkdir -p "${PR_PATH}/Library/Application Support" ##### We've decided not to customize BOINC Data directory name for branding #### mkdir -p "${PR_PATH}/Library/Application Support/${BRAND_NAME} Data" #### mkdir -p "${PR_PATH}/Library/Application Support/${BRAND_NAME} Data/locale" mkdir -p "${PR_PATH}/Library/Application Support/BOINC Data" mkdir -p "${PR_PATH}/Library/Application Support/ BOINC Data/locale" cp -fpR $BUILDPATH/BOINCManager.app "${PR_PATH}/Applications/" cp -fpR $BUILDPATH/BOINCSaver.saver "${PR_PATH}/Library/Screen Savers/" ## Copy the localization files into the installer tree ## Old way copies CVS and *.po files which are not needed ## cp -fpR locale/client/ "${PR_PATH}/Library/Application Support/BOINC Data/locale" ## sudo rm -dfR "${PR_PATH}/Library/Application Support/BOINC Data/locale/CVS" ## New way copies only *.mo files (adapted from boinc/sea/make-tar.sh) ##### We've decided not to customize BOINC Data directory name for branding #### find locale/client -name '*.mo' | cut -d '/' -f 3 | awk -v PRPATH=${PR_PATH} -v BRANDNAME=${BRAND_NAME} '{print "\"" PRPATH "/Library/Application Support/" BRANDNAME " Data/locale/"$0"\""}' | xargs mkdir -p #### find locale/client -name '*.mo' | cut -d '/' -f 3,4 | awk -v PRPATH=${PR_PATH} -v BRANDNAME=${BRAND_NAME} '{print "cp \"locale/client/"$0"\" \"" PRPATH "/Library/Application Support/" BRANDNAME " Data/locale/"$0"\""}' | bash find locale/client -name '*.mo' | cut -d '/' -f 3 | awk -v PRPATH=${PR_PATH} '{print "\"" PRPATH "/Library/Application Support/BOINC Data/locale/"$0"\""}' | xargs mkdir -p find locale/client -name '*.mo' | cut -d '/' -f 3,4 | awk -v PRPATH=${PR_PATH} '{print "cp \"locale/client/"$0"\" \"" PRPATH "/Library/Application Support/BOINC Data/locale/"$0"\""}' | bash ## Modify for Grid Republic # Rename the Manager's bundle and its executable inside the bundle mv -f "${PR_PATH}/Applications/BOINCManager.app/" "${PR_PATH}/Applications/${MANAGER_NAME}.app/" mv -f "${PR_PATH}/Applications/${MANAGER_NAME}.app/Contents/MacOS/BOINCManager" "${PR_PATH}/Applications/${MANAGER_NAME}.app/Contents/MacOS/${MANAGER_NAME}" # Update the Manager's info.plist, InfoPlist.strings files sed -i "" s/BOINCManager/"${MANAGER_NAME}"/g "${PR_PATH}/Applications/${MANAGER_NAME}.app/Contents/Info.plist" sed -i "" s/BOINCMgr.icns/"${ICNS_FILE}"/g "${PR_PATH}/Applications/${MANAGER_NAME}.app/Contents/Info.plist" sed -i "" s/BOINC/"${BRAND_NAME}"/g "${PR_PATH}/Applications/${MANAGER_NAME}.app/Contents/Resources/English.lproj/InfoPlist.strings" # Replace the Manager's BOINCMgr.icns file cp -fp "client/mac/${ICNS_FILE}" "${PR_PATH}/Applications/${MANAGER_NAME}.app/Contents/Resources/${ICNS_FILE}" rm -f "${PR_PATH}/Applications/${MANAGER_NAME}.app/Contents/Resources/BOINCMgr.icns" # Copy Branding file into both Application Bundle and Installer Package cp -fp "${BRANDING_FILE}" "${PR_PATH}/Applications/${MANAGER_NAME}.app/Contents/Resources/Branding" cp -fp "${BRANDING_FILE}" "${IR_PATH}/Branding" # Rename the screensaver bundle and its executable inside the bundle mv -f "${PR_PATH}/Library/Screen Savers/BOINCSaver.saver" "${PR_PATH}/Library/Screen Savers/${BRAND_NAME}.saver" mv -f "${PR_PATH}/Library/Screen Savers/${BRAND_NAME}.saver/Contents/MacOS/BOINCSaver" "${PR_PATH}/Library/Screen Savers/${BRAND_NAME}.saver/Contents/MacOS/${BRAND_NAME}" # Update screensaver's info.plist, InfoPlist.strings files sed -i "" s/BOINCSaver/"${BRAND_NAME}"/g "${PR_PATH}/Library/Screen Savers/${BRAND_NAME}.saver/Contents/Info.plist" sed -i "" s/BOINC/"${BRAND_NAME}"/g "${PR_PATH}/Library/Screen Savers/${BRAND_NAME}.saver/Contents/Resources/English.lproj/InfoPlist.strings" # Replace screensaver's boinc.tiff file cp -fp "${SAVER_SYSPREF_ICON_PATH}" "${PR_PATH}/Library/Screen Savers/${BRAND_NAME}.saver/Contents/Resources/boinc.tiff" ## Fix up ownership and permissions sudo chown -R root:admin "${PR_PATH}"/* sudo chmod -R 775 "${PR_PATH}"/* sudo chmod 1775 "${PR_PATH}/Library" sudo chown -R 501:admin "${PR_PATH}/Library/Application Support"/* sudo chmod -R 755 "${PR_PATH}/Library/Application Support"/* sudo chown -R root:admin "${IR_PATH}"/* sudo chmod -R 755 "${IR_PATH}"/* sudo rm -dfR "${NEW_DIR_PATH}/" mkdir -p "${NEW_DIR_PATH}/" mkdir -p "${NEW_DIR_PATH}/${LC_BRAND_NAME}_$1.$2.$3_macOSX_universal" cp -fp "${README_FILE}" "${NEW_DIR_PATH}/${LC_BRAND_NAME}_$1.$2.$3_macOSX_universal/ReadMe.rtf" sudo chown -R 501:admin "${NEW_DIR_PATH}/${LC_BRAND_NAME}_$1.$2.$3_macOSX_universal/ReadMe.rtf" sudo chmod -R 755 "${NEW_DIR_PATH}/${LC_BRAND_NAME}_$1.$2.$3_macOSX_universal/ReadMe.rtf" ##### We've decided not to create branded command-line executables; they are identical to standard ones #### mkdir -p "${NEW_DIR_PATH}/${LC_BRAND_NAME}_$1.$2.$3_universal-apple-darwin" #### cp -fpR $BUILDPATH/boinc "${NEW_DIR_PATH}/${LC_BRAND_NAME}_$1.$2.$3_universal-apple-darwin/" #### cp -fpR $BUILDPATH/boinc_cmd "${NEW_DIR_PATH}/${LC_BRAND_NAME}_$1.$2.$3_universal-apple-darwin/" #### sudo chown -R root:admin "${NEW_DIR_PATH}/${LC_BRAND_NAME}_$1.$2.$3_universal-apple-darwin"/* #### sudo chmod -R 755 "${NEW_DIR_PATH}/${LC_BRAND_NAME}_$1.$2.$3_universal-apple-darwin"/* ##### We've decided not to create branded symbol table file; it is identical to standard one #### mkdir -p "${NEW_DIR_PATH}/${LC_BRAND_NAME}_$1.$2.$3_macOSX_SymbolTables" #### cp -fpR $BUILDPATH/SymbolTables ${NEW_DIR_PATH}/${LC_BRAND_NAME}_$1.$2.$3_macOSX_SymbolTables/ # Make temporary copies of Pkg-Info.plist and Description.plist for PackageMaker and update for this branding cp -fp mac_build/Pkg-Info.plist "${NEW_DIR_PATH}" cp -fp mac_Installer/Description.plist "${NEW_DIR_PATH}" sed -i "" s/BOINC/"${BRAND_NAME}"/g "${NEW_DIR_PATH}/Pkg-Info.plist" sed -i "" s/BOINC/"${BRAND_NAME}"/g "${NEW_DIR_PATH}/Description.plist" # Build the installer package /Developer/Tools/packagemaker -build -p "${NEW_DIR_PATH}/${LC_BRAND_NAME}_$1.$2.$3_macOSX_universal/${BRAND_NAME}.pkg" -f "${PR_PATH}" -r "${IR_PATH}" -i "${NEW_DIR_PATH}/Pkg-Info.plist" -d "${NEW_DIR_PATH}/Description.plist" -ds # Remove temporary copies of Pkg-Info.plist and Description.plist rm ${NEW_DIR_PATH}/Pkg-Info.plist rm ${NEW_DIR_PATH}/Description.plist # Compress the products cd ${NEW_DIR_PATH} zip -rqy ${LC_BRAND_NAME}_$1.$2.$3_macOSX_universal.zip ${LC_BRAND_NAME}_$1.$2.$3_macOSX_universal ##### We've decided not to create branded command-line executables; they are identical to standard ones #### zip -rqy ${LC_BRAND_NAME}_$1.$2.$3_universal-apple-darwin.zip ${LC_BRAND_NAME}_$1.$2.$3_universal-apple-darwin ##### We've decided not to create branded symbol table file; it is identical to standard one #### zip -rqy ${LC_BRAND_NAME}_$1.$2.$3_macOSX_SymbolTables.zip ${LC_BRAND_NAME}_$1.$2.$3_macOSX_SymbolTables popd return 0