diff mbox

[v6] package: add qt5virtualkeyboard

Message ID 20170330171842.29179-1-gael.portay@savoirfairelinux.com
State Changes Requested
Headers show

Commit Message

Gaël PORTAY March 30, 2017, 5:18 p.m. UTC
This patch adds the Qt virtualkeyboard package.

Signed-off-by: Gaël PORTAY <gael.portay@savoirfairelinux.com>
Reviewed-by: Peter Seiderer <ps.report@gmx.net>
---
Changes since v5:
 - Fix LICENSE information.
 - Fix missing QT5VIRTUALKEYBOARD_ prefix for QMAKEFLAGS.
 - Set QT5VIRTUALKEYBOARD_3RDPARTY_PARTS to YES instead of appending a list of
   mudules.

Changes since v4:
 - Prefix local variables to avoid potential naming collisions.

Changes since v3:
 - Fix another build issue when installing to target
   in case of zh_TW (or other layout) is not set.
 - Add licenses files when using 3rd-part modules.
 - Add support for handwriting module.

Changes since v2:
 - Fix build issue when installing libqtvirtualkeyboardplugin.so library
   in case of some other qt5 package installs something to
   plugins/platforminputcontexts.

Changes since v1:
 - Add missing hash file
 - Add license approval statement
 - Add support for languages layouts
   Note: Chinese, Japanese and Korean does not display properly (font?)
 - Install sample if is compiled (BR2_PACKAGE_QT5BASE_EXAMPLES=y)
 - Apply reviews from Peter:
   Add version constraint: message and dependency (needs at least qt 5.8)
   Update help to mention GPLv3 license

 package/qt5/Config.in                              |  1 +
 package/qt5/qt5virtualkeyboard/Config.in           | 52 +++++++++++++
 .../qt5/qt5virtualkeyboard/qt5virtualkeyboard.hash |  2 +
 .../qt5/qt5virtualkeyboard/qt5virtualkeyboard.mk   | 86 ++++++++++++++++++++++
 4 files changed, 141 insertions(+)
 create mode 100644 package/qt5/qt5virtualkeyboard/Config.in
 create mode 100644 package/qt5/qt5virtualkeyboard/qt5virtualkeyboard.hash
 create mode 100644 package/qt5/qt5virtualkeyboard/qt5virtualkeyboard.mk

Comments

Thomas Petazzoni April 1, 2017, 1:09 p.m. UTC | #1
Hello,

On Thu, 30 Mar 2017 13:18:42 -0400, Gaël PORTAY wrote:
> This patch adds the Qt virtualkeyboard package.
> 
> Signed-off-by: Gaël PORTAY <gael.portay@savoirfairelinux.com>
> Reviewed-by: Peter Seiderer <ps.report@gmx.net>

I was about to apply this, but there's still one thing unclear to me.
I'll be making some minor suggestions along the way (but those I would
have fixed myself when applying if I didn't had the doubt I'm referring
to). See below.

> +config BR2_PACKAGE_QT5VIRTUALKEYBOARD
> +	bool "qt5virtualkeyboard"
> +	depends on BR2_PACKAGE_QT5_VERSION_LATEST
> +	depends on BR2_PACKAGE_QT5DECLARATIVE_QUICK
> +	select BR2_PACKAGE_QT5SVG
> +	help
> +	  Qt Virtual Keyboard is a virtual keyboard framework that consists of a
> +	  C++ backend supporting custom input methods as well as a UI frontend
> +	  implemented in QML.
> +
> +	  This module is licensed under GPLv3.

You can remove this part, it is incorrect (can be a commercial
license), and already documented in the package itself.

> +if BR2_PACKAGE_QT5VIRTUALKEYBOARD

One empty line should be added here.

