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 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 \
	-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 -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}
}