Marble: Difference between revisions

    From KDE TechBase
    (→‎Mac OS X: Document how to package Qt-only Marble)
    Line 36: Line 36:


    ===Mac OS X===
    ===Mac OS X===
    ==== 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.


    ===Windows===
    ===Windows===

    Revision as of 12:17, 3 May 2009


    Projects/Marble


    About Marble

    Marble FAQ

    Examples of Use

    Applications using the Marble library

    Using the Marble Widget in other applications

    with QtDesigner
    with C++
    with Python
    via a shell script

    How to become a Marble developer ("Marblehead")

    So you are new to Marble development ...

    Welcome!

    Here you'll get all the information you need to start Marble development:

    How to become a Marble Developer

    Packaging Marble

    Here is some advice about how packaging is supposed to happen on the various plattforms that are supported.

    General

    Linux

    Mac OS X

    Qt-Only

    Configure Marble with:

    cmake -DCMAKE_BUILD_TYPE=release -DQTONLY=ON -DCMAKE_INSTALL_PREFIX=/Applications/ ../marble
    

    To generate a Diskimage (.dmg) one can use this script (based on parts by Tim Sutton, thanks!):

    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}

    1. Mount the disk image

    hdiutil attach ~/Desktop/${DMGNAME}

    1. 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 ' ')

    1. copy in the application bundle

    cp -Rp /Applications/${APPNAME}.app ${VOLUME}/${APPNAME}.app

    1. 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

    1. copy in background image

    mkdir -p ${VOLUME}/Pictures

    1. fixme: path

    cp ~/Desktop/marble-dmg-background.png ${VOLUME}/Pictures/background.png

    1. symlink applications

    ln -s /Applications/ ${VOLUME}/Applications set_bundle_display_options ${VOLUME} mv ${VOLUME}/Pictures ${VOLUME}/.Pictures

    1. Unmount the disk image

    hdiutil detach $DEV

    1. Convert the disk image to read-only

    hdiutil convert ~/Desktop/${DMGNAME} -format UDBZ -o ~/Desktop/${COMPRESSEDDMGNAME}


    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.

    Windows

    Programming Coordination

    Here are a few links to various issues we are working on:

    User Interface

    Mockups

    Texture Mapping

    Texture Mapping

    GeoData Library / KML

    GeoData Library
    KML Status
    GPX Status

    GeoPainter / DGML

    GeoPainter
    DGML

    Marble Runner

    Coordinate Runner
    OSM Runner
    Runner HOWTO

    Projections

    Winkel III

    Tile Download

    Tile Download

    Documentation

    API Docs
    How to customize maps
    Marble's Secrets
    How to use the Proxy

    GeoClue / GPS

    GeoClue support in Marble

    Mapping Coordination

    Documentation

    How to create Historical Maps
    Global Palaeogeography

    Routing

    General ideas about routing

    Meetings

    Summaries and logs of scheduled Marble meetings can be found on the following pages:

    Wednesday Nov. 10th, 2008