> +config BR2_PACKAGE_QT5VIRTUALKEYBOARD_LANGUAGE_LAYOUTS
> +	string "language layouts"
> +	default "en_GB"
> +	help
> +	  The Virtual Keyboard supports the following languages:
> +	  - Arabic (ar_AR)
> +	  - Danish (da_DK)
> +	  - English (en_GB)
> +	  - Finnish (fi_FI)
> +	  - French (fr_FR)
> +	  - German (de_DE)
> +	  - Hindi (hi_IN)
> +	  - Italian (it_IT)
> +	  - Japanese (ja_JP)
> +	  - Korean (ko_KR)
> +	  - Norwegian (nb_NO)
> +	  - Persian/Farsi (fa_FA)
> +	  - Polish (pl_PL)
> +	  - Portugese (pt_PT)
> +	  - Romanian (ro_RO)
> +	  - Russian (ru_RU)
> +	  - Simplified Chinese (zh_CN)
> +	  - Traditional Chinese (zh_TW)
> +	  - Spanish (es_ES)
> +	  - Swedish (sv_SE)
> +
> +	  Note: all is a flag for activating all languages.

I believe something like this would be clearer:

	Note: the special value "all" can be used to install support
	for all supported languages.

> +
> +config BR2_PACKAGE_QT5VIRTUALKEYBOARD_HANDWRITING
> +	bool "handwriting"
> +	help
> +	  Handwriting support, with gestures for fullscreen input.
> +
> +	  Lipi Toolkit (LipiTk) is an open source toolkit for online Handwriting
> +	  Recognition.

One empty line should be added here.


> +QT5VIRTUALKEYBOARD_LANGUAGE_LAYOUTS = $(call qstrip,$(BR2_PACKAGE_QT5VIRTUALKEYBOARD_LANGUAGE_LAYOUTS))
> +QT5VIRTUALKEYBOARD_ALL_LAYOUTS = $(findstring all,$(QT5VIRTUALKEYBOARD_LANGUAGE_LAYOUTS))
> +ifneq ($(strip $(QT5VIRTUALKEYBOARD_LANGUAGE_LAYOUTS)),)
> +QT5VIRTUALKEYBOARD_QMAKEFLAGS += CONFIG+="$(foreach lang,$(QT5VIRTUALKEYBOARD_LANGUAGE_LAYOUTS),lang-$(lang))"

I don't understand how this will behave when the "all" flag is used.
You will have:

	CONFIG+=lang-all

is this actually working?

> +QT5VIRTUALKEYBOARD_OPENWNN = $(findstring ja_JP,$(QT5VIRTUALKEYBOARD_LANGUAGE_LAYOUTS))
> +ifneq ($(strip $(QT5VIRTUALKEYBOARD_OPENWNN)$(QT5VIRTUALKEYBOARD_ALL_LAYOUTS)),)

Is the strip really needed in this condition (and the similar ones
below) ?

Perhaps we could do:

ifneq ($(findstring zh_CN,$(QT5VIRTUALKEYBOARD_LANGUAGE_LAYOUTS)),)
QT5VIRTUALKEYBOARD_INSTALL_PINYIN = YES
endif

ifneq ($(findstring ja_JP,$(QT5VIRTUALKEYBOARD_LANGUAGE_LAYOUTS)),)
QT5VIRTUALKEYBOARD_INSTALL_OPENWNN = YES
endif

...

ifneq ($(findstring all,$(QT5VIRTUALKEYBOARD_LANGUAGE_LAYOUTS)),)
QT5VIRTUALKEYBOARD_INSTALL_PINYIN = YES
QT5VIRTUALKEYBOARD_INSTALL_OPENWNN = YES
...
endif

And then use the QT5VIRTUALKEYBOARD_INSTALL_<foo> variables to know
what should be installed.

> +ifneq ($(strip $(QT5VIRTUALKEYBOARD_3RDPARTY_PARTS)),)

strip really needed?

Thanks,

Thomas
Arnout Vandecappelle April 1, 2017, 9:05 p.m. UTC | #2
On 01-04-17 15:09, Thomas Petazzoni wrote:
> Hello,
> 
[snip]
> Perhaps we could do:
> 
> ifneq ($(findstring zh_CN,$(QT5VIRTUALKEYBOARD_LANGUAGE_LAYOUTS)),)

 Or just the pattern we use everywhere else:

ifneq ($(filter zh_CN all,$(QT5VIRTUALKEYBOARD_LANGUAGE_LAYOUTS)),)


 Regards,
 Arnout

