diff --git a/repos/libports/lib/import/import-qt5_qmlfolderlistmodelplugin.mk b/repos/libports/lib/import/import-qt5_qmlfolderlistmodelplugin.mk
new file mode 100644
index 000000000..5602c0bec
--- /dev/null
+++ b/repos/libports/lib/import/import-qt5_qmlfolderlistmodelplugin.mk
@@ -0,0 +1,3 @@
+IMPORT_QT5_INC=$(call select_from_repositories,lib/import/import-qt5.inc)
+
+include $(IMPORT_QT5_INC)
diff --git a/repos/libports/lib/import/import-qt5_qquicklayoutsplugin.mk b/repos/libports/lib/import/import-qt5_qquicklayoutsplugin.mk
new file mode 100644
index 000000000..5602c0bec
--- /dev/null
+++ b/repos/libports/lib/import/import-qt5_qquicklayoutsplugin.mk
@@ -0,0 +1,3 @@
+IMPORT_QT5_INC=$(call select_from_repositories,lib/import/import-qt5.inc)
+
+include $(IMPORT_QT5_INC)
diff --git a/repos/libports/lib/import/import-qt5_qtvirtualkeyboardplugin.mk b/repos/libports/lib/import/import-qt5_qtvirtualkeyboardplugin.mk
new file mode 100644
index 000000000..5602c0bec
--- /dev/null
+++ b/repos/libports/lib/import/import-qt5_qtvirtualkeyboardplugin.mk
@@ -0,0 +1,3 @@
+IMPORT_QT5_INC=$(call select_from_repositories,lib/import/import-qt5.inc)
+
+include $(IMPORT_QT5_INC)
diff --git a/repos/libports/lib/import/import-qt5_qtvirtualkeyboardstylesplugin.mk b/repos/libports/lib/import/import-qt5_qtvirtualkeyboardstylesplugin.mk
new file mode 100644
index 000000000..5602c0bec
--- /dev/null
+++ b/repos/libports/lib/import/import-qt5_qtvirtualkeyboardstylesplugin.mk
@@ -0,0 +1,3 @@
+IMPORT_QT5_INC=$(call select_from_repositories,lib/import/import-qt5.inc)
+
+include $(IMPORT_QT5_INC)
diff --git a/repos/libports/lib/import/import-qt5_svg.mk b/repos/libports/lib/import/import-qt5_svg.mk
new file mode 100644
index 000000000..adce7bf6d
--- /dev/null
+++ b/repos/libports/lib/import/import-qt5_svg.mk
@@ -0,0 +1,5 @@
+IMPORT_QT5_INC=$(call select_from_repositories,lib/import/import-qt5.inc)
+
+include $(IMPORT_QT5_INC)
+
+QT5_INC_DIR += $(QT5_CONTRIB_DIR)/qtsvg/include/QtSvg
diff --git a/repos/libports/lib/import/import-qt5_windowplugin.mk b/repos/libports/lib/import/import-qt5_windowplugin.mk
new file mode 100644
index 000000000..5602c0bec
--- /dev/null
+++ b/repos/libports/lib/import/import-qt5_windowplugin.mk
@@ -0,0 +1,3 @@
+IMPORT_QT5_INC=$(call select_from_repositories,lib/import/import-qt5.inc)
+
+include $(IMPORT_QT5_INC)
diff --git a/repos/libports/lib/mk/qt5_qmlfolderlistmodelplugin.mk b/repos/libports/lib/mk/qt5_qmlfolderlistmodelplugin.mk
new file mode 100644
index 000000000..2c0d04a12
--- /dev/null
+++ b/repos/libports/lib/mk/qt5_qmlfolderlistmodelplugin.mk
@@ -0,0 +1,40 @@
+include $(REP_DIR)/lib/import/import-qt5_qmlfolderlistmodelplugin.mk
+
+SHARED_LIB = yes
+
+include $(REP_DIR)/lib/mk/qt5_qmlfolderlistmodelplugin_generated.inc
+
+QT_DEFINES += -UQT_STATICPLUGIN
+
+include $(REP_DIR)/lib/mk/qt5.inc
+
+LIBS += qt5_qml
+
+# install the QtQuick QML plugin
+
+QTQUICK_INSTALL_DIR := $(BUILD_BASE_DIR)/bin/qt5_fs/qt/qml/Qt/labs/folderlistmodel
+QTQUICK_QMLDIR := $(QTQUICK_INSTALL_DIR)/qmldir
+QTQUICK_PLUGIN_NAME := qt5_qmlfolderlistmodelplugin.lib.so
+QTQUICK_PLUGIN := $(QTQUICK_INSTALL_DIR)/$(QTQUICK_PLUGIN_NAME)
+
+$(QTQUICK_INSTALL_DIR):
+ $(VERBOSE)mkdir -p $@
+
+$(QTQUICK_QMLDIR): $(QTQUICK_INSTALL_DIR)
+ $(VERBOSE)cp $(QT5_CONTRIB_DIR)/qtdeclarative/src/imports/folderlistmodel/qmldir $(QTQUICK_INSTALL_DIR)
+
+$(QTQUICK_PLUGIN): $(QTQUICK_INSTALL_DIR)
+ $(VERBOSE)ln -sf $(BUILD_BASE_DIR)/bin/$(QTQUICK_PLUGIN_NAME) $(QTQUICK_INSTALL_DIR)/$(QTQUICK_PLUGIN_NAME)
+
+ifneq ($(call select_from_ports,qt5),)
+all: $(QTQUICK_QMLDIR) $(QTQUICK_PLUGIN)
+endif
+
+#
+# unfortunately, these clean rules don't trigger
+#
+
+clean-qtquick_install_dir:
+ rm -rf $(QTQUICK_INSTALL_DIR)
+
+clean: clean-qtquick_install_dir
diff --git a/repos/libports/lib/mk/qt5_qmlfolderlistmodelplugin_generated.inc b/repos/libports/lib/mk/qt5_qmlfolderlistmodelplugin_generated.inc
new file mode 100644
index 000000000..4a9209190
--- /dev/null
+++ b/repos/libports/lib/mk/qt5_qmlfolderlistmodelplugin_generated.inc
@@ -0,0 +1,40 @@
+QT_DEFINES += -DQT_NO_EXCEPTIONS -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE -DQT_NO_DEBUG -DQT_PLUGIN -DQT_QML_LIB -DQT_NO_QML_DEBUGGER -DQT_NETWORK_LIB -DQT_CORE_LIB
+
+QT_INCPATH += \
+ qtdeclarative/src/imports/folderlistmodel \
+ qtdeclarative/include/QtQml/5.8.0 \
+ qtdeclarative/include/QtQml/5.8.0/QtQml \
+ qtbase/include/QtCore/5.8.0 \
+ qtbase/include/QtCore/5.8.0/QtCore \
+ qtdeclarative/include \
+ qtdeclarative/include/QtQml \
+ qtbase/include \
+ qtbase/include/QtNetwork \
+ qtbase/include/QtCore \
+ qtbase/mkspecs/genode-g++
+
+QT_SOURCES += \
+ qquickfolderlistmodel.cpp \
+ plugin.cpp \
+ fileinfothread.cpp \
+ moc_fileinfothread_p.cpp
+
+QT_VPATH += \
+ qtdeclarative/src/imports/folderlistmodel \
+
+# some source files need to be generated by moc from other source/header files before
+# they get #included again by the original source file in the compiling stage
+
+# source files generated from existing header files ('moc_%.cpp: %.h' rule in import-qt5.inc)
+# extracted from 'compiler_moc_header_make_all' target
+
+COMPILER_MOC_HEADER_MAKE_ALL_FILES = \
+ moc_qquickfolderlistmodel.cpp \
+ moc_fileinfothread_p.cpp
+
+# source files generated from existing source files ('%.moc: %.cpp' rule in import-qt5.inc)
+# extracted from 'compiler_moc_source_make_all' rule
+
+COMPILER_MOC_SOURCE_MAKE_ALL_FILES = \
+ plugin.moc
+
diff --git a/repos/libports/lib/mk/qt5_qquicklayoutsplugin.mk b/repos/libports/lib/mk/qt5_qquicklayoutsplugin.mk
new file mode 100644
index 000000000..75960e424
--- /dev/null
+++ b/repos/libports/lib/mk/qt5_qquicklayoutsplugin.mk
@@ -0,0 +1,40 @@
+include $(REP_DIR)/lib/import/import-qt5_qquicklayoutsplugin.mk
+
+SHARED_LIB = yes
+
+include $(REP_DIR)/lib/mk/qt5_qquicklayoutsplugin_generated.inc
+
+QT_DEFINES += -UQT_STATICPLUGIN
+
+include $(REP_DIR)/lib/mk/qt5.inc
+
+LIBS += qt5_qml mesa
+
+# install the QtQuick QML plugin
+
+QTQUICK_INSTALL_DIR := $(BUILD_BASE_DIR)/bin/qt5_fs/qt/qml/QtQuick/Layouts
+QTQUICK_QMLDIR := $(QTQUICK_INSTALL_DIR)/qmldir
+QTQUICK_PLUGIN_NAME := qt5_qquicklayoutsplugin.lib.so
+QTQUICK_PLUGIN := $(QTQUICK_INSTALL_DIR)/$(QTQUICK_PLUGIN_NAME)
+
+$(QTQUICK_INSTALL_DIR):
+ $(VERBOSE)mkdir -p $@
+
+$(QTQUICK_QMLDIR): $(QTQUICK_INSTALL_DIR)
+ $(VERBOSE)cp $(QT5_CONTRIB_DIR)/qtdeclarative/src/imports/layouts/qmldir $(QTQUICK_INSTALL_DIR)
+
+$(QTQUICK_PLUGIN): $(QTQUICK_INSTALL_DIR)
+ $(VERBOSE)ln -sf $(BUILD_BASE_DIR)/bin/$(QTQUICK_PLUGIN_NAME) $(QTQUICK_INSTALL_DIR)/$(QTQUICK_PLUGIN_NAME)
+
+ifneq ($(call select_from_ports,qt5),)
+all: $(QTQUICK_QMLDIR) $(QTQUICK_PLUGIN)
+endif
+
+#
+# unfortunately, these clean rules don't trigger
+#
+
+clean-qtquick_install_dir:
+ rm -rf $(QTQUICK_INSTALL_DIR)
+
+clean: clean-qtquick_install_dir
diff --git a/repos/libports/lib/mk/qt5_qquicklayoutsplugin_generated.inc b/repos/libports/lib/mk/qt5_qquicklayoutsplugin_generated.inc
new file mode 100644
index 000000000..dc7bbc572
--- /dev/null
+++ b/repos/libports/lib/mk/qt5_qquicklayoutsplugin_generated.inc
@@ -0,0 +1,52 @@
+QT_DEFINES += -DQT_NO_EXCEPTIONS -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE -DQT_NO_DEBUG -DQT_PLUGIN -DQT_QUICK_LIB -DQT_GUI_LIB -DQT_QML_LIB -DQT_NO_QML_DEBUGGER -DQT_NETWORK_LIB -DQT_CORE_LIB
+
+QT_INCPATH += \
+ qtdeclarative/src/imports/layouts \
+ qtdeclarative/include/QtQuick/5.8.0 \
+ qtdeclarative/include/QtQuick/5.8.0/QtQuick \
+ qtbase/include/QtGui/5.8.0 \
+ qtbase/include/QtGui/5.8.0/QtGui \
+ qtdeclarative/include \
+ qtdeclarative/include/QtQuick \
+ qtbase/include \
+ qtbase/include/QtGui \
+ qtdeclarative/include/QtQml/5.8.0 \
+ qtdeclarative/include/QtQml/5.8.0/QtQml \
+ qtbase/include/QtCore/5.8.0 \
+ qtbase/include/QtCore/5.8.0/QtCore \
+ qtdeclarative/include/QtQml \
+ qtbase/include/QtNetwork \
+ qtbase/include/QtCore \
+ qtbase/mkspecs/genode-g++
+
+QT_SOURCES += \
+ plugin.cpp \
+ qquicklayout.cpp \
+ qquicklinearlayout.cpp \
+ qquickstacklayout.cpp \
+ qquickgridlayoutengine.cpp \
+ qquicklayoutstyleinfo.cpp \
+ moc_qquicklayout_p.cpp \
+ moc_qquicklinearlayout_p.cpp \
+ moc_qquickstacklayout_p.cpp
+
+QT_VPATH += \
+ qtdeclarative/src/imports/layouts \
+
+# some source files need to be generated by moc from other source/header files before
+# they get #included again by the original source file in the compiling stage
+
+# source files generated from existing header files ('moc_%.cpp: %.h' rule in import-qt5.inc)
+# extracted from 'compiler_moc_header_make_all' target
+
+COMPILER_MOC_HEADER_MAKE_ALL_FILES = \
+ moc_qquicklayout_p.cpp \
+ moc_qquicklinearlayout_p.cpp \
+ moc_qquickstacklayout_p.cpp
+
+# source files generated from existing source files ('%.moc: %.cpp' rule in import-qt5.inc)
+# extracted from 'compiler_moc_source_make_all' rule
+
+COMPILER_MOC_SOURCE_MAKE_ALL_FILES = \
+ plugin.moc
+
diff --git a/repos/libports/lib/mk/qt5_qtvirtualkeyboardplugin.mk b/repos/libports/lib/mk/qt5_qtvirtualkeyboardplugin.mk
new file mode 100644
index 000000000..bfc3dd595
--- /dev/null
+++ b/repos/libports/lib/mk/qt5_qtvirtualkeyboardplugin.mk
@@ -0,0 +1,57 @@
+include $(REP_DIR)/lib/import/import-qt5_qtvirtualkeyboardplugin.mk
+
+SHARED_LIB = yes
+
+include $(REP_DIR)/lib/mk/qt5_qtvirtualkeyboardplugin_generated.inc
+
+QT_DEFINES += -UQT_STATICPLUGIN
+
+include $(REP_DIR)/lib/mk/qt5.inc
+
+LIBS += qt5_qml qt5_quick qt5_svg qt5_qtvirtualkeyboardstylesplugin qt5_qquicklayoutsplugin qt5_qmlfolderlistmodelplugin mesa
+
+# install the QtQuick QML plugin
+
+QT_PLUGIN_INSTALL_DIR := $(BUILD_BASE_DIR)/bin/qt5_fs/qt/plugins/platforminputcontexts
+QT_PLUGIN_NAME := qt5_qtvirtualkeyboardplugin.lib.so
+QT_PLUGIN := $(QT_PLUGIN_INSTALL_DIR)/$(QT_PLUGIN_NAME)
+QTQUICK_INSTALL_DIR := $(BUILD_BASE_DIR)/bin/qt5_fs/qt/qml/QtQuick/VirtualKeyboard
+QTQUICK_QMLDIR := $(QTQUICK_INSTALL_DIR)/qmldir
+
+QT5_REP_DIR := $(call select_from_repositories,lib/import/import-qt5.inc)
+QT5_REP_DIR := $(realpath $(dir $(QT5_REP_DIR))../..)
+include $(QT5_REP_DIR)/lib/mk/qt5_version.inc
+
+QT5_CONTRIB_DIR := $(call select_from_ports,qt5)/src/lib/qt5/$(QT5)
+
+vpath % $(QT5_CONTRIB_DIR)/qtvirtualkeyboard/src/virtualkeyboard/content
+vpath % $(QT5_CONTRIB_DIR)/qtvirtualkeyboard/src/virtualkeyboard/content/styles/retro
+vpath % $(QT5_CONTRIB_DIR)/qtvirtualkeyboard/src/virtualkeyboard/content/styles/default
+
+$(QTQUICK_INSTALL_DIR):
+ $(VERBOSE)mkdir -p $@
+
+$(STYLES_INSTALL_DIR):
+ $(VERBOSE)mkdir -p $@
+
+$(QTQUICK_QMLDIR): $(QTQUICK_INSTALL_DIR)
+ $(VERBOSE)cp $(QT5_CONTRIB_DIR)/qtvirtualkeyboard/src/virtualkeyboard/import/qmldir $(QTQUICK_INSTALL_DIR)
+
+$(QT_PLUGIN_INSTALL_DIR):
+ $(VERBOSE)mkdir -p $@
+
+$(QT_PLUGIN): $(QT_PLUGIN_INSTALL_DIR)
+ $(VERBOSE)ln -sf $(BUILD_BASE_DIR)/bin/$(QT_PLUGIN_NAME) $(QT_PLUGIN_INSTALL_DIR)/$(QT_PLUGIN_NAME)
+
+ifneq ($(call select_from_ports,qt5),)
+all: $(QT_PLUGIN) $(QTQUICK_QMLDIR) $(QTQUICK_PLUGIN)
+endif
+
+#
+# unfortunately, these clean rules don't trigger
+#
+
+clean-qtquick_install_dir:
+ rm -rf $(QT_PLUGIN_INSTALL_DIR)
+
+clean: clean-qtquick_install_dir
diff --git a/repos/libports/lib/mk/qt5_qtvirtualkeyboardplugin_generated.inc b/repos/libports/lib/mk/qt5_qtvirtualkeyboardplugin_generated.inc
new file mode 100644
index 000000000..5baa3e3f4
--- /dev/null
+++ b/repos/libports/lib/mk/qt5_qtvirtualkeyboardplugin_generated.inc
@@ -0,0 +1,97 @@
+QT_DEFINES += -DQT_VIRTUALKEYBOARD_DEFAULT_STYLE=\"default\" -DQT_VIRTUALKEYBOARD_DESKTOP -DQT_NO_EXCEPTIONS -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE -DQT_NO_DEBUG -DQT_PLUGIN -DQT_QUICK_LIB -DQT_GUI_LIB -DQT_QML_LIB -DQT_NO_QML_DEBUGGER -DQT_CORE_LIB
+
+QT_INCPATH += \
+ qtvirtualkeyboard/src/virtualkeyboard \
+ qtdeclarative/include \
+ qtdeclarative/include/QtQuick \
+ qtbase/include/QtGui/5.8.0 \
+ qtbase/include/QtGui/5.8.0/QtGui \
+ qtbase/include \
+ qtbase/include/QtGui \
+ qtdeclarative/include/QtQml \
+ qtbase/include/QtNetwork \
+ qtbase/include/QtCore/5.8.0 \
+ qtbase/include/QtCore/5.8.0/QtCore \
+ qtbase/include/QtCore \
+ qtbase/mkspecs/genode-g++
+
+QT_SOURCES += \
+ platforminputcontext.cpp \
+ inputcontext.cpp \
+ abstractinputmethod.cpp \
+ plaininputmethod.cpp \
+ inputengine.cpp \
+ shifthandler.cpp \
+ plugin.cpp \
+ inputmethod.cpp \
+ selectionlistmodel.cpp \
+ defaultinputmethod.cpp \
+ abstractinputpanel.cpp \
+ enterkeyaction.cpp \
+ enterkeyactionattachedtype.cpp \
+ settings.cpp \
+ virtualkeyboardsettings.cpp \
+ trace.cpp \
+ desktopinputpanel.cpp \
+ inputview.cpp \
+ appinputpanel.cpp \
+ qrc_default_style.cpp \
+ qrc_retro_style.cpp \
+ qrc_content.cpp \
+ qrc_layouts.cpp \
+ moc_platforminputcontext.cpp \
+ moc_inputcontext.cpp \
+ moc_abstractinputmethod.cpp \
+ moc_plaininputmethod.cpp \
+ moc_inputengine.cpp \
+ moc_shifthandler.cpp \
+ moc_inputmethod.cpp \
+ moc_selectionlistmodel.cpp \
+ moc_defaultinputmethod.cpp \
+ moc_abstractinputpanel.cpp \
+ moc_enterkeyaction.cpp \
+ moc_enterkeyactionattachedtype.cpp \
+ moc_settings.cpp \
+ moc_virtualkeyboardsettings.cpp \
+ moc_plugin.cpp \
+ moc_trace.cpp \
+ moc_desktopinputpanel.cpp \
+ moc_inputview.cpp \
+ moc_appinputpanel.cpp
+
+QT_VPATH += \
+ qtvirtualkeyboard/src/virtualkeyboard \
+
+# some source files need to be generated by moc from other source/header files before
+# they get #included again by the original source file in the compiling stage
+
+# source files generated from existing header files ('moc_%.cpp: %.h' rule in import-qt5.inc)
+# extracted from 'compiler_moc_header_make_all' target
+
+COMPILER_MOC_HEADER_MAKE_ALL_FILES = \
+ moc_platforminputcontext.cpp \
+ moc_inputcontext.cpp \
+ moc_abstractinputmethod.cpp \
+ moc_plaininputmethod.cpp \
+ moc_inputengine.cpp \
+ moc_shifthandler.cpp \
+ moc_inputmethod.cpp \
+ moc_selectionlistmodel.cpp \
+ moc_defaultinputmethod.cpp \
+ moc_abstractinputpanel.cpp \
+ moc_enterkeyaction.cpp \
+ moc_enterkeyactionattachedtype.cpp \
+ moc_settings.cpp \
+ moc_virtualkeyboardsettings.cpp \
+ moc_plugin.cpp \
+ moc_trace.cpp \
+ moc_desktopinputpanel.cpp \
+ moc_inputview.cpp \
+ moc_appinputpanel.cpp
+
+# source files generated from existing source files ('%.moc: %.cpp' rule in import-qt5.inc)
+# extracted from 'compiler_moc_source_make_all' rule
+
+COMPILER_MOC_SOURCE_MAKE_ALL_FILES = \
+
+
diff --git a/repos/libports/lib/mk/qt5_qtvirtualkeyboardstylesplugin.mk b/repos/libports/lib/mk/qt5_qtvirtualkeyboardstylesplugin.mk
new file mode 100644
index 000000000..14a333d91
--- /dev/null
+++ b/repos/libports/lib/mk/qt5_qtvirtualkeyboardstylesplugin.mk
@@ -0,0 +1,53 @@
+include $(REP_DIR)/lib/import/import-qt5_qtvirtualkeyboardstylesplugin.mk
+
+SHARED_LIB = yes
+
+include $(REP_DIR)/lib/mk/qt5_qtvirtualkeyboardstylesplugin_generated.inc
+
+QT_DEFINES += -UQT_STATICPLUGIN
+
+include $(REP_DIR)/lib/mk/qt5.inc
+
+LIBS += qt5_qml qt5_quick
+
+# install the QtQuick QML plugin
+
+QT_PLUGIN_INSTALL_DIR := $(BUILD_BASE_DIR)/bin/qt5_fs/qt/qml/QtQuick/VirtualKeyboard/Styles
+QT_PLUGIN_NAME := qt5_qtvirtualkeyboardstylesplugin.lib.so
+QT_PLUGIN := $(QT_PLUGIN_INSTALL_DIR)/$(QT_PLUGIN_NAME)
+QTQUICK_INSTALL_DIR := $(BUILD_BASE_DIR)/bin/qt5_fs/qt/qml/QtQuick/VirtualKeyboard/Styles
+QTQUICK_QMLDIR := $(QTQUICK_INSTALL_DIR)/qmldir
+
+QT5_REP_DIR := $(call select_from_repositories,lib/import/import-qt5.inc)
+QT5_REP_DIR := $(realpath $(dir $(QT5_REP_DIR))../..)
+include $(QT5_REP_DIR)/lib/mk/qt5_version.inc
+
+QT5_CONTRIB_DIR := $(call select_from_ports,qt5)/src/lib/qt5/$(QT5)
+
+$(QTQUICK_INSTALL_DIR):
+ $(VERBOSE)mkdir -p $@
+
+$(STYLES_INSTALL_DIR):
+ $(VERBOSE)mkdir -p $@
+
+$(QTQUICK_QMLDIR): $(QTQUICK_INSTALL_DIR)
+ $(VERBOSE)cp $(QT5_CONTRIB_DIR)/qtvirtualkeyboard/src/virtualkeyboard/styles/qmldir $(QTQUICK_INSTALL_DIR)
+
+$(QT_PLUGIN_INSTALL_DIR):
+ $(VERBOSE)mkdir -p $@
+
+$(QT_PLUGIN): $(QT_PLUGIN_INSTALL_DIR)
+ $(VERBOSE)ln -sf $(BUILD_BASE_DIR)/bin/$(QT_PLUGIN_NAME) $(QT_PLUGIN_INSTALL_DIR)/$(QT_PLUGIN_NAME)
+
+ifneq ($(call select_from_ports,qt5),)
+all: $(QT_PLUGIN) $(QTQUICK_QMLDIR) $(QTQUICK_PLUGIN)
+endif
+
+#
+# unfortunately, these clean rules don't trigger
+#
+
+clean-qtquick_install_dir:
+ rm -rf $(QT_PLUGIN_INSTALL_DIR)
+
+clean: clean-qtquick_install_dir
diff --git a/repos/libports/lib/mk/qt5_qtvirtualkeyboardstylesplugin_generated.inc b/repos/libports/lib/mk/qt5_qtvirtualkeyboardstylesplugin_generated.inc
new file mode 100644
index 000000000..e54e559d9
--- /dev/null
+++ b/repos/libports/lib/mk/qt5_qtvirtualkeyboardstylesplugin_generated.inc
@@ -0,0 +1,40 @@
+QT_DEFINES += -DQT_NO_EXCEPTIONS -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE -DQT_NO_DEBUG -DQT_PLUGIN -DQT_QUICK_LIB -DQT_SVG_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_QML_LIB -DQT_NO_QML_DEBUGGER -DQT_NETWORK_LIB -DQT_CORE_LIB
+
+QT_INCPATH += \
+ qtvirtualkeyboard/src/virtualkeyboard/styles \
+ qtdeclarative/include \
+ qtdeclarative/include/QtQuick \
+ qtsvg/include \
+ qtsvg/include/QtSvg \
+ qtbase/include \
+ qtbase/include/QtWidgets \
+ qtbase/include/QtGui \
+ qtdeclarative/include/QtQml \
+ qtbase/include/QtNetwork \
+ qtbase/include/QtCore \
+ qtbase/mkspecs/genode-g++
+
+QT_SOURCES += \
+ svgimageprovider.cpp \
+ styles_plugin.cpp \
+ qrc_styles.cpp \
+ moc_styles_plugin.cpp
+
+QT_VPATH += \
+ qtvirtualkeyboard/src/virtualkeyboard/styles \
+
+# some source files need to be generated by moc from other source/header files before
+# they get #included again by the original source file in the compiling stage
+
+# source files generated from existing header files ('moc_%.cpp: %.h' rule in import-qt5.inc)
+# extracted from 'compiler_moc_header_make_all' target
+
+COMPILER_MOC_HEADER_MAKE_ALL_FILES = \
+ moc_styles_plugin.cpp
+
+# source files generated from existing source files ('%.moc: %.cpp' rule in import-qt5.inc)
+# extracted from 'compiler_moc_source_make_all' rule
+
+COMPILER_MOC_SOURCE_MAKE_ALL_FILES = \
+
+
diff --git a/repos/libports/lib/mk/qt5_svg.mk b/repos/libports/lib/mk/qt5_svg.mk
new file mode 100644
index 000000000..1d3aa50c1
--- /dev/null
+++ b/repos/libports/lib/mk/qt5_svg.mk
@@ -0,0 +1,11 @@
+include $(REP_DIR)/lib/import/import-qt5_svg.mk
+
+SHARED_LIB = yes
+
+LIBS += mesa zlib
+
+include $(REP_DIR)/lib/mk/qt5_svg_generated.inc
+
+include $(REP_DIR)/lib/mk/qt5.inc
+
+INC_DIR += $(QT5_CONTRIB_DIR)/qtsvg/include/QtSvg/$(QT_VERSION)/QtSvg \
diff --git a/repos/libports/lib/mk/qt5_svg_generated.inc b/repos/libports/lib/mk/qt5_svg_generated.inc
new file mode 100644
index 000000000..6e0102c3c
--- /dev/null
+++ b/repos/libports/lib/mk/qt5_svg_generated.inc
@@ -0,0 +1,54 @@
+QT_DEFINES += -DQT_NO_FOREACH -DQT_NO_USING_NAMESPACE -DQT_BUILD_SVG_LIB -DQT_BUILDING_QT -DQT_NO_CAST_TO_ASCII -DQT_ASCII_CAST_WARNINGS -DQT_MOC_COMPAT -DQT_USE_QSTRINGBUILDER -DQT_DEPRECATED_WARNINGS -DQT_DISABLE_DEPRECATED_BEFORE=0x050000 -DQT_NO_EXCEPTIONS -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB
+
+QT_INCPATH += \
+ qtsvg/src/svg \
+ qtsvg/include \
+ qtsvg/include/QtSvg \
+ qtsvg/include/QtSvg/5.8.0 \
+ qtsvg/include/QtSvg/5.8.0/QtSvg \
+ qtbase/include/QtWidgets/5.8.0 \
+ qtbase/include/QtWidgets/5.8.0/QtWidgets \
+ qtbase/include/QtGui/5.8.0 \
+ qtbase/include/QtGui/5.8.0/QtGui \
+ qtbase/include/QtCore/5.8.0 \
+ qtbase/include/QtCore/5.8.0/QtCore \
+ qtbase/include \
+ qtbase/include/QtWidgets \
+ qtbase/include/QtGui \
+ qtbase/include/QtCore \
+ qtbase/mkspecs/genode-g++
+
+QT_SOURCES += \
+ qsvggraphics.cpp \
+ qsvghandler.cpp \
+ qsvgnode.cpp \
+ qsvgstructure.cpp \
+ qsvgstyle.cpp \
+ qsvgfont.cpp \
+ qsvgtinydocument.cpp \
+ qsvgrenderer.cpp \
+ qsvgwidget.cpp \
+ qgraphicssvgitem.cpp \
+ qsvggenerator.cpp \
+ moc_qsvgwidget.cpp
+
+QT_VPATH += \
+ qtsvg/src/svg \
+
+# some source files need to be generated by moc from other source/header files before
+# they get #included again by the original source file in the compiling stage
+
+# source files generated from existing header files ('moc_%.cpp: %.h' rule in import-qt5.inc)
+# extracted from 'compiler_moc_header_make_all' target
+
+COMPILER_MOC_HEADER_MAKE_ALL_FILES = \
+ moc_qsvgrenderer.cpp \
+ moc_qsvgwidget.cpp \
+ moc_qgraphicssvgitem.cpp
+
+# source files generated from existing source files ('%.moc: %.cpp' rule in import-qt5.inc)
+# extracted from 'compiler_moc_source_make_all' rule
+
+COMPILER_MOC_SOURCE_MAKE_ALL_FILES = \
+
+
diff --git a/repos/libports/lib/mk/qt5_windowplugin.mk b/repos/libports/lib/mk/qt5_windowplugin.mk
new file mode 100644
index 000000000..a9400c155
--- /dev/null
+++ b/repos/libports/lib/mk/qt5_windowplugin.mk
@@ -0,0 +1,40 @@
+include $(REP_DIR)/lib/import/import-qt5_windowplugin.mk
+
+SHARED_LIB = yes
+
+include $(REP_DIR)/lib/mk/qt5_windowplugin_generated.inc
+
+QT_DEFINES += -UQT_STATICPLUGIN
+
+include $(REP_DIR)/lib/mk/qt5.inc
+
+LIBS += qt5_qml mesa
+
+# install the QtQuick QML plugin
+
+QTQUICK_INSTALL_DIR := $(BUILD_BASE_DIR)/bin/qt5_fs/qt/qml/QtQuick/Window.2
+QTQUICK_QMLDIR := $(QTQUICK_INSTALL_DIR)/qmldir
+QTQUICK_PLUGIN_NAME := qt5_windowplugin.lib.so
+QTQUICK_PLUGIN := $(QTQUICK_INSTALL_DIR)/$(QTQUICK_PLUGIN_NAME)
+
+$(QTQUICK_INSTALL_DIR):
+ $(VERBOSE)mkdir -p $@
+
+$(QTQUICK_QMLDIR): $(QTQUICK_INSTALL_DIR)
+ $(VERBOSE)cp $(QT5_CONTRIB_DIR)/qtdeclarative/src/imports/window/qmldir $(QTQUICK_INSTALL_DIR)
+
+$(QTQUICK_PLUGIN): $(QTQUICK_INSTALL_DIR)
+ $(VERBOSE)ln -sf $(BUILD_BASE_DIR)/bin/$(QTQUICK_PLUGIN_NAME) $(QTQUICK_INSTALL_DIR)/$(QTQUICK_PLUGIN_NAME)
+
+ifneq ($(call select_from_ports,qt5),)
+all: $(QTQUICK_QMLDIR) $(QTQUICK_PLUGIN)
+endif
+
+#
+# unfortunately, these clean rules don't trigger
+#
+
+clean-qtquick_install_dir:
+ rm -rf $(QTQUICK_INSTALL_DIR)
+
+clean: clean-qtquick_install_dir
diff --git a/repos/libports/lib/mk/qt5_windowplugin_generated.inc b/repos/libports/lib/mk/qt5_windowplugin_generated.inc
new file mode 100644
index 000000000..1ec4dd7f1
--- /dev/null
+++ b/repos/libports/lib/mk/qt5_windowplugin_generated.inc
@@ -0,0 +1,42 @@
+QT_DEFINES += -DQT_NO_EXCEPTIONS -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE -DQT_NO_DEBUG -DQT_PLUGIN -DQT_QUICK_LIB -DQT_GUI_LIB -DQT_QML_LIB -DQT_NO_QML_DEBUGGER -DQT_NETWORK_LIB -DQT_CORE_LIB
+
+QT_INCPATH += \
+ qtdeclarative/src/imports/window \
+ qtdeclarative/include/QtQuick/5.8.0 \
+ qtdeclarative/include/QtQuick/5.8.0/QtQuick \
+ qtbase/include/QtGui/5.8.0 \
+ qtbase/include/QtGui/5.8.0/QtGui \
+ qtdeclarative/include \
+ qtdeclarative/include/QtQuick \
+ qtbase/include \
+ qtbase/include/QtGui \
+ qtdeclarative/include/QtQml/5.8.0 \
+ qtdeclarative/include/QtQml/5.8.0/QtQml \
+ qtbase/include/QtCore/5.8.0 \
+ qtbase/include/QtCore/5.8.0/QtCore \
+ qtdeclarative/include/QtQml \
+ qtbase/include/QtNetwork \
+ qtbase/include/QtCore \
+ qtbase/mkspecs/genode-g++
+
+QT_SOURCES += \
+ plugin.cpp
+
+QT_VPATH += \
+ qtdeclarative/src/imports/window \
+
+# some source files need to be generated by moc from other source/header files before
+# they get #included again by the original source file in the compiling stage
+
+# source files generated from existing header files ('moc_%.cpp: %.h' rule in import-qt5.inc)
+# extracted from 'compiler_moc_header_make_all' target
+
+COMPILER_MOC_HEADER_MAKE_ALL_FILES = \
+
+
+# source files generated from existing source files ('%.moc: %.cpp' rule in import-qt5.inc)
+# extracted from 'compiler_moc_source_make_all' rule
+
+COMPILER_MOC_SOURCE_MAKE_ALL_FILES = \
+ plugin.moc
+
diff --git a/repos/libports/ports/qt5.hash b/repos/libports/ports/qt5.hash
index fca186b71..db042e997 100644
--- a/repos/libports/ports/qt5.hash
+++ b/repos/libports/ports/qt5.hash
@@ -1 +1 @@
-bd7410b31ae57d778d9da6599c0a4e887fa44fa8
+0171ade66403e7d2f48d08009cb49eae9f731f76
diff --git a/repos/libports/run/qt5_common.inc b/repos/libports/run/qt5_common.inc
index 48ba69fa1..1fa8ab4df 100644
--- a/repos/libports/run/qt5_common.inc
+++ b/repos/libports/run/qt5_common.inc
@@ -204,5 +204,10 @@ proc create_qt5_fs_tar_archive { app_name qt_modules } {
exec ln -sf [pwd]/bin/qt5_fs/qt/qml bin/qt5_fs/${app_name}/qt/qml
}
+ if { [lsearch ${qt_modules} "plugins"] != -1 } {
+ exec mkdir -p bin/qt5_fs/${app_name}/qt
+ exec ln -sf [pwd]/bin/qt5_fs/qt/plugins bin/qt5_fs/${app_name}/qt/plugins
+ }
+
exec tar chf bin/qt5_fs_${app_name}.tar -C bin/qt5_fs/${app_name} .
}
diff --git a/repos/libports/run/qt5_virtualkeyboard.run b/repos/libports/run/qt5_virtualkeyboard.run
new file mode 100644
index 000000000..fee9101bc
--- /dev/null
+++ b/repos/libports/run/qt5_virtualkeyboard.run
@@ -0,0 +1,112 @@
+source ${genode_dir}/repos/libports/run/qt5_common.inc
+
+#
+# Build
+#
+
+append build_components [qt5_build_components feature]
+
+append build_components {
+ app/qt5/examples/virtualkeyboard
+ lib/qt5/qtdeclarative/src/imports/qtquick2
+ lib/qt5/qtvirtualkeyboard/src/imports/qtvirtualkeyboard
+}
+
+build $build_components
+
+create_boot_directory
+
+
+#
+# Create Qt tar archive
+#
+
+create_qt5_fs_tar_archive "basic" "gui quick plugins"
+
+#
+# Generate config
+#
+
+append config {
+
+ }
+append config [qt5_parent_provides feature]
+append config {
+
+
+
+
+ }
+
+append config [qt5_start_nodes feature]
+
+append config {
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+}
+
+install_config $config
+
+#
+# Boot modules
+#
+
+append boot_modules [qt5_boot_modules feature]
+
+append boot_modules {
+ basic
+ freetype.lib.so
+ egl.lib.so
+ egl_swrast.lib.so
+ glapi.lib.so
+ expat.lib.so
+ mesa.lib.so
+ ld.lib.so
+ libc.lib.so
+ libc_pipe.lib.so
+ libm.lib.so
+ libpng.lib.so
+ jpeg.lib.so
+ pcre16.lib.so
+ pthread.lib.so
+ qt5_component.lib.so
+ qt5_core.lib.so
+ qt5_gui.lib.so
+ qt5_network.lib.so
+ qt5_svg.lib.so
+ qt5_qml.lib.so
+ qt5_quick.lib.so
+ qt5_qtquick2plugin.lib.so
+ qt5_qquicklayoutsplugin.lib.so
+ qt5_qmlfolderlistmodelplugin.lib.so
+ qt5_qtvirtualkeyboardplugin.lib.so
+ qt5_qtvirtualkeyboardstylesplugin.lib.so
+ qt5_widgets.lib.so
+ qt5_windowplugin.lib.so
+ qt5_xml.lib.so
+ zlib.lib.so
+ stdcxx.lib.so
+ libcrypto.lib.so
+ libssl.lib.so
+ qt5_fs_basic.tar
+}
+
+build_boot_image $boot_modules
+
+
+run_genode_until forever
+
diff --git a/repos/libports/src/app/qt5/examples/virtualkeyboard/target.mk b/repos/libports/src/app/qt5/examples/virtualkeyboard/target.mk
new file mode 100644
index 000000000..0c5fb214b
--- /dev/null
+++ b/repos/libports/src/app/qt5/examples/virtualkeyboard/target.mk
@@ -0,0 +1,21 @@
+# identify the qt5 repository by searching for a file that is unique for qt5
+QT5_REP_DIR := $(call select_from_repositories,lib/import/import-qt5.inc)
+QT5_REP_DIR := $(realpath $(dir $(QT5_REP_DIR))../..)
+
+include $(QT5_REP_DIR)/lib/mk/qt5_version.inc
+
+QT5_PORT_DIR := $(call select_from_ports,qt5)
+QT5_CONTRIB_DIR := $(QT5_PORT_DIR)/src/lib/qt5/$(QT5)
+
+QMAKE_PROJECT_PATH = $(QT5_CONTRIB_DIR)/qtvirtualkeyboard/examples/virtualkeyboard/basic
+QMAKE_PROJECT_FILE = $(QMAKE_PROJECT_PATH)/basic.pro
+
+vpath % $(QMAKE_PROJECT_PATH)
+
+include $(QT5_REP_DIR)/src/app/qt5/tmpl/target_defaults.inc
+
+CC_CXX_OPT += -D'MAIN_QML="basic-b2qt.qml"'
+
+include $(QT5_REP_DIR)/src/app/qt5/tmpl/target_final.inc
+
+LIBS += qt5_component qt5_qtvirtualkeyboardplugin qt5_windowplugin
diff --git a/repos/libports/src/app/qt5/tmpl/target_final.inc b/repos/libports/src/app/qt5/tmpl/target_final.inc
index 692c49ec7..68b1be895 100644
--- a/repos/libports/src/app/qt5/tmpl/target_final.inc
+++ b/repos/libports/src/app/qt5/tmpl/target_final.inc
@@ -47,6 +47,11 @@ ifeq ($(findstring xml, $(QT)), xml)
LIBS += qt5_xml
endif
+# Qml
+ifeq ($(findstring qml, $(QT)), qml)
+LIBS += qt5_qml
+endif
+
# QtUiTools
# Qt documentation says: CONFIG += uitools
ifeq ($(findstring uitools, $(CONFIG)), uitools)
diff --git a/repos/libports/src/lib/qt5/patches/example_virtualkeyboard.patch b/repos/libports/src/lib/qt5/patches/example_virtualkeyboard.patch
new file mode 100644
index 000000000..12dfdab5c
--- /dev/null
+++ b/repos/libports/src/lib/qt5/patches/example_virtualkeyboard.patch
@@ -0,0 +1,40 @@
+--- a/qtvirtualkeyboard/examples/virtualkeyboard/basic/basic.pro 2017-08-14 11:23:48.610593201 +0200
++++ b/qtvirtualkeyboard/examples/virtualkeyboard/basic/basic.pro 2017-08-14 11:23:55.470642405 +0200
+@@ -3,10 +3,10 @@
+ QT += qml quick
+ SOURCES += main.cpp
+ CONFIG += link_pkgconfig
+-static {
+- QT += svg
+- QTPLUGIN += qtvirtualkeyboardplugin
+-}
++#static {
++QT += svg
++QTPLUGIN += qtvirtualkeyboardplugin
++#}
+
+ target.path = $$[QT_INSTALL_EXAMPLES]/virtualkeyboard/basic
+ INSTALLS += target
+@@ -24,13 +24,13 @@
+ content/TextBase.qml \
+ content/TextField.qml \
+
+-disable-xcb {
+- message("The disable-xcb option has been deprecated. Please use disable-desktop instead.")
+- CONFIG += disable-desktop
+-}
++#disable-xcb {
++# message("The disable-xcb option has been deprecated. Please use disable-desktop instead.")
++# CONFIG += disable-desktop
++#}
+
+-disable-desktop|!isEmpty(CROSS_COMPILE)|qnx {
+- DEFINES += MAIN_QML=\\\"basic-b2qt.qml\\\"
+-} else {
+- DEFINES += MAIN_QML=\\\"Basic.qml\\\"
+-}
++#disable-desktop|!isEmpty(CROSS_COMPILE)|qnx {
++# DEFINES += MAIN_QML=\\\"basic-b2qt.qml\\\"
++#} else {
++# DEFINES += MAIN_QML=\\\"Basic.qml\\\"
++#}
diff --git a/repos/libports/src/lib/qt5/patches/qtdeclarative_generated.patch b/repos/libports/src/lib/qt5/patches/qtdeclarative_generated.patch
index 7a1fae952..062920e4e 100644
--- a/repos/libports/src/lib/qt5/patches/qtdeclarative_generated.patch
+++ b/repos/libports/src/lib/qt5/patches/qtdeclarative_generated.patch
@@ -5,18 +5,30 @@ From: Christian Prochaska
---
.../QtQml/5.8.0/QtQml/private/qtqml-config_p.h | 1 +
+ qtdeclarative/include/QtQml/QtQmlDepends | 5 +++++
qtdeclarative/include/QtQml/qtqml-config.h | 1 +
+ .../include/QtQmlDevTools/QtQmlDevToolsDepends | 4 ++++
.../5.8.0/QtQuick/private/qtquick-config_p.h | 1 +
+ qtdeclarative/include/QtQuick/QtQuickDepends | 6 ++++++
qtdeclarative/include/QtQuick/qtquick-config.h | 1 +
+ .../QtQuickParticles/QtQuickParticlesDepends | 7 +++++++
+ .../include/QtQuickTest/QtQuickTestDepends | 6 ++++++
+ .../include/QtQuickWidgets/QtQuickWidgetsDepends | 8 ++++++++
qtdeclarative/src/qml/qtqml-config.h | 1 +
qtdeclarative/src/qml/qtqml-config_p.h | 1 +
qtdeclarative/src/quick/qtquick-config.h | 1 +
qtdeclarative/src/quick/qtquick-config_p.h | 13 +++++++++++++
- 8 files changed, 20 insertions(+)
+ 14 files changed, 56 insertions(+)
create mode 100644 qtdeclarative/include/QtQml/5.8.0/QtQml/private/qtqml-config_p.h
+ create mode 100644 qtdeclarative/include/QtQml/QtQmlDepends
create mode 100644 qtdeclarative/include/QtQml/qtqml-config.h
+ create mode 100644 qtdeclarative/include/QtQmlDevTools/QtQmlDevToolsDepends
create mode 100644 qtdeclarative/include/QtQuick/5.8.0/QtQuick/private/qtquick-config_p.h
+ create mode 100644 qtdeclarative/include/QtQuick/QtQuickDepends
create mode 100644 qtdeclarative/include/QtQuick/qtquick-config.h
+ create mode 100644 qtdeclarative/include/QtQuickParticles/QtQuickParticlesDepends
+ create mode 100644 qtdeclarative/include/QtQuickTest/QtQuickTestDepends
+ create mode 100644 qtdeclarative/include/QtQuickWidgets/QtQuickWidgetsDepends
create mode 100644 qtdeclarative/src/qml/qtqml-config.h
create mode 100644 qtdeclarative/src/qml/qtqml-config_p.h
create mode 100644 qtdeclarative/src/quick/qtquick-config.h
@@ -29,6 +41,17 @@ index 0000000..1fdbd71
+++ b/qtdeclarative/include/QtQml/5.8.0/QtQml/private/qtqml-config_p.h
@@ -0,0 +1 @@
+#include "../../../../../src/qml/qtqml-config_p.h"
+diff --git a/qtdeclarative/include/QtQml/QtQmlDepends b/qtdeclarative/include/QtQml/QtQmlDepends
+new file mode 100644
+index 0000000..bdbffd6
+--- /dev/null
++++ b/qtdeclarative/include/QtQml/QtQmlDepends
+@@ -0,0 +1,5 @@
++/* This file was generated by qmake with the info from /src/qml/qml.pro. */
++#ifdef __cplusplus /* create empty PCH in C mode */
++#include
++#include
++#endif
diff --git a/qtdeclarative/include/QtQml/qtqml-config.h b/qtdeclarative/include/QtQml/qtqml-config.h
new file mode 100644
index 0000000..48fe1f2
@@ -36,6 +59,16 @@ index 0000000..48fe1f2
+++ b/qtdeclarative/include/QtQml/qtqml-config.h
@@ -0,0 +1 @@
+#include "../../src/qml/qtqml-config.h"
+diff --git a/qtdeclarative/include/QtQmlDevTools/QtQmlDevToolsDepends b/qtdeclarative/include/QtQmlDevTools/QtQmlDevToolsDepends
+new file mode 100644
+index 0000000..a040297
+--- /dev/null
++++ b/qtdeclarative/include/QtQmlDevTools/QtQmlDevToolsDepends
+@@ -0,0 +1,4 @@
++/* This file was generated by qmake with the info from /src/qmldevtools/qmldevtools.pro. */
++#ifdef __cplusplus /* create empty PCH in C mode */
++#include
++#endif
diff --git a/qtdeclarative/include/QtQuick/5.8.0/QtQuick/private/qtquick-config_p.h b/qtdeclarative/include/QtQuick/5.8.0/QtQuick/private/qtquick-config_p.h
new file mode 100644
index 0000000..fcdf423
@@ -43,6 +76,18 @@ index 0000000..fcdf423
+++ b/qtdeclarative/include/QtQuick/5.8.0/QtQuick/private/qtquick-config_p.h
@@ -0,0 +1 @@
+#include "../../../../../src/quick/qtquick-config_p.h"
+diff --git a/qtdeclarative/include/QtQuick/QtQuickDepends b/qtdeclarative/include/QtQuick/QtQuickDepends
+new file mode 100644
+index 0000000..d39ee68
+--- /dev/null
++++ b/qtdeclarative/include/QtQuick/QtQuickDepends
+@@ -0,0 +1,6 @@
++/* This file was generated by qmake with the info from /src/quick/quick.pro. */
++#ifdef __cplusplus /* create empty PCH in C mode */
++#include
++#include
++#include
++#endif
diff --git a/qtdeclarative/include/QtQuick/qtquick-config.h b/qtdeclarative/include/QtQuick/qtquick-config.h
new file mode 100644
index 0000000..2ab295b
@@ -50,6 +95,45 @@ index 0000000..2ab295b
+++ b/qtdeclarative/include/QtQuick/qtquick-config.h
@@ -0,0 +1 @@
+#include "../../src/quick/qtquick-config.h"
+diff --git a/qtdeclarative/include/QtQuickParticles/QtQuickParticlesDepends b/qtdeclarative/include/QtQuickParticles/QtQuickParticlesDepends
+new file mode 100644
+index 0000000..ae06770
+--- /dev/null
++++ b/qtdeclarative/include/QtQuickParticles/QtQuickParticlesDepends
+@@ -0,0 +1,7 @@
++/* This file was generated by qmake with the info from /src/particles/particles.pro. */
++#ifdef __cplusplus /* create empty PCH in C mode */
++#include
++#include
++#include
++#include
++#endif
+diff --git a/qtdeclarative/include/QtQuickTest/QtQuickTestDepends b/qtdeclarative/include/QtQuickTest/QtQuickTestDepends
+new file mode 100644
+index 0000000..a2d1dcf
+--- /dev/null
++++ b/qtdeclarative/include/QtQuickTest/QtQuickTestDepends
+@@ -0,0 +1,6 @@
++/* This file was generated by qmake with the info from /src/qmltest/qmltest.pro. */
++#ifdef __cplusplus /* create empty PCH in C mode */
++#include
++#include
++#include
++#endif
+diff --git a/qtdeclarative/include/QtQuickWidgets/QtQuickWidgetsDepends b/qtdeclarative/include/QtQuickWidgets/QtQuickWidgetsDepends
+new file mode 100644
+index 0000000..6b0980a
+--- /dev/null
++++ b/qtdeclarative/include/QtQuickWidgets/QtQuickWidgetsDepends
+@@ -0,0 +1,8 @@
++/* This file was generated by qmake with the info from /src/quickwidgets/quickwidgets.pro. */
++#ifdef __cplusplus /* create empty PCH in C mode */
++#include
++#include
++#include
++#include
++#include
++#endif
diff --git a/qtdeclarative/src/qml/qtqml-config.h b/qtdeclarative/src/qml/qtqml-config.h
new file mode 100644
index 0000000..299465e
diff --git a/repos/libports/src/lib/qt5/patches/qtsvg_generated.patch b/repos/libports/src/lib/qt5/patches/qtsvg_generated.patch
new file mode 100644
index 000000000..95569f6aa
--- /dev/null
+++ b/repos/libports/src/lib/qt5/patches/qtsvg_generated.patch
@@ -0,0 +1,22 @@
+qtsvg_generated.patch
+
+From: Christian Prochaska
+
+
+---
+ qtsvg/include/QtSvg/QtSvgDepends | 6 ++++++
+ 1 file changed, 6 insertions(+)
+ create mode 100644 qtsvg/include/QtSvg/QtSvgDepends
+
+diff --git a/qtsvg/include/QtSvg/QtSvgDepends b/qtsvg/include/QtSvg/QtSvgDepends
+new file mode 100644
+index 0000000..a4800e1
+--- /dev/null
++++ b/qtsvg/include/QtSvg/QtSvgDepends
+@@ -0,0 +1,6 @@
++/* This file was generated by qmake with the info from /src/svg/svg.pro. */
++#ifdef __cplusplus /* create empty PCH in C mode */
++#include
++#include
++#include
++#endif
diff --git a/repos/libports/src/lib/qt5/patches/series b/repos/libports/src/lib/qt5/patches/series
index 515175884..f56490782 100644
--- a/repos/libports/src/lib/qt5/patches/series
+++ b/repos/libports/src/lib/qt5/patches/series
@@ -1,9 +1,11 @@
+example_virtualkeyboard.patch
qtbase_fixes.patch
qtbase_configuration.patch
qtdeclarative_configuration.patch
qttools_configuration.patch
qtbase_generated.patch
qtdeclarative_generated.patch
+qtsvg_generated.patch
qttools_generated.patch
qtbase_genode.patch
qtbase_genode_qtscriptclassic.patch
diff --git a/repos/libports/src/lib/qt5/qtdeclarative/src/imports/folderlistmodel/target.mk b/repos/libports/src/lib/qt5/qtdeclarative/src/imports/folderlistmodel/target.mk
new file mode 100644
index 000000000..d2942b6b1
--- /dev/null
+++ b/repos/libports/src/lib/qt5/qtdeclarative/src/imports/folderlistmodel/target.mk
@@ -0,0 +1,4 @@
+# the plugin gets loaded via 'dlopen()', therefore it is built separately
+
+TARGET = dummy-qt5_qmlfolderlistmodelplugin
+LIBS = qt5_qmlfolderlistmodelplugin
diff --git a/repos/libports/src/lib/qt5/qtdeclarative/src/imports/layouts/target.mk b/repos/libports/src/lib/qt5/qtdeclarative/src/imports/layouts/target.mk
new file mode 100644
index 000000000..4e18cb578
--- /dev/null
+++ b/repos/libports/src/lib/qt5/qtdeclarative/src/imports/layouts/target.mk
@@ -0,0 +1,4 @@
+# the plugin gets loaded via 'dlopen()', therefore it is built separately
+
+TARGET = dummy-qt5_qquicklayoutsplugin
+LIBS = qt5_qquicklayoutsplugin
diff --git a/repos/libports/src/lib/qt5/qtvirtualkeyboard/src/imports/qtvirtualkeyboard/styles/target.mk b/repos/libports/src/lib/qt5/qtvirtualkeyboard/src/imports/qtvirtualkeyboard/styles/target.mk
new file mode 100644
index 000000000..bb2509427
--- /dev/null
+++ b/repos/libports/src/lib/qt5/qtvirtualkeyboard/src/imports/qtvirtualkeyboard/styles/target.mk
@@ -0,0 +1,4 @@
+# the plugin gets loaded via 'dlopen()', therefore it is built separately
+
+TARGET = dummy-qt5_qtvirtualkeyboardstylesplugin
+LIBS = qt5_qtvirtualkeyboardstylesplugin
diff --git a/repos/libports/src/lib/qt5/qtvirtualkeyboard/src/imports/qtvirtualkeyboard/target.mk b/repos/libports/src/lib/qt5/qtvirtualkeyboard/src/imports/qtvirtualkeyboard/target.mk
new file mode 100644
index 000000000..0207d79b1
--- /dev/null
+++ b/repos/libports/src/lib/qt5/qtvirtualkeyboard/src/imports/qtvirtualkeyboard/target.mk
@@ -0,0 +1,4 @@
+# the plugin gets loaded via 'dlopen()', therefore it is built separately
+
+TARGET = dummy-qt5_qtvirtualkeyboardplugin
+LIBS = qt5_qtvirtualkeyboardplugin
diff --git a/repos/libports/src/lib/qt5/tools/lib_mk_file_generator/create_generated_incs b/repos/libports/src/lib/qt5/tools/lib_mk_file_generator/create_generated_incs
index 3c7f8a19a..05c68a254 100755
--- a/repos/libports/src/lib/qt5/tools/lib_mk_file_generator/create_generated_incs
+++ b/repos/libports/src/lib/qt5/tools/lib_mk_file_generator/create_generated_incs
@@ -23,6 +23,10 @@ cd qtdeclarative/src/qml && ../../../create_generated_inc qt
cd qtdeclarative/src/quick && ../../../create_generated_inc qt5_quick && cp qt5_quick_generated.inc ../../.. && cd ../../..
cd qtdeclarative/src/imports/qtquick2 && ../../../../create_generated_inc qt5_qtquick2plugin && cp qt5_qtquick2plugin_generated.inc ../../../.. && cd ../../../..
+cd qtsvg/src/svg && ../../../create_generated_inc qt5_svg && cp qt5_svg_generated.inc ../../.. && cd ../../..
+
+cd qtvirtualkeyboard/src/virtualkeyboard && ../../../create_generated_inc qt5_qtvirtualkeyboardplugin && cp qt5_qtvirtualkeyboardplugin_generated.inc ../../.. && cd ../../..
+
# qtwebkit
make -C qtwebkit/Source/JavaScriptCore -f Makefile.JavaScriptCore sub-DerivedSources-pri > JavaScriptCore.log