#!/bin/bash # Executables QMAKE="/usr/local/Trolltech/Qt-4.7.3/bin/qmake" MACDEPLOYQT="/usr/bin/macdeployqt" DMGUTIL="`pwd`/../Sankore-ThirdParty/refnum/dmgutil/dmgutil.pl" DSYMUTIL=/usr/bin/dsymutil STRIP=/usr/bin/strip PLISTBUDDY=/usr/libexec/PlistBuddy # Directories BUILD_DIR="build/macx/release" PRODUCT_DIR="$BUILD_DIR/product" function notify { GROWLNOTIFY=`which growlnotify` if [ -x "$GROWLNOTIFY" ]; then $GROWLNOTIFY --name uniboard-build --iconpath /Developer/Applications/Xcode.app --message "$1" "Uniboard" fi printf "\033[32m--->\033[0m $1\n" } function abort { printf "\033[31merror:\033[0m $1\n" exit 1 } function warn { abort "$1" } function checkExecutable { if [ ! -x "$1" ]; then abort "$1 not found" fi } trap "defaults write com.mnemis.Uniboard.release Running -bool NO" EXIT notify "Running Uniboard release script (`date`)" script_is_running=`defaults read com.mnemis.Uniboard.release Running 2>/dev/null` if [[ $? -eq 0 ]] && [[ "$script_is_running" = "1" ]]; then trap EXIT abort "another release script already running" fi defaults write com.mnemis.Uniboard.release Running -bool YES # Check for executables checkExecutable "$QMAKE" checkExecutable "$MACDEPLOYQT" checkExecutable "$DMGUTIL" checkExecutable "$DSYMUTIL" checkExecutable "$STRIP" checkExecutable "$PLISTBUDDY" # delete the build directory notify "Cleaning ..." rm -rf "$BUILD_DIR" # generate Makefiles notify "Generating Makefile ..." QMAKE_CMD="$QMAKE -spec macx-g++" $QMAKE_CMD # build notify "Compiling ..." make -j4 release VERSION=`cat "$BUILD_DIR/version"` if [ ! -f "$BUILD_DIR/version" ]; then echo "version not found" exit 1 else LAST_COMMITED_VERSION="`git describe $(git rev-list --tags --max-count=1)`" if [ "v$VERSION" != "$LAST_COMMITED_VERSION" ]; then echo creating a tag with the version $VERSION git tag -a "v$VERSION" -m "Generated setup for v$VERSION" git push origin --tags fi fi if [ $? != 0 ]; then abort "compilation failed" fi NAME="Sankore 3.1" DMG="$NAME.dmg" VOLUME="/Volumes/$NAME" APP="$PRODUCT_DIR/Sankore 3.1.app" DSYM_NAME="$NAME (r$SVN_REVISION).dSYM" DSYM="$PRODUCT_DIR/$DSYM_NAME" GSYM_i386="$PRODUCT_DIR/$NAME i386.sym" INFO_PLIST="$APP/Contents/Info.plist" rm -f "$APP/Contents/Resources/empty.lproj" notify "Removing .svn directories ..." find "$APP" -name .svn -exec rm -rf {} \; 2> /dev/null # set various version infomration in Info.plist $PLISTBUDDY -c "Set :CFBundleVersion $SVN_REVISION" "$INFO_PLIST" $PLISTBUDDY -c "Set :CFBundleShortVersionString $VERSION" "$INFO_PLIST" $PLISTBUDDY -c "Set :CFBundleGetInfoString $NAME" "$INFO_PLIST" # bundle Qt Frameworks into the app bundle notify "Bulding frameworks ..." $MACDEPLOYQT "$APP" notify "Extracting debug information ..." $DSYMUTIL "$APP/Contents/MacOS/Sankore 3.1" -o "$DSYM" $STRIP -S "$APP/Contents/MacOS/Sankore 3.1" notify "Creating dmg ..." umount "$VOLUME" 2> /dev/null $DMGUTIL --open --volume="$NAME" "$DMG" cp -R "$APP" "$VOLUME" ln -s /Applications "$VOLUME" $DMGUTIL --set --iconsize=96 --toolbar=false --icon=resources/macx/UniboardDmg.icns "$VOLUME" $DMGUTIL --set --x=20 --y=60 --width=580 --height=312 "$VOLUME" $DMGUTIL --set --x=180 --y=160 "$VOLUME/`basename \"$APP\"`" $DMGUTIL --set --x=400 --y=160 "$VOLUME/Applications" $DMGUTIL --close --volume="$NAME" "$DMG" notify "$NAME is built" PRODUCT_DIR="install/mac/" if [ ! -d "${PRODUCT_DIR}" ]; then mkdir -p "${PRODUCT_DIR}" fi mv "$DMG" "${PRODUCT_DIR}" exit 0