> QT5VIRTUALKEYBOARD_INSTALL_PINYIN = YES
> endif
> 
> ifneq ($(findstring ja_JP,$(QT5VIRTUALKEYBOARD_LANGUAGE_LAYOUTS)),)
> QT5VIRTUALKEYBOARD_INSTALL_OPENWNN = YES
> endif
> 
> ...
> 
> ifneq ($(findstring all,$(QT5VIRTUALKEYBOARD_LANGUAGE_LAYOUTS)),)
> QT5VIRTUALKEYBOARD_INSTALL_PINYIN = YES
> QT5VIRTUALKEYBOARD_INSTALL_OPENWNN = YES
> ...
> endif
> 
> And then use the QT5VIRTUALKEYBOARD_INSTALL_<foo> variables to know
> what should be installed.
> 
>> +ifneq ($(strip $(QT5VIRTUALKEYBOARD_3RDPARTY_PARTS)),)
> 
> strip really needed?
> 
> Thanks,
> 
> Thomas
>
Gaël PORTAY April 1, 2017, 9:37 p.m. UTC | #3
Hello Thomas,

On Sat, Apr 01, 2017 at 03:09:38PM +0200, Thomas Petazzoni wrote:
> Hello,
> 
> On Thu, 30 Mar 2017 13:18:42 -0400, Gaël PORTAY wrote:
> > This patch adds the Qt virtualkeyboard package.
> > 
> > Signed-off-by: Gaël PORTAY <gael.portay@savoirfairelinux.com>
> > Reviewed-by: Peter Seiderer <ps.report@gmx.net>
> 
> I was about to apply this, but there's still one thing unclear to me.
> I'll be making some minor suggestions along the way (but those I would
> have fixed myself when applying if I didn't had the doubt I'm referring
> to). See below.
> 
> > +config BR2_PACKAGE_QT5VIRTUALKEYBOARD
> > +	bool "qt5virtualkeyboard"
> > +	depends on BR2_PACKAGE_QT5_VERSION_LATEST
> > +	depends on BR2_PACKAGE_QT5DECLARATIVE_QUICK
> > +	select BR2_PACKAGE_QT5SVG
> > +	help
> > +	  Qt Virtual Keyboard is a virtual keyboard framework that consists of a
> > +	  C++ backend supporting custom input methods as well as a UI frontend
> > +	  implemented in QML.
> > +
> > +	  This module is licensed under GPLv3.
> 
> You can remove this part, it is incorrect (can be a commercial
> license), and already documented in the package itself.

Done.

> 
> > +if BR2_PACKAGE_QT5VIRTUALKEYBOARD
> 
> One empty line should be added here.
> 

Done.

> > +config BR2_PACKAGE_QT5VIRTUALKEYBOARD_LANGUAGE_LAYOUTS
> > +	string "language layouts"
> > +	default "en_GB"
> > +	help
> > +	  The Virtual Keyboard supports the following languages:
> > +	  - Arabic (ar_AR)
> > +	  - Danish (da_DK)
> > +	  - English (en_GB)
> > +	  - Finnish (fi_FI)
> > +	  - French (fr_FR)
> > +	  - German (de_DE)
> > +	  - Hindi (hi_IN)
> > +	  - Italian (it_IT)
> > +	  - Japanese (ja_JP)
> > +	  - Korean (ko_KR)
> > +	  - Norwegian (nb_NO)
> > +	  - Persian/Farsi (fa_FA)
> > +	  - Polish (pl_PL)
> > +	  - Portugese (pt_PT)
> > +	  - Romanian (ro_RO)
> > +	  - Russian (ru_RU)
> > +	  - Simplified Chinese (zh_CN)
> > +	  - Traditional Chinese (zh_TW)
> > +	  - Spanish (es_ES)
> > +	  - Swedish (sv_SE)
> > +
> > +	  Note: all is a flag for activating all languages.
> 
> I believe something like this would be clearer:
> 
> 	Note: the special value "all" can be used to install support
> 	for all supported languages.
> 

Done.

> > +
> > +config BR2_PACKAGE_QT5VIRTUALKEYBOARD_HANDWRITING
> > +	bool "handwriting"
> > +	help
> > +	  Handwriting support, with gestures for fullscreen input.
> > +
> > +	  Lipi Toolkit (LipiTk) is an open source toolkit for online Handwriting
> > +	  Recognition.
> 
> One empty line should be added here.
> 

Done.

