|
|
Line 1: |
Line 1: |
| == Packaging Marble ==
| | {{ Moved To Community }} |
| | |
| Here is some advice about how packaging is supposed to happen on the mac platform.
| |
| | |
| ==== Qt-Only ====
| |
| | |
| Configure Marble with:
| |
| <pre>
| |
| cmake -DCMAKE_BUILD_TYPE=release -DQTONLY=ON -DCMAKE_INSTALL_PREFIX=/Applications/ ../marble
| |
| </pre>
| |
| | |
| To generate a Diskimage (.dmg) one can use this script (based on parts by Tim Sutton, thanks!):
| |
| | |
| <syntaxhighlight lang="bash">
| |
| VERSION=1.3.0
| |
| APPNAME=Marble
| |
|
| |
| VOLNAME=${APPNAME}-${VERSION}
| |
| DMGNAME=${VOLNAME}Uncompressed.dmg
| |
| COMPRESSEDDMGNAME=${VOLNAME}.dmg
| |
|
| |
| function deploy_file() {
| |
| LOCAL_LIB_PATH=/usr/local/Cellar/qt/4.8.0/lib
| |
| for n in $(otool -L $1 | grep -E \(Qt\|phonon\)); do
| |
| path=`echo $n | grep -E \(Qt\|phonon\)`
| |
| if [ $path ] ; then
| |
| name=$(basename $path)
| |
| FRAMEWORKS="$FRAMEWORKS $name"
| |
| fi
| |
| done
| |
|
| |
| for framework in $FRAMEWORKS ; do
| |
| install_name_tool -change \
| |
| $LOCAL_LIB_PATH/$framework.framework/Versions/4/$framework \
| |
| @executable_path/../Frameworks/$framework.framework/Versions/4/$framework \
| |
| $1
| |
| done
| |
| }
| |
|
| |
| function deploy_plugins() {
| |
| find $1/Contents/MacOS/resources/plugins -iname *.so | while read plugin; do
| |
| deploy_file $plugin
| |
| done
| |
| }
| |
|
| |
| function set_bundle_display_options() {
| |
| osascript <<-EOF
| |
| tell application "Finder"
| |
| set f to POSIX file ("${1}" as string) as alias
| |
| tell folder f
| |
| open
| |
| tell container window
| |
| set toolbar visible to false
| |
| set statusbar visible to false
| |
| set current view to icon view
| |
| delay 1 -- sync
| |
| set the bounds to {20, 50, 300, 400}
| |
| end tell
| |
| delay 1 -- sync
| |
| set icon size of the icon view options of container window to 64
| |
| set arrangement of the icon view options of container window to not arranged
| |
| set position of item "Applications" to {100,150}
| |
| set position of item "Marble.app" to {280, 150}
| |
| set background picture of the icon view options of container window to file "background.jpg" of folder "Pictures"
| |
| set the bounds of the container window to {0, 0, 300, 400}
| |
| update without registering applications
| |
| delay 5 -- sync
| |
| close
| |
| end tell
| |
| delay 5 -- sync
| |
| end tell
| |
| EOF
| |
|
| |
| }
| |
|
| |
| function create_symlinks() {
| |
| cd "$1/Contents/Resources"
| |
| ln -s "../MacOS/resources/data/" "data"
| |
| ln -s "../MacOS/resources/plugins/" "plugins"
| |
| cd -
| |
| }
| |
|
| |
|
| |
|
| |
|
| |
| rm ~/Desktop/${DMGNAME}
| |
| rm ~/Desktop/${COMPRESSEDDMGNAME}
| |
| hdiutil create -size 250m -fs HFS+ -volname ${VOLNAME} ~/Desktop/${DMGNAME}
| |
|
| |
| # Mount the disk image
| |
| hdiutil attach ~/Desktop/${DMGNAME}
| |
|
| |
| # Obtain device information
| |
| DEVS=$(hdiutil attach ~/Desktop/${DMGNAME} | cut -f 1)
| |
| DEV=$(echo $DEVS | cut -f 1 -d ' ')
| |
| VOLUME=$(mount |grep ${DEV} | cut -f 3 -d ' ')
| |
|
| |
| # copy in the application bundle
| |
| cp -Rp /Applications/${APPNAME}.app ${VOLUME}/${APPNAME}.app
| |
|
| |
| # fix the libs
| |
| macdeployqt ${VOLUME}/${APPNAME}.app
| |
| create_symlinks ${VOLUME}/${APPNAME}.app
| |
| deploy_file "${VOLUME}/${APPNAME}.app/Contents/MacOS/lib/libmarblewidget.13.dylib"
| |
| deploy_plugins ${VOLUME}/${APPNAME}.app
| |
| | |
| # copy the translations
| |
| cp -r marble/tools/translations/lang ${VOLUME}/${APPNAME}.app/Contents/MacOS/resources/data
| |
| | |
| # copy in background image
| |
| mkdir -p ${VOLUME}/Pictures
| |
| cp marble/install_mac/marble_mac.jpg ${VOLUME}/Pictures/background.jpg
| |
| # symlink applications
| |
| ln -s /Applications/ ${VOLUME}/Applications
| |
| set_bundle_display_options ${VOLUME}
| |
| mv ${VOLUME}/Pictures ${VOLUME}/.Pictures
| |
|
| |
| # Unmount the disk image
| |
| hdiutil detach $DEV
| |
|
| |
| # Convert the disk image to read-only
| |
| hdiutil convert ~/Desktop/${DMGNAME} -format UDBZ -o ~/Desktop/${COMPRESSEDDMGNAME}
| |
| | |
| </syntaxhighlight>
| |
| | |
| | |
| It uses the macdeployqt tool which copies Qt and its plugins into the App Bundle.
| |
| macdeployqt also tells the main application to link against the libs contained in the bundle, instead of the system libs.
| |
| This does not happen to the libmarblewidget and the Marble plugins, so it has to be done by the script.
| |
| The script also sets a background Image for the dmg. (Place it at ~/Desktop/marble-dmg-background.png or change the path in the script)
| |
| | |
| After that you should have Marble-version.dmg on you Desktop.
| |