Packaging a Qt application
| Line 76: | Line 76: | ||
dh_make --createorig --single -e maintainer@email.org -c gpl | dh_make --createorig --single -e maintainer@email.org -c gpl | ||
</pre> | </pre> | ||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
Revision as of 15:00, 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.protosrc/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.profile 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
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.
