X-Git-Url: https://git.quassel-irc.org/?a=blobdiff_plain;f=scripts%2Fbuild%2Fmacosx_makePackage.sh;h=a359ecd12c824f24606b2ecb036fe60e3bed2a13;hb=f09a86ab1cc01a80aa6fd52a875920e18d1d3a5b;hp=646f8a107cfcce979c004ceb41f88a9cb08d2e10;hpb=cf17ae38dd425697d0d8e22d50fb16f2bc821df6;p=quassel.git diff --git a/scripts/build/macosx_makePackage.sh b/scripts/build/macosx_makePackage.sh index 646f8a10..a359ecd1 100755 --- a/scripts/build/macosx_makePackage.sh +++ b/scripts/build/macosx_makePackage.sh @@ -1,4 +1,7 @@ #!/bin/bash +# Don't consider packaging a success if any commands fail +# See http://redsymbol.net/articles/unofficial-bash-strict-mode/ +set -euo pipefail myname=$0 if [ -s "$myname" ] && [ -x "$myname" ]; then @@ -13,7 +16,7 @@ else # care to interpret leading and trailing ":" as meaning # the current directory; the same is true for "::" within # the PATH. - + # Replace leading : with . in PATH, store in p p=${PATH/#:/.:} # Replace trailing : with . @@ -41,29 +44,78 @@ if [ ! -f "$mypath" ]; then fi SCRIPTDIR=$(dirname $mypath) -QUASSEL_VERSION=$(git-describe) +QUASSEL_VERSION=$(git describe) BUILDTYPE=$1 # check the working dir -WORKINGDIR=$2 -if [[ ! -n $2 ]]; then - WORKINGDIR="." -fi +# Default to "." using Bash default-value syntax +WORKINGDIR="${2:-.}" WORKINGDIR="${WORKINGDIR}/" PACKAGETMPDIR="${WORKINGDIR}PACKAGE_TMP_DIR_${BUILDTYPE}" -if [[ $BUILDTYPE = "Core" ]] || [[ $BUILDTYPE = "Client" ]]; then - QUASSEL_DMG="Quassel${BUILDTYPE}_MacOSX-x86_64_${QUASSEL_VERSION}.dmg" - mkdir $PACKAGETMPDIR - if [[ $BUILDTYPE = "Client" ]]; then - cp -r ${WORKINGDIR}Quassel\ Client.app ${PACKAGETMPDIR}/ - ${SCRIPTDIR}/macosx_DeployApp.py "${PACKAGETMPDIR}/Quassel Client.app" - else - cp ${WORKINGDIR}quasselcore ${PACKAGETMPDIR}/ - ${SCRIPTDIR}/macosx_DeployApp.py --nobundle ${PACKAGETMPDIR} - fi - #hdiutil create -srcfolder ${PACKAGETMPDIR} -format UDBZ -volname "Quassel ${BUILDTYPE} - ${QUASSEL_VERSION}" "${WORKINGDIR}Quassel${BUILDTYPE}_MacOSX-universal_${QUASSEL_VERSION}.dmg" >/dev/null - hdiutil create -srcfolder ${PACKAGETMPDIR} -format UDBZ -volname "Quassel ${BUILDTYPE} - ${QUASSEL_VERSION}" "${WORKINGDIR}${QUASSEL_DMG}" >/dev/null - rm -rf ${PACKAGETMPDIR} +QUASSEL_DMG="Quassel${BUILDTYPE}_MacOSX-x86_64_${QUASSEL_VERSION}.dmg" + +# Default to null string +if [[ -z ${3:-} ]]; then + ADDITIONAL_PLUGINS="" else - echo >&2 "Valid parameters are \"Client\" or \"Core\"" + # Options provided, append to list + ADDITIONAL_PLUGINS=",$3" fi + +echo "ADDITIONAL_PLUGINS: ${ADDITIONAL_PLUGINS}" + +mkdir $PACKAGETMPDIR +case $BUILDTYPE in +"Client") + cp -r ${WORKINGDIR}Quassel\ Client.app ${PACKAGETMPDIR}/ + ${SCRIPTDIR}/macosx_DeployApp.py --plugins=qcocoa,qgenericbearer,qcorewlanbearer,qmacstyle${ADDITIONAL_PLUGINS} "${PACKAGETMPDIR}/Quassel Client.app" + ;; +"Core") + cp ${WORKINGDIR}quasselcore ${PACKAGETMPDIR}/ + ${SCRIPTDIR}/macosx_DeployApp.py --nobundle --plugins=qsqlite,qsqlpsql${ADDITIONAL_PLUGINS} ${PACKAGETMPDIR} + ;; +"Mono") + cp -r ${WORKINGDIR}Quassel.app ${PACKAGETMPDIR}/ + ${SCRIPTDIR}/macosx_DeployApp.py --plugins=qsqlite,qsqlpsql,qcocoa,qgenericbearer,qcorewlanbearer,qmacstyle${ADDITIONAL_PLUGINS} "${PACKAGETMPDIR}/Quassel.app" + ;; +*) + echo >&2 "Valid parameters are \"Client\", \"Core\", or \"Mono\"." + rmdir ${PACKAGETMPDIR} + exit 1 + ;; +esac + +echo "Creating macOS disk image with hdiutil: 'Quassel ${BUILDTYPE} - ${QUASSEL_VERSION}'" + +# hdiutil seems to have a bit of a reputation for failing to create disk images +# for various reasons. +# +# If you've come here to see why on earth your macOS build is failing despite +# making changes entirely unrelated to macOS, you have my sympathy. +# +# There are two main approaches: +# +# 1. Let hdiutil calculate a size automatically +# +# 2. Separately calculate the size with a margin of error, then specify this +# to hdiutil during disk image creation. +# +# Both seem to have caused issues, but in recent tests, option #1 seemed more +# reliable. +# +# Option 1: + +hdiutil create -srcfolder ${PACKAGETMPDIR} -format UDBZ -volname "Quassel ${BUILDTYPE} - ${QUASSEL_VERSION}" "${WORKINGDIR}${QUASSEL_DMG}" >/dev/null + +# If hdiutil changes over time and fails often, you can try the other option. +# +# Option 2: +# +#PACKAGESIZE_MARGIN="1.1" +#PACKAGESIZE=$(echo "$(du -ms ${PACKAGETMPDIR} | cut -f1) * $PACKAGESIZE_MARGIN" | bc) +#echo "PACKAGESIZE: $PACKAGESIZE MB" +#hdiutil create -srcfolder ${PACKAGETMPDIR} -format UDBZ -size ${PACKAGESIZE}M -volname "Quassel ${BUILDTYPE} - ${QUASSEL_VERSION}" "${WORKINGDIR}${QUASSEL_DMG}" >/dev/null + + +# Regardless of choice, clean up the packaging temporary directory +rm -rf ${PACKAGETMPDIR}