release.macx.sh 7.12 KB
Newer Older
Claudio Valerio's avatar
Claudio Valerio committed
1
#!/bin/bash
Claudio Valerio's avatar
Claudio Valerio committed
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
# --------------------------------------------------------------------
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
# ---------------------------------------------------------------------

17

18
BASE_TROLLTECH_DIRECTORY=/usr/local/Trolltech/Qt-4.8.0
Claudio Valerio's avatar
Claudio Valerio committed
19
# Executables
20 21
QMAKE=$BASE_TROLLTECH_DIRECTORY/bin/qmake
MACDEPLOYQT=$BASE_TROLLTECH_DIRECTORY/bin/macdeployqt
22
DMGUTIL="`pwd`/../Sankore-ThirdParty/refnum/dmgutil/dmgutil.pl"
Claudio Valerio's avatar
Claudio Valerio committed
23 24 25
DSYMUTIL=/usr/bin/dsymutil
STRIP=/usr/bin/strip
PLISTBUDDY=/usr/libexec/PlistBuddy
Claudio Valerio's avatar
Claudio Valerio committed
26
ICEBERG=/usr/local/bin/freeze
27
LRELEASE=$BASE_TROLLTECH_DIRECTORY/bin/lrelease
Claudio Valerio's avatar
Claudio Valerio committed
28 29 30 31

# Directories
BUILD_DIR="build/macx/release"
PRODUCT_DIR="$BUILD_DIR/product"
32
BASE_QT_TRANSLATIONS_DIRECTORY=../Qt4.8/translations
Claudio Valerio's avatar
Claudio Valerio committed
33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56

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
}

57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
function addQtTranslations {
for eachTranslation in `ls $BASE_QT_TRANSLATIONS_DIRECTORY/qt_??.qm`
do
    # looking fo the language code for each qt translation file
    languageCode=`echo $eachTranslation | sed 's/.*qt_\(.*\).qm/\1/'`
    basicDir=$PRODUCT_DIR/Open-Sankore.app/Contents/Resources/
    for eachDirectory in `ls $basicDir`
    do
        # looping through the Sankore availables languages
        directoryLanguageCode=`echo $eachDirectory | sed 's/\(.*\)\.lproj/\1/'`
        if [ ! -z $directoryLanguageCode ]; then
            if [[ $eachDirectory == *".lproj"* && $eachDirectory != "empty.lproj" && $directoryLanguageCode == *$languageCode* ]]; then
                # sankore translation found for qt translation file
                cp $eachTranslation $basicDir/$eachDirectory
                if [ $directoryLanguageCode != $languageCode ]; then
                    # handling fr and fr_CH code.
                    mv $basicDir/$eachDirectory/qt_$languageCode.qm $basicDir/$eachDirectory/qt_$directoryLanguageCode.qm
                fi
            fi
        fi
    done
done

}

Claudio Valerio's avatar
Claudio Valerio committed
82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
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"
Claudio Valerio's avatar
Claudio Valerio committed
100
checkExecutable "$ICEBERG"
101
checkExecutable "$LRELEASE"
Claudio Valerio's avatar
Claudio Valerio committed
102 103 104 105 106

# delete the build directory
notify "Cleaning ..."
rm -rf "$BUILD_DIR"

107 108
# application translations
notify "Generating applications translatons"
109 110
$LRELEASE "Sankore_3.1.pro"

Claudio Valerio's avatar
Claudio Valerio committed
111 112 113
# generate Makefiles
notify "Generating Makefile ..."

114
QMAKE_CMD="$QMAKE Sankore_3.1.pro -spec macx-g++"
Claudio Valerio's avatar
Claudio Valerio committed
115 116 117

$QMAKE_CMD

shibakaneki's avatar
shibakaneki committed
118 119 120 121
# build
notify "Compiling ..."
make -j4 release

122
notify "Qt Translations ..."
123
$LRELEASE $BASE_QT_TRANSLATIONS_DIRECTORY/translations.pro 
124 125
addQtTranslations

126
cp -R resources/customizations $PRODUCT_DIR/Open-Sankore.app/Contents/Resources
127 128

notify "Tagging ..."
Claudio Valerio's avatar
Claudio Valerio committed
129
VERSION=`cat "$BUILD_DIR/version"`
shibakaneki's avatar
shibakaneki committed
130
if [ ! -f "$BUILD_DIR/version" ]; then
131 132 133 134 135 136
    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
137 138
	#git tag -a "v$VERSION" -m "Generated setup for v$VERSION"
	#git push origin --tags
139
    fi
Claudio Valerio's avatar
Claudio Valerio committed
140
fi
141
  
142 143 144
if [ $? != 0 ]; then
    abort "compilation failed"
fi
Claudio Valerio's avatar
Claudio Valerio committed
145 146


Claudio Valerio's avatar
Claudio Valerio committed
147
NAME="Open-Sankore"
Claudio Valerio's avatar
Claudio Valerio committed
148 149 150