> 
> > +QT5VIRTUALKEYBOARD_LANGUAGE_LAYOUTS = $(call qstrip,$(BR2_PACKAGE_QT5VIRTUALKEYBOARD_LANGUAGE_LAYOUTS))
> > +QT5VIRTUALKEYBOARD_ALL_LAYOUTS = $(findstring all,$(QT5VIRTUALKEYBOARD_LANGUAGE_LAYOUTS))
> > +ifneq ($(strip $(QT5VIRTUALKEYBOARD_LANGUAGE_LAYOUTS)),)
> > +QT5VIRTUALKEYBOARD_QMAKEFLAGS += CONFIG+="$(foreach lang,$(QT5VIRTUALKEYBOARD_LANGUAGE_LAYOUTS),lang-$(lang))"
> 
> I don't understand how this will behave when the "all" flag is used.
> You will have:
> 
> 	CONFIG+=lang-all
> 
> is this actually working?
> 

Yes.

The Makefile will call qmake with CONFIG+=lang-all.

I tested it and it works fine. CONFIG+=lang-all acts as an alias for all
languages. You can have a look to [1] & [2].

> > +QT5VIRTUALKEYBOARD_OPENWNN = $(findstring ja_JP,$(QT5VIRTUALKEYBOARD_LANGUAGE_LAYOUTS))
> > +ifneq ($(strip $(QT5VIRTUALKEYBOARD_OPENWNN)$(QT5VIRTUALKEYBOARD_ALL_LAYOUTS)),)
> 
> Is the strip really needed in this condition (and the similar ones
> below) ?
> 
> Perhaps we could do:
> 
> ifneq ($(findstring zh_CN,$(QT5VIRTUALKEYBOARD_LANGUAGE_LAYOUTS)),)
> QT5VIRTUALKEYBOARD_INSTALL_PINYIN = YES
> endif
> 
> ifneq ($(findstring ja_JP,$(QT5VIRTUALKEYBOARD_LANGUAGE_LAYOUTS)),)
> QT5VIRTUALKEYBOARD_INSTALL_OPENWNN = YES
> endif
> 
> ...
> 
> ifneq ($(findstring all,$(QT5VIRTUALKEYBOARD_LANGUAGE_LAYOUTS)),)
> QT5VIRTUALKEYBOARD_INSTALL_PINYIN = YES
> QT5VIRTUALKEYBOARD_INSTALL_OPENWNN = YES
> ...
> endif
> 
> And then use the QT5VIRTUALKEYBOARD_INSTALL_<foo> variables to know
> what should be installed.

It is another solution; which is much more nice.

Done.

> 
> > +ifneq ($(strip $(QT5VIRTUALKEYBOARD_3RDPARTY_PARTS)),)
> 
> strip really needed?

Indeed, the strip here is definelty not needed.

> 
> Thanks,
> 
> Thomas
> -- 
> Thomas Petazzoni, CTO, Free Electrons
> Embedded Linux and Kernel engineering
> http://free-electrons.com
> _______________________________________________
> buildroot mailing list
> buildroot@busybox.net
> http://lists.busybox.net/mailman/listinfo/buildroot

Thanks!

I will resend a new version.

Regards,
Gael

[1] https://github.com/qt/qtvirtualkeyboard/blob/5.8/src/config.pri#L23-L44
[2] https://doc.qt.io/qt-5/qtvirtualkeyboard-build.html
Gaël PORTAY April 1, 2017, 10:01 p.m. UTC | #4
Hi Arnout,

On Sat, Apr 01, 2017 at 11:05:51PM +0200, , Vandecappelle wrote:
> 
> 
> On 01-04-17 15:09, Thomas Petazzoni wrote:
> > Hello,
> > 
> [snip]
> > Perhaps we could do:
> > 
> > ifneq ($(findstring zh_CN,$(QT5VIRTUALKEYBOARD_LANGUAGE_LAYOUTS)),)
> 
>  Or just the pattern we use everywhere else:
> 
> ifneq ($(filter zh_CN all,$(QT5VIRTUALKEYBOARD_LANGUAGE_LAYOUTS)),)
> 

Thanks! it was the solution I wanted.

