Packaging a Qt application
m (Packaging category) |
(→Creating a Maemo package from a qmake project) |
||
| Line 31: | Line 31: | ||
DATADIR =$$PREFIX/share | DATADIR =$$PREFIX/share | ||
| - | DEFINES += DATADIR=\"$$DATADIR\" PKGDATADIR=\"$$PKGDATADIR\" | + | DEFINES += DATADIR=\\\"$$DATADIR\\\" PKGDATADIR=\\\"$$PKGDATADIR\\\" |
#MAKE INSTALL | #MAKE INSTALL | ||
Revision as of 22:50, 17 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 source directory to
Package-Version(for example myapp-0.1 for an application ‘myapp’ with a version of ‘0.1’) - Create a ‘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 there is no configure script to run. If you copy and paste the following file, notice that empty space beginning of lines it TAB characters, it is not multiple space characters. If you copy and paste the following chunk, you most propably get spaces instead of tabs and the file does not work.
#!/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.
