3 DEPENDS += "qt4-tools-native freetype jpeg libpng zlib dbus openssl glib-2.0 gstreamer gst-plugins-base mysql postgresql sqlite sqlite3"
6 QT_ARCH := "${@qt_arch(d)}"
7 QT_ENDIAN = "${@qt_endian(d)}"
9 QT_CONFIG_FLAGS += "-release -no-cups -no-accessibility -reduce-relocations \
10 -shared -no-nas-sound -no-sm -no-nis \
11 -qt-gif -system-libjpeg -system-libpng -system-zlib \
12 -no-sql-ibase -plugin-sql-mysql -no-sql-odbc -plugin-sql-psql -plugin-sql-sqlite -plugin-sql-sqlite2 \
13 -no-pch -qdbus -stl -glib -phonon -webkit"
17 EXTRA_ENV = 'QMAKE="${STAGING_BINDIR_NATIVE}/qmake2 -after \
18 INCPATH+=${STAGING_INCDIR}/freetype2 LIBS+=-L${STAGING_LIBDIR}" \
19 QMAKESPEC="${QMAKESPEC}" LINK="${CXX} -Wl,-rpath-link,${STAGING_LIBDIR}" \
20 AR="${TARGET_PREFIX}ar cqs" \
21 MOC="${STAGING_BINDIR_NATIVE}/moc4" UIC="${STAGING_BINDIR_NATIVE}/uic4" MAKE="make -e"'
23 export QT_CONF_PATH="${WORKDIR}/qt.conf"
26 QT_LIB_NAMES = "Qt3Support QtAssistantClient QtCLucene QtCore QtDBus QtDesigner QtDesignerComponents QtGui QtHelp QtNetwork QtOpenGL QtScript QtScriptTools QtSql QtSvg QtTest QtUiTools QtWebKit QtXml phonon"
28 QT_EXTRA_LIBS = "pvrQWSWSEGL"
30 python __anonymous () {
36 for name in bb.data.getVar("QT_LIB_NAMES", d, 1).split():
37 pkg = "${QT_BASE_LIB}" + name.lower().replace("qt", "") + "4"
38 # NOTE: the headers for QtAssistantClient are different
39 incname = name.replace("QtAssistantClient", "QtAssistant")
40 bb.data.setVar("FILES_%s" % pkg, "${libdir}/lib%(name)s${QT_LIBINFIX}.so.*" % locals(), d)
41 bb.data.setVar("FILES_%s-dev" % pkg, """${libdir}/lib%(name)s${QT_LIBINFIX}.prl
42 ${libdir}/lib%(name)s${QT_LIBINFIX}.a
43 ${libdir}/lib%(name)s${QT_LIBINFIX}.la
44 ${libdir}/lib%(name)s${QT_LIBINFIX}.so
45 ${includedir}/${QT_DIR_NAME}/%(incname)s
46 ${libdir}/pkgconfig/%(name)s${QT_LIBINFIX}.pc""" % locals(), d)
47 bb.data.setVar("FILES_%s-dbg" % pkg, "${libdir}/.debug/lib%(name)s${QT_LIBINFIX}.so.*" % locals(), d)
48 lib_packages.append(pkg)
49 dev_packages.append("%s-dev" % pkg)
50 dbg_packages.append("%s-dbg" % pkg)
51 for name in bb.data.getVar("OTHER_PACKAGES", d, 1).split():
52 dbg_packages.append("%s-dbg" % name)
54 for name in bb.data.getVar("QT_EXTRA_LIBS", d, 1).split():
55 pkg = "${QT_BASE_LIB}" + name.lower().replace("qt", "") + "4"
56 bb.data.setVar("FILES_%s" % pkg, "${libdir}/lib%(name)s.so.*" % locals(), d)
57 bb.data.setVar("FILES_%s-dev" % pkg, """${libdir}/lib%(name)s.prl
58 ${libdir}/lib%(name)s.a
59 ${libdir}/lib%(name)s.la
60 ${libdir}/lib%(name)s.so
61 ${includedir}/${QT_DIR_NAME}/%(incname)s
62 ${libdir}/pkgconfig/%(name)s.pc""" % locals(), d)
63 bb.data.setVar("FILES_%s-dbg" % pkg, "${libdir}/.debug/lib%(name)s.so.*" % locals(), d)
64 lib_packages.append(pkg)
65 dev_packages.append("%s-dev" % pkg)
66 dbg_packages.append("%s-dbg" % pkg)
68 bb.data.setVar("LIB_PACKAGES", " ".join(lib_packages), d)
69 bb.data.setVar("DEV_PACKAGES", " ".join(dev_packages), d)
70 bb.data.setVar("DBG_PACKAGES", " ".join(dbg_packages), d)
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}-linguist \
82 ${QT_BASE_NAME}-makeqpf \
83 ${QT_BASE_NAME}-mkspecs \
84 ${QT_BASE_NAME}-pixeltool \
85 ${QT_BASE_NAME}-qt3to4"
87 PACKAGES += "${LIB_PACKAGES} ${DEV_PACKAGES} ${DBG_PACKAGES} ${OTHER_PACKAGES}"
88 PACKAGES_DYNAMIC = "${QT_BASE_NAME}-plugin-* ${QT_BASE_NAME}-translation-*"
90 ALLOW_EMPTY_${PN} = "1"
92 FILES_${PN}-dev = "${includedir}/${QT_DIR_NAME}/Qt/*"
94 RRECOMMENDS_${PN} = "${LIB_PACKAGES} ${OTHER_PACKAGES}"
95 RRECOMMENDS_${PN}-dev = "${DEV_PACKAGES}"
96 RRECOMMENDS_${PN}-dbg = "${DBG_PACKAGES}"
98 FILES_${QT_BASE_NAME}-assistant = "${bindir}/*assistant* ${bindir}/qcollectiongenerator ${bindir}/qhelpconverter ${bindir}/qhelpgenerator"
99 FILES_${QT_BASE_NAME}-assistant-dbg = "${bindir}/.debug/*assistant* ${bindir}/.debug/qcollectiongenerator ${bindir}/.debug/qhelpconverter ${bindir}/.debug/qhelpgenerator"
100 FILES_${QT_BASE_NAME}-common = "${bindir}/qtconfig"
101 FILES_${QT_BASE_NAME}-common-dbg = "${bindir}/.debug/qtconfig"
102 FILES_${QT_BASE_NAME}-dbus = "${bindir}/qdbus ${bindir}/qdbusxml2cpp ${bindir}/qdbuscpp2xml ${bindir}/qdbusviewer"
103 FILES_${QT_BASE_NAME}-dbus-dbg = "${bindir}/.debug/qdbus ${bindir}/.debug/qdbusxml2cpp ${bindir}/.debug/qdbuscpp2xml ${bindir}/.debug/qdbusviewer"
104 FILES_${QT_BASE_NAME}-demos = "${bindir}/qtdemo ${bindir}/${QT_DIR_NAME}/demos/*"
105 FILES_${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"
106 FILES_${QT_BASE_NAME}-designer = "${bindir}/*designer*"
107 FILES_${QT_BASE_NAME}-designer-dbg = "${bindir}/.debug/*designer*"
108 FILES_${QT_BASE_NAME}-examples = "${bindir}/${QT_DIR_NAME}/examples/*"
109 FILES_${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"
110 FILES_${QT_BASE_NAME}-fonts = "${libdir}/fonts"
111 FILES_${QT_BASE_NAME}-linguist = "${bindir}/*linguist* ${bindir}/lrelease ${bindir}/lupdate ${bindir}/lconvert ${bindir}/qm2ts"
112 FILES_${QT_BASE_NAME}-linguist-dbg = "${bindir}/.debug/*linguist* ${bindir}/.debug/lrelease ${bindir}/.debug/lupdate ${bindir}/.debug/lconvert ${bindir}/.debug/qm2ts"
113 FILES_${QT_BASE_NAME}-pixeltool = "${bindir}/pixeltool"
114 FILES_${QT_BASE_NAME}-pixeltool-dbg = "${bindir}/.debug/pixeltool"
115 FILES_${QT_BASE_NAME}-qt3to4 = "${bindir}/qt3to4 ${datadir}/${QT_DIR_NAME}/q3porting.xml"
116 FILES_${QT_BASE_NAME}-qt3to4-dbg = "${bindir}/.debug/qt3to4"
117 FILES_${QT_BASE_NAME}-makeqpf = "${bindir}/makeqpf"
118 FILES_${QT_BASE_NAME}-makeqpf-dbg = "${bindir}/.debug/makeqpf"
119 FILES_${QT_BASE_NAME}-mkspecs = "${datadir}/${QT_DIR_NAME}/mkspecs/*"
126 if [ ! -e bin/qmake ]; then
127 ln -sf ${STAGING_BINDIR_NATIVE}/qmake2 bin/qmake
130 if [ ! -e mkspecs/${TARGET_OS}-oe-g++ ]; then
131 ln -sf linux-g++ mkspecs/${TARGET_OS}-oe-g++
134 cp -f ${WORKDIR}/g++.conf ${WORKDIR}/linux.conf mkspecs/common/
136 echo "[Paths]" > $QT_CONF_PATH
137 echo "Prefix=${prefix}/" >> $QT_CONF_PATH
138 echo "Documentation=${docdir}/${QT_DIR_NAME}" >> $QT_CONF_PATH
139 echo "Headers=${includedir}/${QT_DIR_NAME}" >> $QT_CONF_PATH
140 echo "Libraries=${libdir}" >> $QT_CONF_PATH
141 echo "Binaries=${bindir}" >> $QT_CONF_PATH
142 echo "Plugins=${libdir}/${QT_DIR_NAME}/plugins" >> $QT_CONF_PATH
143 echo "Data=${datadir}/${QT_DIR_NAME}" >> $QT_CONF_PATH
144 echo "Translations=${datadir}/${QT_DIR_NAME}/translations" >> $QT_CONF_PATH
145 echo "Settings=${sysconfdir}/${QT_DIR_NAME}" >> $QT_CONF_PATH
146 echo "Examples=${bindir}/${QT_DIR_NAME}/examples" >> $QT_CONF_PATH
147 echo "Demos=${bindir}/${QT_DIR_NAME}/demos" >> $QT_CONF_PATH
149 ${EXTRA_QMAKE_MUNGE}|| true
151 (echo o; echo yes) | ./configure -v \
155 -datadir ${datadir}/${QT_DIR_NAME} \
156 -sysconfdir ${sysconfdir}/${QT_DIR_NAME} \
157 -docdir ${docdir}/${QT_DIR_NAME} \
158 -headerdir ${includedir}/${QT_DIR_NAME} \
159 -plugindir ${libdir}/${QT_DIR_NAME}/plugins \
160 -translationdir ${datadir}/${QT_DIR_NAME}/translations \
161 -examplesdir ${bindir}/${QT_DIR_NAME}/examples \
162 -demosdir ${bindir}/${QT_DIR_NAME}/demos \
163 -platform ${TARGET_OS}-oe-g++ \
164 -xplatform ${TARGET_OS}-oe-g++ \
165 -embedded ${QT_ARCH} ${QT_ENDIAN} -fast \
166 -crossarch ${QT_ARCH} \
167 ${QT_CONFIG_FLAGS} -fast \
168 -L${STAGING_LIBDIR} -I${STAGING_INCDIR} \
169 -I${STAGING_INCDIR}/freetype2 \
170 -I${STAGING_INCDIR}/mysql \
171 -I${STAGING_INCDIR}/postgresql
175 unset CFLAGS CXXFLAGS
176 install -m 0755 ${STAGING_BINDIR_NATIVE}/rcc4 ${S}/bin/rcc
177 install -m 0755 ${STAGING_BINDIR_NATIVE}/moc4 ${S}/bin/moc
178 install -m 0755 ${STAGING_BINDIR_NATIVE}/uic4 ${S}/bin/uic
180 oe_runmake ${EXTRA_ENV}
183 python populate_packages_prepend() {
184 translation_dir = bb.data.expand('${datadir}/${QT_DIR_NAME}/translations/', d)
185 translation_name = bb.data.expand('${QT_BASE_NAME}-translation-%s', d)
186 do_split_packages(d, translation_dir, '^(assistant|designer|linguist|qt|qtconfig|qvfb)_(.*)\.qm$', translation_name, '${PN} translation for %s', extra_depends='' )
188 phrasebook_dir = bb.data.expand('${datadir}/${QT_DIR_NAME}/phrasebooks/', d)
189 phrasebook_name = bb.data.expand('${QT_BASE_NAME}-phrasebook-%s', d)
190 do_split_packages(d, phrasebook_dir, '^(.*)\.qph$', phrasebook_name, '${PN} phrasebook for %s', extra_depends='' )
192 # Package all the plugins and their -dbg version and create a meta package
194 def qtopia_split(path, name, glob):
196 Split the package into a normal and -dbg package and then add the
197 new packages to the meta package.
199 plugin_dir = bb.data.expand('${libdir}/${QT_DIR_NAME}/plugins/%s/' % path, d)
200 if not os.path.exists("%s%s" % (bb.data.expand('${D}',d), plugin_dir)):
201 bb.note("The path does not exist:", bb.data.expand('${D}', d), plugin_dir)
204 plugin_name = bb.data.expand('${QT_BASE_NAME}-plugin-%s-%%s' % name, d)
206 dev_hook = lambda file,pkg,b,c,d:dev_packages.append((file,pkg))
207 do_split_packages(d, plugin_dir, glob, plugin_name, '${PN} %s for %%s' % name, extra_depends='', hook=dev_hook)
208 # Create a -dbg package as well
209 plugin_dir_dbg = bb.data.expand('${libdir}/${QT_DIR_NAME}/plugins/%s/.debug' % path, d)
210 packages = bb.data.getVar('PACKAGES',d)
211 for (file,package) in dev_packages:
212 packages = "%s %s-dbg" % (packages, package)
213 file_name = os.path.join(plugin_dir_dbg, os.path.basename(file))
214 bb.data.setVar("FILES_%s-dbg" % package, file_name, d)
215 bb.data.setVar("DESCRIPTION_%s-dbg" % package, "${PN} %s for %s" % (name, package), d)
217 bb.data.setVar('PACKAGES', packages, d)
219 qtopia_split('accessible', 'accessible', '^libq(.*)\.so$')
220 qtopia_split('codecs', 'codec', '^libq(.*)\.so$')
221 qtopia_split('decorations', 'decoration', '^libqdecoration(.*)\.so$')
222 qtopia_split('designer', 'designer', '^lib(.*)\.so$')
223 qtopia_split('gfxdrivers', 'gfxdriver', '^libq(.*)\.so$')
224 qtopia_split('graphicssystems','graphicssystems', '^libq(.*)\.so$')
225 qtopia_split('mousedrivers', 'mousedriver', '^libq(.*)mousedriver\.so$')
226 qtopia_split('iconengines', 'iconengine', '^libq(.*)\.so$')
227 qtopia_split('imageformats', 'imageformat', '^libq(.*)\.so$')
228 qtopia_split('inputmethods', 'inputmethod', '^libq(.*)\.so$')
229 qtopia_split('sqldrivers', 'sqldriver', '^libq(.*)\.so$')
230 qtopia_split('script', 'script', '^libqtscript(.*)\.so$')
231 qtopia_split('styles', 'style', '^libq(.*)\.so$')
232 qtopia_split('phonon_backend','phonon-backend','^libphonon_(.*)\.so$')
236 oe_runmake install INSTALL_ROOT=${D}
238 # These are host binaries, we should only use them in staging
239 rm -rf ${D}/${bindir}/qmake
241 # fix pkgconfig, libtool and prl files
242 sed -i -e s#-L${S}/lib##g \
243 -e s#-L${STAGING_LIBDIR}##g \
244 -e s#-L${libdir}##g \
245 -e s#'$(OE_QMAKE_LIBS_X11)'#"${OE_QMAKE_LIBS_X11}"#g \
246 ${D}${libdir}/*.la ${D}${libdir}/*.prl ${D}${libdir}/pkgconfig/*.pc
248 # fix pkgconfig files
249 sed -i -e s#"moc_location=.*$"#"moc_location=${bindir}/moc4"# \
250 -e s#"uic_location=.*$"#"uic_location=${bindir}/uic4"# \
251 ${D}${libdir}/pkgconfig/*.pc
252 for name in ${QT_LIB_NAMES}; do
253 sed -i -e /Requires/s#"${name}"#"${name}${QT_LIBINFIX}"#g ${D}${libdir}/pkgconfig/*.pc
256 install -d ${D}/${libdir}/fonts
257 touch ${D}/${libdir}/fonts/fontdir
260 STAGE_TEMP = "${WORKDIR}/temp-staging"
263 mkdir -p ${STAGE_TEMP}
264 oe_runmake install INSTALL_ROOT=${STAGE_TEMP}
266 # fix pkgconfig, libtool and prl files
267 sed -i -e s#-L${S}/lib##g \
268 -e s#-L${STAGING_LIBDIR}##g \
269 -e s#-L${libdir}##g \
270 -e s#'$(OE_QMAKE_LIBS_X11)'#"${OE_QMAKE_LIBS_X11}"#g \
271 ${STAGE_TEMP}${libdir}/*.la ${STAGE_TEMP}${libdir}/*.prl ${STAGE_TEMP}${libdir}/pkgconfig/*.pc
273 # fix pkgconfig files
274 sed -i -e s#"moc_location=.*$"## \
275 -e s#"uic_location=.*$"## \
276 ${STAGE_TEMP}/${libdir}/pkgconfig/*.pc
277 for name in ${QT_LIB_NAMES}; do
278 sed -i -e "/Requires/s#${name}#${name}${QT_LIBINFIX}#"g ${D}${libdir}/pkgconfig/*.pc
282 sed -i -e s#installed=yes#installed=no#g ${STAGE_TEMP}/${libdir}/*.la
285 install -d ${STAGING_INCDIR}
286 cp -pPRf ${STAGE_TEMP}/${includedir}/* ${STAGING_INCDIR}/
289 install -d ${STAGING_LIBDIR}
290 for i in ${STAGE_TEMP}/${libdir}/*.prl; do
291 cp -pPRf $i ${STAGING_LIBDIR}
292 cp -pPRf ${STAGE_TEMP}/${libdir}/$(basename $i .prl).la ${STAGING_LIBDIR} || true
293 oe_libinstall -C ${STAGE_TEMP}/${libdir} -a $(basename $i .prl) ${STAGING_LIBDIR} || true
294 oe_libinstall -C ${STAGE_TEMP}/${libdir} -so $(basename $i .prl) ${STAGING_LIBDIR} || true
297 # install pkgconfig files
298 install -d ${STAGING_LIBDIR}/pkgconfig
299 cp -pPRf ${STAGE_TEMP}/${libdir}/pkgconfig/*.pc ${STAGING_LIBDIR}/pkgconfig/
302 install -d ${STAGING_DATADIR}/${QT_DIR_NAME}/mkspecs
303 cp -pPRf ${STAGE_TEMP}/${datadir}/${QT_DIR_NAME}/mkspecs/* ${STAGING_DATADIR}/${QT_DIR_NAME}/mkspecs/
307 # FIXME: install symlinks to tools?
308 #install -d ${STAGING_DATADIR}/${QT_DIR_NAME}/bin
309 #ln -sf ${STAGING_BINDIR_NATIVE}/qmake2 ${STAGING_DATADIR}/${QT_DIR_NAME}/bin/qmake
310 #for qttool in moc uic uic3 rcc lrelease lupdate; do
311 # ln -sf ${STAGING_BINDIR_NATIVE}/${qttool}4 ${STAGING_DATADIR}/${QT_DIR_NAME}/bin/${qttool}