>  Regards,
>  Arnout
> 
> > QT5VIRTUALKEYBOARD_INSTALL_PINYIN = YES
> > endif
> > 
> > ifneq ($(findstring ja_JP,$(QT5VIRTUALKEYBOARD_LANGUAGE_LAYOUTS)),)
> > QT5VIRTUALKEYBOARD_INSTALL_OPENWNN = YES
> > endif
> > 
> > ...
> > 
> > ifneq ($(findstring all,$(QT5VIRTUALKEYBOARD_LANGUAGE_LAYOUTS)),)
> > QT5VIRTUALKEYBOARD_INSTALL_PINYIN = YES
> > QT5VIRTUALKEYBOARD_INSTALL_OPENWNN = YES
> > ...
> > endif
> > 
> > And then use the QT5VIRTUALKEYBOARD_INSTALL_<foo> variables to know
> > what should be installed.
> > 
> >> +ifneq ($(strip $(QT5VIRTUALKEYBOARD_3RDPARTY_PARTS)),)
> > 
> > strip really needed?
> > 
> > Thanks,
> > 
> > Thomas
> > 
> 
> -- 
> Arnout Vandecappelle                          arnout at mind be
> Senior Embedded Software Architect            +32-16-286500
> Essensium/Mind                                http://www.mind.be
> G.Geenslaan 9, 3001 Leuven, Belgium           BE 872 984 063 RPR Leuven
> LinkedIn profile: http://www.linkedin.com/in/arnoutvandecappelle
> GPG fingerprint:  7493 020B C7E3 8618 8DEC 222C 82EB F404 F9AC 0DDF

Regards,
Gael
diff mbox

Patch

diff --git a/package/qt5/Config.in b/package/qt5/Config.in
index 4bcbc6ef5..a810503d3 100644
--- a/package/qt5/Config.in
+++ b/package/qt5/Config.in
@@ -76,6 +76,7 @@  source "package/qt5/qt5serialbus/Config.in"
 source "package/qt5/qt5serialport/Config.in"
 source "package/qt5/qt5svg/Config.in"
 source "package/qt5/qt5tools/Config.in"
+source "package/qt5/qt5virtualkeyboard/Config.in"
 source "package/qt5/qt5webchannel/Config.in"
 source "package/qt5/qt5webkit/Config.in"
 source "package/qt5/qt5websockets/Config.in"
