aboutsummaryrefslogtreecommitdiffstats
path: root/packages/qte/qtopia-core_4.2.0.bb
blob: ecb5978fed0d234e9363153afedce805f8a7dd26 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
DESCRIPTION = "Qtopia Core (aka: Qt/Embedded)"
SECTION = "libs"
LICENSE = "GPL"
PRIORITY = "optional"
HOMEPAGE = "http://www.trolltech.com"
DEPENDS = "glib-2.0 dbus-glib tslib"
PR = "r1"

SRC_URI = "ftp://ftp.trolltech.com/qt/source/qtopia-core-opensource-src-${PV}.tar.gz \
           file://linux-oe-qmake.conf"

S = "${WORKDIR}/qtopia-core-opensource-src-${PV}"

PARALLEL_MAKE = ""

inherit pkgconfig

# I'm not sure about the globals QTDIR and QTOPIADIR, or if they're even
# needed. On the same issue, I'm not sure what the best place for all the
# Qtopia Core related files is. For now, I've just put the libraries in
# ${libdir}, the includes in ${includedir} etc. Other possibilities are
# to sandbox everything (e.g., in /usr/local/Trolltech or /opt/Qtopia oslt),
# or to put libraries in /usr/lib/qtopia (or /usr/lib/qt4) etc. As said,
# I'm fine with this, but I'm also fine with another solution.

# set QTDIR and QTOPIADIR globally (change QTOPIA dir to QTDIR?)
# This should be the default for other packages:
# export QTDIR = "${STAGING_DIR}/${HOST_SYS}/qt4"
# export QTOPIADIR = "${STAGING_DIR}/${HOST_SYS}/qtopia"
export QTDIR = "${S}"
export QTOPIADIR = "${S}"

# Qmake gets confused by environment variables, as it builds both HOST
# and TARGET objects. The correct compiler settings come from the mkspec
# and are set with the OE_QMAKE_ variables
EXTRA_OEMAKE = " MAKEFLAGS= "

# This stuff could also be done by inheriting qmake, but I didn't want to
# bother with the qmake separation from the Qtopia configure. This separation
# is probably nothing more than a patch on the configure and setting some
# environment variables to use our own qmake/moc/uic, but that's something
# to figure out later.
export OE_QMAKE_CC="${CC}"
export OE_QMAKE_CFLAGS="${CFLAGS}"
export OE_QMAKE_CXX="${CXX}"
export OE_QMAKE_CXXFLAGS="-fno-exceptions ${CXXFLAGS}"
export OE_QMAKE_LDFLAGS="${LDFLAGS}"
export OE_QMAKE_LINK="${CXX}"
export OE_QMAKE_AR="${AR}"
export OE_QMAKE_RANLIB="${RANLIB}"
export OE_QMAKE_STRIP="${STRIP}"
export OE_QMAKE_RPATH="-Wl,-rpath-link,"
export OE_QMAKE_INCDIR_QT="${QTDIR}/include"
export OE_QMAKE_LIBDIR_QT="${QTDIR}/lib"
export OE_QMAKE_INCDIR_QTOPIA="${QTOPIADIR}/include"
export OE_QMAKE_LIBDIR_QTOPIA="${QTOPIADIR}/lib"

require qte-functions.inc
QT_ARCH := "${@qte_arch(d)}"

# FIXME use info.bbclass once it has been commited
QT_ENDIAN = "-little-endian"

# We don't build the examples and demos atm. They're quite big and not used
# frequently, only for testing maybe. Feel free to change and to package
# them separately.
QT_CONFIG_FLAGS = "-release \
	-no-cups -no-accessibility -no-freetype \
	-nomake demos -nomake examples -nomake tools \
	-qt-mouse-tslib"

# We might want to package all the libraries separately, so you can really
# fine-tune what to install. This is e.g. done in qt4-x11-free_4.1.2.bb.
# What should these packages be called? I'm tempted to call them the same
# as in qt4 version, as the API is supposed to be compatible, e.g.
# libqtcore4 and libqtgui4. This will however conflict if you have QT and
# Qtopia, but this is something you don't want anyway, I guess.
# Another solution is making virtual/libqtfoo4, and DEPENDing on that one
# and let both the PACKAGES in QT and Qtopia PROVIDE these. The packages
# themselves could then be called libqtopiafoo4.
# I'll postpone this discussion by not making separate Qtopia packages.

