Packaging a Qt application
(→Example: wikify) |
|||
Line 204: | Line 204: | ||
* [[Packaging|Packaging guide for Maemo]] | * [[Packaging|Packaging guide for Maemo]] | ||
* [http://standards.freedesktop.org/desktop-entry-spec/desktop-entry-spec-latest.html Desktop entry specification] | * [http://standards.freedesktop.org/desktop-entry-spec/desktop-entry-spec-latest.html Desktop entry specification] | ||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
[[Category:Development]] | [[Category:Development]] | ||
[[Category:Qt]] | [[Category:Qt]] |
Revision as of 11:16, 1 February 2010
Contents |
Packaging a Qt application for Maemo
Main article: Packaging
Packaging a Qt application for Maemo is very similar to packaging any other application, so this document only contains information on Qt-specific packaging issues.
Creating a Maemo package from a qmake project
In order to create a new package for Maemo, from a qmake project, you will need to:
- Rename the upstream source directory to
Package-Version
(for example myapp-0.1 for an application myapp with a version of 0.1) - Create “src” directory in Package-Version/
- Copy all the files to the
src/
directory - Rename
src/appname.pro
tosrc/src.pro
$mv myapp myapp-0.1 $cd myapp-0.1 $mkdir src $cp * src $mv src/appname.pro src/src.pro
Append the following chunk to end of your src/src.pro
. The chunk adds an install section to your qmakefile
unix { #VARIABLES isEmpty(PREFIX) { PREFIX = /usr/local } BINDIR = $$PREFIX/bin DATADIR =$$PREFIX/share DEFINES += DATADIR=\"$$DATADIR\" PKGDATADIR=\"$$PKGDATADIR\" #MAKE INSTALL INSTALLS += target desktop iconxpm icon26 icon48 icon64 target.path =$$BINDIR desktop.path = $$DATADIR/applications/hildon desktop.files += $${TARGET}.desktop iconxpm.path = $$DATADIR/pixmap iconxpm.files += ../data/maemo/$${TARGET}.xpm icon26.path = $$DATADIR/icons/hicolor/26x26/apps icon26.files += ../data/26x26/$${TARGET}.png icon48.path = $$DATADIR/icons/hicolor/48x48/apps icon48.files += ../data/48x48/$${TARGET}.png icon64.path = $$DATADIR/icons/hicolor/64x64/apps icon64.files += ../data/64x64/$${TARGET}.png }
- Create a
myapp-0.1/myapp.pro
file like this:
QMAKEVERSION = $$[QMAKE_VERSION] ISQT4 = $$find(QMAKEVERSION, ^[2-9]) isEmpty( ISQT4 ) { error("Use the qmake include with Qt4.4 or greater, on Debian that is qmake-qt4"); } TEMPLATE = subdirs SUBDIRS = src
- Run dh_make to debianize the source archive, it creates:
- An archive with the unchanged upstream source (orig.tar.gz)
- Some basic files in the debian directory
- Some example files (*.EX *.ex)
export DEBFULLNAME="maintainer first name and last name" dh_make --createorig --single -e maintainer@email.org -c gpl
Having a look inside the debian/ dir
At this point the directory my-app contains
- the source directory ( src/ )
- the debian directory (debian/)
Inside the debian dir we have the files needed for the creation of the debian package
- Changelog - Application's change log
- Compat - Debian helper compatibly version
- Control - Describes the packages to be made
- Copyright - Copyright text
- Rules - A binary makefile containing the rules to build the package
Editing the rules file
The rules file generated by dh_make will be modified in order to look like this one. We are using qmake, so we haven't a configure file to run. If you cut-and-paste following file, notify that empty space beginning of lines it TAB characters, it is not multiple space characters. If you cut-and-paste the following chunk, you most propably get spaces instead tabs and the file does not wok
#!/usr/bin/make -f APPNAME := my_app_name builddir: mkdir -p builddir builddir/Makefile: builddir cd builddir && qmake-qt4 PREFIX=/usr ../$(APPNAME).pro build: build-stamp build-stamp: builddir/Makefile dh_testdir # Add here commands to compile the package. cd builddir && $(MAKE) touch $@ clean: dh_testdir dh_testroot rm -f build-stamp # Add here commands to clean up after the build process. rm -rf builddir dh_clean install: build dh_testdir dh_testroot dh_clean -k dh_installdirs # Add here commands to install the package into debian/your_appname cd builddir && $(MAKE) INSTALL_ROOT=$(CURDIR)/debian/$(APPNAME) install # Build architecture-independent files here. binary-indep: build install # We have nothing to do by default. # Build architecture-dependent files here. binary-arch: build install dh_testdir dh_testroot dh_installdocs dh_installexamples dh_installman dh_link dh_strip --dbg-package=my-application-dbg dh_compress dh_fixperms dh_installdeb dh_shlibdeps dh_gencontrol dh_md5sums dh_builddeb binary: binary-indep binary-arch .PHONY: build clean binary-indep binary-arch binary install configure
Application menu icon & position
The Maemo application menu detects automatically an app that provides a .desktop file in /usr/share/application/hildon . If you don't have desktop file, create one in the src directory.
[Desktop Entry] Encoding=UTF-8 Version=0.1 Type=Application Name=myapp Exec=/usr/bin/myapp Icon=myapp X-HildonDesk-ShowInToolbar=true X-Osso-Type=application/x-executable
Maemo menu structure is completely different from Debian:
- An unmodified Debian package installs the proper .desktop in /usr/share/applications
- Applications that use the debian menu are displayed in the extra menu
In order to show our application in the correct Maemo menu:
- debian/myapp.install moves the .desktop file and icons in the right directory
src/*.desktop usr/share/applications/hildon src/*.png usr/share/icons/hicolor/26x26/apps
- debian/postinst should call maemo-select-menu-location utility to permit the user to choose the menu location. This works only in Diablo, it doesn't work in Fremantle.
#!/bin/sh maemo-select-menu-location myapp.desktop
Example
You can download the source package of qt-maemo-example from the extras-devel repository as follows, if you have source packages enabled in your /etc/apt/sources.list
file:
apt-get source qt-maemo-example
This command will download the:
- unmodified source (.orig.tar.gz)
- debian dsc file (.dsc)
- diff file (.diff)
and will then automatically launch dpkg -x file.dsc
in order to decompress the orig.tar.gz and apply the changes.