summaryrefslogtreecommitdiffstats
path: root/meta/recipes-qt/qt4/qt4.inc
diff options
context:
space:
mode:
Diffstat (limited to 'meta/recipes-qt/qt4/qt4.inc')
-rw-r--r--meta/recipes-qt/qt4/qt4.inc300
1 files changed, 300 insertions, 0 deletions
diff --git a/meta/recipes-qt/qt4/qt4.inc b/meta/recipes-qt/qt4/qt4.inc
new file mode 100644
index 0000000000..16d5bebd36
--- /dev/null
+++ b/meta/recipes-qt/qt4/qt4.inc
@@ -0,0 +1,300 @@
1DESCRIPTION = "Qt is a comprehensive cross-platform C++ application framework"
2HOMEPAGE = "http://qt.nokia.com"
3
4DEPENDS += "qt4-tools-native freetype jpeg libpng zlib dbus openssl glib-2.0 gstreamer gst-plugins-base sqlite3"
5
6inherit qmake_base
7
8QT_CONFIG_FLAGS += "-release -no-cups -no-accessibility -reduce-relocations \
9 -shared -no-nas-sound -no-sm -no-nis \
10 -qt-gif -system-libjpeg -system-libpng -system-zlib \
11 -no-sql-ibase -no-sql-mysql -no-sql-psql -no-sql-odbc -plugin-sql-sqlite \
12 -no-pch -dbus -stl -glib -phonon -webkit"
13
14EXTRA_OEMAKE = "-e"
15
16EXTRA_ENV = 'QMAKE="${STAGING_BINDIR_NATIVE}/qmake2 -after \
17 INCPATH+=${STAGING_INCDIR}/freetype2 LIBS+=-L${STAGING_LIBDIR}" \
18 QMAKESPEC="${QMAKESPEC}" LINK="${CXX} -Wl,-rpath-link,${STAGING_LIBDIR}" \
19 AR="${TARGET_PREFIX}ar cqs" \
20 MOC="${STAGING_BINDIR_NATIVE}/moc4" UIC="${STAGING_BINDIR_NATIVE}/uic4" MAKE="make -e"'
21
22export QT_CONF_PATH="${WORKDIR}/qt.conf"
23
24# Library packages
25QT_LIB_NAMES = "Qt3Support QtAssistantClient QtCLucene QtCore QtDBus QtDesigner QtDesignerComponents QtGui QtHelp QtNetwork QtOpenGL QtScript QtScriptTools QtSql QtSvg QtTest QtUiTools QtWebKit QtXml QtXmlPatterns phonon QtMultimedia QtOpenVG QtMediaServices"
26
27QT_EXTRA_LIBS = "pvrQWSWSEGL"
28
29python __anonymous () {
30 import bb
31
32 lib_packages = []
33 dev_packages = []
34 dbg_packages = []
35 for name in bb.data.getVar("QT_LIB_NAMES", d, 1).split():
36 pkg = "${QT_BASE_LIB}" + name.lower().replace("qt", "") + "4"
37 # NOTE: the headers for QtAssistantClient are different
38 incname = name.replace("QtAssistantClient", "QtAssistant")
39 bb.data.setVar("FILES_%s" % pkg, "${libdir}/lib%(name)s${QT_LIBINFIX}.so.*" % locals(), d)
40 bb.data.setVar("FILES_%s-dev" % pkg, """${libdir}/lib%(name)s${QT_LIBINFIX}.prl
41 ${libdir}/lib%(name)s${QT_LIBINFIX}.a
42 ${libdir}/lib%(name)s${QT_LIBINFIX}.la
43 ${libdir}/lib%(name)s${QT_LIBINFIX}.so
44 ${includedir}/${QT_DIR_NAME}/%(incname)s
45 ${libdir}/pkgconfig/%(name)s${QT_LIBINFIX}.pc""" % locals(), d)
46 bb.data.setVar("FILES_%s-dbg" % pkg, "${libdir}/.debug/lib%(name)s${QT_LIBINFIX}.so.*" % locals(), d)
47 lib_packages.append(pkg)
48 dev_packages.append("%s-dev" % pkg)
49 dbg_packages.append("%s-dbg" % pkg)
50 for name in bb.data.getVar("OTHER_PACKAGES", d, 1).split():
51 dbg_packages.append("%s-dbg" % name)
52
53 for name in bb.data.getVar("QT_EXTRA_LIBS", d, 1).split():
54 pkg = "${QT_BASE_LIB}" + name.lower().replace("qt", "") + "4"
55 bb.data.setVar("FILES_%s" % pkg, "${libdir}/lib%(name)s.so.*" % locals(), d)
56 bb.data.setVar("FILES_%s-dev" % pkg, """${libdir}/lib%(name)s.prl
57 ${libdir}/lib%(name)s.a
58 ${libdir}/lib%(name)s.la
59 ${libdir}/lib%(name)s.so
60 ${includedir}/${QT_DIR_NAME}/%(incname)s
61 ${libdir}/pkgconfig/%(name)s.pc""" % locals(), d)
62 bb.data.setVar("FILES_%s-dbg" % pkg, "${libdir}/.debug/lib%(name)s.so.*" % locals(), d)
63 lib_packages.append(pkg)
64 dev_packages.append("%s-dev" % pkg)
65 dbg_packages.append("%s-dbg" % pkg)
66
67 bb.data.setVar("LIB_PACKAGES", " ".join(lib_packages), d)
68 bb.data.setVar("DEV_PACKAGES", " ".join(dev_packages), d)
69 bb.data.setVar("DBG_PACKAGES", " ".join(dbg_packages), d)
70}
71
72OTHER_PACKAGES = "\
73 ${QT_BASE_NAME}-tools \
74 ${QT_BASE_NAME}-assistant \
75 ${QT_BASE_NAME}-common \
76 ${QT_BASE_NAME}-dbus \
77 ${QT_BASE_NAME}-demos \
78 ${QT_BASE_NAME}-designer \
79 ${QT_BASE_NAME}-examples \
80 ${QT_BASE_NAME}-fonts \
81 ${QT_BASE_NAME}-fonts-ttf-vera \
82 ${QT_BASE_NAME}-fonts-ttf-dejavu \
83 ${QT_BASE_NAME}-fonts-pfa \
84 ${QT_BASE_NAME}-fonts-pfb \
85 ${QT_BASE_NAME}-fonts-qpf \
86 ${QT_BASE_NAME}-linguist \
87 ${QT_BASE_NAME}-makeqpf \
88 ${QT_BASE_NAME}-mkspecs \
89 ${QT_BASE_NAME}-pixeltool \
90 ${QT_BASE_NAME}-qt3to4"
91
92PACKAGES += "${LIB_PACKAGES} ${DEV_PACKAGES} ${DBG_PACKAGES} ${OTHER_PACKAGES}"
93PACKAGES_DYNAMIC = "${QT_BASE_NAME}-plugin-* ${QT_BASE_NAME}-translation-* ${QT_BASE_NAME}-fonts-*"
94
95ALLOW_EMPTY_${PN} = "1"
96ALLOW_EMPTY_${QT_BASE_NAME}-fonts = "1"
97FILES_${PN} = ""
98FILES_${PN}-dev = "${includedir}/${QT_DIR_NAME}/Qt/*"
99FILES_${PN}-dbg = ""
100RRECOMMENDS_${PN} = "${LIB_PACKAGES} ${OTHER_PACKAGES}"
101RRECOMMENDS_${PN}-dev = "${DEV_PACKAGES}"
102RRECOMMENDS_${PN}-dbg = "${DBG_PACKAGES}"
103RRECOMMENDS_${QT_BASE_NAME}-fonts = " \
104 ${QT_BASE_NAME}-fonts-ttf-vera \
105 ${QT_BASE_NAME}-fonts-ttf-dejavu \
106 ${QT_BASE_NAME}-fonts-pfa \
107 ${QT_BASE_NAME}-fonts-pfb \
108 ${QT_BASE_NAME}-fonts-qpf"
109
110FILES_${QT_BASE_NAME}-tools = "${bindir}/uic* ${bindir}/moc ${bindir}/rcc ${bindir}/qttracereplay ${bindir}/qdoc*"
111FILES_${QT_BASE_NAME}-assistant = "${bindir}/*assistant* ${bindir}/qcollectiongenerator ${bindir}/qhelpconverter ${bindir}/qhelpgenerator"
112FILES_${QT_BASE_NAME}-assistant-dbg = "${bindir}/.debug/*assistant* ${bindir}/.debug/qcollectiongenerator ${bindir}/.debug/qhelpconverter ${bindir}/.debug/qhelpgenerator"
113FILES_${QT_BASE_NAME}-common = "${bindir}/qtconfig"
114FILES_${QT_BASE_NAME}-common-dbg = "${bindir}/.debug/qtconfig"
115FILES_${QT_BASE_NAME}-dbus = "${bindir}/qdbus ${bindir}/qdbusxml2cpp ${bindir}/qdbuscpp2xml ${bindir}/qdbusviewer"
116FILES_${QT_BASE_NAME}-dbus-dbg = "${bindir}/.debug/qdbus ${bindir}/.debug/qdbusxml2cpp ${bindir}/.debug/qdbuscpp2xml ${bindir}/.debug/qdbusviewer"
117FILES_${QT_BASE_NAME}-demos = "${bindir}/qtdemo* ${bindir}/${QT_DIR_NAME}/demos/*"
118FILES_${QT_BASE_NAME}-demos-dbg = "${bindir}/.debug/qtdemo* ${bindir}/${QT_DIR_NAME}/demos/.debug/* ${bindir}/${QT_DIR_NAME}/demos/*/.debug ${bindir}/${QT_DIR_NAME}/demos/*/*/.debug ${bindir}/${QT_DIR_NAME}/demos/*/*/*/.debug"
119FILES_${QT_BASE_NAME}-designer = "${bindir}/*designer*"
120FILES_${QT_BASE_NAME}-designer-dbg = "${bindir}/.debug/*designer*"
121FILES_${QT_BASE_NAME}-examples = "${bindir}/${QT_DIR_NAME}/examples/*"
122FILES_${QT_BASE_NAME}-examples-dbg = "${bindir}/${QT_DIR_NAME}/examples/.debug ${bindir}/${QT_DIR_NAME}/examples/*/.debug ${bindir}/${QT_DIR_NAME}/examples/*/*/.debug ${bindir}/${QT_DIR_NAME}/examples/*/*/*/.debug ${bindir}/${QT_DIR_NAME}/examples/*/*/*/*/.debug"
123FILES_${QT_BASE_NAME}-fonts-ttf-vera = "${libdir}/fonts/Vera*.ttf"
124FILES_${QT_BASE_NAME}-fonts-ttf-dejavu = "${libdir}/fonts/DejaVu*.ttf"
125FILES_${QT_BASE_NAME}-fonts-pfa = "${libdir}/fonts/*.pfa"
126FILES_${QT_BASE_NAME}-fonts-pfb = "${libdir}/fonts/*.pfb"
127FILES_${QT_BASE_NAME}-fonts-qpf = "${libdir}/fonts/*.qpf"
128FILES_${QT_BASE_NAME}-linguist = "${bindir}/*linguist* ${bindir}/lrelease ${bindir}/lupdate ${bindir}/lconvert ${bindir}/qm2ts"
129FILES_${QT_BASE_NAME}-linguist-dbg = "${bindir}/.debug/*linguist* ${bindir}/.debug/lrelease ${bindir}/.debug/lupdate ${bindir}/.debug/lconvert ${bindir}/.debug/qm2ts"
130FILES_${QT_BASE_NAME}-pixeltool = "${bindir}/pixeltool"
131FILES_${QT_BASE_NAME}-pixeltool-dbg = "${bindir}/.debug/pixeltool"
132FILES_${QT_BASE_NAME}-qt3to4 = "${bindir}/qt3to4 ${datadir}/${QT_DIR_NAME}/q3porting.xml"
133FILES_${QT_BASE_NAME}-qt3to4-dbg = "${bindir}/.debug/qt3to4"
134FILES_${QT_BASE_NAME}-makeqpf = "${bindir}/makeqpf"
135FILES_${QT_BASE_NAME}-makeqpf-dbg = "${bindir}/.debug/makeqpf"
136FILES_${QT_BASE_NAME}-mkspecs = "${datadir}/${QT_DIR_NAME}/mkspecs/*"
137
138ARM_INSTRUCTION_SET = "arm"
139
140set_arch() {
141 case ${TARGET_ARCH} in
142 arm*) QT_ARCH=arm ;;
143 i*86*) QT_ARCH=i386 ;;
144 mips*) QT_ARCH=mips ;;
145 powerpc*) QT_ARCH=powerpc ;;
146 x86_64*) QT_ARCH=x86_64 ;;
147 esac
148}
149
150do_configure() {
151 unset QMAKESPEC
152 unset QTDIR
153
154 set_arch
155
156 if [ ! -e bin/qmake ]; then
157 ln -sf ${STAGING_BINDIR_NATIVE}/qmake2 bin/qmake
158 fi
159
160 if [ ! -e mkspecs/${TARGET_OS}-oe-g++ ]; then
161 ln -sf linux-g++ mkspecs/${TARGET_OS}-oe-g++
162 fi
163
164 cp -f ${WORKDIR}/g++.conf ${WORKDIR}/linux.conf mkspecs/common/
165
166 echo "[Paths]" > $QT_CONF_PATH
167 echo "Prefix=${prefix}/" >> $QT_CONF_PATH
168 echo "Documentation=${docdir}/${QT_DIR_NAME}" >> $QT_CONF_PATH
169 echo "Headers=${includedir}/${QT_DIR_NAME}" >> $QT_CONF_PATH
170 echo "Libraries=${libdir}" >> $QT_CONF_PATH
171 echo "Binaries=${bindir}" >> $QT_CONF_PATH
172 echo "Plugins=${libdir}/${QT_DIR_NAME}/plugins" >> $QT_CONF_PATH
173 echo "Data=${datadir}/${QT_DIR_NAME}" >> $QT_CONF_PATH
174 echo "Translations=${datadir}/${QT_DIR_NAME}/translations" >> $QT_CONF_PATH
175 echo "Settings=${sysconfdir}/${QT_DIR_NAME}" >> $QT_CONF_PATH
176 echo "Examples=${bindir}/${QT_DIR_NAME}/examples" >> $QT_CONF_PATH
177 echo "Demos=${bindir}/${QT_DIR_NAME}/demos" >> $QT_CONF_PATH
178
179 ${EXTRA_QMAKE_MUNGE}|| true
180
181 (echo o; echo yes) | ./configure -v \
182 -prefix ${prefix}/ \
183 -bindir ${bindir} \
184 -libdir ${libdir} \
185 -datadir ${datadir}/${QT_DIR_NAME} \
186 -sysconfdir ${sysconfdir}/${QT_DIR_NAME} \
187 -docdir ${docdir}/${QT_DIR_NAME} \
188 -headerdir ${includedir}/${QT_DIR_NAME} \
189 -plugindir ${libdir}/${QT_DIR_NAME}/plugins \
190 -translationdir ${datadir}/${QT_DIR_NAME}/translations \
191 -examplesdir ${bindir}/${QT_DIR_NAME}/examples \
192 -demosdir ${bindir}/${QT_DIR_NAME}/demos \
193 -platform ${TARGET_OS}-oe-g++ \
194 -xplatform ${TARGET_OS}-oe-g++ \
195 -crossarch ${QT_ARCH} \
196 ${QT_CONFIG_FLAGS} -no-fast \
197 -L${STAGING_LIBDIR} -I${STAGING_INCDIR} \
198 -I${STAGING_INCDIR}/freetype2
199}
200
201do_compile() {
202 unset CFLAGS CXXFLAGS
203 install -m 0755 ${STAGING_BINDIR_NATIVE}/rcc4 ${S}/bin/rcc
204 install -m 0755 ${STAGING_BINDIR_NATIVE}/moc4 ${S}/bin/moc
205 install -m 0755 ${STAGING_BINDIR_NATIVE}/uic4 ${S}/bin/uic
206
207 oe_runmake ${EXTRA_ENV}
208}
209
210python populate_packages_prepend() {
211 translation_dir = bb.data.expand('${datadir}/${QT_DIR_NAME}/translations/', d)
212 translation_name = bb.data.expand('${QT_BASE_NAME}-translation-%s', d)
213 do_split_packages(d, translation_dir, '^(assistant|designer|linguist|qt|qtconfig|qvfb)_(.*)\.qm$', translation_name, '${PN} translation for %s', extra_depends='' )
214
215 phrasebook_dir = bb.data.expand('${datadir}/${QT_DIR_NAME}/phrasebooks/', d)
216 phrasebook_name = bb.data.expand('${QT_BASE_NAME}-phrasebook-%s', d)
217 do_split_packages(d, phrasebook_dir, '^(.*)\.qph$', phrasebook_name, '${PN} phrasebook for %s', extra_depends='' )
218
219 # Package all the plugins and their -dbg version and create a meta package
220 import os
221 def qtopia_split(path, name, glob):
222 """
223 Split the package into a normal and -dbg package and then add the
224 new packages to the meta package.
225 """
226 plugin_dir = bb.data.expand('${libdir}/${QT_DIR_NAME}/plugins/%s/' % path, d)
227 if not os.path.exists("%s%s" % (bb.data.expand('${D}',d), plugin_dir)):
228 bb.note("The path does not exist:", bb.data.expand('${D}', d), plugin_dir)
229 return
230
231 plugin_name = bb.data.expand('${QT_BASE_NAME}-plugin-%s-%%s' % name, d)
232 dev_packages = []
233 dev_hook = lambda file,pkg,b,c,d:dev_packages.append((file,pkg))
234 do_split_packages(d, plugin_dir, glob, plugin_name, '${PN} %s for %%s' % name, extra_depends='', hook=dev_hook)
235 # Create a -dbg package as well
236 plugin_dir_dbg = bb.data.expand('${libdir}/${QT_DIR_NAME}/plugins/%s/.debug' % path, d)
237 packages = bb.data.getVar('PACKAGES',d)
238 for (file,package) in dev_packages:
239 packages = "%s %s-dbg" % (packages, package)
240 file_name = os.path.join(plugin_dir_dbg, os.path.basename(file))
241 bb.data.setVar("FILES_%s-dbg" % package, file_name, d)
242 bb.data.setVar("DESCRIPTION_%s-dbg" % package, "${PN} %s for %s" % (name, package), d)
243
244 bb.data.setVar('PACKAGES', packages, d)
245
246 qtopia_split('accessible', 'accessible', '^libq(.*)\.so$')
247 qtopia_split('codecs', 'codec', '^libq(.*)\.so$')
248 qtopia_split('decorations', 'decoration', '^libqdecoration(.*)\.so$')
249 qtopia_split('designer', 'designer', '^lib(.*)\.so$')
250 qtopia_split('gfxdrivers', 'gfxdriver', '^libq(.*)\.so$')
251 qtopia_split('graphicssystems','graphicssystems', '^libq(.*)\.so$')
252 qtopia_split('mousedrivers', 'mousedriver', '^libq(.*)mousedriver\.so$')
253 qtopia_split('iconengines', 'iconengine', '^libq(.*)\.so$')
254 qtopia_split('imageformats', 'imageformat', '^libq(.*)\.so$')
255 qtopia_split('inputmethods', 'inputmethod', '^libq(.*)\.so$')
256 qtopia_split('sqldrivers', 'sqldriver', '^libq(.*)\.so$')
257 qtopia_split('script', 'script', '^libqtscript(.*)\.so$')
258 qtopia_split('styles', 'style', '^libq(.*)\.so$')
259 qtopia_split('phonon_backend','phonon-backend','^libphonon_(.*)\.so$')
260}
261
262do_install() {
263 oe_runmake install INSTALL_ROOT=${D}
264
265 # These are host binaries, we should only use them in staging
266 rm -rf ${D}/${bindir}/qmake
267
268 # fix pkgconfig, libtool and prl files
269 sed -i -e s#-L${S}/lib##g \
270 -e s#-L${STAGING_LIBDIR}##g \
271 -e 's#STAGING_LIBDIR}#libdir}'#g \
272 -e s#-L${libdir}##g \
273 -e s#'$(OE_QMAKE_LIBS_X11)'#"${OE_QMAKE_LIBS_X11}"#g \
274 -e s#" -Wl,-rpath-link,${S}/lib"##g \
275 -e s#" -Wl,-rpath-link,${libdir}"##g \
276 -e 's#I/usr/include#Iincludedir}#g' \
277 -e 's#Iin#I${in#g' \
278 ${D}${libdir}/*.la ${D}${libdir}/*.prl ${D}${libdir}/pkgconfig/*.pc
279
280 sed -i -e s#" -Wl,-rpath-link,${S}/lib"##g \
281 ${D}${datadir}/${QT_DIR_NAME}/mkspecs/common/linux.conf
282
283 # fix pkgconfig files
284 sed -i -e s#"moc_location=.*$"#"moc_location=${bindir}/moc4"# \
285 -e s#"uic_location=.*$"#"uic_location=${bindir}/uic4"# \
286 ${D}${libdir}/pkgconfig/*.pc
287 for name in ${QT_LIB_NAMES}; do
288 sed -i -e /Requires/s#"${name}"#"${name}${QT_LIBINFIX}"#g ${D}${libdir}/pkgconfig/*.pc
289 done
290
291 # QT abuses $includedir to point to its headers, which breaks pkgconfig sysroot, so manually fix it up here:
292 for pc in ${D}${libdir}/pkgconfig/*.pc ; do
293 sed -i -e "s:prefix}include/${QT_BASE_NAME}/$(basename $pc .pc):prefix}/include:" \
294 -e "s,Cflags: ,Cflags: -IP{includedir}/${QT_BASE_NAME}/$(basename $pc .pc) ," \
295 -e 's:IP{:I${:g' $pc
296 done
297
298 install -d ${D}/${libdir}/fonts
299 touch ${D}/${libdir}/fonts/fontdir
300}