diff --git a/package/qt5/qt5virtualkeyboard/Config.in b/package/qt5/qt5virtualkeyboard/Config.in
new file mode 100644
index 000000000..16ca91655
--- /dev/null
+++ b/package/qt5/qt5virtualkeyboard/Config.in
@@ -0,0 +1,52 @@ 
+comment "qt5virtualkeyboard needs at least qt-5.7 and qt5declarative quick module"
+	depends on !BR2_PACKAGE_QT5_VERSION_LATEST || !BR2_PACKAGE_QT5DECLARATIVE_QUICK
+
+config BR2_PACKAGE_QT5VIRTUALKEYBOARD
+	bool "qt5virtualkeyboard"
+	depends on BR2_PACKAGE_QT5_VERSION_LATEST
+	depends on BR2_PACKAGE_QT5DECLARATIVE_QUICK
+	select BR2_PACKAGE_QT5SVG
+	help
+	  Qt Virtual Keyboard is a virtual keyboard framework that consists of a
+	  C++ backend supporting custom input methods as well as a UI frontend
+	  implemented in QML.
+
+	  This module is licensed under GPLv3.
+
+if BR2_PACKAGE_QT5VIRTUALKEYBOARD
+config BR2_PACKAGE_QT5VIRTUALKEYBOARD_LANGUAGE_LAYOUTS
+	string "language layouts"
+	default "en_GB"
+	help
+	  The Virtual Keyboard supports the following languages:
+	  - Arabic (ar_AR)
+	  - Danish (da_DK)
+	  - English (en_GB)
+	  - Finnish (fi_FI)
+	  - French (fr_FR)
+	  - German (de_DE)
+	  - Hindi (hi_IN)
+	  - Italian (it_IT)
+	  - Japanese (ja_JP)
+	  - Korean (ko_KR)
+	  - Norwegian (nb_NO)
+	  - Persian/Farsi (fa_FA)
+	  - Polish (pl_PL)
+	  - Portugese (pt_PT)
+	  - Romanian (ro_RO)
+	  - Russian (ru_RU)
+	  - Simplified Chinese (zh_CN)
+	  - Traditional Chinese (zh_TW)
+	  - Spanish (es_ES)
+	  - Swedish (sv_SE)
+
+	  Note: all is a flag for activating all languages.
+
+config BR2_PACKAGE_QT5VIRTUALKEYBOARD_HANDWRITING
+	bool "handwriting"
+	help
+	  Handwriting support, with gestures for fullscreen input.
+
+	  Lipi Toolkit (LipiTk) is an open source toolkit for online Handwriting
+	  Recognition.
+endif
diff --git a/package/qt5/qt5virtualkeyboard/qt5virtualkeyboard.hash b/package/qt5/qt5virtualkeyboard/qt5virtualkeyboard.hash
new file mode 100644
index 000000000..ea30fdb7c
--- /dev/null
+++ b/package/qt5/qt5virtualkeyboard/qt5virtualkeyboard.hash
@@ -0,0 +1,2 @@ 
+# Hash from: http://download.qt.io/official_releases/qt/5.8/5.8.0/submodules/qtvirtualkeyboard-opensource-src-5.8.0.tar.xz
+sha256 35fdf5b39d930935b6299ac59f347bea89b983e16bd7961fee3f1b8e16f4e21c  qtvirtualkeyboard-opensource-src-5.8.0.tar.xz
diff --git a/package/qt5/qt5virtualkeyboard/qt5virtualkeyboard.mk b/package/qt5/qt5virtualkeyboard/qt5virtualkeyboard.mk
new file mode 100644
index 000000000..c35dc31a4
--- /dev/null
+++ b/package/qt5/qt5virtualkeyboard/qt5virtualkeyboard.mk
@@ -0,0 +1,86 @@ 
+################################################################################
+#
+# qt5virtualkeyboard
+#
+################################################################################
+
+QT5VIRTUALKEYBOARD_VERSION = $(QT5_VERSION)
+QT5VIRTUALKEYBOARD_SITE = $(QT5_SITE)
+QT5VIRTUALKEYBOARD_SOURCE = qtvirtualkeyboard-opensource-src-$(QT5VIRTUALKEYBOARD_VERSION).tar.xz
+QT5VIRTUALKEYBOARD_DEPENDENCIES = qt5base qt5declarative qt5svg
+QT5VIRTUALKEYBOARD_INSTALL_STAGING = YES
+
+ifeq ($(BR2_PACKAGE_QT5BASE_LICENSE_APPROVED),y)
+QT5VIRTUALKEYBOARD_LICENSE = GPLv3
+QT5VIRTUALKEYBOARD_LICENSE_FILES = LICENSE.GPL3
+else
+QT5VIRTUALKEYBOARD_LICENSE = Commercial license
+QT5VIRTUALKEYBOARD_REDISTRIBUTE = NO
+endif
+
+QT5VIRTUALKEYBOARD_LANGUAGE_LAYOUTS = $(call qstrip,$(BR2_PACKAGE_QT5VIRTUALKEYBOARD_LANGUAGE_LAYOUTS))
+QT5VIRTUALKEYBOARD_ALL_LAYOUTS = $(findstring all,$(QT5VIRTUALKEYBOARD_LANGUAGE_LAYOUTS))
+ifneq ($(strip $(QT5VIRTUALKEYBOARD_LANGUAGE_LAYOUTS)),)
+QT5VIRTUALKEYBOARD_QMAKEFLAGS += CONFIG+="$(foreach lang,$(QT5VIRTUALKEYBOARD_LANGUAGE_LAYOUTS),lang-$(lang))"
+
+QT5VIRTUALKEYBOARD_OPENWNN = $(findstring ja_JP,$(QT5VIRTUALKEYBOARD_LANGUAGE_LAYOUTS))
+ifneq ($(strip $(QT5VIRTUALKEYBOARD_OPENWNN)$(QT5VIRTUALKEYBOARD_ALL_LAYOUTS)),)
+QT5VIRTUALKEYBOARD_LICENSE := $(QT5VIRTUALKEYBOARD_LICENSE), Apache-2.0 (openwnn)
+QT5VIRTUALKEYBOARD_LICENSE_FILES += src/virtualkeyboard/3rdparty/openwnn/NOTICE
+endif
+
+QT5VIRTUALKEYBOARD_PINYIN = $(findstring zh_CN,$(QT5VIRTUALKEYBOARD_LANGUAGE_LAYOUTS))
+ifneq ($(strip $(QT5VIRTUALKEYBOARD_PINYIN)$(QT5VIRTUALKEYBOARD_ALL_LAYOUTS)),)
+QT5VIRTUALKEYBOARD_3RDPARTY_PARTS = YES
+QT5VIRTUALKEYBOARD_LICENSE := $(QT5VIRTUALKEYBOARD_LICENSE), Apache-2.0 (pinyin)
+QT5VIRTUALKEYBOARD_LICENSE_FILES += src/virtualkeyboard/3rdparty/pinyin/NOTICE
+endif
+
+QT5VIRTUALKEYBOARD_TCIME = $(findstring zh_TW,$(QT5VIRTUALKEYBOARD_LANGUAGE_LAYOUTS))
+ifneq ($(strip $(QT5VIRTUALKEYBOARD_TCIME)$(QT5VIRTUALKEYBOARD_ALL_LAYOUTS)),)
+QT5VIRTUALKEYBOARD_3RDPARTY_PARTS = YES
+QT5VIRTUALKEYBOARD_LICENSE := $(QT5VIRTUALKEYBOARD_LICENSE), Apache-2.0 BSD-3c (tcime)
+QT5VIRTUALKEYBOARD_LICENSE_FILES += src/virtualkeyboard/3rdparty/tcime/COPYING
+endif
+endif
+
+ifeq ($(BR2_PACKAGE_QT5VIRTUALKEYBOARD_HANDWRITING),y)
+QT5VIRTUALKEYBOARD_3RDPARTY_PARTS = YES
+QT5VIRTUALKEYBOARD_QMAKEFLAGS += CONFIG+=handwriting
+QT5VIRTUALKEYBOARD_LICENSE := $(QT5VIRTUALKEYBOARD_LICENSE), MIT (lipi-toolkit)
+QT5VIRTUALKEYBOARD_LICENSE_FILES += src/virtualkeyboard/3rdparty/lipi-toolkit/MIT_LICENSE.txt
+endif
+
+ifneq ($(strip $(QT5VIRTUALKEYBOARD_3RDPARTY_PARTS)),)
+define QT5VIRTUALKEYBOARD_INSTALL_TARGET_3RDPARTY_PARTS
+	cp -dpfr $(STAGING_DIR)/usr/qtvirtualkeyboard $(TARGET_DIR)/usr
+endef
+endif
+
+define QT5VIRTUALKEYBOARD_CONFIGURE_CMDS
+	(cd $(@D); $(TARGET_MAKE_ENV) $(HOST_DIR)/usr/bin/qmake $(QT5VIRTUALKEYBOARD_QMAKEFLAGS))
+endef
+
+define QT5VIRTUALKEYBOARD_BUILD_CMDS
+	$(TARGET_MAKE_ENV) $(MAKE) -C $(@D)
+endef
+
+define QT5VIRTUALKEYBOARD_INSTALL_STAGING_CMDS
+	$(TARGET_MAKE_ENV) $(MAKE) -C $(@D) install
+endef
+
+ifeq ($(BR2_PACKAGE_QT5BASE_EXAMPLES),y)
+define QT5VIRTUALKEYBOARD_INSTALL_TARGET_EXAMPLES
+	cp -dpfr $(STAGING_DIR)/usr/lib/qt/examples/virtualkeyboard $(TARGET_DIR)/usr/lib/qt/examples/
+endef
+endif
+
+define QT5VIRTUALKEYBOARD_INSTALL_TARGET_CMDS
+	mkdir -p $(TARGET_DIR)/usr/lib/qt/plugins/platforminputcontexts
+	cp -dpfr $(STAGING_DIR)/usr/lib/qt/plugins/platforminputcontexts/libqtvirtualkeyboardplugin.so $(TARGET_DIR)/usr/lib/qt/plugins/platforminputcontexts
+	cp -dpfr $(STAGING_DIR)/usr/qml/QtQuick/VirtualKeyboard $(TARGET_DIR)/usr/qml/QtQuick
+	$(QT5VIRTUALKEYBOARD_INSTALL_TARGET_3RDPARTY_PARTS)
+	$(QT5VIRTUALKEYBOARD_INSTALL_TARGET_EXAMPLES)
+endef
+
+$(eval $(generic-package))