qt: convert to the GENTARGETS infrastructure

In addition to converting the qt package to the GENTARGETS
infrastructure, this commit also does the following (related) things
in the Qt package:

 * Create a BR2_PACKAGE_QT_CONFIG_FILE option, which can be used to
   pass a custom Qt configuration file, such as the ones found in
   src/corelib/global/qconfig-*.h. This used to be possible, but
   required changing qt.mk directly, which isn't really how we
   configure things in Buildroot.

 * Remove the BR2_PACKAGE_QT_EMB_PLATFORM option, the embedded
   platform name is now computed directly in qt.mk.

 * The QT_CONFIGURE variable, which hosted all ./configure options,
   has been renamed to QT_CONFIGURE_OPTS, for consistency with what we
   do in the AUTOTARGETS infrastructure.

 * The QT_DEP_LIBS variable has been renamed to QT_DEPENDENCIES, so
   that dependencies are properly handled by the GENTARGETS
   infrastructures.

 * The QT_QMAKE_SET macro (used to adjust the path/flags of the
   compiler/linker) has been extended with an additional argument,
   which allows to pass the source directory of Qt.

 * All the installation procedure has been rewritten to fit within the
   GENTARGETS mechanism.

[Peter: fixed minor issues pointed out by Will]
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Acked-by: Luca Ceresoli <luca@lucaceresoli.net>
Acked-by: Will Wagner <willw@carallon.com>
Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
This commit is contained in:
Thomas Petazzoni 2011-03-20 15:19:12 +01:00 committed by Peter Korsgaard
parent 4c5ca3d27d
commit 421cda1fd0
2 changed files with 312 additions and 366 deletions

View File

@ -55,6 +55,19 @@ config BR2_PACKAGE_QT_LICENSE_APPROVED
LGPL v2.1: http://doc.trolltech.com/4.5/lgpl.html
GPL v3.0: http://doc.trolltech.com/4.5/gpl.html
config BR2_PACKAGE_QT_CONFIG_FILE
string "Config file"
help
Configure options allow to set which modules are being
compiled or not in Qt, but Qt also provide a more
fine-grained mechanism to configure which features should be
enabled or disabled, through a header file. Examples of such
header files can be found in src/corelib/global/qconfig-*.h
in the Qt sources.
This option allows to set the path of such a configuration
file, which Buildroot will give to Qt at compile time.
config BR2_PACKAGE_QT_QT3SUPPORT
bool "Compatibility with Qt3"
depends on BR2_PACKAGE_QT_GUI_MODULE
@ -240,26 +253,6 @@ config BR2_PACKAGE_QT_SYSTEMZLIB
Use the shared zlib from the system.
endchoice
config BR2_PACKAGE_QT_EMB_PLATFORM
string "The embedded platform we are making Qt for"
default "arm" if BR2_arm
default "arm" if BR2_armeb
default "avr32" if BR2_avr32
default "x86" if BR2_i386
default "x86_64" if BR2_x86_64
default "mips" if BR2_mips
default "mips" if BR2_mipsel
default "powerpc" if BR2_powerpc
# Not that I really believe these will work..
default "generic" if BR2_alpha
default "generic" if BR2_chris
default "generic" if BR2_m68k
default "generic" if BR2_sh
default "generic" if BR2_sh64
default "generic" if BR2_sparc
help
The target platform.
source "package/qt/Config.sql.in"
if BR2_PACKAGE_QT_GUI_MODULE
source "package/qt/Config.gfx.in"

View File