# Also, I don't package the plugins and translations atm, I don't use them
# and I don't feel like thinking about a sensible separation.

# PACKAGES += "libqtopiacore4 libqtopiagui4 ..."
# RDEPENDS_${PN} += "..."

# The default included fonts are around 75MB and consist of a number of
# FreeType-renderable fonts as well as QPF (Qtopia Prerendered Fonts).
# As FreeType is generally slow on embedded platforms, and 75MB is
# quite huge, we downsize the fonts dir in the do_install. I've decided
# to include only the QPF (Helvetica and Fixed), amounting to 500KB. This
# also results in tremendously faster application startup time.
# You might want to package the fonts separately, or include all fonts in
# a separate package.
FILES_${PN} += " /usr/lib/fonts/* "

do_configure() {
	# Install the OE build templates (something which might be done
	# by inheriting qmake)
	for template in linux-oe-g++ linux-uclibc-oe-g++ linux-gnueabi-oe-g++
	do
		install -d ${S}/mkspecs/$template
		install -m 0644 ${WORKDIR}/linux-oe-qmake.conf \
			${S}/mkspecs/$template/qmake.conf
		ln -sf ../linux-g++/qplatformdefs.h \
			${S}/mkspecs/$template/qplatformdefs.h
	done

	# The Qmake Makefile generation doesn't like these environment
	# variables, as they mess up the HOST tools builds
	unset CC
	unset CXX
	unset CFLAGS
	unset CXXFLAGS
	unset LDFLAGS

	# For rationale behind the installation locations, see remark above
	echo yes | ./configure -v \
		-prefix ${prefix} \
		-bindir ${bindir} \
		-libdir ${libdir} \
		-docdir ${docdir}/qtopia \
		-headerdir ${includedir} \
		-plugindir ${datadir}/qtopia/plugins \
		-datadir ${datadir} \
		-translationdir ${datadir}/qtopia/translations \
		-sysconfdir ${sysconfdir} \
		-examplesdir ${bindir}/qtopia/examples \
		-demosdir ${bindir}/qtopia/demos \
		-embedded ${QT_ARCH} ${QT_ENDIAN} -fast \
		-xplatform linux-oe-g++ \
		${QT_CONFIG_FLAGS} \
		-L${STAGING_LIBDIR} -I${STAGING_INCDIR}
}

do_install() {
	oe_runmake install INSTALL_ROOT=${D}

	# These are host binaries, we should only use them in staging
	rm -rf ${D}/${bindir}
	rm -rf ${D}/${datadir}/mkspecs

	# Downsize on the fonts, we're only packaging the Helvetica and
	# Fixed, only the QPF versions. Maybe later add an additional
	# package for all fonts.
	rm -f ${D}/${libdir}/fonts/*
	cp -a ${S}/lib/fonts/helvetica*qpf ${D}/${libdir}/fonts
	cp -a ${S}/lib/fonts/fixed*qpf ${D}/${libdir}/fonts
	touch ${D}/${libdir}/fonts/fontdir
}

STAGE_TEMP = "${WORKDIR}/temp-staging"
do_stage() {
	rm -rf ${STAGE_TEMP}
	mkdir -p ${STAGE_TEMP}
	oe_runmake install INSTALL_ROOT=${STAGE_TEMP}

	cp -af ${STAGE_TEMP}/$includedir/* ${STAGING_INCDIR}

	for i in ${STAGE_TEMP}/${libdir}/*.la
	do
		oe_libinstall -C ${STAGE_TEMP}/${libdir} \
			-so $(basename $i .la) ${STAGING_LIBDIR}
	done

	# Install qmake/moc/uic/rcc in staging (is this needed?)
	install -m 0755 ${STAGE_TEMP}/${bindir}/rcc ${STAGING_BINDIR}
	install -m 0755 ${STAGE_TEMP}/${bindir}/moc ${STAGING_BINDIR}
	install -m 0755 ${STAGE_TEMP}/${bindir}/uic ${STAGING_BINDIR}
	install -m 0755 ${STAGE_TEMP}/${bindir}/qmake ${STAGING_BINDIR}
	# what about mkspecs?

	rm -rf ${STAGE_TEMP}
}