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