@ -12,51 +12,43 @@
#
######################################################################
QT_VERSION:=4.7.2
QT_SOURCE:=qt-everywhere-opensource-src-$(QT_VERSION).tar.gz
QT_SITE:=http://get.qt.nokia.com/qt/source
QT_CAT:=$(ZCAT)
QT_TARGET_DIR:=$(BUILD_DIR)/qt-everywhere-opensource-src-$(QT_VERSION)
QT_VERSION = 4.7.2
QT_SOURCE = qt-everywhere-opensource-src-$(QT_VERSION).tar.gz
QT_SITE = http://get.qt.nokia.com/qt/source
QT_CONFIGURE:=#empty
QT_INSTALL_STAGING = YES
ifeq ($(BR2_PACKAGE_QT_LICENSE_APPROVED),y)
QT_CONFIGURE += -opensource -confirm-license
QT_CONFIGURE_OPTS += -opensource -confirm-license
endif
# If you want extra tweaking you can copy
# $(QT_TARGET_DIR)/src/corelib/global/qconfig-myfile.h
# to the qt packages directory (where this .mk file is) and
# remove the comment.
# QT_QCONFIG_COMMAND:=-qconfig myfile
#
# For the options you can set in this file, look at
# $(QT_TARGET_DIR)/src/corelib/global/qfeatures.txt
#
QT_QCONFIG_FILE:=package/qt/qconfig-myfile.h
QT_QCONFIG_FILE_LOCATION:=/src/corelib/global/
QT_CONFIG_FILE=$(call qstrip,$(BR2_PACKAGE_QT_CONFIG_FILE))
ifneq ($(QT_CONFIG_FILE),)
QT_CONFIGURE_OPTS += -config buildroot
endif
ifeq ($(BR2_LARGEFILE),y)
QT_CONFIGURE+= -largefile
QT_CONFIGURE_OPTS += -largefile
else
QT_CONFIGURE+= -no-largefile
QT_CONFIGURE_OPTS += -no-largefile
endif
ifeq ($(BR2_PACKAGE_QT_QT3SUPPORT),y)
QT_CONFIGURE+= -qt3support
QT_CONFIGURE_OPTS += -qt3support
else
QT_CONFIGURE+= -no-qt3support
QT_CONFIGURE_OPTS += -no-qt3support
endif
ifeq ($(BR2_PACKAGE_QT_DEMOS),y)
QT_CONFIGURE+= -examplesdir $(TARGET_DIR)/usr/share/qt/examples -demosdir $(TARGET_DIR)/usr/share/qt/demos
QT_CONFIGURE_OPTS += -examplesdir $(TARGET_DIR)/usr/share/qt/examples -demosdir $(TARGET_DIR)/usr/share/qt/demos
else
QT_CONFIGURE+= -nomake examples -nomake demos
QT_CONFIGURE_OPTS += -nomake examples -nomake demos
endif
# ensure glib is built first if enabled for Qt's glib support
ifeq ($(BR2_PACKAGE_LIBGLIB2),y)
QT_DEP_LIBS+=libglib2
QT_DEPENDENCIES += libglib2
endif
@ -90,168 +82,189 @@ ifeq ($(BR2_PACKAGE_QT_PIXEL_DEPTH_32),y)
QT_PIXEL_DEPTHS += 32
endif
ifneq ($(QT_PIXEL_DEPTHS),)
QT_CONFIGURE += -depths $(subst $(space),$(comma),$(strip $(QT_PIXEL_DEPTHS)))
QT_CONFIGURE_OPTS += -depths $(subst $(space),$(comma),$(strip $(QT_PIXEL_DEPTHS)))
endif
### Display drivers
ifeq ($(BR2_PACKAGE_QT_GFX_LINUXFB),y)
QT_CONFIGURE += -qt-gfx-linuxfb
QT_CONFIGURE_OPTS += -qt-gfx-linuxfb
else
QT_CONFIGURE += -no-gfx-linuxfb
QT_CONFIGURE_OPTS += -no-gfx-linuxfb
endif
ifeq ($(BR2_PACKAGE_QT_GFX_TRANSFORMED),y)
QT_CONFIGURE += -qt-gfx-transformed
QT_CONFIGURE_OPTS += -qt-gfx-transformed
else
QT_CONFIGURE += -no-gfx-transformed
QT_CONFIGURE_OPTS += -no-gfx-transformed
endif
ifeq ($(BR2_PACKAGE_QT_GFX_QVFB),y)
QT_CONFIGURE += -qt-gfx-qvfb
QT_CONFIGURE_OPTS += -qt-gfx-qvfb
else
QT_CONFIGURE += -no-gfx-qvfb
QT_CONFIGURE_OPTS += -no-gfx-qvfb
endif
ifeq ($(BR2_PACKAGE_QT_GFX_VNC),y)
QT_CONFIGURE += -qt-gfx-vnc
QT_CONFIGURE_OPTS += -qt-gfx-vnc
else
QT_CONFIGURE += -no-gfx-vnc
QT_CONFIGURE_OPTS += -no-gfx-vnc
endif
ifeq ($(BR2_PACKAGE_QT_GFX_MULTISCREEN),y)
QT_CONFIGURE += -qt-gfx-multiscreen
QT_CONFIGURE_OPTS += -qt-gfx-multiscreen
else
QT_CONFIGURE += -no-gfx-multiscreen
QT_CONFIGURE_OPTS += -no-gfx-multiscreen
endif
ifeq ($(BR2_PACKAGE_QT_GFX_DIRECTFB),y)
QT_CONFIGURE += -qt-gfx-directfb
QT_DEP_LIBS+=directfb
QT_CONFIGURE_OPTS += -qt-gfx-directfb
QT_DEPENDENCIES += directfb
else
QT_CONFIGURE += -no-gfx-directfb
QT_CONFIGURE_OPTS += -no-gfx-directfb
endif
### Mouse drivers
ifeq ($(BR2_PACKAGE_QT_MOUSE_PC),y)
QT_CONFIGURE += -qt-mouse-pc
QT_CONFIGURE_OPTS += -qt-mouse-pc
else
QT_CONFIGURE += -no-mouse-pc
QT_CONFIGURE_OPTS += -no-mouse-pc
endif
ifeq ($(BR2_PACKAGE_QT_MOUSE_LINUXTP),y)
QT_CONFIGURE += -qt-mouse-linuxtp
QT_CONFIGURE_OPTS += -qt-mouse-linuxtp
else
QT_CONFIGURE += -no-mouse-linuxtp
QT_CONFIGURE_OPTS += -no-mouse-linuxtp
endif
ifeq ($(BR2_PACKAGE_QT_MOUSE_LINUXINPUT),y)
QT_CONFIGURE += -qt-mouse-linuxinput
QT_CONFIGURE_OPTS += -qt-mouse-linuxinput
else
QT_CONFIGURE += -no-mouse-linuxinput
QT_CONFIGURE_OPTS += -no-mouse-linuxinput
endif
ifeq ($(BR2_PACKAGE_QT_MOUSE_TSLIB),y)
QT_CONFIGURE += -qt-mouse-tslib
QT_DEP_LIBS+=tslib
QT_CONFIGURE_OPTS += -qt-mouse-tslib
QT_DEPENDENCIES += tslib
else
QT_CONFIGURE += -no-mouse-tslib
QT_CONFIGURE_OPTS += -no-mouse-tslib
endif
ifeq ($(BR2_PACKAGE_QT_MOUSE_QVFB),y)
QT_CONFIGURE += -qt-mouse-qvfb
QT_CONFIGURE_OPTS += -qt-mouse-qvfb
else
QT_CONFIGURE += -no-mouse-qvfb
QT_CONFIGURE_OPTS += -no-mouse-qvfb
endif
ifeq ($(BR2_PACKAGE_QT_MOUSE_NO_QWS_CURSOR),y)
QT_CONFIGURE+= -D QT_NO_QWS_CURSOR
QT_CONFIGURE_OPTS += -D QT_NO_QWS_CURSOR
endif
### Keyboard drivers
ifeq ($(BR2_PACKAGE_QT_KEYBOARD_TTY),y)
QT_CONFIGURE += -qt-kbd-tty
QT_CONFIGURE_OPTS += -qt-kbd-tty
else
QT_CONFIGURE += -no-kbd-tty
QT_CONFIGURE_OPTS += -no-kbd-tty
endif
ifeq ($(BR2_PACKAGE_QT_KEYBOARD_LINUXINPUT),y)
QT_CONFIGURE += -qt-kbd-linuxinput
QT_CONFIGURE_OPTS += -qt-kbd-linuxinput
else
QT_CONFIGURE += -no-kbd-linuxinput
QT_CONFIGURE_OPTS += -no-kbd-linuxinput
endif
ifeq ($(BR2_PACKAGE_QT_KEYBOARD_QVFB),y)
QT_CONFIGURE += -qt-kbd-qvfb
QT_CONFIGURE_OPTS += -qt-kbd-qvfb
else
QT_CONFIGURE += -no-kbd-qvfb
QT_CONFIGURE_OPTS += -no-kbd-qvfb
endif
ifeq ($(BR2_PACKAGE_QT_DEBUG),y)
QT_CONFIGURE+= -debug
QT_CONFIGURE_OPTS += -debug
else
QT_CONFIGURE+= -release
QT_CONFIGURE_OPTS += -release
endif
ifeq ($(BR2_PACKAGE_QT_SHARED),y)
QT_CONFIGURE+= -shared
QT_CONFIGURE_OPTS += -shared
else
QT_CONFIGURE+= -static
QT_CONFIGURE_OPTS += -static
endif
ifeq ($(BR2_ENDIAN),"LITTLE")
QT_CONFIGURE+= -little-endian
QT_CONFIGURE_OPTS += -little-endian
else
QT_CONFIGURE+= -big-endian
QT_CONFIGURE_OPTS += -big-endian
endif
ifeq ($(BR2_arm),y)
QT_EMB_PLATFORM = arm
else ifeq ($(BR2_armeb),y)
QT_EMB_PLATFORM = arm
else ifeq ($(BR2_avr32),y)
QT_EMB_PLATFORM = avr32
else ifeq ($(BR2_i386),y)
QT_EMB_PLATFORM = x86
else ifeq ($(BR2_x86_64),y)
QT_EMB_PLATFORM = x86_64
else ifeq ($(BR2_mips),y)
QT_EMB_PLATFORM = mips
else ifeq ($(BR2_mipsel),y)
QT_EMB_PLATFORM = mips
else ifeq ($(BR2_powerpc),y)
QT_EMB_PLATFORM = powerpc
else
QT_EMB_PLATFORM = generic
endif
QT_CONFIGURE_OPTS += -embedded $(QT_EMB_PLATFORM)
ifneq ($(BR2_PACKAGE_QT_GUI_MODULE),y)
QT_CONFIGURE+= -no-gui
QT_CONFIGURE_OPTS += -no-gui
endif
ifeq ($(BR2_PACKAGE_QT_GIF),y)
QT_CONFIGURE+= -qt-gif
QT_CONFIGURE_OPTS += -qt-gif
else
QT_CONFIGURE+= -no-gif
QT_CONFIGURE_OPTS += -no-gif
endif
ifeq ($(BR2_PACKAGE_QT_LIBMNG),y)
QT_CONFIGURE+= -qt-libmng
QT_CONFIGURE_OPTS += -qt-libmng
else
QT_CONFIGURE+= -no-libmng
QT_CONFIGURE_OPTS += -no-libmng
endif
ifeq ($(BR2_PACKAGE_QT_QTZLIB),y)
QT_CONFIGURE+= -qt-zlib
QT_CONFIGURE_OPTS += -qt-zlib
else
ifeq ($(BR2_PACKAGE_QT_SYSTEMZLIB),y)
QT_CONFIGURE+= -system-zlib
QT_DEP_LIBS+=zlib
QT_CONFIGURE_OPTS += -system-zlib
QT_DEPENDENCIES += zlib
endif
endif
ifeq ($(BR2_PACKAGE_QT_QTJPEG),y)
QT_CONFIGURE+= -qt-libjpeg
QT_CONFIGURE_OPTS += -qt-libjpeg
else
ifeq ($(BR2_PACKAGE_QT_SYSTEMJPEG),y)
QT_CONFIGURE+= -system-libjpeg
QT_DEP_LIBS+=jpeg
QT_CONFIGURE_OPTS += -system-libjpeg
QT_DEPENDENCIES += jpeg
else
QT_CONFIGURE+= -no-libjpeg
QT_CONFIGURE_OPTS += -no-libjpeg
endif
endif
ifeq ($(BR2_PACKAGE_QT_QTPNG),y)
QT_CONFIGURE+= -qt-libpng
QT_CONFIGURE_OPTS += -qt-libpng
else
ifeq ($(BR2_PACKAGE_QT_SYSTEMPNG),y)
QT_CONFIGURE+= -system-libpng
QT_DEP_LIBS+=libpng
QT_CONFIGURE_OPTS += -system-libpng
QT_DEPENDENCIES += libpng
else
QT_CONFIGURE+= -no-libpng
QT_CONFIGURE_OPTS += -no-libpng
endif
endif
ifeq ($(BR2_PACKAGE_QT_QTTIFF),y)
QT_CONFIGURE+= -qt-libtiff
QT_CONFIGURE_OPTS += -qt-libtiff
else
ifeq ($(BR2_PACKAGE_QT_SYSTEMTIFF),y)
QT_CONFIGURE+= -system-libtiff
QT_DEP_LIBS+=tiff
QT_CONFIGURE_OPTS += -system-libtiff
QT_DEPENDENCIES += tiff
else
QT_CONFIGURE+= -no-libtiff
QT_CONFIGURE_OPTS += -no-libtiff
endif
endif
QT_FONTS = $(addprefix $(STAGING_DIR)/usr/lib/fonts/, $(addsuffix *.qpf, \
$(if $(BR2_PACKAGE_QT_FONT_MICRO),micro) \
$(if $(BR2_PACKAGE_QT_FONT_FIXED),fixed) \
@ -259,272 +272,206 @@ QT_FONTS = $(addprefix $(STAGING_DIR)/usr/lib/fonts/, $(addsuffix *.qpf, \
$(if $(BR2_PACKAGE_QT_FONT_JAPANESE),japanese) \
$(if $(BR2_PACKAGE_QT_FONT_UNIFONT),unifont)))
ifeq ($(BR2_PACKAGE_QT_QTFREETYPE),y)
QT_CONFIGURE+= -qt-freetype
QT_CONFIGURE_OPTS += -qt-freetype
else
ifeq ($(BR2_PACKAGE_QT_SYSTEMFREETYPE),y)
QT_CONFIGURE+= -system-freetype
QT_CONFIGURE+= -I $(STAGING_DIR)/usr/include/freetype2/
QT_DEP_LIBS+=freetype
QT_CONFIGURE_OPTS += -system-freetype
QT_CONFIGURE_OPTS += -I $(STAGING_DIR)/usr/include/freetype2/
QT_DEPENDENCIES += freetype
else
QT_CONFIGURE+= -no-freetype
QT_CONFIGURE_OPTS += -no-freetype
endif
endif
ifeq ($(BR2_PACKAGE_QT_DBUS),y)
QT_DEPENDENCIES += dbus
endif
ifeq ($(BR2_PACKAGE_QT_OPENSSL),y)
QT_CONFIGURE+= -openssl
QT_DEP_LIBS+=openssl
QT_CONFIGURE_OPTS += -openssl
QT_DEPENDENCIES += openssl
else
QT_CONFIGURE+= -no-openssl
QT_CONFIGURE_OPTS += -no-openssl
endif
# Qt SQL Drivers
ifeq ($(BR2_PACKAGE_QT_SQL_MODULE),y)
ifeq ($(BR2_PACKAGE_QT_IBASE),y)
QT_CONFIGURE+= -qt-sql-ibase
QT_CONFIGURE_OPTS += -qt-sql-ibase
endif
ifeq ($(BR2_PACKAGE_QT_MYSQL),y)
QT_CONFIGURE+= -qt-sql-mysql -mysql_config $(STAGING_DIR)/usr/bin/mysql_config
QT_DEP_LIBS+=mysql_client
QT_CONFIGURE_OPTS += -qt-sql-mysql -mysql_config $(STAGING_DIR)/usr/bin/mysql_config
QT_DEPENDENCIES += mysql_client
endif
ifeq ($(BR2_PACKAGE_QT_ODBC),y)
QT_CONFIGURE+= -qt-sql-odbc
QT_CONFIGURE_OPTS += -qt-sql-odbc
endif
ifeq ($(BR2_PACKAGE_QT_PSQL),y)
QT_CONFIGURE+= -qt-sql-psql
QT_CONFIGURE_OPTS += -qt-sql-psql
endif
ifeq ($(BR2_PACKAGE_QT_SQLITE_QT),y)
QT_CONFIGURE+= -qt-sql-sqlite
QT_CONFIGURE_OPTS += -qt-sql-sqlite
else
ifeq ($(BR2_PACKAGE_QT_SQLITE_SYSTEM),y)
QT_CONFIGURE+= -system-sqlite
QT_DEP_LIBS+= sqlite
QT_CONFIGURE_OPTS += -system-sqlite
QT_DEPENDENCIES += sqlite
else
QT_CONFIGURE+= -no-sql-sqlite
QT_CONFIGURE_OPTS += -no-sql-sqlite
endif
endif
ifeq ($(BR2_PACKAGE_QT_SQLITE2),y)
QT_CONFIGURE+= -qt-sql-sqlite2
QT_CONFIGURE_OPTS += -qt-sql-sqlite2
endif
else
# By default, no SQL driver is turned on by configure.
# but it seams sqlite isn't disabled despite what says
# but it seems sqlite isn't disabled despite what says
# configure --help
QT_CONFIGURE+= -no-sql-sqlite
QT_CONFIGURE_OPTS += -no-sql-sqlite
endif
ifeq ($(BR2_PACKAGE_QT_XMLPATTERNS),y)
QT_CONFIGURE+= -xmlpatterns -exceptions
QT_CONFIGURE_OPTS += -xmlpatterns -exceptions
else
QT_CONFIGURE+= -no-xmlpatterns
QT_CONFIGURE_OPTS += -no-xmlpatterns
endif
ifeq ($(BR2_PACKAGE_QT_MULTIMEDIA),y)
QT_CONFIGURE+= -multimedia
QT_CONFIGURE_OPTS += -multimedia
else
QT_CONFIGURE+= -no-multimedia
QT_CONFIGURE_OPTS += -no-multimedia
endif
ifeq ($(BR2_PACKAGE_QT_AUDIO_BACKEND),y)
QT_CONFIGURE+= -audio-backend
QT_DEP_LIBS+=alsa-lib
QT_CONFIGURE_OPTS += -audio-backend
QT_DEPENDENCIES += alsa-lib
else
QT_CONFIGURE+= -no-audio-backend
QT_CONFIGURE_OPTS += -no-audio-backend
endif
ifeq ($(BR2_PACKAGE_QT_PHONON),y)
QT_CONFIGURE+= -phonon
QT_DEP_LIBS+=gstreamer gst-plugins-base
QT_CONFIGURE_OPTS += -phonon
QT_DEPENDENCIES += gstreamer gst-plugins-base
else
QT_CONFIGURE+= -no-phonon
QT_CONFIGURE_OPTS += -no-phonon
endif
ifeq ($(BR2_PACKAGE_QT_PHONON_BACKEND),y)
QT_CONFIGURE+= -phonon-backend
QT_CONFIGURE_OPTS += -phonon-backend
else
QT_CONFIGURE+= -no-phonon-backend
QT_CONFIGURE_OPTS += -no-phonon-backend
endif
ifeq ($(BR2_PACKAGE_QT_SVG),y)
QT_CONFIGURE+= -svg
QT_CONFIGURE_OPTS += -svg
else
QT_CONFIGURE+= -no-svg
QT_CONFIGURE_OPTS += -no-svg
endif
ifeq ($(BR2_PACKAGE_QT_WEBKIT),y)
QT_CONFIGURE+= -webkit
QT_CONFIGURE_OPTS += -webkit
else
QT_CONFIGURE+= -no-webkit
QT_CONFIGURE_OPTS += -no-webkit
endif
ifeq ($(BR2_PACKAGE_QT_SCRIPT),y)
QT_CONFIGURE+= -script
QT_CONFIGURE_OPTS += -script
else
QT_CONFIGURE+= -no-script
QT_CONFIGURE_OPTS += -no-script
endif
ifeq ($(BR2_PACKAGE_QT_SCRIPTTOOLS),y)
QT_CONFIGURE+= -scripttools
QT_CONFIGURE_OPTS += -scripttools
else
QT_CONFIGURE+= -no-scripttools
QT_CONFIGURE_OPTS += -no-scripttools
endif
ifeq ($(BR2_PACKAGE_QT_JAVASCRIPTCORE),y)
QT_CONFIGURE+= -javascript-jit
QT_CONFIGURE_OPTS += -javascript-jit
else
QT_CONFIGURE+= -no-javascript-jit
QT_CONFIGURE_OPTS += -no-javascript-jit
endif
ifeq ($(BR2_PACKAGE_QT_STL),y)
QT_CONFIGURE+= -stl
QT_CONFIGURE_OPTS += -stl
else
QT_CONFIGURE+= -no-stl
QT_CONFIGURE_OPTS += -no-stl
endif
# ccache and precompiled headers don't play well together
ifeq ($(BR2_CCACHE),y)
QT_CONFIGURE += -no-pch
QT_CONFIGURE_OPTS += -no-pch
endif
BR2_PACKAGE_QT_EMB_PLATFORM:=$(call qstrip,$(BR2_PACKAGE_QT_EMB_PLATFORM))
# x86x86fix
# Workaround Qt Embedded bug when crosscompiling for x86 under x86 with linux
# host. It's unclear if this would happen on other hosts.
ifneq ($(findstring linux,$(GNU_HOST_NAME)),)
ifneq ($(findstring x86,$(BR2_PACKAGE_QT_EMB_PLATFORM)),)
QT_CONFIGURE+= -platform linux-g++
ifneq ($(findstring x86,$(QT_EMB_PLATFORM)),)
QT_CONFIGURE_OPTS += -platform linux-g++
endif
endif
# End of workaround.
# Figure out what libs to install in the target
QT_LIBS=#empty
ifeq ($(BR2_PACKAGE_QT_GUI_MODULE),y)
QT_LIBS+= qt-gui
endif
ifeq ($(BR2_PACKAGE_QT_SQL_MODULE),y)
QT_LIBS+= qt-sql
endif
ifeq ($(BR2_PACKAGE_QT_MULTIMEDIA),y)
QT_LIBS+= qt-multimedia
endif
ifeq ($(BR2_PACKAGE_QT_PHONON),y)
QT_LIBS+= qt-phonon
endif
ifeq ($(BR2_PACKAGE_QT_SVG),y)
QT_LIBS+= qt-svg
endif
ifeq ($(BR2_PACKAGE_QT_NETWORK),y)
QT_LIBS+= qt-network
endif
ifeq ($(BR2_PACKAGE_QT_WEBKIT),y)
QT_LIBS+= qt-webkit
endif
ifeq ($(BR2_PACKAGE_QT_XML),y)
QT_LIBS+= qt-xml
endif
ifeq ($(BR2_PACKAGE_QT_DBUS),y)
QT_LIBS+= qt-dbus
QT_DEP_LIBS+= dbus
endif
ifeq ($(BR2_PACKAGE_QT_XMLPATTERNS),y)
QT_LIBS+= qt-xmlpatterns
endif
ifeq ($(BR2_PACKAGE_QT_SCRIPT),y)
QT_LIBS+= qt-script
endif
ifeq ($(BR2_PACKAGE_QT_SCRIPTTOOLS),y)
QT_LIBS+= qt-scripttools
endif
ifeq ($(BR2_PACKAGE_QT_QT3SUPPORT),y)
QT_LIBS+= qt-qt3support
endif
QT_QMAKE_CONF:=$(QT_TARGET_DIR)/mkspecs/qws/linux-$(BR2_PACKAGE_QT_EMB_PLATFORM)-g++/qmake.conf
# Variable for other Qt applications to use
QT_QMAKE:=$(HOST_DIR)/usr/bin/qmake -spec qws/linux-$(BR2_PACKAGE_QT_EMB_PLATFORM)-g++
QT_QMAKE:=$(HOST_DIR)/usr/bin/qmake -spec qws/linux-$(QT_EMB_PLATFORM)-g++
################################################################################
# QT_QMAKE_SET -- helper macro to set QMAKE_<variable> = <value> in
# QT_QMAKE_CONF. Will remove existing variable declaration if available.
# the qmake.conf file. Will remove existing variable declaration if
# available.
#
# Argument 1 is the variable name (without QMAKE_)
# Argument 2 is the value to set variable to
# Argument 3 is the base source directory of Qt
#
# E.G. use like this:
# $(call QT_QMAKE_SET,variable,value)
# $(call QT_QMAKE_SET,variable,value,directory)
################################################################################
define QT_QMAKE_SET
$(SED) '/QMAKE_$(1)/d' $(QT_QMAKE_CONF)
$(SED) '/include.*qws.conf/aQMAKE_$(1) = $(2)' $(QT_QMAKE_CONF)
$(SED) '/QMAKE_$(1)/d' $(3)/mkspecs/qws/linux-$(QT_EMB_PLATFORM)-g++/qmake.conf
$(SED) '/include.*qws.conf/aQMAKE_$(1) = $(2)' $(3)/mkspecs/qws/linux-$(QT_EMB_PLATFORM)-g++/qmake.conf
endef
################################################################################
# QT_INSTALL_PLUGINS -- helper macro to install Qt plugins to target and
# strip them
#
# Argument 1 is the plugin folder
#
# E.G. use like this to install plugins/sqldrivers:
# $(call QT_INSTALL_PLUGINS,sqldrivers)
# ################################################################################
define QT_INSTALL_PLUGINS
if [ -d $(STAGING_DIR)/usr/plugins/$(1) ]; then \
mkdir -p $(TARGET_DIR)/usr/plugins; \
cp -dpfr $(STAGING_DIR)/usr/plugins/$(1) $(TARGET_DIR)/usr/plugins/; \
$(STRIPCMD) $(STRIP_STRIP_UNNEEDED) $(TARGET_DIR)/usr/plugins/$(1)/*; \
fi
endef
$(DL_DIR)/$(QT_SOURCE):
$(call DOWNLOAD,$(QT_SITE),$(QT_SOURCE))
qt-source: $(DL_DIR)/$(QT_SOURCE)
$(QT_TARGET_DIR)/.unpacked: $(DL_DIR)/$(QT_SOURCE)
$(QT_CAT) $(DL_DIR)/$(QT_SOURCE) | tar -C $(BUILD_DIR) $(TAR_OPTIONS) -
toolchain/patch-kernel.sh $(QT_TARGET_DIR) package/qt/ \
qt-$(QT_VERSION)-\*.patch \
qt-$(QT_VERSION)-\*.patch.$(ARCH)
touch $@
$(QT_TARGET_DIR)/.configured: $(QT_TARGET_DIR)/.unpacked
-[ -f $(QT_TARGET_DIR)/Makefile ] && $(MAKE) -C $(QT_TARGET_DIR) confclean
ifneq ($(BR2_INET_IPV6),y)
$(SED) 's/^CFG_IPV6=auto/CFG_IPV6=no/' $(QT_TARGET_DIR)/configure
$(SED) 's/^CFG_IPV6IFNAME=auto/CFG_IPV6IFNAME=no/' $(QT_TARGET_DIR)/configure
define QT_CONFIGURE_IPV6
$(SED) 's/^CFG_IPV6=auto/CFG_IPV6=no/' $(@D)/configure
$(SED) 's/^CFG_IPV6IFNAME=auto/CFG_IPV6IFNAME=no/' $(@D)/configure
endef
endif
ifneq ($(QT_CONFIG_FILE),)
define QT_CONFIGURE_CONFIG_FILE
cp $(QT_CONFIG_FILE) $(@D)/src/corelib/global/qconfig-buildroot.h
endef
endif
define QT_CONFIGURE_CMDS
-[ -f $(@D)/Makefile ] && $(MAKE) -C $(@D) confclean
$(QT_CONFIGURE_IPV6)
$(QT_CONFIGURE_CONFIG_FILE)
# Fix compiler path
$(call QT_QMAKE_SET,CC,$(filter-out --sysroot=%,$(TARGET_CC)))
$(call QT_QMAKE_SET,CXX,$(filter-out --sysroot=%,$(TARGET_CXX)))
$(call QT_QMAKE_SET,LINK,$(TARGET_CXX))
$(call QT_QMAKE_SET,LINK_SHLIB,$(TARGET_CXX))
$(call QT_QMAKE_SET,AR,$(TARGET_AR) cqs)
$(call QT_QMAKE_SET,OBJCOPY,$(TARGET_OBJCOPY))
$(call QT_QMAKE_SET,RANLIB,$(TARGET_RANLIB))
$(call QT_QMAKE_SET,STRIP,$(TARGET_STRIP))
$(call QT_QMAKE_SET,CFLAGS,$(TARGET_SYSROOT_OPT) $(TARGET_CFLAGS))
$(call QT_QMAKE_SET,CXXFLAGS,$(TARGET_SYSROOT_OPT) $(TARGET_CXXFLAGS))
$(call QT_QMAKE_SET,LFLAGS,$(TARGET_LDFLAGS))
-[ -f $(QT_QCONFIG_FILE) ] && cp $(QT_QCONFIG_FILE) \
$(QT_TARGET_DIR)/$(QT_QCONFIG_FILE_LOCATION)
$(call QT_QMAKE_SET,CC,$(filter-out --sysroot=%,$(TARGET_CC)),$(@D))
$(call QT_QMAKE_SET,CXX,$(filter-out --sysroot=%,$(TARGET_CXX)),$(@D))
$(call QT_QMAKE_SET,LINK,$(TARGET_CXX),$(@D))
$(call QT_QMAKE_SET,LINK_SHLIB,$(TARGET_CXX),$(@D))
$(call QT_QMAKE_SET,AR,$(TARGET_AR) cqs,$(@D))
$(call QT_QMAKE_SET,OBJCOPY,$(TARGET_OBJCOPY),$(@D))
$(call QT_QMAKE_SET,RANLIB,$(TARGET_RANLIB),$(@D))
$(call QT_QMAKE_SET,STRIP,$(TARGET_STRIP),$(@D))
$(call QT_QMAKE_SET,CFLAGS,$(TARGET_SYSROOT_OPT) $(TARGET_CFLAGS),$(@D))
$(call QT_QMAKE_SET,CXXFLAGS,$(TARGET_SYSROOT_OPT) $(TARGET_CXXFLAGS),$(@D))
$(call QT_QMAKE_SET,LFLAGS,$(TARGET_LDFLAGS),$(@D))
# Don't use TARGET_CONFIGURE_OPTS here, qmake would be compiled for the target
# instead of the host then. So set PKG_CONFIG* manually.
(cd $(QT_TARGET_DIR); \
(cd $(@D); \
PKG_CONFIG_SYSROOT_DIR="$(STAGING_DIR)" \
PKG_CONFIG="$(PKG_CONFIG_HOST_BINARY)" \
PKG_CONFIG_PATH="$(STAGING_DIR)/usr/lib/pkgconfig:$(PKG_CONFIG_PATH)" \
./configure \
$(if $(VERBOSE),-verbose,-silent) \
-force-pkg-config \
-embedded $(BR2_PACKAGE_QT_EMB_PLATFORM) \
$(QT_QCONFIG_COMMAND) \
$(QT_CONFIGURE) \
$(QT_CONFIGURE_OPTS) \
-no-gfx-qnx \
-no-kbd-qnx \
-no-mouse-qnx \
@ -538,133 +485,139 @@ endif
-fast \
-no-rpath \
)
touch $@
endef
$(QT_TARGET_DIR)/.compiled: $(QT_TARGET_DIR)/.configured
$(MAKE) -C $(QT_TARGET_DIR)
touch $@
define QT_BUILD_CMDS
$(MAKE) -C $(@D)
endef
$(HOST_DIR)/usr/bin/qt.conf:
mkdir -p $(dir $@)
echo "[Paths]" > $@
echo "Prefix=$(HOST_DIR)/usr" >> $@
echo "Headers=$(STAGING_DIR)/usr/include" >> $@
echo "Libraries=$(STAGING_DIR)/usr/lib" >> $@
echo "Data=$(HOST_DIR)/usr" >> $@
echo "Binaries=$(HOST_DIR)/usr/bin" >> $@
$(STAGING_DIR)/usr/lib/libQtCore.la: $(QT_TARGET_DIR)/.compiled $(HOST_DIR)/usr/bin/qt.conf
$(MAKE) -C $(QT_TARGET_DIR) install
# Move host programs and spec files to the host directory. The
# generated qt.conf file will tell qmake where everything is.
mv $(addprefix $(STAGING_DIR)/usr/bin/,moc rcc qmake lrelease) $(HOST_DIR)/usr/bin
# Build the list of libraries and plugins to install to the target
QT_INSTALL_LIBS += QtCore
QT_HOST_PROGRAMS += moc rcc qmake lrelease
ifeq ($(BR2_PACKAGE_QT_GUI_MODULE),y)
mv $(STAGING_DIR)/usr/bin/uic $(HOST_DIR)/usr/bin
QT_INSTALL_LIBS += QtGui
QT_INSTALL_PLUGINS += imageformats
QT_HOST_PROGRAMS += uic
endif
ifeq ($(BR2_PACKAGE_QT_SQL_MODULE),y)
QT_INSTALL_LIBS += QtSql
QT_INSTALL_PLUGINS += sqldrivers
endif
ifeq ($(BR2_PACKAGE_QT_MULTIMEDIA),y)
QT_INSTALL_LIBS += QtMultimedia
endif
ifeq ($(BR2_PACKAGE_QT_PHONON),y)
QT_INSTALL_LIBS += phonon
QT_INSTALL_PLUGINS += phonon_backend
endif
ifeq ($(BR2_PACKAGE_QT_SVG),y)
QT_INSTALL_LIBS += QtSvg
QT_INSTALL_PLUGINS += iconengines
endif
ifeq ($(BR2_PACKAGE_QT_NETWORK),y)
QT_INSTALL_LIBS += QtNetwork
endif
ifeq ($(BR2_PACKAGE_QT_WEBKIT),y)
QT_INSTALL_LIBS += QtWebKit
endif
ifeq ($(BR2_PACKAGE_QT_XML),y)
QT_INSTALL_LIBS += QtXml
endif
ifeq ($(BR2_PACKAGE_QT_DBUS),y)
QT_INSTALL_LIBS += QtDBus
endif
ifeq ($(BR2_PACKAGE_QT_XMLPATTERNS),y)
QT_INSTALL_LIBS += QtXmlPatterns
endif
ifeq ($(BR2_PACKAGE_QT_SCRIPT),y)
QT_INSTALL_LIBS += QtScript
endif
ifeq ($(BR2_PACKAGE_QT_SCRIPTTOOLS),y)
QT_INSTALL_LIBS += QtScriptTools
endif
ifeq ($(BR2_PACKAGE_QT_QT3SUPPORT),y)
QT_INSTALL_LIBS += libQt3Support
endif
QT_CONF_FILE=$(HOST_DIR)/usr/bin/qt.conf
# Since host programs and spec files have been moved to $(HOST_DIR),
# we need to tell qmake the new location of the various elements,
# through a qt.conf file.
define QT_INSTALL_QT_CONF
mkdir -p $(dir $(QT_CONF_FILE))
echo "[Paths]" > $(QT_CONF_FILE)
echo "Prefix=$(HOST_DIR)/usr" >> $(QT_CONF_FILE)
echo "Headers=$(STAGING_DIR)/usr/include" >> $(QT_CONF_FILE)
echo "Libraries=$(STAGING_DIR)/usr/lib" >> $(QT_CONF_FILE)
echo "Data=$(HOST_DIR)/usr" >> $(QT_CONF_FILE)
echo "Binaries=$(HOST_DIR)/usr/bin" >> $(QT_CONF_FILE)
endef
# After running Qt normal installation process (which installs
# everything in the STAGING_DIR), we move host programs such as qmake,
# rcc or uic to the HOST_DIR so that they are available at the usual
# location. A qt.conf file is generated to make sure that all host
# programs still find all files they need.
define QT_INSTALL_STAGING_CMDS
$(MAKE) -C $(@D) install
mkdir -p $(HOST_DIR)/usr/bin
mv $(addprefix $(STAGING_DIR)/usr/bin/,$(QT_HOST_PROGRAMS)) $(HOST_DIR)/usr/bin
rm -rf $(HOST_DIR)/usr/mkspecs
mv $(STAGING_DIR)/usr/mkspecs $(HOST_DIR)/usr
$(QT_INSTALL_QT_CONF)
endef
qt-gui: $(STAGING_DIR)/usr/lib/libQtCore.la
mkdir -p $(TARGET_DIR)/usr/lib/fonts
# Library installation
ifeq ($(BR2_PACKAGE_QT_SHARED),y)
define QT_INSTALL_TARGET_LIBS
for lib in $(QT_INSTALL_LIBS); do \
cp -dpf $(STAGING_DIR)/usr/lib/lib$${lib}.so.* $(TARGET_DIR)/usr/lib ; \
done
endef
endif
# Plugin installation
define QT_INSTALL_TARGET_PLUGINS
for plugin in $(QT_INSTALL_PLUGINS); do \
mkdir -p $(TARGET_DIR)/usr/plugins ; \
cp -dpfr $(STAGING_DIR)/usr/plugins/$$plugin $(TARGET_DIR)/usr/plugins/; \
done
endef
# Fonts installation
ifneq ($(QT_FONTS),)
define QT_INSTALL_TARGET_FONTS
mkdir -p $(TARGET_DIR)/usr/lib/fonts
cp -dpf $(QT_FONTS) $(TARGET_DIR)/usr/lib/fonts
endef
endif
ifneq ($(BR2_PACKAGE_QT_NOFREETYPE),y)
ifeq ($(BR2_PACKAGE_QT_QTFREETYPE)$(BR2_PACKAGE_QT_SYSTEMFREETYPE),y)
define QT_INSTALL_TARGET_FONTS_TTF
mkdir -p $(TARGET_DIR)/usr/lib/fonts
cp -dpf $(STAGING_DIR)/usr/lib/fonts/*.ttf $(TARGET_DIR)/usr/lib/fonts
endif
# Install image plugins if they are built
$(call QT_INSTALL_PLUGINS,imageformats)
ifeq ($(BR2_PACKAGE_QT_SHARED),y)
cp -dpf $(STAGING_DIR)/usr/lib/libQtGui.so.* $(TARGET_DIR)/usr/lib/
endef
endif
qt-sql: $(STAGING_DIR)/usr/lib/libQtCore.la
$(call QT_INSTALL_PLUGINS,sqldrivers)
ifeq ($(BR2_PACKAGE_QT_SHARED),y)
cp -dpf $(STAGING_DIR)/usr/lib/libQtSql.so.* $(TARGET_DIR)/usr/lib/
endif
define QT_INSTALL_TARGET_CMDS
$(QT_INSTALL_TARGET_LIBS)
$(QT_INSTALL_TARGET_PLUGINS)
$(QT_INSTALL_TARGET_FONTS)
$(QT_INSTALL_TARGET_FONTS_TTF)
endef
qt-multimedia: $(STAGING_DIR)/usr/lib/libQtCore.la
ifeq ($(BR2_PACKAGE_QT_SHARED),y)
cp -dpf $(STAGING_DIR)/usr/lib/libQtMultimedia.so.* $(TARGET_DIR)/usr/lib/
endif
define QT_CLEAN_CMDS
-$(MAKE) -C $(@D) clean
endef
qt-phonon: $(STAGING_DIR)/usr/lib/libQtCore.la
$(call QT_INSTALL_PLUGINS,phonon_backend)
ifeq ($(BR2_PACKAGE_QT_SHARED),y)
cp -dpf $(STAGING_DIR)/usr/lib/libphonon.so.* $(TARGET_DIR)/usr/lib/
endif
qt-svg: $(STAGING_DIR)/usr/lib/libQtCore.la
$(call QT_INSTALL_PLUGINS,iconengines)
ifeq ($(BR2_PACKAGE_QT_SHARED),y)
cp -dpf $(STAGING_DIR)/usr/lib/libQtSvg.so.* $(TARGET_DIR)/usr/lib/
endif
qt-network: $(STAGING_DIR)/usr/lib/libQtCore.la
ifeq ($(BR2_PACKAGE_QT_SHARED),y)
cp -dpf $(STAGING_DIR)/usr/lib/libQtNetwork.so.* $(TARGET_DIR)/usr/lib/
endif
qt-webkit: $(STAGING_DIR)/usr/lib/libQtCore.la
ifeq ($(BR2_PACKAGE_QT_SHARED),y)
cp -dpf $(STAGING_DIR)/usr/lib/libQtWebKit.so.* $(TARGET_DIR)/usr/lib/
endif
qt-xml: $(STAGING_DIR)/usr/lib/libQtCore.la
ifeq ($(BR2_PACKAGE_QT_SHARED),y)
cp -dpf $(STAGING_DIR)/usr/lib/libQtXml.so.* $(TARGET_DIR)/usr/lib/
endif
qt-xmlpatterns: $(STAGING_DIR)/usr/lib/libQtCore.la
ifeq ($(BR2_PACKAGE_QT_SHARED),y)
cp -dpf $(STAGING_DIR)/usr/lib/libQtXmlPatterns.so.* $(TARGET_DIR)/usr/lib/
endif
qt-dbus: $(STAGING_DIR)/usr/lib/libQtCore.la
ifeq ($(BR2_PACKAGE_QT_SHARED),y)
cp -dpf $(STAGING_DIR)/usr/lib/libQtDBus.so.* $(TARGET_DIR)/usr/lib/
endif
qt-script: $(STAGING_DIR)/usr/lib/libQtCore.la
ifeq ($(BR2_PACKAGE_QT_SHARED),y)
cp -dpf $(STAGING_DIR)/usr/lib/libQtScript.so.* $(TARGET_DIR)/usr/lib/
endif
qt-scripttools: $(STAGING_DIR)/usr/lib/libQtCore.la
ifeq ($(BR2_PACKAGE_QT_SHARED),y)
cp -dpf $(STAGING_DIR)/usr/lib/libQtScriptTools.so.* $(TARGET_DIR)/usr/lib/
endif
qt-qt3support: $(STAGING_DIR)/usr/lib/libQtCore.la
ifeq ($(BR2_PACKAGE_QT_SHARED),y)
cp -dpf $(STAGING_DIR)/usr/lib/libQt3Support.so.* $(TARGET_DIR)/usr/lib/
endif
$(TARGET_DIR)/usr/lib/libQtCore.so.4: $(STAGING_DIR)/usr/lib/libQtCore.la $(QT_LIBS)
# Strip all installed libs
ifeq ($(BR2_PACKAGE_QT_SHARED),y)
cp -dpf $(STAGING_DIR)/usr/lib/libQtCore.so.* $(TARGET_DIR)/usr/lib/
-$(STRIPCMD) $(STRIP_STRIP_UNNEEDED) $(TARGET_DIR)/usr/lib/libQt*.so.*
endif
qt: $(QT_DEP_LIBS) $(TARGET_DIR)/usr/lib/libQtCore.so.4
qt-clean:
-$(MAKE) -C $(QT_TARGET_DIR) clean
define QT_UNINSTALL_TARGET_CMDS
-rm -rf $(TARGET_DIR)/usr/lib/fonts
ifeq ($(BR2_PACKAGE_QT_SHARED),y)
-rm $(TARGET_DIR)/usr/lib/libQt*.so.*
-rm $(TARGET_DIR)/usr/lib/libphonon.so.*
endif
endef
qt-dirclean:
rm -rf $(QT_TARGET_DIR)
#############################################################
#
# Toplevel Makefile options
#
#############################################################
ifeq ($(BR2_PACKAGE_QT),y)
TARGETS+=qt
endif
$(eval $(call GENTARGETS,package,qt))