|
|
(4 intermediate revisions by 3 users not shown) |
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!):
| |
| | |
| <code bash>
| |
| VERSION=0.7.1
| |
| APPNAME=Marble
| |
| | |
| VOLNAME=${APPNAME}-${VERSION}
| |
| DMGNAME=${VOLNAME}Uncompressed.dmg
| |
| COMPRESSEDDMGNAME=${VOLNAME}.dmg
| |
| | |
| function deploy_file() {
| |
| for n in $(otool -L $1 | grep Qt); do
| |
| path=`echo $n | grep Qt`
| |
| if [ $path ] ; then
| |
| name=$(basename $path)
| |
| FRAMEWORKS="$FRAMEWORKS $name"
| |
| fi
| |
| done
| |
| | |
| for framework in $FRAMEWORKS ; do
| |
| install_name_tool -change \
| |
| $framework.framework/Versions/4/$framework \
| |
| @executable_path/../Frameworks/$framework.framework/Versions/4/$framework \
| |
| $1
| |
| done
| |
| }
| |
| | |
| function deploy_plugins() {
| |
| for plugin in $1/Contents/Resources/plugins/*; 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 "Marble.app" to {100,150}
| |
| set position of item "Applications" to {280, 150}
| |
| set background picture of the icon view options of container window to file "background.png" 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 150m -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.7.dylib"
| |
| deploy_plugins ${VOLUME}/${APPNAME}.app
| |
| | |
| # copy in background image
| |
| mkdir -p ${VOLUME}/Pictures
| |
| # fixme: path
| |
| cp ~/Desktop/marble-dmg-background.png ${VOLUME}/Pictures/background.png
| |
| # 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}
| |
| </code>
| |
| | |
| | |
| 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.
| |