DMG="$NAME.dmg"
VOLUME="/Volumes/$NAME"
Claudio Valerio's avatar
Claudio Valerio committed
151
APP="$PRODUCT_DIR/Open-Sankore.app"
Claudio Valerio's avatar
Claudio Valerio committed
152 153 154 155 156 157 158 159 160 161 162
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
Claudio Valerio's avatar
Claudio Valerio committed
163
$PLISTBUDDY -c "Set :CFBundleVersion $VERSION" "$INFO_PLIST"
Claudio Valerio's avatar
Claudio Valerio committed
164 165 166 167 168
$PLISTBUDDY -c "Set :CFBundleShortVersionString $VERSION" "$INFO_PLIST"
$PLISTBUDDY -c "Set :CFBundleGetInfoString $NAME" "$INFO_PLIST"

# bundle Qt Frameworks into the app bundle
notify "Bulding frameworks ..."
Claudio Valerio's avatar
Claudio Valerio committed
169 170 171
cd "`pwd`/build/macx/release/product/"
$MACDEPLOYQT "`pwd`/Open-Sankore.app"
cd -
Claudio Valerio's avatar
Claudio Valerio committed
172 173

notify "Extracting debug information ..."
Claudio Valerio's avatar
Claudio Valerio committed
174 175
$DSYMUTIL "$APP/Contents/MacOS/Open-Sankore" -o "$DSYM"
$STRIP -S "$APP/Contents/MacOS/Open-Sankore"
Claudio Valerio's avatar
Claudio Valerio committed
176

Claudio Valerio's avatar
Claudio Valerio committed
177
if [ "$1" == "pkg" ]; then
178 179 180 181
    BASE_ICEBERG_CONFIG_FILE="Open-Sankore.packproj"
    #copy the standard file for working with
    ICEBERG_CONFIG_FILE="Open-Sankore-working.packproj"
    cp -r $BASE_ICEBERG_CONFIG_FILE $ICEBERG_CONFIG_FILE
Claudio Valerio's avatar
Claudio Valerio committed
182 183 184 185 186 187 188 189 190 191 192 193 194
    # set version information
    $PLISTBUDDY -c "Set :Hierarchy:Attributes:Settings:Description:International:IFPkgDescriptionVersion $VERSION" "$ICEBERG_CONFIG_FILE"
    $PLISTBUDDY -c "Set :Hierarchy:Attributes:Settings:Display\ Information:CFBundleShortVersionString $VERSION" "$ICEBERG_CONFIG_FILE"
    $PLISTBUDDY -c "Set :Hierarchy:Attributes:Settings:Version:IFMajorVersion `echo $VERSION | awk 'BEGIN { FS = "." }; { print $1 }'`" "$ICEBERG_CONFIG_FILE"
    $PLISTBUDDY -c "Set :Hierarchy:Attributes:Settings:Version:IFMinorVersion `echo $VERSION | awk 'BEGIN { FS = "." }; { print $2 }'`" "$ICEBERG_CONFIG_FILE"


    PRODUCT_DIR="install/mac/"

    if [ ! -d "${PRODUCT_DIR}" ]; then
	mkdir -p "${PRODUCT_DIR}"
    fi
    $ICEBERG $ICEBERG_CONFIG_FILE 
195 196 197 198

    #clean up mess
    rm -rf $ICEBERG_CONFIG_FILE

Claudio Valerio's avatar
Claudio Valerio committed
199 200 201
    exit 0
fi

Claudio Valerio's avatar
Claudio Valerio committed
202 203 204 205
notify "Creating dmg ..."
umount "$VOLUME" 2> /dev/null
$DMGUTIL --open --volume="$NAME" "$DMG"

Claudio Valerio's avatar
Claudio Valerio committed
206
cp *.pdf "$VOLUME"
Claudio Valerio's avatar
Claudio Valerio committed
207 208 209 210
cp -R "$APP" "$VOLUME"
ln -s /Applications "$VOLUME"

$DMGUTIL --set --iconsize=96 --toolbar=false --icon=resources/macx/UniboardDmg.icns "$VOLUME"
Claudio Valerio's avatar
Claudio Valerio committed
211 212 213 214 215
$DMGUTIL --set --x=20 --y=60 --width=580 --height=440 "$VOLUME"
$DMGUTIL --set --x=180 --y=120 "$VOLUME/`basename \"$APP\"`"
$DMGUTIL --set --x=400 --y=120 "$VOLUME/Applications"
$DMGUTIL --set --x=180 --y=280 "$VOLUME/ReleaseNotes.pdf"
$DMGUTIL --set --x=400 --y=280 "$VOLUME/JournalDesModifications.pdf"
Claudio Valerio's avatar
Claudio Valerio committed
216 217 218 219 220 221 222 223 224 225 226 227 228 229 230

$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