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
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
|
DESCRIPTION = "Qtopia Core (aka: Qt/Embedded)"
SECTION = "libs"
LICENSE = "GPL"
PRIORITY = "optional"
HOMEPAGE = "http://www.trolltech.com"
DEPENDS = "glib-2.0 freetype dbus-glib tslib"
PR = "r2"
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}"
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
PARALLEL_MAKE = ""
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="echo"
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 qt4_arch.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 \
-nomake demos -nomake examples -nomake tools \
-qt-mouse-tslib"
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
touch ${D}/${libdir}/fonts/fontdir
#TT is still new to pkgconfig, so fix it up
install -d ${D}${libdir}/pkgconfig
mv ${D}/${libdir}/*.pc ${D}${libdir}/pkgconfig/
}
# 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 =+ " libqtcore libqtcore-dev libqtcore-dbg \
libqtxml libqtxml-dev libqtxml-dbg \
libqtgui libqtgui-dev libqtgui-dbg \
libqtsql libqtsql-dev libqtsql-dbg \
libqtnetwork libqtnetwork-dev libqtnetwork-dbg \
libqtsvg libqtsvg-dev libqtsvg-dbg \
libqt3support libqt3support-dev libqt3support-dbg \
qtopia-core-plugins qtopia-core-plugins-dbg\
"
PACKAGES += " ${PN}-fonts "
# 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.
FILES_libqtcore += " ${libdir}/fonts/helvetic* ${libdir}/fonts/fixed* ${D}/${libdir}/fonts/fontdir"
FILES_${PN}-fonts = "${libdir}/fonts"
FILES_qtopia-core-plugins += "${datadir}/qtopia/plugins/*/*.so"
FILES_qtopia-core-plugins-dbg += "${datadir}/qtopia/plugins/*/.debug/*.so"
FILES_libqtcore += "${libdir}/libQtCore.so.*"
FILES_libqtxml += "${libdir}/libQtXml.so.*"
FILES_libqtgui += "${libdir}/libQtGui.so.*"
FILES_libqtsql += "${libdir}/libQtSql.so.*"
FILES_libqtnetwork += "${libdir}/libQtNetwork.so.*"
FILES_libqtsvg += "${libdir}/libQtSvg.so.*"
FILES_libqt3support += "${libdir}/libQt3Support.so.*"
FILES_libqtcore-dev += "${libdir}/*QtCore.*"
FILES_libqtxml-dev += "${libdir}/*QtXml.*"
FILES_libqtgui-dev += "${libdir}/*QtGui.*"
FILES_libqtsql-dev += "${libdir}/*QtSql.*"
FILES_libqtnetwork-dev += "${libdir}/*QtNetwork.*"
FILES_libqtsvg-dev += "${libdir}/*QtSvg.*"
FILES_libqt3support-dev += "${libdir}/*Qt3Support.*"
FILES_libqtcore-dbg += "${libdir}/.debug/libQtCore*"
FILES_libqtxml-dbg += "${libdir}/.debug/libQtXml*"
FILES_libqtgui-dbg += "${libdir}/.debug/libQtGui*"
FILES_libqtsql-dbg += "${libdir}/.debug/libQtSql*"
FILES_libqtnetwork-dbg += "${libdir}/.debug/libQtNetwork*"
FILES_libqtsvg-dbg += "${libdir}/.debug/libQtSvg*"
FILES_libqt3support-dbg += "${libdir}/.debug/libQt3Support*"
python populate_packages_prepend() {
translationdir = bb.data.expand('${datadir}/qtopia/translations/', d)
do_split_packages(d, translationdir, '^qt_(.*)\.qm$', 'qtopia-translation-%s', 'Qtopia translation for %s', extra_depends='' )
}
STAGE_TEMP = "${WORKDIR}/temp-staging"
do_stage() {
rm -rf ${STAGE_TEMP}
mkdir -p ${STAGE_TEMP}
oe_runmake install INSTALL_ROOT=${STAGE_TEMP}
cp -pPRf ${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}
}
|