Qt4-based Ebuild HowTo

Markos Chandras  Author

Updated June 26, 2009

1.  Choosing eclass and EAPI version

Valid EAPI version

The first step for your shiny Qt4-based ebuild, is to specify the right EAPI. Current eclass is EAPI 2 compatible, so all you need to do is

Code Listing 1.1: Specify correct EAPI version

EAPI="2"
		

That was the most important step for your ebuild.

Inherit qt4 eclass

All qt4 based ebuilds, can use qt4 eclass which provides usefull tools and operation (listed below) for building qt4 applications.

Code Listing 1.2: Inherit qt4 eclass

inherit qt4
		

2.  Dependencies and Use flags

Depend on qt4 split packages

Since Qt-4.4.0, Gentoo Qt team, splits monolithic Qt4 package into smaller packages. Those are

Now all you need to do, is to specify the correct modules on DEPEND variable

Code Listing 2.1: Simple example to demonstrate proper qt4 split dependencies usage

DEPEND="x11-libs/qt-gui:4
	x11-libs/qt-sql:4"
	

Warning: Even though there is a qt4 metapackage, you must NOT use it as a dependency.

Debug and Release scope

Qt offers you the ability to build your applications using two different modes:

Thus, qt4 eclass can use the 'debug' use flag in order to build your application with debug symbols.

Code Listing 2.2: Add 'debug' use flag

	IUSE="debug"
	

In case 'debug' use flag is present on IUSE, you must adjust the qt dependencies accordingly

Code Listing 2.3: Adjusted qt4 dependencies

	DEPEND="x11-libs/qt-gui:4[debug?]
		x11-libs/qt-sql:4[debug?]"
	

Important: 'debug' use flag usage implies that you have already followed the "How to get meaningful backtraces in Gentoo" tutorial.

3.  Preparing the package

src_prepare function

EAPI2 introduced the src_prepare function which is executed right after src_unpack. The default implementation does nothing. Most of the time, you wont need to use this function at all. Patches are applied automatically via autopatcher

Applying patches

Qt4 eclass uses the base eclass autopatcher in order to apply patches. All you have to do is to specify which patches you want to apply using PATCHES variable

Code Listing 3.1: Simple example for using PATCHES variable

PATCHES=(
	"${FILESDIR}/fixconfig.patch"
	"${FILESDIR}/fixgui.patch"
)
		

Important: Please note that PATCHES is an array, so you will always need to includes patches between parenthesis.

4.  Configure the sources

The 'magic' eqmake4 tool

We provide a special function for configuring Qt4 project files. That is eqmake4 which is provided by qt4 eclass. It is based on qmake, plus it uses default Qt variables for proper package configuration. Packages should be configured under src_configure function.

Code Listing 4.1: Simple example for src_configure function

src_configure() {
	eqmake4
}
		

Important: eqmake4 does not need a 'die' statement.

There are some rare occasions where eqmake4 fails, but qmake works. Please fill a bug about this in order to take care of it

5.  Installation

src_install function

Most Qt4 packages use INSTALL_ROOT variable instead of DESTDIR on their Makefiles. Make sure not to use DESTDIR on src_install, otherwise you will end up with Access violation errors. Below there is an example src_install for most Qt4 packages

Code Listing 5.1: Simple example for src_install function

src_install() {
	emake INSTALL_ROOT="${D}" install || die "emake install failed"
	dodoc README AUTHORS || die "dodoc failed"
}