diff --git a/.gitignore b/.gitignore
index dc0d280d16..5bf870d301 100644
--- a/.gitignore
+++ b/.gitignore
@@ -128,8 +128,18 @@
/libports/src/lib/ncurses/make_keys
/libports/src/lib/ncurses/names.c
/libports/src/lib/ncurses/unctrl.c
+/libports/src/lib/qt5/qtwebkit/Source/JavaScriptCore
+/libports/src/lib/qt5/qtwebkit/Source/WebCore/generated
/libports/tool/mesa/glsl
/libports/tool/mupdf
+/libports/tool/qt5/bootstrap
+/libports/tool/qt5/misc/var
+/libports/tool/qt5/moc
+/libports/tool/qt5/qmake/*.d
+/libports/tool/qt5/qmake/*.o
+/libports/tool/qt5/qmake/qmake
+/libports/tool/qt5/rcc
+/libports/tool/qt5/uic
/ports-foc/contrib
/ports-okl4/contrib
/ports-okl4/download
diff --git a/libports/include/qt5/genode/thread_qt.h b/libports/include/qt5/genode/thread_qt.h
new file mode 100644
index 0000000000..e4dd56ad1f
--- /dev/null
+++ b/libports/include/qt5/genode/thread_qt.h
@@ -0,0 +1,116 @@
+/*
+ * \brief Thread with configurable stack size
+ * \author Christian Prochaska
+ * \date 2008-06-11
+ */
+
+/*
+ * Copyright (C) 2008-2013 Genode Labs GmbH
+ *
+ * This file is part of the Genode OS framework, which is distributed
+ * under the terms of the GNU General Public License version 2.
+ */
+
+#ifndef _INCLUDE__BASE__THREAD_QT_H_
+#define _INCLUDE__BASE__THREAD_QT_H_
+
+#include
+#include
+#include
+
+enum { DEFAULT_STACK_SIZE = 4096*100 };
+
+namespace Genode {
+
+ struct Thread_entry
+ {
+ virtual void entry() = 0;
+ };
+
+
+ class Thread_qt : public Thread_entry
+ {
+ private:
+
+ class Genode_thread : Thread_base
+ {
+ private:
+
+ Thread_entry *_thread_entry;
+
+ /**
+ * Thread_base interface
+ */
+ void entry() { _thread_entry->entry(); }
+
+ public:
+
+ Genode_thread(const char *name,
+ size_t stack_size,
+ Thread_entry *thread_entry)
+ :
+ Thread_base(name, stack_size),
+ _thread_entry(thread_entry)
+ {
+ /* start Genode thread */
+ start();
+ }
+ };
+
+ protected:
+
+ const char *_name;
+ unsigned int _stack_size;
+ Genode_thread *_thread;
+
+ public:
+
+ /**
+ * Constructor
+ *
+ * \param name Thread name (for debugging)
+ */
+ explicit Thread_qt(const char *name = "Qt ")
+ :
+ _name(name),
+ _stack_size(DEFAULT_STACK_SIZE),
+ _thread(0) { }
+
+ ~Thread_qt()
+ {
+ if (_thread)
+ destroy(env()->heap(), _thread);
+ }
+
+ /**
+ * Set the thread's stack size - don't call when the thread is running!
+ */
+ bool set_stack_size(unsigned int stack_size)
+ {
+ /* error, if thread is already running */
+ if (_thread)
+ return false;
+
+ _stack_size = stack_size;
+ return true;
+ }
+
+ /**
+ * Start execution of the thread
+ */
+ void start()
+ {
+ /* prevent double calls of 'start' */
+ if (_thread) return;
+
+ _thread = new (env()->heap()) Genode_thread(_name, _stack_size, this);
+ }
+
+ static Thread_base *myself()
+ {
+ return Thread_base::myself();
+ }
+ };
+}
+
+#endif /* _INCLUDE__BASE__THREAD_QT_H_ */
diff --git a/libports/include/qt5/qnitpickerviewwidget/qnitpickerviewwidget.h b/libports/include/qt5/qnitpickerviewwidget/qnitpickerviewwidget.h
new file mode 100644
index 0000000000..7d504db359
--- /dev/null
+++ b/libports/include/qt5/qnitpickerviewwidget/qnitpickerviewwidget.h
@@ -0,0 +1,57 @@
+/*
+ * \brief A Qt Widget that shows a nitpicker view
+ * \author Christian Prochaska
+ * \date 2010-08-26
+ */
+
+/*
+ * Copyright (C) 2010-2013 Genode Labs GmbH
+ *
+ * This file is part of the Genode OS framework, which is distributed
+ * under the terms of the GNU General Public License version 2.
+ */
+
+#ifndef QNITPICKERVIEWWIDGET_H
+#define QNITPICKERVIEWWIDGET_H
+
+#include
+#if 0
+#include
+#endif
+
+#include
+#include
+
+class QNitpickerViewWidget : public QWidget
+{
+ Q_OBJECT
+
+private:
+ QHash _scrollbars;
+
+private slots:
+#if 0
+ void windowEvent(QWSWindow *window,
+ QWSServer::WindowEvent eventType);
+#endif
+ void valueChanged();
+ void destroyed(QObject *obj = 0);
+
+protected:
+ Nitpicker::View_client *vc;
+ int orig_w;
+ int orig_h;
+ int orig_buf_x;
+ int orig_buf_y;
+
+ virtual void showEvent(QShowEvent *event);
+ virtual void hideEvent(QHideEvent *event);
+ virtual void paintEvent(QPaintEvent *event);
+
+public:
+ QNitpickerViewWidget(QWidget *parent =0);
+ ~QNitpickerViewWidget();
+ void setNitpickerView(Nitpicker::View_capability view, int buf_x, int buf_y, int w, int h);
+};
+
+#endif // QNITPICKERVIEWWIDGET_H
diff --git a/libports/include/qt5/qpluginwidget/qpluginwidget.h b/libports/include/qt5/qpluginwidget/qpluginwidget.h
new file mode 100644
index 0000000000..54ea29addc
--- /dev/null
+++ b/libports/include/qt5/qpluginwidget/qpluginwidget.h
@@ -0,0 +1,107 @@
+/*
+ * \brief A Qt Widget that can load a plugin application and show its Nitpicker view
+ * \author Christian Prochaska
+ * \date 2010-08-26
+ */
+
+/*
+ * Copyright (C) 2010-2013 Genode Labs GmbH
+ *
+ * This file is part of the Genode OS framework, which is distributed
+ * under the terms of the GNU General Public License version 2.
+ */
+
+#ifndef QPLUGINWIDGET_H
+#define QPLUGINWIDGET_H
+
+#include
+#include
+
+#include
+
+#include
+
+
+enum Plugin_loading_state
+{
+ LOADING,
+ LOADED,
+ NETWORK_ERROR,
+ INFLATE_ERROR,
+ QUOTA_EXCEEDED_ERROR,
+ ROM_CONNECTION_FAILED_EXCEPTION,
+ TIMEOUT_EXCEPTION
+};
+
+class QPluginWidget;
+
+/* separate class, because meta object features are not supported in nested classes */
+class PluginStarter : public QThread
+{
+ Q_OBJECT
+
+ private:
+ QUrl _plugin_url;
+ QByteArray _args;
+ int _max_width;
+ int _max_height;
+
+ Loader::Connection *_pc;
+ enum Plugin_loading_state _plugin_loading_state;
+ QString _plugin_loading_error_string;
+
+ QNetworkAccessManager *_qnam;
+ QNetworkReply *_reply;
+
+ void _start_plugin(QString &file_name, QByteArray const &file_buf);
+
+ protected slots:
+ void networkReplyFinished();
+
+ public:
+ PluginStarter(QUrl plugin_url, QString &args,
+ int max_width, int max_height);
+
+ void run();
+ enum Plugin_loading_state plugin_loading_state() { return _plugin_loading_state; }
+ QString &plugin_loading_error_string() { return _plugin_loading_error_string; }
+ Nitpicker::View_capability plugin_view(int *w, int *h, int *buf_x, int *buf_y);
+
+ signals:
+ void finished();
+};
+
+
+class QPluginWidget : public QNitpickerViewWidget
+{
+ Q_OBJECT
+
+ private:
+
+ enum Plugin_loading_state _plugin_loading_state;
+ QString _plugin_loading_error_string;
+
+ PluginStarter *_plugin_starter;
+
+ int _max_width;
+ int _max_height;
+
+ static QPluginWidget *_last;
+
+ public:
+ enum { RAM_QUOTA = 5*1024*1024 };
+
+ void cleanup();
+
+ protected:
+ virtual void paintEvent(QPaintEvent *event);
+
+ protected slots:
+ void pluginStartFinished();
+
+ public:
+ QPluginWidget(QWidget *parent, QUrl plugin_url, QString &args, int max_width = -1, int max_height = -1);
+ ~QPluginWidget();
+};
+
+#endif // QPLUGINWIDGET_H
diff --git a/libports/include/qt5/qtbase/QtCore b/libports/include/qt5/qtbase/QtCore
new file mode 120000
index 0000000000..3902627241
--- /dev/null
+++ b/libports/include/qt5/qtbase/QtCore
@@ -0,0 +1 @@
+../../../src/lib/qt5/qtbase/src/corelib/global
\ No newline at end of file
diff --git a/libports/lib/import/import-qt5.inc b/libports/lib/import/import-qt5.inc
new file mode 100644
index 0000000000..532bddcf65
--- /dev/null
+++ b/libports/lib/import/import-qt5.inc
@@ -0,0 +1,129 @@
+# prevent import file to be included twice, for example via import-qt5_gui.mk
+# and import-qt5_core.mk
+
+ifeq ($(QT5_IMPORTED),)
+QT5_IMPORTED = true
+
+# 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_INC_DIR := $(QT5_REP_DIR)/src/lib/qt5/qtbase/mkspecs/genode-g++ \
+ $(QT5_REP_DIR)/src/lib/qt5/qtbase/src/corelib/global \
+ $(QT5_REP_DIR)/include/qt5 \
+ $(QT5_REP_DIR)/contrib/$(QT5)/qtbase/include \
+
+INC_DIR += $(QT5_INC_DIR)
+
+# extracted from qt.prf
+QT_DEFINES += -DQT_STATICPLUGIN
+
+QT_DEFINES += -D__GENODE__
+
+#
+# Prevent inclusion of non-existent 'features.h' from 'bits/os_defines.h'
+# header that comes with the Codesourcery ARM tool chain.
+#
+QT_DEFINES += -D_GLIBCXX_OS_DEFINES
+
+#
+# When using the Codesourcery tool chain for ARM, the compiler provides a
+# built-in definition for '__linux__', which is obviously wrong when using the
+# compiler for Genode. Unfortunately, Webkit tests for this definition in
+# 'JavaScriptCore/wtf/Platform.h'. To prevent webkit from drawing wrong
+# conclusions, we explicitly undefine '__linux__'.
+#
+QT_DEFINES += -U__linux__
+
+CC_OPT += $(QT_DEFINES)
+
+SOURCES_FILTERED = $(filter-out $(SOURCES_FILTER_OUT), $(SOURCES))
+HEADERS_FILTERED = $(filter-out $(HEADERS_FILTER_OUT), $(HEADERS))
+
+# add sources defined in qmake project files
+SRC_CC += $(SOURCES_FILTERED)
+
+# handle moc-headers, resources and ui descriptions
+$(SRC_CC:.cpp=.o): $(addprefix ui_,$(FORMS:.ui=.h))
+
+SRC_CC_QT_GENERATED = $(addprefix moc_,$(HEADERS_FILTERED:.h=.cpp)) \
+ $(addprefix qrc_,$(RESOURCES:.qrc=.cpp))
+
+.SECONDARY: $(SRC_CC_QT_GENERATED)
+SRC_CC += $(SRC_CC_QT_GENERATED)
+
+#
+# Locations of moc, rcc, and uic binaries
+#
+# These binaries are created by calling 'make' in the 'tool' directory, which
+# should have happened before starting to build QT5 applications.
+#
+MOC = $(QT5_REP_DIR)/tool/qt5/moc/moc
+RCC = $(QT5_REP_DIR)/tool/qt5/rcc/rcc
+UIC = $(QT5_REP_DIR)/tool/qt5/uic/uic
+
+$(MOC) $(RCC) $(UIC):
+ @echo
+ @echo "Attempting to build QT5 application without having built the QT5 tools."
+ @echo "Please execute 'make prepare PKG=qt5' in the root of the 'libports' repository."
+ @echo
+ @false
+
+# moc rules
+moc_%.cpp: %.h $(MOC)
+ $(MSG_CONVERT)$@
+ $(VERBOSE) $(MOC) $(QT_DEFINES) $(addprefix -I,$(QT5_INC_DIR)) $< -o $@
+
+%.moc: %.cpp $(MOC)
+ $(MSG_CONVERT)$@
+ $(VERBOSE) $(MOC) $(QT_DEFINES) $(addprefix -I,$(QT5_INC_DIR)) $< -o $@
+
+# rcc rule
+qrc_%.cpp: %.qrc $(RCC)
+ $(MSG_CONVERT)$@
+ $(VERBOSE) $(RCC) -name $(basename $(notdir $<)) $< -o $@
+
+# uic rule
+ui_%.h: %.ui $(UIC)
+ $(MSG_CONVERT)$@
+ $(VERBOSE) $(UIC) $< -o $@
+
+# add include dirs for QT5-specific genode addons
+INC_DIR += $(QT5_REP_DIR)/include/qt5/genode
+
+# add C++ include dirs and libs
+#
+# We cannot just extend the 'LIBS' variable here because 'import-*.mk' are
+# included (in 'base/mk/lib.mk') by iterating through the elements of the
+# 'LIBS' variable. Hence, we also need to manually import the stdlib snippet.
+#
+LIBS += stdcxx
+include $(call select_from_repositories,lib/import/import-stdcxx.mk)
+
+# custom main() thread stack size support via main() wrapper
+ifeq ($(findstring -DQT_MAIN_STACK_SIZE, $(CC_CXX_OPT)), -DQT_MAIN_STACK_SIZE)
+CC_CXX_OPT += -Dmain=qt_main
+SRC_CC += qt_main.cc
+vpath qt_main.cc $(QT5_REP_DIR)/src/lib/qt5
+endif
+
+# set QT_ARCH definition according to the SPECS variable
+ifneq ($(filter x86_32,$(SPECS)),)
+ QT_DEFINES += -DQT_ARCH_I386
+endif
+ifneq ($(filter x86_64,$(SPECS)),)
+ QT_DEFINES += -DQT_ARCH_X86_64
+endif
+ifneq ($(filter arm,$(SPECS)),)
+ QT_DEFINES += -DQT_ARCH_ARMV6
+endif
+
+# remove generated files in clean rules
+clean cleanall: clean_rule
+clean_rule:
+ $(VERBOSE)$(RM) -f $(SRC_CC_QT_GENERATED)
+ $(VERBOSE)$(RM) -f $(SOURCES_FILTERED:.cpp=.moc)
+ $(VERBOSE)$(RM) -f $(addprefix ui_,$(FORMS:.ui=.h))
+endif
diff --git a/libports/lib/import/import-qt5_core.mk b/libports/lib/import/import-qt5_core.mk
new file mode 100644
index 0000000000..0a70bb229c
--- /dev/null
+++ b/libports/lib/import/import-qt5_core.mk
@@ -0,0 +1,6 @@
+IMPORT_QT5_INC=$(call select_from_repositories,lib/import/import-qt5.inc)
+
+include $(IMPORT_QT5_INC)
+
+QT5_INC_DIR += $(QT5_REP_DIR)/include/qt5/qtbase \
+ $(QT5_REP_DIR)/contrib/$(QT5)/qtbase/include/QtCore \
diff --git a/libports/lib/import/import-qt5_gui.mk b/libports/lib/import/import-qt5_gui.mk
new file mode 100644
index 0000000000..59fe1f6cad
--- /dev/null
+++ b/libports/lib/import/import-qt5_gui.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_REP_DIR)/contrib/$(QT5)/qtbase/include/QtGui \
diff --git a/libports/lib/import/import-qt5_jscore.mk b/libports/lib/import/import-qt5_jscore.mk
new file mode 100644
index 0000000000..5602c0bec7
--- /dev/null
+++ b/libports/lib/import/import-qt5_jscore.mk
@@ -0,0 +1,3 @@
+IMPORT_QT5_INC=$(call select_from_repositories,lib/import/import-qt5.inc)
+
+include $(IMPORT_QT5_INC)
diff --git a/libports/lib/import/import-qt5_network.mk b/libports/lib/import/import-qt5_network.mk
new file mode 100644
index 0000000000..14cd94b164
--- /dev/null
+++ b/libports/lib/import/import-qt5_network.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_REP_DIR)/contrib/$(QT5)/qtbase/include/QtNetwork \
diff --git a/libports/lib/import/import-qt5_printsupport.mk b/libports/lib/import/import-qt5_printsupport.mk
new file mode 100644
index 0000000000..c66a62fdb0
--- /dev/null
+++ b/libports/lib/import/import-qt5_printsupport.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_REP_DIR)/contrib/$(QT5)/qtbase/include/QtPrintSupport \
diff --git a/libports/lib/import/import-qt5_qpa_nitpicker.mk b/libports/lib/import/import-qt5_qpa_nitpicker.mk
new file mode 100644
index 0000000000..5602c0bec7
--- /dev/null
+++ b/libports/lib/import/import-qt5_qpa_nitpicker.mk
@@ -0,0 +1,3 @@
+IMPORT_QT5_INC=$(call select_from_repositories,lib/import/import-qt5.inc)
+
+include $(IMPORT_QT5_INC)
diff --git a/libports/lib/import/import-qt5_script.mk b/libports/lib/import/import-qt5_script.mk
new file mode 100644
index 0000000000..451d7f5e18
--- /dev/null
+++ b/libports/lib/import/import-qt5_script.mk
@@ -0,0 +1,6 @@
+IMPORT_QT5_INC=$(call select_from_repositories,lib/import/import-qt5.inc)
+
+include $(IMPORT_QT5_INC)
+
+QT5_INC_DIR += $(QT5_REP_DIR)/contrib/$(QT5)/qtscript/include \
+ $(QT5_REP_DIR)/contrib/$(QT5)/qtscript/include/QtScript \
diff --git a/libports/lib/import/import-qt5_scriptclassic.mk b/libports/lib/import/import-qt5_scriptclassic.mk
new file mode 100644
index 0000000000..c168d6ebc9
--- /dev/null
+++ b/libports/lib/import/import-qt5_scriptclassic.mk
@@ -0,0 +1,7 @@
+IMPORT_QT5_INC=$(call select_from_repositories,lib/import/import-qt5.inc)
+
+include $(IMPORT_QT5_INC)
+
+QT5_INC_DIR += $(QT5_REP_DIR)/contrib/qtscriptclassic-1.0_1-opensource/include \
+ $(QT5_REP_DIR)/contrib/qtscriptclassic-1.0_1-opensource/include/QtScript \
+ $(QT5_REP_DIR)/contrib/qtscriptclassic-1.0_1-opensource/src \
diff --git a/libports/lib/import/import-qt5_sql.mk b/libports/lib/import/import-qt5_sql.mk
new file mode 100644
index 0000000000..c583f0034f
--- /dev/null
+++ b/libports/lib/import/import-qt5_sql.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_REP_DIR)/contrib/$(QT5)/qtbase/include/QtSql \
diff --git a/libports/lib/import/import-qt5_ui_tools.mk b/libports/lib/import/import-qt5_ui_tools.mk
new file mode 100644
index 0000000000..2ea5c55a70
--- /dev/null
+++ b/libports/lib/import/import-qt5_ui_tools.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_REP_DIR)/contrib/$(QT5)/qttools/include/QtUiTools \
diff --git a/libports/lib/import/import-qt5_webcore.mk b/libports/lib/import/import-qt5_webcore.mk
new file mode 100644
index 0000000000..5602c0bec7
--- /dev/null
+++ b/libports/lib/import/import-qt5_webcore.mk
@@ -0,0 +1,3 @@
+IMPORT_QT5_INC=$(call select_from_repositories,lib/import/import-qt5.inc)
+
+include $(IMPORT_QT5_INC)
diff --git a/libports/lib/import/import-qt5_webkit.mk b/libports/lib/import/import-qt5_webkit.mk
new file mode 100644
index 0000000000..11b03f7aca
--- /dev/null
+++ b/libports/lib/import/import-qt5_webkit.mk
@@ -0,0 +1,8 @@
+IMPORT_QT5_INC=$(call select_from_repositories,lib/import/import-qt5.inc)
+
+include $(IMPORT_QT5_INC)
+
+QT5_INC_DIR += $(QT5_REP_DIR)/include/qt5/qtwebkit \
+ $(QT5_REP_DIR)/contrib/$(QT5)/qtwebkit/include \
+ $(QT5_REP_DIR)/include/qt5/qtwebkit/QtWebKit \
+ $(QT5_REP_DIR)/contrib/$(QT5)/qtwebkit/include/QtWebKit \
diff --git a/libports/lib/import/import-qt5_webkitwidgets.mk b/libports/lib/import/import-qt5_webkitwidgets.mk
new file mode 100644
index 0000000000..4af40f1560
--- /dev/null
+++ b/libports/lib/import/import-qt5_webkitwidgets.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_REP_DIR)/contrib/$(QT5)/qtwebkit/include/QtWebKitWidgets \
diff --git a/libports/lib/import/import-qt5_widgets.mk b/libports/lib/import/import-qt5_widgets.mk
new file mode 100644
index 0000000000..883b4d8f27
--- /dev/null
+++ b/libports/lib/import/import-qt5_widgets.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_REP_DIR)/contrib/$(QT5)/qtbase/include/QtWidgets \
diff --git a/libports/lib/import/import-qt5_wtf.mk b/libports/lib/import/import-qt5_wtf.mk
new file mode 100644
index 0000000000..5602c0bec7
--- /dev/null
+++ b/libports/lib/import/import-qt5_wtf.mk
@@ -0,0 +1,3 @@
+IMPORT_QT5_INC=$(call select_from_repositories,lib/import/import-qt5.inc)
+
+include $(IMPORT_QT5_INC)
diff --git a/libports/lib/import/import-qt5_xml.mk b/libports/lib/import/import-qt5_xml.mk
new file mode 100644
index 0000000000..06895beab2
--- /dev/null
+++ b/libports/lib/import/import-qt5_xml.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_REP_DIR)/contrib/$(QT5)/qtbase/include/QtXml
diff --git a/libports/lib/mk/qt5.inc b/libports/lib/mk/qt5.inc
new file mode 100644
index 0000000000..a0cc2fd78e
--- /dev/null
+++ b/libports/lib/mk/qt5.inc
@@ -0,0 +1,21 @@
+QT_SOURCES_FILTER_OUT += $(COMPILER_MOC_HEADER_MAKE_ALL_FILES_FILTER_OUT)
+QT_SOURCES_FILTERED = $(filter-out $(QT_SOURCES_FILTER_OUT), $(QT_SOURCES))
+
+SRC_CC += $(filter %.cpp, $(QT_SOURCES_FILTERED))
+SRC_CC += $(filter %.cc, $(QT_SOURCES_FILTERED))
+SRC_C += $(filter %.c, $(QT_SOURCES_FILTERED))
+
+COMPILER_MOC_HEADER_MAKE_ALL_FILES_FILTERED = $(filter-out $(COMPILER_MOC_HEADER_MAKE_ALL_FILES_FILTER_OUT), $(COMPILER_MOC_HEADER_MAKE_ALL_FILES))
+$(SRC_CC:.cpp=.o): $(COMPILER_MOC_HEADER_MAKE_ALL_FILES_FILTERED)
+
+COMPILER_MOC_SOURCE_MAKE_ALL_FILES_FILTERED = $(filter-out $(COMPILER_MOC_SOURCE_MAKE_ALL_FILES_FILTER_OUT), $(COMPILER_MOC_SOURCE_MAKE_ALL_FILES))
+$(SRC_CC:.cpp=.o): $(COMPILER_MOC_SOURCE_MAKE_ALL_FILES_FILTERED)
+
+INC_DIR += $(REP_DIR)/src/lib/qt5/qtbase/mkspecs/qws/genode-generic-g++ \
+ $(REP_DIR)/src/lib/qt5/qtbase/src/corelib/global
+
+INC_DIR += $(addprefix $(REP_DIR)/src/lib/qt5/, $(QT_INCPATH))
+INC_DIR += $(addprefix $(REP_DIR)/contrib/$(QT5)/, $(QT_INCPATH))
+
+vpath % $(addprefix $(REP_DIR)/src/lib/qt5/, $(QT_VPATH))
+vpath % $(addprefix $(REP_DIR)/contrib/$(QT5)/, $(QT_VPATH))
diff --git a/libports/lib/mk/qt5_core.mk b/libports/lib/mk/qt5_core.mk
new file mode 100644
index 0000000000..6c530d3888
--- /dev/null
+++ b/libports/lib/mk/qt5_core.mk
@@ -0,0 +1,37 @@
+include $(REP_DIR)/lib/import/import-qt5_core.mk
+
+SHARED_LIB = yes
+
+# use default warning level to avoid noise when compiling contrib code
+CC_WARN = -Wno-unused-but-set-variable -Wno-deprecated-declarations
+
+include $(REP_DIR)/lib/mk/qt5_core_generated.inc
+
+# add Genode-specific sources
+QT_SOURCES += qprocess_genode.cpp \
+ qthread_genode.cpp \
+ qwaitcondition_genode.cpp
+
+# remove unsupported UNIX-specific files
+QT_SOURCES_FILTER_OUT = \
+ qmutex_unix.cpp \
+ qprocess_unix.cpp \
+ qthread_unix.cpp \
+ qwaitcondition_unix.cpp \
+ qfilesystemwatcher_inotify.cpp \
+ moc_qfilesystemwatcher_inotify_p.cpp \
+
+# remove unneeded files to prevent moc warnings
+COMPILER_MOC_HEADER_MAKE_ALL_FILES_FILTER_OUT = \
+ moc_qsharedmemory.cpp \
+ moc_qfilesystemwatcher_inotify_p.cpp \
+
+include $(REP_DIR)/lib/mk/qt5.inc
+
+INC_DIR += $(REP_DIR)/include/qt5/qtbase/QtCore/private \
+ $(REP_DIR)/src/lib/qt5/qtbase/src/corelib/thread \
+ $(REP_DIR)/contrib/$(QT5)/qtbase/include/QtCore/$(QT_VERSION) \
+ $(REP_DIR)/contrib/$(QT5)/qtbase/include/QtCore/$(QT_VERSION)/QtCore \
+ $(REP_DIR)/contrib/$(QT5)/qtbase/include/QtCore/$(QT_VERSION)/QtCore/private
+
+LIBS += launchpad zlib icu libc libm alarm libc_lock_pipe
diff --git a/libports/lib/mk/qt5_core_generated.inc b/libports/lib/mk/qt5_core_generated.inc
new file mode 100644
index 0000000000..5422bcb0ab
--- /dev/null
+++ b/libports/lib/mk/qt5_core_generated.inc
@@ -0,0 +1,365 @@
+QT_DEFINES += -DQT_NO_LIBUDEV -DQT_NO_XCB -DQT_NO_XKBCOMMON -DQT_NO_USING_NAMESPACE -DQT_BUILD_CORE_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_USE_ICU -DPCRE_HAVE_CONFIG_H -DQT_CORE_LIB -DQT_NO_DEBUG
+
+QT_INCPATH += \
+ qtbase/include \
+ qtbase/include/QtCore \
+ qtbase/include/QtCore/5.1.0 \
+ qtbase/include/QtCore/5.1.0/QtCore \
+ qtbase/mkspecs/genode-g++ \
+ qtbase/src/3rdparty/harfbuzz/src \
+ qtbase/src/3rdparty/md4 \
+ qtbase/src/3rdparty/md5 \
+ qtbase/src/3rdparty/pcre \
+ qtbase/src/3rdparty/sha3 \
+ qtbase/src/corelib \
+
+QT_SOURCES += \
+ qabstractanimation.cpp \
+ qvariantanimation.cpp \
+ qpropertyanimation.cpp \
+ qanimationgroup.cpp \
+ qsequentialanimationgroup.cpp \
+ qparallelanimationgroup.cpp \
+ qpauseanimation.cpp \
+ qatomic_unix.cpp \
+ qglobal.cpp \
+ qglobalstatic.cpp \
+ qlibraryinfo.cpp \
+ qmalloc.cpp \
+ qnumeric.cpp \
+ qlogging.cpp \
+ qatomic.cpp \
+ qexception.cpp \
+ qresultstore.cpp \
+ qfutureinterface.cpp \
+ qfuturewatcher.cpp \
+ qmutex.cpp \
+ qreadwritelock.cpp \
+ qrunnable.cpp \
+ qmutexpool.cpp \
+ qsemaphore.cpp \
+ qthread.cpp \
+ qthreadpool.cpp \
+ qthreadstorage.cpp \
+ qthread_unix.cpp \
+ qwaitcondition_unix.cpp \
+ qarraydata.cpp \
+ qbitarray.cpp \
+ qbytearray.cpp \
+ qbytearraymatcher.cpp \
+ qcollator.cpp \
+ qcryptographichash.cpp \
+ qdatetime.cpp \
+ qeasingcurve.cpp \
+ qelapsedtimer.cpp \
+ qfreelist.cpp \
+ qhash.cpp \
+ qline.cpp \
+ qlinkedlist.cpp \
+ qlist.cpp \
+ qlocale.cpp \
+ qlocale_tools.cpp \
+ qpoint.cpp \
+ qmap.cpp \
+ qmargins.cpp \
+ qmessageauthenticationcode.cpp \
+ qcontiguouscache.cpp \
+ qrect.cpp \
+ qregexp.cpp \
+ qregularexpression.cpp \
+ qrefcount.cpp \
+ qshareddata.cpp \
+ qsharedpointer.cpp \
+ qsimd.cpp \
+ qsize.cpp \
+ qstring.cpp \
+ qstringbuilder.cpp \
+ qstringlist.cpp \
+ qtextboundaryfinder.cpp \
+ qtimeline.cpp \
+ qunicodetools.cpp \
+ qvector.cpp \
+ qvsnprintf.cpp \
+ qelapsedtimer_unix.cpp \
+ qlocale_unix.cpp \
+ qlocale_icu.cpp \
+ pcre16_byte_order.c \
+ pcre16_chartables.c \
+ pcre16_compile.c \
+ pcre16_config.c \
+ pcre16_dfa_exec.c \
+ pcre16_exec.c \
+ pcre16_fullinfo.c \
+ pcre16_get.c \
+ pcre16_globals.c \
+ pcre16_jit_compile.c \
+ pcre16_maketables.c \
+ pcre16_newline.c \
+ pcre16_ord2utf16.c \
+ pcre16_refcount.c \
+ pcre16_string_utils.c \
+ pcre16_study.c \
+ pcre16_tables.c \
+ pcre16_ucd.c \
+ pcre16_utf16_utils.c \
+ pcre16_valid_utf16.c \
+ pcre16_version.c \
+ pcre16_xclass.c \
+ harfbuzz-buffer.c \
+ harfbuzz-gdef.c \
+ harfbuzz-gsub.c \
+ harfbuzz-gpos.c \
+ harfbuzz-impl.c \
+ harfbuzz-open.c \
+ harfbuzz-stream.c \
+ harfbuzz-shaper-all.cpp \
+ qharfbuzz.cpp \
+ qabstractfileengine.cpp \
+ qbuffer.cpp \
+ qdatastream.cpp \
+ qdataurl.cpp \
+ qtldurl.cpp \
+ qdebug.cpp \
+ qdir.cpp \
+ qdiriterator.cpp \
+ qfile.cpp \
+ qfiledevice.cpp \
+ qfileinfo.cpp \
+ qipaddress.cpp \
+ qiodevice.cpp \
+ qlockfile.cpp \
+ qnoncontiguousbytedevice.cpp \
+ qprocess.cpp \
+ qtextstream.cpp \
+ qtemporarydir.cpp \
+ qtemporaryfile.cpp \
+ qresource.cpp \
+ qresource_iterator.cpp \
+ qsavefile.cpp \
+ qstandardpaths.cpp \
+ qurl.cpp \
+ qurlidna.cpp \
+ qurlquery.cpp \
+ qurlrecode.cpp \
+ qsettings.cpp \
+ qfsfileengine.cpp \
+ qfsfileengine_iterator.cpp \
+ qfilesystemwatcher.cpp \
+ qfilesystemwatcher_polling.cpp \
+ qfilesystementry.cpp \
+ qfilesystemengine.cpp \
+ qfsfileengine_unix.cpp \
+ qfilesystemengine_unix.cpp \
+ qlockfile_unix.cpp \
+ qprocess_unix.cpp \
+ qfilesystemiterator_unix.cpp \
+ qstandardpaths_unix.cpp \
+ qfilesystemwatcher_inotify.cpp \
+ qabstractitemmodel.cpp \
+ qabstractproxymodel.cpp \
+ qitemselectionmodel.cpp \
+ qidentityproxymodel.cpp \
+ qsortfilterproxymodel.cpp \
+ qstringlistmodel.cpp \
+ qjson.cpp \
+ qjsondocument.cpp \
+ qjsonobject.cpp \
+ qjsonarray.cpp \
+ qjsonvalue.cpp \
+ qjsonwriter.cpp \
+ qjsonparser.cpp \
+ qpluginloader.cpp \
+ qfactoryloader.cpp \
+ quuid.cpp \
+ qlibrary.cpp \
+ qelfparser_p.cpp \
+ qlibrary_unix.cpp \
+ qabstracteventdispatcher.cpp \
+ qabstractnativeeventfilter.cpp \
+ qbasictimer.cpp \
+ qeventloop.cpp \
+ qcoreapplication.cpp \
+ qcoreevent.cpp \
+ qmetaobject.cpp \
+ qmetatype.cpp \
+ qmetaobjectbuilder.cpp \
+ qmimedata.cpp \
+ qobject.cpp \
+ qobjectcleanuphandler.cpp \
+ qsignalmapper.cpp \
+ qsocketnotifier.cpp \
+ qtimer.cpp \
+ qtranslator.cpp \
+ qvariant.cpp \
+ qcoreglobaldata.cpp \
+ qsharedmemory.cpp \
+ qsystemsemaphore.cpp \
+ qpointer.cpp \
+ qmath.cpp \
+ qsystemerror.cpp \
+ qcore_unix.cpp \
+ qcrashhandler.cpp \
+ qeventdispatcher_unix.cpp \
+ qtimerinfo_unix.cpp \
+ qsharedmemory_unix.cpp \
+ qsystemsemaphore_unix.cpp \
+ qisciicodec.cpp \
+ qlatincodec.cpp \
+ qtextcodec.cpp \
+ qtsciicodec.cpp \
+ qutfcodec.cpp \
+ qicucodec.cpp \
+ qstatemachine.cpp \
+ qabstractstate.cpp \
+ qstate.cpp \
+ qfinalstate.cpp \
+ qhistorystate.cpp \
+ qabstracttransition.cpp \
+ qsignaltransition.cpp \
+ qeventtransition.cpp \
+ qmimedatabase.cpp \
+ qmimetype.cpp \
+ qmimemagicrulematcher.cpp \
+ qmimetypeparser.cpp \
+ qmimemagicrule.cpp \
+ qmimeglobpattern.cpp \
+ qmimeprovider.cpp \
+ qxmlstream.cpp \
+ qxmlutils.cpp \
+ qrc_mimetypes.cpp \
+ moc_qabstractanimation_p.cpp \
+ moc_qnamespace.cpp \
+ moc_qthread.cpp \
+ moc_qthreadpool.cpp \
+ moc_qfuturewatcher.cpp \
+ moc_qeasingcurve.cpp \
+ moc_qlocale.cpp \
+ moc_qtimeline.cpp \
+ moc_qfile.cpp \
+ moc_qfiledevice.cpp \
+ moc_qiodevice.cpp \
+ moc_qnoncontiguousbytedevice_p.cpp \
+ moc_qtextstream_p.cpp \
+ moc_qtemporaryfile.cpp \
+ moc_qsavefile.cpp \
+ moc_qsettings.cpp \
+ moc_qfilesystemwatcher_p.cpp \
+ moc_qfilesystemwatcher_polling_p.cpp \
+ moc_qfilesystemwatcher_inotify_p.cpp \
+ moc_qabstractitemmodel.cpp \
+ moc_qstringlistmodel.cpp \
+ moc_qpluginloader.cpp \
+ moc_qlibrary.cpp \
+ moc_qfactoryloader_p.cpp \
+ moc_qabstracteventdispatcher.cpp \
+ moc_qeventloop.cpp \
+ moc_qcoreapplication.cpp \
+ moc_qcoreevent.cpp \
+ moc_qmimedata.cpp \
+ moc_qsocketnotifier.cpp \
+ moc_qtimer.cpp \
+ moc_qtranslator.cpp \
+ moc_qobjectcleanuphandler.cpp \
+ moc_qsharedmemory.cpp \
+ moc_qeventdispatcher_unix_p.cpp \
+ moc_qabstractstate.cpp \
+ moc_qstate.cpp \
+ moc_qfinalstate.cpp \
+ moc_qhistorystate.cpp \
+ moc_qabstracttransition.cpp \
+ moc_qsignaltransition.cpp \
+ moc_qeventtransition.cpp
+
+QT_VPATH += \
+ qtbase/src/3rdparty/harfbuzz/src \
+ qtbase/src/3rdparty/pcre \
+ qtbase/src/corelib/animation \
+ qtbase/src/corelib/arch \
+ qtbase/src/corelib/codecs \
+ qtbase/src/corelib/global \
+ qtbase/src/corelib/io \
+ qtbase/src/corelib/itemmodels \
+ qtbase/src/corelib/json \
+ qtbase/src/corelib/kernel \
+ qtbase/src/corelib/mimetypes \
+ qtbase/src/corelib/plugin \
+ qtbase/src/corelib/statemachine \
+ qtbase/src/corelib/thread \
+ qtbase/src/corelib/tools \
+ qtbase/src/corelib/xml \
+
+# 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_qabstractanimation.cpp \
+ moc_qabstractanimation_p.cpp \
+ moc_qvariantanimation.cpp \
+ moc_qpropertyanimation.cpp \
+ moc_qanimationgroup.cpp \
+ moc_qsequentialanimationgroup.cpp \
+ moc_qparallelanimationgroup.cpp \
+ moc_qpauseanimation.cpp \
+ moc_qnamespace.cpp \
+ moc_qthread.cpp \
+ moc_qthreadpool.cpp \
+ moc_qfuturewatcher.cpp \
+ moc_qeasingcurve.cpp \
+ moc_qlocale.cpp \
+ moc_qtimeline.cpp \
+ moc_qbuffer.cpp \
+ moc_qfile.cpp \
+ moc_qfiledevice.cpp \
+ moc_qiodevice.cpp \
+ moc_qnoncontiguousbytedevice_p.cpp \
+ moc_qprocess.cpp \
+ moc_qtextstream_p.cpp \
+ moc_qtemporaryfile.cpp \
+ moc_qsavefile.cpp \
+ moc_qsettings.cpp \
+ moc_qfilesystemwatcher.cpp \
+ moc_qfilesystemwatcher_p.cpp \
+ moc_qfilesystemwatcher_polling_p.cpp \
+ moc_qfilesystemwatcher_inotify_p.cpp \
+ moc_qabstractitemmodel.cpp \
+ moc_qabstractproxymodel.cpp \
+ moc_qitemselectionmodel.cpp \
+ moc_qidentityproxymodel.cpp \
+ moc_qsortfilterproxymodel.cpp \
+ moc_qstringlistmodel.cpp \
+ moc_qpluginloader.cpp \
+ moc_qlibrary.cpp \
+ moc_qfactoryloader_p.cpp \
+ moc_qabstracteventdispatcher.cpp \
+ moc_qeventloop.cpp \
+ moc_qcoreapplication.cpp \
+ moc_qcoreevent.cpp \
+ moc_qmimedata.cpp \
+ moc_qobject.cpp \
+ moc_qsignalmapper.cpp \
+ moc_qsocketnotifier.cpp \
+ moc_qtimer.cpp \
+ moc_qtranslator.cpp \
+ moc_qobjectcleanuphandler.cpp \
+ moc_qsharedmemory.cpp \
+ moc_qeventdispatcher_unix_p.cpp \
+ moc_qstatemachine.cpp \
+ moc_qabstractstate.cpp \
+ moc_qstate.cpp \
+ moc_qfinalstate.cpp \
+ moc_qhistorystate.cpp \
+ moc_qabstracttransition.cpp \
+ moc_qsignaltransition.cpp \
+ moc_qeventtransition.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 = \
+ qprocess_unix.moc \
+ qtimer.moc \
+ qstatemachine.moc
+
diff --git a/libports/lib/mk/qt5_dejavusans.mk b/libports/lib/mk/qt5_dejavusans.mk
new file mode 100644
index 0000000000..867eb93008
--- /dev/null
+++ b/libports/lib/mk/qt5_dejavusans.mk
@@ -0,0 +1,7 @@
+SHARED_LIB = yes
+
+SRC_CC = qrc_dejavusans.cpp
+
+LIBS = qt5_core
+
+vpath % $(REP_DIR)/src/lib/qt5/dejavusans
diff --git a/libports/lib/mk/qt5_gui.mk b/libports/lib/mk/qt5_gui.mk
new file mode 100644
index 0000000000..50ab38c392
--- /dev/null
+++ b/libports/lib/mk/qt5_gui.mk
@@ -0,0 +1,41 @@
+include $(REP_DIR)/lib/import/import-qt5_gui.mk
+
+SHARED_LIB = yes
+
+# use default warning level to avoid noise when compiling contrib code
+CC_WARN = -Wno-unused-but-set-variable -Wno-deprecated-declarations
+
+include $(REP_DIR)/lib/mk/qt5_gui_generated.inc
+
+# remove unneeded files to prevent moc warnings
+COMPILER_MOC_HEADER_MAKE_ALL_FILES_FILTER_OUT = \
+ moc_qsessionmanager.cpp \
+ moc_qsound.cpp \
+ moc_qsound_p.cpp \
+ moc_qmenudata.cpp \
+ moc_qprintpreviewwidget.cpp \
+ moc_qabstractprintdialog.cpp \
+ moc_qabstractpagesetupdialog.cpp \
+ moc_qpagesetupdialog.cpp \
+ moc_qprintdialog.cpp \
+ moc_qprintpreviewdialog.cpp \
+ moc_qpagesetupdialog_unix_p.cpp
+
+COMPILER_MOC_SOURCE_MAKE_ALL_FILES_FILTER_OUT = \
+ qprintpreviewwidget.moc \
+ qprintdialog_unix.moc \
+ qprintpreviewdialog.moc
+
+# UI headers
+qfiledialog.o: ui_qfiledialog.h
+
+include $(REP_DIR)/lib/mk/qt5.inc
+
+INC_DIR += $(REP_DIR)/include/qt5/qtbase/QtGui/private \
+ $(REP_DIR)/contrib/$(QT5)/qtbase/include/QtGui/$(QT_VERSION) \
+ $(REP_DIR)/contrib/$(QT5)/qtbase/include/QtGui/$(QT_VERSION)/QtGui \
+ $(REP_DIR)/contrib/$(QT5)/qtbase/include/QtGui/$(QT_VERSION)/QtGui/private \
+ $(REP_DIR)/contrib/$(QT5)/qtbase/include/QtCore/$(QT_VERSION) \
+ $(REP_DIR)/contrib/$(QT5)/qtbase/include/QtCore/$(QT_VERSION)/QtCore
+
+LIBS += qt5_core jpeg zlib libpng
diff --git a/libports/lib/mk/qt5_gui_generated.inc b/libports/lib/mk/qt5_gui_generated.inc
new file mode 100644
index 0000000000..e195052592
--- /dev/null
+++ b/libports/lib/mk/qt5_gui_generated.inc
@@ -0,0 +1,281 @@
+QT_DEFINES += -DQT_NO_LIBUDEV -DQT_NO_XCB -DQT_NO_XKBCOMMON -DQT_NO_USING_NAMESPACE -DQT_BUILD_GUI_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 -DQT_NO_DEBUG -DQT_CORE_LIB
+
+QT_INCPATH += \
+ qtbase/include \
+ qtbase/include/QtCore \
+ qtbase/include/QtCore/5.1.0 \
+ qtbase/include/QtCore/5.1.0/QtCore \
+ qtbase/include/QtGui \
+ qtbase/include/QtGui/5.1.0 \
+ qtbase/include/QtGui/5.1.0/QtGui \
+ qtbase/mkspecs/genode-g++ \
+ qtbase/src/gui \
+ qtbase/src/gui/image \
+
+QT_SOURCES += \
+ qclipboard_qpa.cpp \
+ qcursor_qpa.cpp \
+ qgenericpluginfactory.cpp \
+ qgenericplugin.cpp \
+ qwindowsysteminterface.cpp \
+ qplatforminputcontextfactory.cpp \
+ qplatforminputcontextplugin.cpp \
+ qplatforminputcontext.cpp \
+ qplatformintegration.cpp \
+ qplatformdrag.cpp \
+ qplatformscreen.cpp \
+ qplatformintegrationfactory.cpp \
+ qplatformintegrationplugin.cpp \
+ qplatformtheme.cpp \
+ qplatformthemefactory.cpp \
+ qplatformthemeplugin.cpp \
+ qplatformwindow.cpp \
+ qplatformoffscreensurface.cpp \
+ qplatformcursor.cpp \
+ qplatformclipboard.cpp \
+ qplatformnativeinterface.cpp \
+ qsessionmanager.cpp \
+ qshapedpixmapdndwindow.cpp \
+ qsimpledrag.cpp \
+ qsurfaceformat.cpp \
+ qguiapplication.cpp \
+ qwindow.cpp \
+ qoffscreensurface.cpp \
+ qplatformsurface.cpp \
+ qsurface.cpp \
+ qclipboard.cpp \
+ qcursor.cpp \
+ qdrag.cpp \
+ qdnd.cpp \
+ qevent.cpp \
+ qinputmethod.cpp \
+ qkeysequence.cpp \
+ qkeymapper.cpp \
+ qkeymapper_qpa.cpp \
+ qpalette.cpp \
+ qguivariant.cpp \
+ qscreen.cpp \
+ qshortcutmap.cpp \
+ qstylehints.cpp \
+ qtouchdevice.cpp \
+ qplatformsharedgraphicscache.cpp \
+ qplatformdialoghelper.cpp \
+ qplatformservices.cpp \
+ qplatformscreenpageflipper.cpp \
+ qplatformsystemtrayicon_qpa.cpp \
+ qbitmap.cpp \
+ qimage.cpp \
+ qimageiohandler.cpp \
+ qimagereader.cpp \
+ qimagewriter.cpp \
+ qpaintengine_pic.cpp \
+ qpicture.cpp \
+ qpictureformatplugin.cpp \
+ qpixmap.cpp \
+ qpixmapcache.cpp \
+ qplatformpixmap.cpp \
+ qmovie.cpp \
+ qpixmap_raster.cpp \
+ qpixmap_blitter.cpp \
+ qnativeimage.cpp \
+ qimagepixmapcleanuphooks.cpp \
+ qicon.cpp \
+ qiconloader.cpp \
+ qiconengine.cpp \
+ qiconengineplugin.cpp \
+ qbmphandler.cpp \
+ qppmhandler.cpp \
+ qxbmhandler.cpp \
+ qxpmhandler.cpp \
+ qpnghandler.cpp \
+ qjpeghandler.cpp \
+ qgifhandler.cpp \
+ qfont.cpp \
+ qfontengine.cpp \
+ qfontsubset.cpp \
+ qfontmetrics.cpp \
+ qfontdatabase.cpp \
+ qtextengine.cpp \
+ qtextlayout.cpp \
+ qtextformat.cpp \
+ qtextobject.cpp \
+ qtextoption.cpp \
+ qfragmentmap.cpp \
+ qtextdocument.cpp \
+ qtextdocument_p.cpp \
+ qtexthtmlparser.cpp \
+ qabstracttextdocumentlayout.cpp \
+ qtextdocumentlayout.cpp \
+ qtextcursor.cpp \
+ qtextdocumentfragment.cpp \
+ qtextimagehandler.cpp \
+ qtexttable.cpp \
+ qtextlist.cpp \
+ qtextdocumentwriter.cpp \
+ qsyntaxhighlighter.cpp \
+ qcssparser.cpp \
+ qzip.cpp \
+ qtextodfwriter.cpp \
+ qstatictext.cpp \
+ qrawfont.cpp \
+ qglyphrun.cpp \
+ qdistancefield.cpp \
+ qfont_qpa.cpp \
+ qfontengine_qpa.cpp \
+ qplatformfontdatabase.cpp \
+ qrawfont_qpa.cpp \
+ qbackingstore.cpp \
+ qbezier.cpp \
+ qblendfunctions.cpp \
+ qblittable.cpp \
+ qbrush.cpp \
+ qcolor.cpp \
+ qcolor_p.cpp \
+ qcosmeticstroker.cpp \
+ qcssutil.cpp \
+ qdrawhelper.cpp \
+ qemulationpaintengine.cpp \
+ qgammatables.cpp \
+ qgrayraster.c \
+ qimagescale.cpp \
+ qmatrix.cpp \
+ qmemrotate.cpp \
+ qoutlinemapper.cpp \
+ qpagedpaintdevice.cpp \
+ qpaintdevice.cpp \
+ qpaintengine.cpp \
+ qpaintengineex.cpp \
+ qpaintengine_blitter.cpp \
+ qpaintengine_raster.cpp \
+ qpainter.cpp \
+ qpainterpath.cpp \
+ qpathclipper.cpp \
+ qpdf.cpp \
+ qpdfwriter.cpp \
+ qpen.cpp \
+ qpolygon.cpp \
+ qrasterizer.cpp \
+ qregion.cpp \
+ qstroker.cpp \
+ qtextureglyphcache.cpp \
+ qtransform.cpp \
+ qplatformbackingstore.cpp \
+ qpaintbuffer.cpp \
+ qpathsimplifier.cpp \
+ qdesktopservices.cpp \
+ qvalidator.cpp \
+ qgenericmatrix.cpp \
+ qmatrix4x4.cpp \
+ qquaternion.cpp \
+ qvector2d.cpp \
+ qvector3d.cpp \
+ qvector4d.cpp \
+ qguivariantanimation.cpp \
+ qstandarditemmodel.cpp \
+ moc_qgenericplugin.cpp \
+ moc_qplatforminputcontext.cpp \
+ moc_qplatforminputcontextplugin_p.cpp \
+ moc_qplatformintegrationplugin.cpp \
+ moc_qplatformthemeplugin.cpp \
+ moc_qplatformnativeinterface.cpp \
+ moc_qplatformmenu.cpp \
+ moc_qshapedpixmapdndwindow_p.cpp \
+ moc_qoffscreensurface.cpp \
+ moc_qclipboard.cpp \
+ moc_qdrag.cpp \
+ moc_qdnd_p.cpp \
+ moc_qkeymapper_p.cpp \
+ moc_qpalette.cpp \
+ moc_qsessionmanager.cpp \
+ moc_qscreen.cpp \
+ moc_qstylehints.cpp \
+ moc_qplatformsharedgraphicscache.cpp \
+ moc_qplatformdialoghelper.cpp \
+ moc_qplatformscreenpageflipper.cpp \
+ moc_qimageiohandler.cpp \
+ moc_qpictureformatplugin.cpp \
+ moc_qiconengineplugin.cpp \
+ moc_qfont.cpp \
+ moc_qfontdatabase.cpp \
+ moc_qfontengine_p.cpp \
+ moc_qtextformat.cpp \
+ moc_qtextobject.cpp \
+ moc_qtextdocument.cpp \
+ moc_qtextimagehandler_p.cpp \
+ moc_qtexttable.cpp \
+ moc_qtextlist.cpp \
+ moc_qbrush.cpp \
+ moc_qpainter.cpp \
+ moc_qpdfwriter.cpp \
+ moc_qvalidator.cpp
+
+QT_VPATH += \
+ qtbase/src/gui/animation \
+ qtbase/src/gui/image \
+ qtbase/src/gui/itemmodels \
+ qtbase/src/gui/kernel \
+ qtbase/src/gui/math3d \
+ qtbase/src/gui/painting \
+ qtbase/src/gui/text \
+ qtbase/src/gui/util \
+
+# 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_qgenericplugin.cpp \
+ moc_qplatforminputcontext.cpp \
+ moc_qplatforminputcontextplugin_p.cpp \
+ moc_qplatformintegrationplugin.cpp \
+ moc_qplatformthemeplugin.cpp \
+ moc_qplatformnativeinterface.cpp \
+ moc_qplatformmenu.cpp \
+ moc_qshapedpixmapdndwindow_p.cpp \
+ moc_qguiapplication.cpp \
+ moc_qwindow.cpp \
+ moc_qoffscreensurface.cpp \
+ moc_qclipboard.cpp \
+ moc_qdrag.cpp \
+ moc_qdnd_p.cpp \
+ moc_qinputmethod.cpp \
+ moc_qkeymapper_p.cpp \
+ moc_qpalette.cpp \
+ moc_qsessionmanager.cpp \
+ moc_qscreen.cpp \
+ moc_qstylehints.cpp \
+ moc_qplatformsharedgraphicscache.cpp \
+ moc_qplatformdialoghelper.cpp \
+ moc_qplatformscreenpageflipper.cpp \
+ moc_qplatformsystemtrayicon.cpp \
+ moc_qimageiohandler.cpp \
+ moc_qmovie.cpp \
+ moc_qpictureformatplugin.cpp \
+ moc_qiconengineplugin.cpp \
+ moc_qfont.cpp \
+ moc_qfontdatabase.cpp \
+ moc_qfontengine_p.cpp \
+ moc_qtextformat.cpp \
+ moc_qtextobject.cpp \
+ moc_qtextdocument.cpp \
+ moc_qabstracttextdocumentlayout.cpp \
+ moc_qtextdocumentlayout_p.cpp \
+ moc_qtextimagehandler_p.cpp \
+ moc_qtexttable.cpp \
+ moc_qtextlist.cpp \
+ moc_qsyntaxhighlighter.cpp \
+ moc_qbrush.cpp \
+ moc_qpainter.cpp \
+ moc_qpdfwriter.cpp \
+ moc_qvalidator.cpp \
+ moc_qstandarditemmodel.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 = \
+ qpixmapcache.moc \
+ qdesktopservices.moc
+
diff --git a/libports/lib/mk/qt5_jscore.mk b/libports/lib/mk/qt5_jscore.mk
new file mode 100644
index 0000000000..e978b7cc62
--- /dev/null
+++ b/libports/lib/mk/qt5_jscore.mk
@@ -0,0 +1,21 @@
+include $(REP_DIR)/lib/import/import-qt5_jscore.mk
+
+SHARED_LIB = yes
+
+# additional defines for the Genode version
+CC_OPT += -DSQLITE_NO_SYNC=1 -DSQLITE_THREADSAFE=0
+
+# enable C++ functions that use C99 math functions (disabled by default in the Genode tool chain)
+CC_CXX_OPT += -D_GLIBCXX_USE_C99_MATH
+
+# use default warning level to avoid noise when compiling contrib code
+CC_WARN =
+
+include $(REP_DIR)/lib/mk/qt5_jscore_generated.inc
+
+QT_INCPATH += qtwebkit/Source/JavaScriptCore/generated
+
+
+include $(REP_DIR)/lib/mk/qt5.inc
+
+LIBS += qt5_network qt5_core icu pthread libc libm
diff --git a/libports/lib/mk/qt5_jscore_generated.inc b/libports/lib/mk/qt5_jscore_generated.inc
new file mode 100644
index 0000000000..103930c042
--- /dev/null
+++ b/libports/lib/mk/qt5_jscore_generated.inc
@@ -0,0 +1,319 @@
+QT_DEFINES += -DQT_NO_LIBUDEV -DQT_NO_XCB -DQT_NO_XKBCOMMON -DBUILDING_QT__=1 -DNDEBUG -DENABLE_3D_RENDERING=1 -DENABLE_BLOB=1 -DENABLE_CHANNEL_MESSAGING=1 -DENABLE_CSS_BOX_DECORATION_BREAK=1 -DENABLE_CSS_COMPOSITING=1 -DENABLE_CSS_EXCLUSIONS=1 -DENABLE_CSS_FILTERS=1 -DENABLE_CSS_IMAGE_SET=1 -DENABLE_CSS_REGIONS=1 -DENABLE_CSS_STICKY_POSITION=1 -DENABLE_DATALIST_ELEMENT=1 -DENABLE_DETAILS_ELEMENT=1 -DENABLE_FAST_MOBILE_SCROLLING=1 -DENABLE_FILTERS=1 -DENABLE_FTPDIR=1 -DENABLE_GESTURE_EVENTS=1 -DENABLE_ICONDATABASE=1 -DENABLE_IFRAME_SEAMLESS=1 -DENABLE_INPUT_TYPE_COLOR=1 -DENABLE_INSPECTOR=1 -DENABLE_INSPECTOR_SERVER=1 -DENABLE_JAVASCRIPT_DEBUGGER=1 -DENABLE_LEGACY_NOTIFICATIONS=1 -DENABLE_LEGACY_VIEWPORT_ADAPTION=1 -DENABLE_LEGACY_VENDOR_PREFIXES=1 -DENABLE_LINK_PREFETCH=1 -DENABLE_METER_ELEMENT=1 -DENABLE_MHTML=1 -DENABLE_MUTATION_OBSERVERS=1 -DENABLE_NOTIFICATIONS=1 -DENABLE_PAGE_VISIBILITY_API=1 -DENABLE_PROGRESS_ELEMENT=1 -DENABLE_RESOLUTION_MEDIA_QUERY=1 -DENABLE_REQUEST_ANIMATION_FRAME=1 -DENABLE_SHARED_WORKERS=1 -DENABLE_SMOOTH_SCROLLING=1 -DENABLE_SQL_DATABASE=1 -DENABLE_SVG=1 -DENABLE_SVG_FONTS=1 -DENABLE_TOUCH_ADJUSTMENT=1 -DENABLE_TOUCH_EVENTS=1 -DENABLE_WEB_SOCKETS=1 -DENABLE_WEB_TIMING=1 -DENABLE_WORKERS=1 -DENABLE_XHR_TIMEOUT=1 -DWTF_USE_TILED_BACKING_STORE=1 -DHAVE_QTPRINTSUPPORT=1 -DHAVE_QSTYLE=1 -DHAVE_QTTESTLIB=1 -DWTF_USE_LIBJPEG=1 -DWTF_USE_LIBPNG=1 -DPLUGIN_ARCHITECTURE_UNSUPPORTED=1 -DENABLE_TOUCH_SLIDER=1 -DENABLE_ACCELERATED_2D_CANVAS=0 -DENABLE_ANIMATION_API=0 -DENABLE_BATTERY_STATUS=0 -DENABLE_CSP_NEXT=0 -DENABLE_CSS_GRID_LAYOUT=0 -DENABLE_CSS_HIERARCHIES=0 -DENABLE_CSS_IMAGE_ORIENTATION=0 -DENABLE_CSS_IMAGE_RESOLUTION=0 -DENABLE_CSS_SHADERS=0 -DENABLE_CSS_VARIABLES=0 -DENABLE_CSS3_BACKGROUND=0 -DENABLE_CSS3_CONDITIONAL_RULES=0 -DENABLE_CSS3_TEXT=0 -DENABLE_DASHBOARD_SUPPORT=0 -DENABLE_DATAGRID=0 -DENABLE_DATA_TRANSFER_ITEMS=0 -DENABLE_DEVICE_ORIENTATION=0 -DENABLE_DIRECTORY_UPLOAD=0 -DENABLE_DOWNLOAD_ATTRIBUTE=0 -DENABLE_FILE_SYSTEM=0 -DENABLE_FULLSCREEN_API=0 -DENABLE_GAMEPAD=0 -DENABLE_GEOLOCATION=0 -DENABLE_HIGH_DPI_CANVAS=0 -DENABLE_INDEXED_DATABASE=0 -DENABLE_INPUT_SPEECH=0 -DENABLE_INPUT_TYPE_DATE=0 -DENABLE_INPUT_TYPE_DATETIME=0 -DENABLE_INPUT_TYPE_DATETIMELOCAL=0 -DENABLE_INPUT_TYPE_MONTH=0 -DENABLE_INPUT_TYPE_TIME=0 -DENABLE_INPUT_TYPE_WEEK=0 -DENABLE_LEGACY_CSS_VENDOR_PREFIXES=0 -DENABLE_LINK_PRERENDER=0 -DENABLE_MATHML=0 -DENABLE_MEDIA_SOURCE=0 -DENABLE_MEDIA_STATISTICS=0 -DENABLE_MEDIA_STREAM=0 -DENABLE_MICRODATA=0 -DENABLE_NAVIGATOR_CONTENT_UTILS=0 -DENABLE_NETSCAPE_PLUGIN_API=0 -DENABLE_NETWORK_INFO=0 -DENABLE_ORIENTATION_EVENTS=0 -DENABLE_PROXIMITY_EVENTS=0 -DENABLE_QUOTA=0 -DENABLE_SCRIPTED_SPEECH=0 -DENABLE_SHADOW_DOM=0 -DENABLE_STYLE_SCOPED=0 -DENABLE_SVG_DOM_OBJC_BINDINGS=0 -DENABLE_TEXT_AUTOSIZING=0 -DENABLE_TEXT_NOTIFICATIONS_ONLY=0 -DENABLE_TOUCH_ICON_LOADING=0 -DENABLE_VIBRATION=0 -DENABLE_VIDEO=0 -DENABLE_VIDEO_TRACK=0 -DENABLE_WEBGL=0 -DENABLE_WEB_AUDIO=0 -DENABLE_XSLT=0 -DBUILDING_JavaScriptCore -DBUILDING_WEBKIT -DQT_ASCII_CAST_WARNINGS -DSTATICALLY_LINKED_WITH_WTF -DQT_NO_EXCEPTIONS -DQT_NO_DEBUG -DQT_CORE_LIB
+
+QT_INCPATH += \
+ qtbase/include \
+ qtbase/include/QtCore \
+ qtbase/mkspecs/genode-g++ \
+ qtscript/include \
+ qtscript/include/QtScript \
+ qtwebkit/Source \
+ qtwebkit/Source/JavaScriptCore \
+ qtwebkit/Source/JavaScriptCore/API \
+ qtwebkit/Source/JavaScriptCore/assembler \
+ qtwebkit/Source/JavaScriptCore/bytecode \
+ qtwebkit/Source/JavaScriptCore/bytecompiler \
+ qtwebkit/Source/JavaScriptCore/debugger \
+ qtwebkit/Source/JavaScriptCore/dfg \
+ qtwebkit/Source/JavaScriptCore/disassembler \
+ qtwebkit/Source/JavaScriptCore/ForwardingHeaders \
+ qtwebkit/Source/JavaScriptCore/heap \
+ qtwebkit/Source/JavaScriptCore/interpreter \
+ qtwebkit/Source/JavaScriptCore/jit \
+ qtwebkit/Source/JavaScriptCore/llint \
+ qtwebkit/Source/JavaScriptCore/parser \
+ qtwebkit/Source/JavaScriptCore/profiler \
+ qtwebkit/Source/JavaScriptCore/runtime \
+ qtwebkit/Source/JavaScriptCore/tools \
+ qtwebkit/Source/JavaScriptCore/yarr \
+ qtwebkit/Source/WTF \
+
+QT_SOURCES += \
+ YarrInterpreter.cpp \
+ YarrPattern.cpp \
+ YarrSyntaxChecker.cpp \
+ YarrCanonicalizeUCS2.cpp \
+ JSBase.cpp \
+ JSCallbackConstructor.cpp \
+ JSCallbackFunction.cpp \
+ JSCallbackObject.cpp \
+ JSClassRef.cpp \
+ JSContextRef.cpp \
+ JSObjectRef.cpp \
+ JSStringRef.cpp \
+ JSValueRef.cpp \
+ JSWeakObjectMapRefPrivate.cpp \
+ OpaqueJSString.cpp \
+ ARMAssembler.cpp \
+ ARMv7Assembler.cpp \
+ LinkBuffer.cpp \
+ MacroAssembler.cpp \
+ MacroAssemblerARM.cpp \
+ MacroAssemblerSH4.cpp \
+ ArrayAllocationProfile.cpp \
+ ArrayProfile.cpp \
+ CallLinkInfo.cpp \
+ CallLinkStatus.cpp \
+ CodeBlock.cpp \
+ CodeBlockHash.cpp \
+ CodeOrigin.cpp \
+ CodeType.cpp \
+ DFGExitProfile.cpp \
+ ExecutionCounter.cpp \
+ GetByIdStatus.cpp \
+ JumpTable.cpp \
+ LazyOperandValueProfile.cpp \
+ MethodOfGettingAValueProfile.cpp \
+ Opcode.cpp \
+ PolymorphicPutByIdList.cpp \
+ PutByIdStatus.cpp \
+ ResolveGlobalStatus.cpp \
+ SamplingTool.cpp \
+ SpecialPointer.cpp \
+ SpeculatedType.cpp \
+ StructureStubClearingWatchpoint.cpp \
+ StructureStubInfo.cpp \
+ UnlinkedCodeBlock.cpp \
+ Watchpoint.cpp \
+ BytecodeGenerator.cpp \
+ NodesCodegen.cpp \
+ CopiedSpace.cpp \
+ CopyVisitor.cpp \
+ ConservativeRoots.cpp \
+ DFGCodeBlocks.cpp \
+ WeakSet.cpp \
+ WeakHandleOwner.cpp \
+ WeakBlock.cpp \
+ HandleSet.cpp \
+ HandleStack.cpp \
+ BlockAllocator.cpp \
+ GCThreadSharedData.cpp \
+ GCThread.cpp \
+ Heap.cpp \
+ HeapStatistics.cpp \
+ HeapTimer.cpp \
+ IncrementalSweeper.cpp \
+ JITStubRoutineSet.cpp \
+ MachineStackMarker.cpp \
+ MarkStack.cpp \
+ MarkedAllocator.cpp \
+ MarkedBlock.cpp \
+ MarkedSpace.cpp \
+ SlotVisitor.cpp \
+ VTableSpectrum.cpp \
+ WriteBarrierSupport.cpp \
+ DebuggerActivation.cpp \
+ DebuggerCallFrame.cpp \
+ Debugger.cpp \
+ DFGAbstractState.cpp \
+ DFGArgumentsSimplificationPhase.cpp \
+ DFGArrayMode.cpp \
+ DFGAssemblyHelpers.cpp \
+ DFGByteCodeParser.cpp \
+ DFGCapabilities.cpp \
+ DFGCFAPhase.cpp \
+ DFGCFGSimplificationPhase.cpp \
+ DFGConstantFoldingPhase.cpp \
+ DFGCorrectableJumpPoint.cpp \
+ DFGCSEPhase.cpp \
+ DFGDisassembler.cpp \
+ DFGDominators.cpp \
+ DFGDriver.cpp \
+ DFGFixupPhase.cpp \
+ DFGGraph.cpp \
+ DFGJITCompiler.cpp \
+ DFGMinifiedNode.cpp \
+ DFGNodeFlags.cpp \
+ DFGOperations.cpp \
+ DFGOSREntry.cpp \
+ DFGOSRExit.cpp \
+ DFGOSRExitCompiler.cpp \
+ DFGOSRExitCompiler64.cpp \
+ DFGOSRExitCompiler32_64.cpp \
+ DFGPhase.cpp \
+ DFGPredictionPropagationPhase.cpp \
+ DFGRepatch.cpp \
+ DFGSpeculativeJIT.cpp \
+ DFGSpeculativeJIT32_64.cpp \
+ DFGSpeculativeJIT64.cpp \
+ DFGStructureCheckHoistingPhase.cpp \
+ DFGThunks.cpp \
+ DFGValueSource.cpp \
+ DFGVariableAccessDataDump.cpp \
+ DFGVariableEvent.cpp \
+ DFGVariableEventStream.cpp \
+ DFGValidate.cpp \
+ DFGVirtualRegisterAllocationPhase.cpp \
+ Disassembler.cpp \
+ AbstractPC.cpp \
+ CallFrame.cpp \
+ Interpreter.cpp \
+ JSStack.cpp \
+ ClosureCallStubRoutine.cpp \
+ ExecutableAllocatorFixedVMPool.cpp \
+ ExecutableAllocator.cpp \
+ HostCallReturnValue.cpp \
+ GCAwareJITStubRoutine.cpp \
+ JITArithmetic.cpp \
+ JITArithmetic32_64.cpp \
+ JITCall.cpp \
+ JITCall32_64.cpp \
+ JITCode.cpp \
+ JIT.cpp \
+ JITDisassembler.cpp \
+ JITExceptions.cpp \
+ JITOpcodes.cpp \
+ JITOpcodes32_64.cpp \
+ JITPropertyAccess.cpp \
+ JITPropertyAccess32_64.cpp \
+ JITStubRoutine.cpp \
+ JITStubs.cpp \
+ JumpReplacementWatchpoint.cpp \
+ ThunkGenerators.cpp \
+ LLIntCLoop.cpp \
+ LLIntData.cpp \
+ LLIntEntrypoints.cpp \
+ LLIntExceptions.cpp \
+ LLIntSlowPaths.cpp \
+ LLIntThunks.cpp \
+ LowLevelInterpreter.cpp \
+ Lexer.cpp \
+ Nodes.cpp \
+ ParserArena.cpp \
+ Parser.cpp \
+ SourceProviderCache.cpp \
+ Profile.cpp \
+ ProfileGenerator.cpp \
+ ProfileNode.cpp \
+ Profiler.cpp \
+ ArgList.cpp \
+ Arguments.cpp \
+ ArrayConstructor.cpp \
+ ArrayPrototype.cpp \
+ BooleanConstructor.cpp \
+ BooleanObject.cpp \
+ BooleanPrototype.cpp \
+ CallData.cpp \
+ CodeCache.cpp \
+ CodeSpecializationKind.cpp \
+ CommonIdentifiers.cpp \
+ Completion.cpp \
+ ConstructData.cpp \
+ DateConstructor.cpp \
+ DateConversion.cpp \
+ DateInstance.cpp \
+ DatePrototype.cpp \
+ ErrorConstructor.cpp \
+ Error.cpp \
+ ErrorInstance.cpp \
+ ErrorPrototype.cpp \
+ ExceptionHelpers.cpp \
+ Executable.cpp \
+ FunctionConstructor.cpp \
+ FunctionPrototype.cpp \
+ GCActivityCallback.cpp \
+ GetterSetter.cpp \
+ Options.cpp \
+ Identifier.cpp \
+ IndexingType.cpp \
+ InitializeThreading.cpp \
+ InternalFunction.cpp \
+ JSActivation.cpp \
+ JSAPIValueWrapper.cpp \
+ JSArray.cpp \
+ JSCell.cpp \
+ JSDateMath.cpp \
+ JSFunction.cpp \
+ JSBoundFunction.cpp \
+ JSGlobalData.cpp \
+ JSGlobalObject.cpp \
+ JSGlobalObjectFunctions.cpp \
+ JSProxy.cpp \
+ JSLock.cpp \
+ JSNotAnObject.cpp \
+ JSObject.cpp \
+ JSONObject.cpp \
+ JSPropertyNameIterator.cpp \
+ JSSegmentedVariableObject.cpp \
+ JSWithScope.cpp \
+ JSNameScope.cpp \
+ JSScope.cpp \
+ JSString.cpp \
+ JSStringJoiner.cpp \
+ JSSymbolTableObject.cpp \
+ JSValue.cpp \
+ JSVariableObject.cpp \
+ JSWrapperObject.cpp \
+ LiteralParser.cpp \
+ Lookup.cpp \
+ MathObject.cpp \
+ MemoryStatistics.cpp \
+ NameConstructor.cpp \
+ NameInstance.cpp \
+ NamePrototype.cpp \
+ NativeErrorConstructor.cpp \
+ NativeErrorPrototype.cpp \
+ NumberConstructor.cpp \
+ NumberObject.cpp \
+ NumberPrototype.cpp \
+ ObjectConstructor.cpp \
+ ObjectPrototype.cpp \
+ Operations.cpp \
+ PropertyDescriptor.cpp \
+ PropertyNameArray.cpp \
+ PropertySlot.cpp \
+ RegExpConstructor.cpp \
+ RegExpCachedResult.cpp \
+ RegExpMatchesArray.cpp \
+ RegExp.cpp \
+ RegExpObject.cpp \
+ RegExpPrototype.cpp \
+ RegExpCache.cpp \
+ SamplingCounter.cpp \
+ SmallStrings.cpp \
+ SparseArrayValueMap.cpp \
+ StrictEvalActivation.cpp \
+ StringConstructor.cpp \
+ StringObject.cpp \
+ StringPrototype.cpp \
+ StringRecursionChecker.cpp \
+ StructureChain.cpp \
+ Structure.cpp \
+ SymbolTable.cpp \
+ TimeoutChecker.cpp \
+ CodeProfile.cpp \
+ CodeProfiling.cpp \
+ YarrJIT.cpp
+
+QT_VPATH += \
+ qtwebkit/Source/JavaScriptCore/API \
+ qtwebkit/Source/JavaScriptCore/assembler \
+ qtwebkit/Source/JavaScriptCore/bytecode \
+ qtwebkit/Source/JavaScriptCore/bytecompiler \
+ qtwebkit/Source/JavaScriptCore/debugger \
+ qtwebkit/Source/JavaScriptCore/dfg \
+ qtwebkit/Source/JavaScriptCore/disassembler \
+ qtwebkit/Source/JavaScriptCore/heap \
+ qtwebkit/Source/JavaScriptCore/interpreter \
+ qtwebkit/Source/JavaScriptCore/jit \
+ qtwebkit/Source/JavaScriptCore/llint \
+ qtwebkit/Source/JavaScriptCore/parser \
+ qtwebkit/Source/JavaScriptCore/profiler \
+ qtwebkit/Source/JavaScriptCore/runtime \
+ qtwebkit/Source/JavaScriptCore/tools \
+ qtwebkit/Source/JavaScriptCore/yarr \
+
+# 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 = \
+
+
diff --git a/libports/lib/mk/qt5_network.mk b/libports/lib/mk/qt5_network.mk
new file mode 100644
index 0000000000..cde736dbbb
--- /dev/null
+++ b/libports/lib/mk/qt5_network.mk
@@ -0,0 +1,35 @@
+include $(REP_DIR)/lib/import/import-qt5_network.mk
+
+SHARED_LIB = yes
+
+# use default warning level to avoid noise when compiling contrib code
+CC_WARN =
+
+include $(REP_DIR)/lib/mk/qt5_network_generated.inc
+
+# remove unneeded files to prevent moc warnings
+COMPILER_MOC_HEADER_MAKE_ALL_FILES_FILTER_OUT = \
+ moc_qftp_p.cpp \
+ moc_qnetworkaccessdebugpipebackend_p.cpp \
+ moc_qnetworkaccessftpbackend_p.cpp \
+ moc_qnetworksession.cpp \
+ moc_qnetworkconfigmanager.cpp \
+ moc_qnetworkconfigmanager_p.cpp \
+ moc_qnetworksession_p.cpp \
+ moc_qbearerengine_p.cpp \
+ moc_qbearerplugin_p.cpp \
+ moc_qudpsocket.cpp \
+ moc_qsslsocket_openssl_p.cpp \
+
+
+COMPILER_MOC_SOURCE_MAKE_ALL_FILES_FILTER_OUT = \
+ qftp.moc
+
+include $(REP_DIR)/lib/mk/qt5.inc
+
+INC_DIR += $(REP_DIR)/contrib/$(QT5)/qtbase/include/QtNetwork/$(QT_VERSION) \
+ $(REP_DIR)/contrib/$(QT5)/qtbase/include/QtNetwork/$(QT_VERSION)/QtNetwork \
+ $(REP_DIR)/contrib/$(QT5)/qtbase/include/QtCore/$(QT_VERSION) \
+ $(REP_DIR)/contrib/$(QT5)/qtbase/include/QtCore/$(QT_VERSION)/QtCore
+
+LIBS += qt5_core zlib libc libssl
diff --git a/libports/lib/mk/qt5_network_generated.inc b/libports/lib/mk/qt5_network_generated.inc
new file mode 100644
index 0000000000..29b018c828
--- /dev/null
+++ b/libports/lib/mk/qt5_network_generated.inc
@@ -0,0 +1,171 @@
+QT_DEFINES += -DQT_NO_LIBUDEV -DQT_NO_XCB -DQT_NO_XKBCOMMON -DQT_NO_USING_NAMESPACE -DQT_BUILD_NETWORK_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 -DQT_NO_DEBUG -DQT_CORE_LIB
+
+QT_INCPATH += \
+ qtbase/include \
+ qtbase/include/QtCore \
+ qtbase/include/QtCore/5.1.0 \
+ qtbase/include/QtCore/5.1.0/QtCore \
+ qtbase/include/QtNetwork \
+ qtbase/include/QtNetwork/5.1.0 \
+ qtbase/include/QtNetwork/5.1.0/QtNetwork \
+ qtbase/mkspecs/genode-g++ \
+ qtbase/src/network \
+ qtbase/src/network/kernel \
+
+QT_SOURCES += \
+ qftp.cpp \
+ qhttpnetworkheader.cpp \
+ qhttpnetworkrequest.cpp \
+ qhttpnetworkreply.cpp \
+ qhttpnetworkconnection.cpp \
+ qhttpnetworkconnectionchannel.cpp \
+ qnetworkaccessauthenticationmanager.cpp \
+ qnetworkaccessmanager.cpp \
+ qnetworkaccesscache.cpp \
+ qnetworkaccessbackend.cpp \
+ qnetworkaccessdebugpipebackend.cpp \
+ qnetworkaccessfilebackend.cpp \
+ qnetworkaccesscachebackend.cpp \
+ qnetworkaccessftpbackend.cpp \
+ qnetworkcookie.cpp \
+ qnetworkcookiejar.cpp \
+ qnetworkrequest.cpp \
+ qnetworkreply.cpp \
+ qnetworkreplyimpl.cpp \
+ qnetworkreplydataimpl.cpp \
+ qnetworkreplyhttpimpl.cpp \
+ qnetworkreplyfileimpl.cpp \
+ qabstractnetworkcache.cpp \
+ qnetworkdiskcache.cpp \
+ qhttpthreaddelegate.cpp \
+ qhttpmultipart.cpp \
+ qnetworksession.cpp \
+ qnetworkconfigmanager.cpp \
+ qnetworkconfiguration.cpp \
+ qnetworkconfigmanager_p.cpp \
+ qbearerengine.cpp \
+ qbearerplugin.cpp \
+ qsharednetworksession.cpp \
+ qauthenticator.cpp \
+ qdnslookup.cpp \
+ qhostaddress.cpp \
+ qhostinfo.cpp \
+ qurlinfo.cpp \
+ qnetworkproxy.cpp \
+ qnetworkinterface.cpp \
+ qdnslookup_unix.cpp \
+ qhostinfo_unix.cpp \
+ qnetworkinterface_unix.cpp \
+ qnetworkproxy_generic.cpp \
+ qabstractsocketengine.cpp \
+ qhttpsocketengine.cpp \
+ qsocks5socketengine.cpp \
+ qabstractsocket.cpp \
+ qtcpsocket.cpp \
+ qudpsocket.cpp \
+ qtcpserver.cpp \
+ qlocalsocket.cpp \
+ qlocalserver.cpp \
+ qnativesocketengine.cpp \
+ qnativesocketengine_unix.cpp \
+ qlocalsocket_unix.cpp \
+ qlocalserver_unix.cpp \
+ qssl.cpp \
+ qsslcertificate.cpp \
+ qsslconfiguration.cpp \
+ qsslcipher.cpp \
+ qsslerror.cpp \
+ qsslkey.cpp \
+ qsslsocket.cpp \
+ qsslsocket_openssl.cpp \
+ qsslsocket_openssl_symbols.cpp \
+ qsslcertificateextension.cpp \
+ qsslcontext.cpp \
+ moc_qhttpnetworkreply_p.cpp \
+ moc_qnetworkaccesscache_p.cpp \
+ moc_qnetworkaccessbackend_p.cpp \
+ moc_qnetworkaccessdebugpipebackend_p.cpp \
+ moc_qnetworkaccessfilebackend_p.cpp \
+ moc_qnetworkaccessftpbackend_p.cpp \
+ moc_qnetworkcookiejar.cpp \
+ moc_qnetworkreply.cpp \
+ moc_qnetworkreplyhttpimpl_p.cpp \
+ moc_qabstractnetworkcache.cpp \
+ moc_qnetworkdiskcache.cpp \
+ moc_qhttpthreaddelegate_p.cpp \
+ moc_qhttpmultipart.cpp \
+ moc_qnetworkconfigmanager_p.cpp \
+ moc_qnetworksession_p.cpp \
+ moc_qbearerplugin_p.cpp \
+ moc_qdnslookup_p.cpp \
+ moc_qhostinfo_p.cpp \
+ moc_qabstractsocketengine_p.cpp \
+ moc_qhttpsocketengine_p.cpp \
+ moc_qsocks5socketengine_p.cpp \
+ moc_qtcpsocket.cpp \
+ moc_qudpsocket.cpp \
+ moc_qnativesocketengine_p.cpp \
+ moc_qsslsocket_openssl_p.cpp
+
+QT_VPATH += \
+ qtbase/src/network/access \
+ qtbase/src/network/bearer \
+ qtbase/src/network/kernel \
+ qtbase/src/network/socket \
+ qtbase/src/network/ssl \
+
+# 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_qftp_p.cpp \
+ moc_qhttpnetworkreply_p.cpp \
+ moc_qhttpnetworkconnection_p.cpp \
+ moc_qhttpnetworkconnectionchannel_p.cpp \
+ moc_qnetworkaccessmanager.cpp \
+ moc_qnetworkaccesscache_p.cpp \
+ moc_qnetworkaccessbackend_p.cpp \
+ moc_qnetworkaccessdebugpipebackend_p.cpp \
+ moc_qnetworkaccessfilebackend_p.cpp \
+ moc_qnetworkaccessftpbackend_p.cpp \
+ moc_qnetworkcookiejar.cpp \
+ moc_qnetworkreply.cpp \
+ moc_qnetworkreplyimpl_p.cpp \
+ moc_qnetworkreplydataimpl_p.cpp \
+ moc_qnetworkreplyhttpimpl_p.cpp \
+ moc_qnetworkreplyfileimpl_p.cpp \
+ moc_qabstractnetworkcache.cpp \
+ moc_qnetworkdiskcache.cpp \
+ moc_qhttpthreaddelegate_p.cpp \
+ moc_qhttpmultipart.cpp \
+ moc_qnetworksession.cpp \
+ moc_qnetworkconfigmanager.cpp \
+ moc_qnetworkconfigmanager_p.cpp \
+ moc_qnetworksession_p.cpp \
+ moc_qbearerengine_p.cpp \
+ moc_qbearerplugin_p.cpp \
+ moc_qdnslookup.cpp \
+ moc_qdnslookup_p.cpp \
+ moc_qhostinfo_p.cpp \
+ moc_qabstractsocketengine_p.cpp \
+ moc_qhttpsocketengine_p.cpp \
+ moc_qsocks5socketengine_p.cpp \
+ moc_qabstractsocket.cpp \
+ moc_qtcpsocket.cpp \
+ moc_qudpsocket.cpp \
+ moc_qtcpserver.cpp \
+ moc_qlocalserver.cpp \
+ moc_qlocalsocket.cpp \
+ moc_qnativesocketengine_p.cpp \
+ moc_qsslsocket.cpp \
+ moc_qsslsocket_openssl_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 = \
+ qftp.moc
+
diff --git a/libports/lib/mk/qt5_printsupport.mk b/libports/lib/mk/qt5_printsupport.mk
new file mode 100644
index 0000000000..5ed30c525b
--- /dev/null
+++ b/libports/lib/mk/qt5_printsupport.mk
@@ -0,0 +1,32 @@
+include $(REP_DIR)/lib/import/import-qt5_printsupport.mk
+
+SHARED_LIB = yes
+
+# use default warning level to avoid noise when compiling contrib code
+CC_WARN =
+
+include $(REP_DIR)/lib/mk/qt5_printsupport_generated.inc
+
+# remove unneeded files to prevent moc warnings
+COMPILER_MOC_HEADER_MAKE_ALL_FILES_FILTER_OUT = \
+ moc_qabstractprintdialog.cpp \
+ moc_qprintpreviewwidget.cpp \
+ moc_qpagesetupdialog.cpp \
+ moc_qprintdialog.cpp \
+ moc_qprintpreviewdialog.cpp \
+ moc_qpagesetupdialog_unix_p.cpp \
+
+
+COMPILER_MOC_SOURCE_MAKE_ALL_FILES_FILTER_OUT = \
+ qprintpreviewwidget.moc \
+ qprintdialog_unix.moc \
+ qprintpreviewdialog.moc \
+
+include $(REP_DIR)/lib/mk/qt5.inc
+
+INC_DIR += $(REP_DIR)/contrib/$(QT5)/qtbase/include/QtPrintSupport/$(QT_VERSION)/QtPrintSupport \
+ $(REP_DIR)/contrib/$(QT5)/qtbase/include/QtWidgets/$(QT_VERSION)/QtWidgets \
+ $(REP_DIR)/contrib/$(QT5)/qtbase/include/QtGui/$(QT_VERSION)/QtGui \
+ $(REP_DIR)/contrib/$(QT5)/qtbase/include/QtCore/$(QT_VERSION)/QtCore \
+
+LIBS += qt5_core
diff --git a/libports/lib/mk/qt5_printsupport_generated.inc b/libports/lib/mk/qt5_printsupport_generated.inc
new file mode 100644
index 0000000000..9b2d7d7d90
--- /dev/null
+++ b/libports/lib/mk/qt5_printsupport_generated.inc
@@ -0,0 +1,68 @@
+QT_DEFINES += -DQT_NO_LIBUDEV -DQT_NO_XCB -DQT_NO_XKBCOMMON -DQT_NO_USING_NAMESPACE -DQT_BUILD_PRINTSUPPORT_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 -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB
+
+QT_INCPATH += \
+ qtbase/include \
+ qtbase/include/QtCore \
+ qtbase/include/QtCore/5.1.0 \
+ qtbase/include/QtCore/5.1.0/QtCore \
+ qtbase/include/QtGui \
+ qtbase/include/QtGui/5.1.0 \
+ qtbase/include/QtGui/5.1.0/QtGui \
+ qtbase/include/QtPrintSupport \
+ qtbase/include/QtPrintSupport/5.1.0 \
+ qtbase/include/QtPrintSupport/5.1.0/QtPrintSupport \
+ qtbase/include/QtWidgets \
+ qtbase/include/QtWidgets/5.1.0 \
+ qtbase/include/QtWidgets/5.1.0/QtWidgets \
+ qtbase/mkspecs/genode-g++ \
+ qtbase/src/plugins/printsupport/cups \
+ qtbase/src/printsupport \
+ qtbase/src/printsupport/dialogs \
+
+QT_SOURCES += \
+ qpaintengine_alpha.cpp \
+ qpaintengine_preview.cpp \
+ qprintengine_pdf.cpp \
+ qprinter.cpp \
+ qprinterinfo.cpp \
+ qplatformprintplugin.cpp \
+ qplatformprintersupport.cpp \
+ qprintpreviewwidget.cpp \
+ qprintdialog_unix.cpp \
+ qpagesetupdialog_unix.cpp \
+ qabstractprintdialog.cpp \
+ qpagesetupdialog.cpp \
+ qprintpreviewdialog.cpp \
+ qrc_qprintdialog.cpp \
+ moc_qplatformprintplugin.cpp \
+ moc_qabstractprintdialog.cpp \
+ moc_qpagesetupdialog_unix_p.cpp
+
+QT_VPATH += \
+ qtbase/src/printsupport/dialogs \
+ qtbase/src/printsupport/kernel \
+ qtbase/src/printsupport/widgets \
+
+# 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_qplatformprintplugin.cpp \
+ moc_qprintpreviewwidget.cpp \
+ moc_qabstractprintdialog.cpp \
+ moc_qpagesetupdialog.cpp \
+ moc_qprintdialog.cpp \
+ moc_qprintpreviewdialog.cpp \
+ moc_qpagesetupdialog_unix_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 = \
+ qprintpreviewwidget.moc \
+ qprintdialog_unix.moc \
+ qprintpreviewdialog.moc
+
diff --git a/libports/lib/mk/qt5_qnitpickerviewwidget.mk b/libports/lib/mk/qt5_qnitpickerviewwidget.mk
new file mode 100644
index 0000000000..7274fb1445
--- /dev/null
+++ b/libports/lib/mk/qt5_qnitpickerviewwidget.mk
@@ -0,0 +1,10 @@
+SHARED_LIB = yes
+
+SRC_CC = qnitpickerviewwidget.cpp
+
+HEADERS += qnitpickerviewwidget.h
+
+vpath %.h $(REP_DIR)/include/qt5/qnitpickerviewwidget
+vpath %.cpp $(REP_DIR)/src/lib/qt5/qnitpickerviewwidget
+
+LIBS += qt5_gui qt5_widgets qt5_core libc
diff --git a/libports/lib/mk/qt5_qpa_nitpicker.mk b/libports/lib/mk/qt5_qpa_nitpicker.mk
new file mode 100644
index 0000000000..fab439a693
--- /dev/null
+++ b/libports/lib/mk/qt5_qpa_nitpicker.mk
@@ -0,0 +1,38 @@
+include $(REP_DIR)/lib/import/import-qt5_qpa_nitpicker.mk
+
+# get the correct harfbuzz header included
+QT_DEFINES += -DQT_BUILD_GUI_LIB
+
+SRC_CC = qgenericunixeventdispatcher.cpp \
+ qunixeventdispatcher.cpp \
+ qbasicfontdatabase.cpp \
+ qfontengine_ft.cpp
+
+SRC_CC += main.cpp \
+ qnitpickerintegration.cpp \
+ qnitpickerwindowsurface.cpp \
+ moc_qnitpickerplatformwindow.cpp \
+ moc_qnitpickerwindowsurface.cpp \
+ moc_qnitpickerintegrationplugin.cpp \
+ qevdevkeyboardhandler.cpp \
+ moc_qunixeventdispatcher_qpa_p.cpp \
+ moc_qevdevkeyboardhandler_p.cpp
+
+INC_DIR += $(REP_DIR)/contrib/$(QT5)/qtbase/src/platformsupport/eventdispatchers \
+ $(REP_DIR)/contrib/$(QT5)/qtbase/src/platformsupport/input/evdevkeyboard \
+ $(REP_DIR)/contrib/$(QT5)/qtbase/src/platformsupport/fontdatabases/basic \
+ $(REP_DIR)/contrib/$(QT5)/qtbase/src/3rdparty/harfbuzz/src \
+ $(REP_DIR)/src/lib/qt5/qtbase/src/plugins/platforms/nitpicker \
+ $(REP_DIR)/contrib/$(QT5)/qtbase/include/QtGui/$(QT_VERSION) \
+ $(REP_DIR)/contrib/$(QT5)/qtbase/include/QtGui/$(QT_VERSION)/QtGui \
+ $(REP_DIR)/contrib/$(QT5)/qtbase/include/QtCore/$(QT_VERSION) \
+ $(REP_DIR)/contrib/$(QT5)/qtbase/include/QtCore/$(QT_VERSION)/QtCore
+
+LIBS += qt5_xml qt5_gui qt5_core libm freetype
+
+vpath % $(call select_from_repositories,contrib/$(QT5)/qtbase/src/platformsupport/eventdispatchers)
+vpath % $(call select_from_repositories,contrib/$(QT5)/qtbase/src/platformsupport/input/evdevkeyboard)
+vpath % $(call select_from_repositories,contrib/$(QT5)/qtbase/src/platformsupport/fontdatabases/basic)
+vpath % $(call select_from_repositories,contrib/$(QT5)/qtbase/src/gui/text)
+vpath % $(call select_from_repositories,src/lib/qt5/qtbase/src/plugins/platforms/nitpicker)
+
diff --git a/libports/lib/mk/qt5_qpluginwidget.mk b/libports/lib/mk/qt5_qpluginwidget.mk
new file mode 100644
index 0000000000..4185e93e62
--- /dev/null
+++ b/libports/lib/mk/qt5_qpluginwidget.mk
@@ -0,0 +1,10 @@
+SHARED_LIB = yes
+
+SRC_CC = qpluginwidget.cpp
+
+HEADERS += qpluginwidget.h
+
+vpath %.h $(REP_DIR)/include/qt5/qpluginwidget
+vpath %.cpp $(REP_DIR)/src/lib/qt5/qpluginwidget
+
+LIBS += qt5_gui qt5_widgets qt5_network qt5_qnitpickerviewwidget qt5_core libc zlib
diff --git a/libports/lib/mk/qt5_script.mk b/libports/lib/mk/qt5_script.mk
new file mode 100644
index 0000000000..fcf5b5bad0
--- /dev/null
+++ b/libports/lib/mk/qt5_script.mk
@@ -0,0 +1,22 @@
+include $(REP_DIR)/lib/import/import-qt5_script.mk
+
+SHARED_LIB = yes
+
+# use default warning level to avoid noise when compiling contrib code
+CC_WARN =
+
+include $(REP_DIR)/lib/mk/qt5_script_generated.inc
+
+QT_INCPATH += qtscript/src/script/api \
+
+# remove unneeded files to prevent moc warnings
+COMPILER_MOC_HEADER_MAKE_ALL_FILES_FILTER_OUT = \
+
+COMPILER_MOC_SOURCE_MAKE_ALL_FILES_FILTER_OUT = \
+
+include $(REP_DIR)/lib/mk/qt5.inc
+
+INC_DIR += $(REP_DIR)/contrib/$(QT5)/qtscript/include/QtScript/$(QT_VERSION)/QtScript \
+ $(REP_DIR)/contrib/$(QT5)/qtbase/include/QtCore/$(QT_VERSION)/QtCore \
+
+LIBS += qt5_core pthread
diff --git a/libports/lib/mk/qt5_script_generated.inc b/libports/lib/mk/qt5_script_generated.inc
new file mode 100644
index 0000000000..cd81bac2d4
--- /dev/null
+++ b/libports/lib/mk/qt5_script_generated.inc
@@ -0,0 +1,266 @@
+QT_DEFINES += -DQT_NO_LIBUDEV -DQT_NO_XCB -DQT_NO_XKBCOMMON -DJSC=QTJSC -Djscyyparse=qtjscyyparse -Djscyylex=qtjscyylex -Djscyyerror=qtjscyyerror -DWTF=QTWTF -DQT_NO_USING_NAMESPACE -DQLALR_NO_QSCRIPTGRAMMAR_DEBUG_INFO -DQT_BUILD_SCRIPT_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 -DBUILDING_QT__=1 -DNDEBUG -DLOG_DISABLED=1 -DBUILDING_QT__ -DBUILDING_JavaScriptCore -DBUILDING_WTF -DWTF_USE_JAVASCRIPTCORE_BINDINGS=1 -DWTF_CHANGES=1 -DNDEBUG -DJS_NO_EXPORT -DQT_NO_EXCEPTIONS -DQT_NO_DEBUG -DQT_CORE_LIB
+
+QT_INCPATH += \
+ qtbase/include \
+ qtbase/include/QtCore \
+ qtbase/include/QtCore/5.1.0 \
+ qtbase/include/QtCore/5.1.0/QtCore \
+ qtbase/mkspecs/genode-g++ \
+ qtscript/include \
+ qtscript/include/QtScript \
+ qtscript/include/QtScript/5.1.0 \
+ qtscript/include/QtScript/5.1.0/QtScript \
+ qtscript/src/3rdparty/javascriptcore \
+ qtscript/src/3rdparty/javascriptcore/JavaScriptCore \
+ qtscript/src/3rdparty/javascriptcore/JavaScriptCore/API \
+ qtscript/src/3rdparty/javascriptcore/JavaScriptCore/assembler \
+ qtscript/src/3rdparty/javascriptcore/JavaScriptCore/bytecode \
+ qtscript/src/3rdparty/javascriptcore/JavaScriptCore/bytecompiler \
+ qtscript/src/3rdparty/javascriptcore/JavaScriptCore/debugger \
+ qtscript/src/3rdparty/javascriptcore/JavaScriptCore/ForwardingHeaders \
+ qtscript/src/3rdparty/javascriptcore/JavaScriptCore/generated \
+ qtscript/src/3rdparty/javascriptcore/JavaScriptCore/interpreter \
+ qtscript/src/3rdparty/javascriptcore/JavaScriptCore/jit \
+ qtscript/src/3rdparty/javascriptcore/JavaScriptCore/parser \
+ qtscript/src/3rdparty/javascriptcore/JavaScriptCore/pcre \
+ qtscript/src/3rdparty/javascriptcore/JavaScriptCore/profiler \
+ qtscript/src/3rdparty/javascriptcore/JavaScriptCore/runtime \
+ qtscript/src/3rdparty/javascriptcore/JavaScriptCore/tmp \
+ qtscript/src/3rdparty/javascriptcore/JavaScriptCore/wrec \
+ qtscript/src/3rdparty/javascriptcore/JavaScriptCore/wtf \
+ qtscript/src/3rdparty/javascriptcore/JavaScriptCore/wtf/symbian \
+ qtscript/src/3rdparty/javascriptcore/JavaScriptCore/wtf/unicode \
+ qtscript/src/3rdparty/javascriptcore/JavaScriptCore/yarr \
+ qtscript/src/3rdparty/javascriptcore/WebKit/qt/Api \
+ qtscript/src/script \
+ qtscript/src/script/../3rdparty/javascriptcore/JavaScriptCore/unicode \
+ qtscript/src/script/parser \
+
+QT_SOURCES += \
+ pcre_compile.cpp \
+ pcre_exec.cpp \
+ pcre_tables.cpp \
+ pcre_ucp_searchfuncs.cpp \
+ pcre_xclass.cpp \
+ JSBase.cpp \
+ JSCallbackConstructor.cpp \
+ JSCallbackFunction.cpp \
+ JSCallbackObject.cpp \
+ JSClassRef.cpp \
+ JSContextRef.cpp \
+ JSObjectRef.cpp \
+ JSStringRef.cpp \
+ JSValueRef.cpp \
+ OpaqueJSString.cpp \
+ ARMAssembler.cpp \
+ MacroAssemblerARM.cpp \
+ CodeBlock.cpp \
+ JumpTable.cpp \
+ Opcode.cpp \
+ SamplingTool.cpp \
+ StructureStubInfo.cpp \
+ BytecodeGenerator.cpp \
+ NodesCodegen.cpp \
+ DebuggerActivation.cpp \
+ DebuggerCallFrame.cpp \
+ Debugger.cpp \
+ CallFrame.cpp \
+ Interpreter.cpp \
+ RegisterFile.cpp \
+ ExecutableAllocatorFixedVMPool.cpp \
+ ExecutableAllocatorPosix.cpp \
+ ExecutableAllocatorSymbian.cpp \
+ ExecutableAllocatorWin.cpp \
+ ExecutableAllocator.cpp \
+ JITArithmetic.cpp \
+ JITCall.cpp \
+ JIT.cpp \
+ JITOpcodes.cpp \
+ JITPropertyAccess.cpp \
+ JITStubs.cpp \
+ Lexer.cpp \
+ Nodes.cpp \
+ ParserArena.cpp \
+ Parser.cpp \
+ Profile.cpp \
+ ProfileGenerator.cpp \
+ ProfileNode.cpp \
+ Profiler.cpp \
+ ArgList.cpp \
+ Arguments.cpp \
+ ArrayConstructor.cpp \
+ ArrayPrototype.cpp \
+ BooleanConstructor.cpp \
+ BooleanObject.cpp \
+ BooleanPrototype.cpp \
+ CallData.cpp \
+ Collector.cpp \
+ CommonIdentifiers.cpp \
+ Completion.cpp \
+ ConstructData.cpp \
+ DateConstructor.cpp \
+ DateConversion.cpp \
+ DateInstance.cpp \
+ DatePrototype.cpp \
+ ErrorConstructor.cpp \
+ Error.cpp \
+ ErrorInstance.cpp \
+ ErrorPrototype.cpp \
+ ExceptionHelpers.cpp \
+ Executable.cpp \
+ FunctionConstructor.cpp \
+ FunctionPrototype.cpp \
+ GetterSetter.cpp \
+ GlobalEvalFunction.cpp \
+ Identifier.cpp \
+ InitializeThreading.cpp \
+ InternalFunction.cpp \
+ JSActivation.cpp \
+ JSAPIValueWrapper.cpp \
+ JSArray.cpp \
+ JSByteArray.cpp \
+ JSCell.cpp \
+ JSFunction.cpp \
+ JSGlobalData.cpp \
+ JSGlobalObject.cpp \
+ JSGlobalObjectFunctions.cpp \
+ JSImmediate.cpp \
+ JSLock.cpp \
+ JSNotAnObject.cpp \
+ JSNumberCell.cpp \
+ JSObject.cpp \
+ JSONObject.cpp \
+ JSPropertyNameIterator.cpp \
+ JSStaticScopeObject.cpp \
+ JSString.cpp \
+ JSValue.cpp \
+ JSVariableObject.cpp \
+ JSWrapperObject.cpp \
+ LiteralParser.cpp \
+ Lookup.cpp \
+ MarkStackPosix.cpp \
+ MarkStackSymbian.cpp \
+ MarkStackWin.cpp \
+ MarkStack.cpp \
+ MathObject.cpp \
+ NativeErrorConstructor.cpp \
+ NativeErrorPrototype.cpp \
+ NumberConstructor.cpp \
+ NumberObject.cpp \
+ NumberPrototype.cpp \
+ ObjectConstructor.cpp \
+ ObjectPrototype.cpp \
+ Operations.cpp \
+ PropertyDescriptor.cpp \
+ PropertyNameArray.cpp \
+ PropertySlot.cpp \
+ PrototypeFunction.cpp \
+ RegExpConstructor.cpp \
+ RegExp.cpp \
+ RegExpObject.cpp \
+ RegExpPrototype.cpp \
+ ScopeChain.cpp \
+ SmallStrings.cpp \
+ StringConstructor.cpp \
+ StringObject.cpp \
+ StringPrototype.cpp \
+ StructureChain.cpp \
+ Structure.cpp \
+ TimeoutChecker.cpp \
+ UString.cpp \
+ UStringImpl.cpp \
+ Assertions.cpp \
+ ByteArray.cpp \
+ CurrentTime.cpp \
+ DateMath.cpp \
+ dtoa.cpp \
+ FastMalloc.cpp \
+ HashTable.cpp \
+ MainThread.cpp \
+ MainThreadQt.cpp \
+ ThreadingQt.cpp \
+ RandomNumber.cpp \
+ RefCountedLeakCounter.cpp \
+ BlockAllocatorSymbian.cpp \
+ RegisterFileAllocatorSymbian.cpp \
+ ThreadingNone.cpp \
+ Threading.cpp \
+ TypeTraits.cpp \
+ CollatorDefault.cpp \
+ CollatorICU.cpp \
+ UTF8.cpp \
+ RegexCompiler.cpp \
+ RegexInterpreter.cpp \
+ RegexJIT.cpp \
+ Grammar.cpp \
+ TCSystemAlloc.cpp \
+ qscriptclass.cpp \
+ qscriptclasspropertyiterator.cpp \
+ qscriptcontext.cpp \
+ qscriptcontextinfo.cpp \
+ qscriptengine.cpp \
+ qscriptengineagent.cpp \
+ qscriptextensionplugin.cpp \
+ qscriptprogram.cpp \
+ qscriptstring.cpp \
+ qscriptvalue.cpp \
+ qscriptvalueiterator.cpp \
+ qscriptable.cpp \
+ qscriptfunction.cpp \
+ qscriptobject.cpp \
+ qscriptclassobject.cpp \
+ qscriptvariant.cpp \
+ qscriptqobject.cpp \
+ qscriptglobalobject.cpp \
+ qscriptactivationobject.cpp \
+ qscriptstaticscopeobject.cpp \
+ qscriptdeclarativeobject.cpp \
+ qscriptdeclarativeclass.cpp \
+ qscriptast.cpp \
+ qscriptastvisitor.cpp \
+ qscriptgrammar.cpp \
+ qscriptsyntaxchecker.cpp \
+ qscriptlexer.cpp \
+ moc_qscriptextensionplugin.cpp
+
+QT_VPATH += \
+ qtscript/src/3rdparty/javascriptcore/JavaScriptCore/API \
+ qtscript/src/3rdparty/javascriptcore/JavaScriptCore/assembler \
+ qtscript/src/3rdparty/javascriptcore/JavaScriptCore/bytecode \
+ qtscript/src/3rdparty/javascriptcore/JavaScriptCore/bytecompiler \
+ qtscript/src/3rdparty/javascriptcore/JavaScriptCore/debugger \
+ qtscript/src/3rdparty/javascriptcore/JavaScriptCore/generated \
+ qtscript/src/3rdparty/javascriptcore/JavaScriptCore/interpreter \
+ qtscript/src/3rdparty/javascriptcore/JavaScriptCore/jit \
+ qtscript/src/3rdparty/javascriptcore/JavaScriptCore/parser \
+ qtscript/src/3rdparty/javascriptcore/JavaScriptCore/pcre \
+ qtscript/src/3rdparty/javascriptcore/JavaScriptCore/profiler \
+ qtscript/src/3rdparty/javascriptcore/JavaScriptCore/runtime \
+ qtscript/src/3rdparty/javascriptcore/JavaScriptCore/wtf \
+ qtscript/src/3rdparty/javascriptcore/JavaScriptCore/wtf/qt \
+ qtscript/src/3rdparty/javascriptcore/JavaScriptCore/wtf/symbian \
+ qtscript/src/3rdparty/javascriptcore/JavaScriptCore/wtf/unicode \
+ qtscript/src/3rdparty/javascriptcore/JavaScriptCore/wtf/unicode/icu \
+ qtscript/src/3rdparty/javascriptcore/JavaScriptCore/yarr \
+ qtscript/src/script/api \
+ qtscript/src/script/bridge \
+ qtscript/src/script/parser \
+
+# 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_qscriptengine.cpp \
+ moc_qscriptextensionplugin.cpp \
+ moc_qscriptqobject_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 = \
+ MainThreadQt.moc \
+ ThreadingQt.moc
+
diff --git a/libports/lib/mk/qt5_scriptclassic.mk b/libports/lib/mk/qt5_scriptclassic.mk
new file mode 100644
index 0000000000..bf47294cdd
--- /dev/null
+++ b/libports/lib/mk/qt5_scriptclassic.mk
@@ -0,0 +1,31 @@
+include $(REP_DIR)/lib/import/import-qt5_scriptclassic.mk
+
+SHARED_LIB = yes
+
+# use default warning level to avoid noise when compiling contrib code
+CC_WARN =
+
+include $(REP_DIR)/lib/mk/qt5_scriptclassic_generated.inc
+
+include $(REP_DIR)/lib/mk/qt5.inc
+
+INC_DIR += $(REP_DIR)/src/lib/qt5/qtbase/mkspecs/qws/genode-generic-g++ \
+ $(REP_DIR)/include/qt5 \
+ $(REP_DIR)/contrib/include \
+ $(REP_DIR)/include/qt5/qtbase/QtCore \
+ $(REP_DIR)/contrib/qtbase/include/QtCore \
+ $(REP_DIR)/include/qt5/QtCore/private \
+ $(REP_DIR)/contrib/qtbase/include/QtCore/private \
+ $(REP_DIR)/include/qt5/QtScript \
+ $(REP_DIR)/contrib/qtscriptclassic-1.0_1-opensource/include/QtScript \
+ $(REP_DIR)/contrib/qtscriptclassic-1.0_1-opensource/src \
+ $(REP_DIR)/src/lib/qt5/qtbase/src/corelib/global
+
+LIBS += qt5_core libc
+
+vpath % $(REP_DIR)/include/qt5/QtScript
+vpath % $(REP_DIR)/include/qt5/QtScript/private
+
+vpath % $(REP_DIR)/src/lib/qt5/qtbase/src/script
+
+vpath % $(REP_DIR)/contrib/qtscriptclassic-1.0_1-opensource/src
diff --git a/libports/lib/mk/qt5_scriptclassic_generated.inc b/libports/lib/mk/qt5_scriptclassic_generated.inc
new file mode 100644
index 0000000000..7a51aec133
--- /dev/null
+++ b/libports/lib/mk/qt5_scriptclassic_generated.inc
@@ -0,0 +1,60 @@
+QT_SOURCES = \
+ qscriptasm.cpp \
+ qscriptast.cpp \
+ qscriptastvisitor.cpp \
+ qscriptcompiler.cpp \
+ qscriptecmaarray.cpp \
+ qscriptecmaboolean.cpp \
+ qscriptecmacore.cpp \
+ qscriptecmadate.cpp \
+ qscriptecmafunction.cpp \
+ qscriptecmaglobal.cpp \
+ qscriptecmamath.cpp \
+ qscriptecmanumber.cpp \
+ qscriptecmaobject.cpp \
+ qscriptecmaregexp.cpp \
+ qscriptecmastring.cpp \
+ qscriptecmaerror.cpp \
+ qscriptcontext_p.cpp \
+ qscriptengine.cpp \
+ qscriptengine_p.cpp \
+ qscriptengineagent.cpp \
+ qscriptextenumeration.cpp \
+ qscriptextvariant.cpp \
+ qscriptcontext.cpp \
+ qscriptcontextinfo.cpp \
+ qscriptfunction.cpp \
+ qscriptgrammar.cpp \
+ qscriptlexer.cpp \
+ qscriptclassdata.cpp \
+ qscriptparser.cpp \
+ qscriptprettypretty.cpp \
+ qscriptxmlgenerator.cpp \
+ qscriptsyntaxchecker.cpp \
+ qscriptstring.cpp \
+ qscriptclass.cpp \
+ qscriptclasspropertyiterator.cpp \
+ qscriptvalueiteratorimpl.cpp \
+ qscriptvalueiterator.cpp \
+ qscriptvalueimpl.cpp \
+ qscriptvalue.cpp \
+ qscriptextqobject.cpp \
+ qscriptable.cpp \
+ qscriptextensionplugin.cpp \
+ moc_qscriptextensionplugin.cpp
+
+# 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 spec-qt4.mk)
+# extracted from 'compiler_moc_header_make_all' target
+
+COMPILER_MOC_HEADER_MAKE_ALL_FILES = \
+ moc_qscriptengine.cpp \
+ moc_qscriptextensionplugin.cpp
+
+# source files generated from existing source files ('%.moc: %.cpp' rule in spec-qt4.mk)
+# extracted from 'compiler_moc_source_make_all' rule
+
+COMPILER_MOC_SOURCE_MAKE_ALL_FILES = \
+ qscriptextqobject.moc
diff --git a/libports/lib/mk/qt5_sql.mk b/libports/lib/mk/qt5_sql.mk
new file mode 100644
index 0000000000..a728cef3e8
--- /dev/null
+++ b/libports/lib/mk/qt5_sql.mk
@@ -0,0 +1,20 @@
+include $(REP_DIR)/lib/import/import-qt5_sql.mk
+
+SHARED_LIB = yes
+
+# use default warning level to avoid noise when compiling contrib code
+CC_WARN =
+
+include $(REP_DIR)/lib/mk/qt5_sql_generated.inc
+
+# remove unneeded files to prevent moc warnings
+COMPILER_MOC_HEADER_MAKE_ALL_FILES_FILTER_OUT = \
+
+COMPILER_MOC_SOURCE_MAKE_ALL_FILES_FILTER_OUT = \
+
+include $(REP_DIR)/lib/mk/qt5.inc
+
+INC_DIR += $(REP_DIR)/contrib/$(QT5)/qtbase/include/QtSql/$(QT_VERSION)/QtSql \
+ $(REP_DIR)/contrib/$(QT5)/qtbase/include/QtCore/$(QT_VERSION)/QtCore
+
+LIBS += qt5_core
diff --git a/libports/lib/mk/qt5_sql_generated.inc b/libports/lib/mk/qt5_sql_generated.inc
new file mode 100644
index 0000000000..a336ad8e94
--- /dev/null
+++ b/libports/lib/mk/qt5_sql_generated.inc
@@ -0,0 +1,57 @@
+QT_DEFINES += -DQT_NO_LIBUDEV -DQT_NO_XCB -DQT_NO_XKBCOMMON -DQT_NO_USING_NAMESPACE -DQT_BUILD_SQL_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_CAST_FROM_ASCII -DQT_NO_EXCEPTIONS -DQT_NO_DEBUG -DQT_CORE_LIB
+
+QT_INCPATH += \
+ qtbase/include \
+ qtbase/include/QtCore \
+ qtbase/include/QtCore/5.1.0 \
+ qtbase/include/QtCore/5.1.0/QtCore \
+ qtbase/include/QtSql \
+ qtbase/include/QtSql/5.1.0 \
+ qtbase/include/QtSql/5.1.0/QtSql \
+ qtbase/mkspecs/genode-g++ \
+ qtbase/src/sql \
+
+QT_SOURCES += \
+ qsqlquery.cpp \
+ qsqldatabase.cpp \
+ qsqlfield.cpp \
+ qsqlrecord.cpp \
+ qsqldriver.cpp \
+ qsqldriverplugin.cpp \
+ qsqlerror.cpp \
+ qsqlresult.cpp \
+ qsqlindex.cpp \
+ qsqlcachedresult.cpp \
+ qsqlquerymodel.cpp \
+ qsqltablemodel.cpp \
+ qsqlrelationaldelegate.cpp \
+ qsqlrelationaltablemodel.cpp \
+ moc_qsqldriver.cpp \
+ moc_qsqldriverplugin.cpp \
+ moc_qsqlquerymodel.cpp \
+ moc_qsqltablemodel.cpp \
+ moc_qsqlrelationaltablemodel.cpp
+
+QT_VPATH += \
+ qtbase/src/sql/kernel \
+ qtbase/src/sql/models \
+
+# 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_qsqldriver.cpp \
+ moc_qsqldriverplugin.cpp \
+ moc_qsqlquerymodel.cpp \
+ moc_qsqltablemodel.cpp \
+ moc_qsqlrelationaltablemodel.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/libports/lib/mk/qt5_ui_tools.mk b/libports/lib/mk/qt5_ui_tools.mk
new file mode 100644
index 0000000000..7abf4454de
--- /dev/null
+++ b/libports/lib/mk/qt5_ui_tools.mk
@@ -0,0 +1,17 @@
+include $(REP_DIR)/lib/import/import-qt5_ui_tools.mk
+
+SHARED_LIB = yes
+
+# use default warning level to avoid noise when compiling contrib code
+CC_WARN =
+
+include $(REP_DIR)/lib/mk/qt5_ui_tools_generated.inc
+
+# remove unneeded files to prevent moc warnings
+COMPILER_MOC_HEADER_MAKE_ALL_FILES_FILTER_OUT = \
+
+COMPILER_MOC_SOURCE_MAKE_ALL_FILES_FILTER_OUT = \
+
+include $(REP_DIR)/lib/mk/qt5.inc
+
+LIBS += qt5_widgets qt5_core
diff --git a/libports/lib/mk/qt5_ui_tools_generated.inc b/libports/lib/mk/qt5_ui_tools_generated.inc
new file mode 100644
index 0000000000..37cc8de2c6
--- /dev/null
+++ b/libports/lib/mk/qt5_ui_tools_generated.inc
@@ -0,0 +1,47 @@
+QT_DEFINES += -DQT_NO_LIBUDEV -DQT_NO_XCB -DQT_NO_XKBCOMMON -DQT_BUILD_UITOOLS_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 -DQFORMINTERNAL_NAMESPACE -DQT_DESIGNER_STATIC -DQT_DESIGNER -DQT_NO_EXCEPTIONS -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB
+
+QT_INCPATH += \
+ qtbase/include \
+ qtbase/include/QtCore \
+ qtbase/include/QtGui \
+ qtbase/include/QtWidgets \
+ qtbase/mkspecs/genode-g++ \
+ qttools/include \
+ qttools/include/QtUiTools \
+ qttools/include/QtUiTools/5.1.0 \
+ qttools/include/QtUiTools/5.1.0/QtUiTools \
+ qttools/src/designer/src/lib/uilib \
+ qttools/src/designer/src/uitools \
+
+QT_SOURCES += \
+ quiloader.cpp \
+ abstractformbuilder.cpp \
+ formbuilder.cpp \
+ ui4.cpp \
+ properties.cpp \
+ formbuilderextra.cpp \
+ resourcebuilder.cpp \
+ textbuilder.cpp \
+ moc_quiloader.cpp \
+ moc_properties_p.cpp
+
+QT_VPATH += \
+ qttools/src/designer/src/lib/uilib \
+ qttools/src/designer/src/uitools \
+
+# 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_quiloader.cpp \
+ moc_properties_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 = \
+ quiloader.moc
+
diff --git a/libports/lib/mk/qt5_version.inc b/libports/lib/mk/qt5_version.inc
new file mode 100644
index 0000000000..a1671738c3
--- /dev/null
+++ b/libports/lib/mk/qt5_version.inc
@@ -0,0 +1,2 @@
+QT_VERSION := 5.1.0
+QT5 := qt-everywhere-opensource-src-$(QT_VERSION)
diff --git a/libports/lib/mk/qt5_webcore.mk b/libports/lib/mk/qt5_webcore.mk
new file mode 100644
index 0000000000..06dea9831e
--- /dev/null
+++ b/libports/lib/mk/qt5_webcore.mk
@@ -0,0 +1,27 @@
+include $(REP_DIR)/lib/import/import-qt5_webcore.mk
+
+SHARED_LIB = yes
+
+# additional defines for the Genode version
+CC_OPT += -DSQLITE_NO_SYNC=1 -DSQLITE_THREADSAFE=0
+
+# enable C++ functions that use C99 math functions (disabled by default in the Genode tool chain)
+CC_CXX_OPT += -D_GLIBCXX_USE_C99_MATH
+
+# use default warning level to avoid noise when compiling contrib code
+CC_WARN = -Wno-deprecated-declarations
+
+CC_OPT_sqlite3 += -Wno-int-to-pointer-cast -Wno-pointer-to-int-cast
+
+# make sure that the correct "Comment.h" file gets included
+QT_INCPATH := qtwebkit/Source/WebCore/dom
+
+include $(REP_DIR)/lib/mk/qt5_webcore_generated.inc
+
+QT_INCPATH += qtwebkit/Source/WebCore/generated
+
+QT_VPATH += qtwebkit/Source/WebCore/generated
+
+include $(REP_DIR)/lib/mk/qt5.inc
+
+LIBS += qt5_wtf qt5_jscore qt5_sql qt5_network qt5_core icu jpeg libpng zlib libc libm
diff --git a/libports/lib/mk/qt5_webcore_generated.inc b/libports/lib/mk/qt5_webcore_generated.inc
new file mode 100644
index 0000000000..834caa7945
--- /dev/null
+++ b/libports/lib/mk/qt5_webcore_generated.inc
@@ -0,0 +1,1935 @@
+QT_DEFINES += -DQT_NO_LIBUDEV -DQT_NO_XCB -DQT_NO_XKBCOMMON -DSQLITE_CORE -DSQLITE_OMIT_LOAD_EXTENSION -DSQLITE_OMIT_COMPLETE -DBUILDING_QT__=1 -DNDEBUG -DENABLE_3D_RENDERING=1 -DENABLE_BLOB=1 -DENABLE_CHANNEL_MESSAGING=1 -DENABLE_CSS_BOX_DECORATION_BREAK=1 -DENABLE_CSS_COMPOSITING=1 -DENABLE_CSS_EXCLUSIONS=1 -DENABLE_CSS_FILTERS=1 -DENABLE_CSS_IMAGE_SET=1 -DENABLE_CSS_REGIONS=1 -DENABLE_CSS_STICKY_POSITION=1 -DENABLE_DATALIST_ELEMENT=1 -DENABLE_DETAILS_ELEMENT=1 -DENABLE_FAST_MOBILE_SCROLLING=1 -DENABLE_FILTERS=1 -DENABLE_FTPDIR=1 -DENABLE_GESTURE_EVENTS=1 -DENABLE_ICONDATABASE=1 -DENABLE_IFRAME_SEAMLESS=1 -DENABLE_INPUT_TYPE_COLOR=1 -DENABLE_INSPECTOR=1 -DENABLE_INSPECTOR_SERVER=1 -DENABLE_JAVASCRIPT_DEBUGGER=1 -DENABLE_LEGACY_NOTIFICATIONS=1 -DENABLE_LEGACY_VIEWPORT_ADAPTION=1 -DENABLE_LEGACY_VENDOR_PREFIXES=1 -DENABLE_LINK_PREFETCH=1 -DENABLE_METER_ELEMENT=1 -DENABLE_MHTML=1 -DENABLE_MUTATION_OBSERVERS=1 -DENABLE_NOTIFICATIONS=1 -DENABLE_PAGE_VISIBILITY_API=1 -DENABLE_PROGRESS_ELEMENT=1 -DENABLE_RESOLUTION_MEDIA_QUERY=1 -DENABLE_REQUEST_ANIMATION_FRAME=1 -DENABLE_SHARED_WORKERS=1 -DENABLE_SMOOTH_SCROLLING=1 -DENABLE_SQL_DATABASE=1 -DENABLE_SVG=1 -DENABLE_SVG_FONTS=1 -DENABLE_TOUCH_ADJUSTMENT=1 -DENABLE_TOUCH_EVENTS=1 -DENABLE_WEB_SOCKETS=1 -DENABLE_WEB_TIMING=1 -DENABLE_WORKERS=1 -DENABLE_XHR_TIMEOUT=1 -DWTF_USE_TILED_BACKING_STORE=1 -DHAVE_QTPRINTSUPPORT=1 -DHAVE_QSTYLE=1 -DHAVE_QTTESTLIB=1 -DWTF_USE_LIBJPEG=1 -DWTF_USE_LIBPNG=1 -DPLUGIN_ARCHITECTURE_UNSUPPORTED=1 -DENABLE_TOUCH_SLIDER=1 -DENABLE_ACCELERATED_2D_CANVAS=0 -DENABLE_ANIMATION_API=0 -DENABLE_BATTERY_STATUS=0 -DENABLE_CSP_NEXT=0 -DENABLE_CSS_GRID_LAYOUT=0 -DENABLE_CSS_HIERARCHIES=0 -DENABLE_CSS_IMAGE_ORIENTATION=0 -DENABLE_CSS_IMAGE_RESOLUTION=0 -DENABLE_CSS_SHADERS=0 -DENABLE_CSS_VARIABLES=0 -DENABLE_CSS3_BACKGROUND=0 -DENABLE_CSS3_CONDITIONAL_RULES=0 -DENABLE_CSS3_TEXT=0 -DENABLE_DASHBOARD_SUPPORT=0 -DENABLE_DATAGRID=0 -DENABLE_DATA_TRANSFER_ITEMS=0 -DENABLE_DEVICE_ORIENTATION=0 -DENABLE_DIRECTORY_UPLOAD=0 -DENABLE_DOWNLOAD_ATTRIBUTE=0 -DENABLE_FILE_SYSTEM=0 -DENABLE_FULLSCREEN_API=0 -DENABLE_GAMEPAD=0 -DENABLE_GEOLOCATION=0 -DENABLE_HIGH_DPI_CANVAS=0 -DENABLE_INDEXED_DATABASE=0 -DENABLE_INPUT_SPEECH=0 -DENABLE_INPUT_TYPE_DATE=0 -DENABLE_INPUT_TYPE_DATETIME=0 -DENABLE_INPUT_TYPE_DATETIMELOCAL=0 -DENABLE_INPUT_TYPE_MONTH=0 -DENABLE_INPUT_TYPE_TIME=0 -DENABLE_INPUT_TYPE_WEEK=0 -DENABLE_LEGACY_CSS_VENDOR_PREFIXES=0 -DENABLE_LINK_PRERENDER=0 -DENABLE_MATHML=0 -DENABLE_MEDIA_SOURCE=0 -DENABLE_MEDIA_STATISTICS=0 -DENABLE_MEDIA_STREAM=0 -DENABLE_MICRODATA=0 -DENABLE_NAVIGATOR_CONTENT_UTILS=0 -DENABLE_NETSCAPE_PLUGIN_API=0 -DENABLE_NETWORK_INFO=0 -DENABLE_ORIENTATION_EVENTS=0 -DENABLE_PROXIMITY_EVENTS=0 -DENABLE_QUOTA=0 -DENABLE_SCRIPTED_SPEECH=0 -DENABLE_SHADOW_DOM=0 -DENABLE_STYLE_SCOPED=0 -DENABLE_SVG_DOM_OBJC_BINDINGS=0 -DENABLE_TEXT_AUTOSIZING=0 -DENABLE_TEXT_NOTIFICATIONS_ONLY=0 -DENABLE_TOUCH_ICON_LOADING=0 -DENABLE_VIBRATION=0 -DENABLE_VIDEO=0 -DENABLE_VIDEO_TRACK=0 -DENABLE_WEBGL=0 -DENABLE_WEB_AUDIO=0 -DENABLE_XSLT=0 -DBUILDING_WebCore -DBUILDING_WEBKIT -DQT_ASCII_CAST_WARNINGS -DSTATICALLY_LINKED_WITH_JavaScriptCore -DSTATICALLY_LINKED_WITH_WTF -DQT_NO_EXCEPTIONS -DQT_NO_DEBUG -DQT_SQL_LIB -DQT_NETWORK_LIB -DQT_GUI_LIB -DQT_CORE_LIB
+
+QT_INCPATH += \
+ qtbase/include \
+ qtbase/include/QtCore \
+ qtbase/include/QtCore/5.1.0 \
+ qtbase/include/QtCore/5.1.0/QtCore \
+ qtbase/include/QtGui \
+ qtbase/include/QtGui/5.1.0 \
+ qtbase/include/QtGui/5.1.0/QtGui \
+ qtbase/include/QtNetwork \
+ qtbase/include/QtSql \
+ qtbase/mkspecs/genode-g++ \
+ qtbase/src/3rdparty/sqlite \
+ qtscript/include \
+ qtscript/include/QtScript \
+ qtwebkit/Source \
+ qtwebkit/Source/JavaScriptCore \
+ qtwebkit/Source/JavaScriptCore/API \
+ qtwebkit/Source/JavaScriptCore/assembler \
+ qtwebkit/Source/JavaScriptCore/bytecode \
+ qtwebkit/Source/JavaScriptCore/bytecompiler \
+ qtwebkit/Source/JavaScriptCore/debugger \
+ qtwebkit/Source/JavaScriptCore/dfg \
+ qtwebkit/Source/JavaScriptCore/disassembler \
+ qtwebkit/Source/JavaScriptCore/ForwardingHeaders \
+ qtwebkit/Source/JavaScriptCore/heap \
+ qtwebkit/Source/JavaScriptCore/interpreter \
+ qtwebkit/Source/JavaScriptCore/jit \
+ qtwebkit/Source/JavaScriptCore/llint \
+ qtwebkit/Source/JavaScriptCore/parser \
+ qtwebkit/Source/JavaScriptCore/profiler \
+ qtwebkit/Source/JavaScriptCore/runtime \
+ qtwebkit/Source/JavaScriptCore/tools \
+ qtwebkit/Source/JavaScriptCore/yarr \
+ qtwebkit/Source/ThirdParty \
+ qtwebkit/Source/WebCore \
+ qtwebkit/Source/WebCore/accessibility \
+ qtwebkit/Source/WebCore/bindings \
+ qtwebkit/Source/WebCore/bindings/generic \
+ qtwebkit/Source/WebCore/bindings/js \
+ qtwebkit/Source/WebCore/bridge \
+ qtwebkit/Source/WebCore/bridge/c \
+ qtwebkit/Source/WebCore/bridge/jsc \
+ qtwebkit/Source/WebCore/bridge/qt \
+ qtwebkit/Source/WebCore/css \
+ qtwebkit/Source/WebCore/dom \
+ qtwebkit/Source/WebCore/dom/default \
+ qtwebkit/Source/WebCore/editing \
+ qtwebkit/Source/WebCore/fileapi \
+ qtwebkit/Source/WebCore/history \
+ qtwebkit/Source/WebCore/html \
+ qtwebkit/Source/WebCore/html/canvas \
+ qtwebkit/Source/WebCore/html/parser \
+ qtwebkit/Source/WebCore/html/shadow \
+ qtwebkit/Source/WebCore/html/track \
+ qtwebkit/Source/WebCore/inspector \
+ qtwebkit/Source/WebCore/loader \
+ qtwebkit/Source/WebCore/loader/appcache \
+ qtwebkit/Source/WebCore/loader/archive \
+ qtwebkit/Source/WebCore/loader/archive/mhtml \
+ qtwebkit/Source/WebCore/loader/cache \
+ qtwebkit/Source/WebCore/loader/icon \
+ qtwebkit/Source/WebCore/mathml \
+ qtwebkit/Source/WebCore/Modules/filesystem \
+ qtwebkit/Source/WebCore/Modules/geolocation \
+ qtwebkit/Source/WebCore/Modules/indexeddb \
+ qtwebkit/Source/WebCore/Modules/navigatorcontentutils \
+ qtwebkit/Source/WebCore/Modules/notifications \
+ qtwebkit/Source/WebCore/Modules/quota \
+ qtwebkit/Source/WebCore/Modules/webaudio \
+ qtwebkit/Source/WebCore/Modules/webdatabase \
+ qtwebkit/Source/WebCore/Modules/websockets \
+ qtwebkit/Source/WebCore/page \
+ qtwebkit/Source/WebCore/page/animation \
+ qtwebkit/Source/WebCore/page/qt \
+ qtwebkit/Source/WebCore/page/scrolling \
+ qtwebkit/Source/WebCore/platform \
+ qtwebkit/Source/WebCore/platform/animation \
+ qtwebkit/Source/WebCore/platform/audio \
+ qtwebkit/Source/WebCore/platform/graphics \
+ qtwebkit/Source/WebCore/platform/graphics/cpu/arm \
+ qtwebkit/Source/WebCore/platform/graphics/cpu/arm/filters \
+ qtwebkit/Source/WebCore/platform/graphics/filters \
+ qtwebkit/Source/WebCore/platform/graphics/filters/texmap \
+ qtwebkit/Source/WebCore/platform/graphics/opengl \
+ qtwebkit/Source/WebCore/platform/graphics/opentype \
+ qtwebkit/Source/WebCore/platform/graphics/qt \
+ qtwebkit/Source/WebCore/platform/graphics/surfaces \
+ qtwebkit/Source/WebCore/platform/graphics/texmap \
+ qtwebkit/Source/WebCore/platform/graphics/transforms \
+ qtwebkit/Source/WebCore/platform/image-decoders \
+ qtwebkit/Source/WebCore/platform/image-decoders/bmp \
+ qtwebkit/Source/WebCore/platform/image-decoders/gif \
+ qtwebkit/Source/WebCore/platform/image-decoders/ico \
+ qtwebkit/Source/WebCore/platform/image-decoders/jpeg \
+ qtwebkit/Source/WebCore/platform/image-decoders/png \
+ qtwebkit/Source/WebCore/platform/image-decoders/webp \
+ qtwebkit/Source/WebCore/platform/leveldb \
+ qtwebkit/Source/WebCore/platform/mock \
+ qtwebkit/Source/WebCore/platform/network \
+ qtwebkit/Source/WebCore/platform/network/qt \
+ qtwebkit/Source/WebCore/platform/qt \
+ qtwebkit/Source/WebCore/platform/sql \
+ qtwebkit/Source/WebCore/platform/text \
+ qtwebkit/Source/WebCore/platform/text/transcoder \
+ qtwebkit/Source/WebCore/plugins \
+ qtwebkit/Source/WebCore/rendering \
+ qtwebkit/Source/WebCore/rendering/mathml \
+ qtwebkit/Source/WebCore/rendering/style \
+ qtwebkit/Source/WebCore/rendering/svg \
+ qtwebkit/Source/WebCore/storage \
+ qtwebkit/Source/WebCore/svg \
+ qtwebkit/Source/WebCore/svg/animation \
+ qtwebkit/Source/WebCore/svg/graphics \
+ qtwebkit/Source/WebCore/svg/graphics/filters \
+ qtwebkit/Source/WebCore/svg/properties \
+ qtwebkit/Source/WebCore/testing \
+ qtwebkit/Source/WebCore/testing/js \
+ qtwebkit/Source/WebCore/websockets \
+ qtwebkit/Source/WebCore/workers \
+ qtwebkit/Source/WebCore/xml \
+ qtwebkit/Source/WebCore/xml/parser \
+ qtwebkit/Source/WTF \
+
+QT_SOURCES += \
+ Geolocation.cpp \
+ GeolocationController.cpp \
+ NavigatorGeolocation.cpp \
+ AbstractDatabase.cpp \
+ DOMWindowWebDatabase.cpp \
+ Database.cpp \
+ DatabaseAuthorizer.cpp \
+ DatabaseContext.cpp \
+ DatabaseSync.cpp \
+ WorkerContextWebDatabase.cpp \
+ AccessibilityMenuList.cpp \
+ AccessibilityMenuListOption.cpp \
+ AccessibilityMenuListPopup.cpp \
+ AccessibilityMockObject.cpp \
+ AccessibilityProgressIndicator.cpp \
+ AccessibilitySpinButton.cpp \
+ ActiveDOMCallback.cpp \
+ BindingSecurity.cpp \
+ RuntimeEnabledFeatures.cpp \
+ ScriptControllerBase.cpp \
+ ArrayValue.cpp \
+ BindingState.cpp \
+ CallbackFunction.cpp \
+ DOMObjectHashTableMap.cpp \
+ DOMWrapperWorld.cpp \
+ Dictionary.cpp \
+ GCController.cpp \
+ JSArrayBufferCustom.cpp \
+ JSAttrCustom.cpp \
+ JSBlobCustom.cpp \
+ JSCDATASectionCustom.cpp \
+ JSCSSFontFaceRuleCustom.cpp \
+ JSCSSImportRuleCustom.cpp \
+ JSCSSMediaRuleCustom.cpp \
+ JSCSSPageRuleCustom.cpp \
+ JSCSSRuleCustom.cpp \
+ JSCSSRuleListCustom.cpp \
+ JSCSSStyleDeclarationCustom.cpp \
+ JSCSSStyleRuleCustom.cpp \
+ JSCSSValueCustom.cpp \
+ JSCallbackData.cpp \
+ JSCanvasRenderingContext2DCustom.cpp \
+ JSCanvasRenderingContextCustom.cpp \
+ JSClipboardCustom.cpp \
+ JSConsoleCustom.cpp \
+ JSCoordinatesCustom.cpp \
+ JSCustomXPathNSResolver.cpp \
+ JSDictionary.cpp \
+ JSDOMBinding.cpp \
+ JSDOMFormDataCustom.cpp \
+ JSDOMGlobalObject.cpp \
+ JSDOMImplementationCustom.cpp \
+ JSDOMMimeTypeArrayCustom.cpp \
+ JSDOMPluginArrayCustom.cpp \
+ JSDOMPluginCustom.cpp \
+ JSDOMStringListCustom.cpp \
+ JSDOMStringMapCustom.cpp \
+ JSDOMTokenListCustom.cpp \
+ JSDOMWindowBase.cpp \
+ JSDOMWindowCustom.cpp \
+ JSDOMWindowShell.cpp \
+ JSDOMWindowWebAudioCustom.cpp \
+ JSDOMWindowWebSocketCustom.cpp \
+ JSDOMWrapper.cpp \
+ JSDataViewCustom.cpp \
+ JSDesktopNotificationsCustom.cpp \
+ JSDeviceMotionEventCustom.cpp \
+ JSDeviceOrientationEventCustom.cpp \
+ JSDocumentCustom.cpp \
+ JSElementCustom.cpp \
+ JSErrorHandler.cpp \
+ JSEventCustom.cpp \
+ JSEventListener.cpp \
+ JSEventTargetCustom.cpp \
+ JSExceptionBase.cpp \
+ JSFileReaderCustom.cpp \
+ JSGeolocationCustom.cpp \
+ JSHTMLAllCollectionCustom.cpp \
+ JSHTMLAppletElementCustom.cpp \
+ JSHTMLCanvasElementCustom.cpp \
+ JSHTMLCollectionCustom.cpp \
+ JSHTMLDocumentCustom.cpp \
+ JSHTMLElementCustom.cpp \
+ JSHTMLEmbedElementCustom.cpp \
+ JSHTMLFormControlsCollectionCustom.cpp \
+ JSHTMLFormElementCustom.cpp \
+ JSHTMLFrameElementCustom.cpp \
+ JSHTMLFrameSetElementCustom.cpp \
+ JSHTMLInputElementCustom.cpp \
+ JSHTMLLinkElementCustom.cpp \
+ JSHTMLMediaElementCustom.cpp \
+ JSHTMLObjectElementCustom.cpp \
+ JSHTMLOptionsCollectionCustom.cpp \
+ JSHTMLOutputElementCustom.cpp \
+ JSHTMLSelectElementCustom.cpp \
+ JSHTMLStyleElementCustom.cpp \
+ JSHistoryCustom.cpp \
+ JSImageConstructor.cpp \
+ JSImageDataCustom.cpp \
+ JSInjectedScriptHostCustom.cpp \
+ JSInjectedScriptManager.cpp \
+ JSInspectorFrontendHostCustom.cpp \
+ JSLazyEventListener.cpp \
+ JSLocationCustom.cpp \
+ JSMainThreadExecState.cpp \
+ JSMediaListCustom.cpp \
+ JSMemoryInfoCustom.cpp \
+ JSMessageChannelCustom.cpp \
+ JSMessageEventCustom.cpp \
+ JSMessagePortCustom.cpp \
+ JSMicroDataItemValueCustom.cpp \
+ JSMutationCallbackCustom.cpp \
+ JSMutationObserverCustom.cpp \
+ JSNamedNodeMapCustom.cpp \
+ JSNodeCustom.cpp \
+ JSNodeFilterCondition.cpp \
+ JSNodeFilterCustom.cpp \
+ JSNodeIteratorCustom.cpp \
+ JSNodeListCustom.cpp \
+ JSNotificationCustom.cpp \
+ JSPluginElementFunctions.cpp \
+ JSPopStateEventCustom.cpp \
+ JSProcessingInstructionCustom.cpp \
+ JSRequestAnimationFrameCallbackCustom.cpp \
+ JSStorageCustom.cpp \
+ JSStyleSheetCustom.cpp \
+ JSStyleSheetListCustom.cpp \
+ JSTextCustom.cpp \
+ JSTouchCustom.cpp \
+ JSTouchListCustom.cpp \
+ JSTreeWalkerCustom.cpp \
+ JSWebKitAnimationCustom.cpp \
+ JSWebKitAnimationListCustom.cpp \
+ JSWebKitCSSKeyframeRuleCustom.cpp \
+ JSWebKitCSSKeyframesRuleCustom.cpp \
+ JSWebKitPointCustom.cpp \
+ JSXMLHttpRequestCustom.cpp \
+ JSXMLHttpRequestUploadCustom.cpp \
+ JSXPathResultCustom.cpp \
+ PageScriptDebugServer.cpp \
+ ScheduledAction.cpp \
+ ScriptCachedFrameData.cpp \
+ ScriptCallStackFactory.cpp \
+ ScriptController.cpp \
+ ScriptControllerQt.cpp \
+ ScriptDebugServer.cpp \
+ ScriptEventListener.cpp \
+ ScriptFunctionCall.cpp \
+ ScriptGCEvent.cpp \
+ ScriptObject.cpp \
+ ScriptProfile.cpp \
+ ScriptState.cpp \
+ ScriptValue.cpp \
+ SerializedScriptValue.cpp \
+ IdentifierRep.cpp \
+ NP_jsobject.cpp \
+ CRuntimeObject.cpp \
+ c_class.cpp \
+ c_instance.cpp \
+ c_runtime.cpp \
+ c_utility.cpp \
+ BridgeJSC.cpp \
+ npruntime.cpp \
+ qt_class.cpp \
+ qt_instance.cpp \
+ qt_pixmapruntime.cpp \
+ qt_runtime.cpp \
+ runtime_array.cpp \
+ runtime_method.cpp \
+ runtime_object.cpp \
+ runtime_root.cpp \
+ WebCoreTestSupport.cpp \
+ DOMFilePath.cpp \
+ DOMFileSystem.cpp \
+ DOMFileSystemBase.cpp \
+ DOMFileSystemSync.cpp \
+ DOMWindowFileSystem.cpp \
+ DirectoryEntry.cpp \
+ DirectoryEntrySync.cpp \
+ DirectoryReader.cpp \
+ DirectoryReaderSync.cpp \
+ Entry.cpp \
+ EntryArray.cpp \
+ EntryArraySync.cpp \
+ EntryBase.cpp \
+ EntrySync.cpp \
+ FileEntry.cpp \
+ FileEntrySync.cpp \
+ FileWriter.cpp \
+ FileWriterBase.cpp \
+ FileWriterSync.cpp \
+ LocalFileSystem.cpp \
+ WorkerContextFileSystem.cpp \
+ NavigatorContentUtils.cpp \
+ DOMWindowNotifications.cpp \
+ Notification.cpp \
+ NotificationCenter.cpp \
+ NotificationController.cpp \
+ WorkerContextNotifications.cpp \
+ BasicShapeFunctions.cpp \
+ CSSAspectRatioValue.cpp \
+ CSSBasicShapes.cpp \
+ CSSBorderImageSliceValue.cpp \
+ CSSBorderImage.cpp \
+ CSSCalculationValue.cpp \
+ CSSCanvasValue.cpp \
+ CSSCharsetRule.cpp \
+ CSSComputedStyleDeclaration.cpp \
+ CSSCrossfadeValue.cpp \
+ CSSCursorImageValue.cpp \
+ CSSFontFace.cpp \
+ CSSFontFaceRule.cpp \
+ CSSFontFaceSrcValue.cpp \
+ CSSFontSelector.cpp \
+ CSSFontFaceSource.cpp \
+ CSSFunctionValue.cpp \
+ CSSGradientValue.cpp \
+ CSSImageValue.cpp \
+ CSSImageGeneratorValue.cpp \
+ CSSImageSetValue.cpp \
+ CSSImportRule.cpp \
+ CSSInheritedValue.cpp \
+ CSSInitialValue.cpp \
+ CSSLineBoxContainValue.cpp \
+ CSSMediaRule.cpp \
+ CSSOMUtils.cpp \
+ CSSPageRule.cpp \
+ CSSParser.cpp \
+ CSSParserValues.cpp \
+ CSSPrimitiveValue.cpp \
+ CSSProperty.cpp \
+ CSSPropertySourceData.cpp \
+ CSSReflectValue.cpp \
+ CSSRule.cpp \
+ CSSRuleList.cpp \
+ CSSSelector.cpp \
+ CSSSelectorList.cpp \
+ CSSSegmentedFontFace.cpp \
+ CSSStyleRule.cpp \
+ CSSStyleSheet.cpp \
+ CSSTimingFunctionValue.cpp \
+ CSSToStyleMap.cpp \
+ CSSUnicodeRangeValue.cpp \
+ CSSValue.cpp \
+ CSSValueList.cpp \
+ CSSValuePool.cpp \
+ FontFeatureValue.cpp \
+ FontValue.cpp \
+ LengthFunctions.cpp \
+ MediaFeatureNames.cpp \
+ MediaList.cpp \
+ MediaQuery.cpp \
+ MediaQueryEvaluator.cpp \
+ MediaQueryExp.cpp \
+ MediaQueryList.cpp \
+ MediaQueryListListener.cpp \
+ MediaQueryMatcher.cpp \
+ PropertySetCSSStyleDeclaration.cpp \
+ RGBColor.cpp \
+ RuleFeature.cpp \
+ RuleSet.cpp \
+ SelectorChecker.cpp \
+ ShadowValue.cpp \
+ StyleBuilder.cpp \
+ StyleInvalidationAnalysis.cpp \
+ StyleMedia.cpp \
+ StylePropertySet.cpp \
+ StylePropertyShorthand.cpp \
+ StyleResolver.cpp \
+ StyleRule.cpp \
+ StyleRuleImport.cpp \
+ StyleScopeResolver.cpp \
+ StyleSheet.cpp \
+ StyleSheetContents.cpp \
+ StyleSheetList.cpp \
+ ViewportStyleResolver.cpp \
+ WebKitCSSArrayFunctionValue.cpp \
+ WebKitCSSFilterValue.cpp \
+ WebKitCSSKeyframeRule.cpp \
+ WebKitCSSKeyframesRule.cpp \
+ WebKitCSSMatrix.cpp \
+ WebKitCSSMixFunctionValue.cpp \
+ WebKitCSSRegionRule.cpp \
+ WebKitCSSSVGDocumentValue.cpp \
+ WebKitCSSShaderValue.cpp \
+ WebKitCSSTransformValue.cpp \
+ WebKitCSSViewportRule.cpp \
+ ActiveDOMObject.cpp \
+ Attr.cpp \
+ BeforeTextInsertedEvent.cpp \
+ BeforeUnloadEvent.cpp \
+ CDATASection.cpp \
+ CharacterData.cpp \
+ CheckedRadioButtons.cpp \
+ ChildListMutationScope.cpp \
+ ChildNodeList.cpp \
+ ClassNodeList.cpp \
+ ClientRect.cpp \
+ ClientRectList.cpp \
+ Clipboard.cpp \
+ ClipboardEvent.cpp \
+ Comment.cpp \
+ ComposedShadowTreeWalker.cpp \
+ CompositionEvent.cpp \
+ ContainerNode.cpp \
+ ContainerNodeAlgorithms.cpp \
+ ContextDestructionObserver.cpp \
+ ContextFeatures.cpp \
+ CustomEvent.cpp \
+ DecodedDataDocumentParser.cpp \
+ DeviceMotionController.cpp \
+ DeviceMotionData.cpp \
+ DeviceMotionEvent.cpp \
+ DeviceOrientationController.cpp \
+ DeviceOrientationData.cpp \
+ DeviceOrientationEvent.cpp \
+ Document.cpp \
+ DocumentEventQueue.cpp \
+ DocumentFragment.cpp \
+ DocumentMarkerController.cpp \
+ DocumentMarker.cpp \
+ DocumentOrderedMap.cpp \
+ DocumentParser.cpp \
+ DocumentStyleSheetCollection.cpp \
+ DocumentType.cpp \
+ DOMCoreException.cpp \
+ DOMError.cpp \
+ DOMImplementation.cpp \
+ DOMNamedFlowCollection.cpp \
+ DOMStringList.cpp \
+ DOMStringMap.cpp \
+ DatasetDOMStringMap.cpp \
+ Element.cpp \
+ ElementAttributeData.cpp \
+ ElementRareData.cpp \
+ ElementShadow.cpp \
+ EntityReference.cpp \
+ ErrorEvent.cpp \
+ Event.cpp \
+ EventContext.cpp \
+ EventDispatchMediator.cpp \
+ EventDispatcher.cpp \
+ EventException.cpp \
+ EventListenerMap.cpp \
+ EventNames.cpp \
+ EventTarget.cpp \
+ ExceptionBase.cpp \
+ ExceptionCodePlaceholder.cpp \
+ GenericEventQueue.cpp \
+ GestureEvent.cpp \
+ IconURL.cpp \
+ IdTargetObserver.cpp \
+ IdTargetObserverRegistry.cpp \
+ LiveNodeList.cpp \
+ KeyboardEvent.cpp \
+ MessageChannel.cpp \
+ MessageEvent.cpp \
+ MessagePort.cpp \
+ MessagePortChannel.cpp \
+ MicroDataItemList.cpp \
+ MouseEvent.cpp \
+ MouseRelatedEvent.cpp \
+ MutationEvent.cpp \
+ MutationObserver.cpp \
+ MutationObserverInterestGroup.cpp \
+ MutationObserverRegistration.cpp \
+ MutationRecord.cpp \
+ WebKitNamedFlow.cpp \
+ NamedFlowCollection.cpp \
+ NamedNodeMap.cpp \
+ NameNodeList.cpp \
+ Node.cpp \
+ NodeFilterCondition.cpp \
+ NodeFilter.cpp \
+ NodeIterator.cpp \
+ NodeRareData.cpp \
+ NodeRenderingContext.cpp \
+ Notation.cpp \
+ StaticHashSetNodeList.cpp \
+ OverflowEvent.cpp \
+ PageTransitionEvent.cpp \
+ PendingScript.cpp \
+ PopStateEvent.cpp \
+ Position.cpp \
+ PositionIterator.cpp \
+ ProcessingInstruction.cpp \
+ ProgressEvent.cpp \
+ PropertyNodeList.cpp \
+ QualifiedName.cpp \
+ Range.cpp \
+ RangeException.cpp \
+ RegisteredEventListener.cpp \
+ ScopedEventQueue.cpp \
+ ScriptedAnimationController.cpp \
+ ScriptableDocumentParser.cpp \
+ ScriptElement.cpp \
+ ScriptExecutionContext.cpp \
+ ScriptRunner.cpp \
+ SecurityContext.cpp \
+ SelectorQuery.cpp \
+ ShadowRoot.cpp \
+ SpaceSplitString.cpp \
+ StaticNodeList.cpp \
+ StyledElement.cpp \
+ StyleElement.cpp \
+ TagNodeList.cpp \
+ Text.cpp \
+ TextEvent.cpp \
+ Touch.cpp \
+ TouchEvent.cpp \
+ TouchList.cpp \
+ Traversal.cpp \
+ TreeScope.cpp \
+ TreeScopeAdopter.cpp \
+ TreeWalker.cpp \
+ UIEvent.cpp \
+ UIEventWithKeyState.cpp \
+ UserGestureIndicator.cpp \
+ UserTypingGestureIndicator.cpp \
+ ViewportArguments.cpp \
+ WebCoreMemoryInstrumentation.cpp \
+ WebKitAnimationEvent.cpp \
+ WebKitTransitionEvent.cpp \
+ WheelEvent.cpp \
+ WindowEventContext.cpp \
+ PlatformMessagePortChannel.cpp \
+ AsyncFileStream.cpp \
+ Blob.cpp \
+ BlobURL.cpp \
+ File.cpp \
+ FileException.cpp \
+ FileList.cpp \
+ FileReader.cpp \
+ FileReaderLoader.cpp \
+ FileReaderSync.cpp \
+ FileThread.cpp \
+ ThreadableBlobRegistry.cpp \
+ WebKitBlobBuilder.cpp \
+ BackForwardController.cpp \
+ BackForwardListImpl.cpp \
+ CachedFrame.cpp \
+ CachedPage.cpp \
+ HistoryItem.cpp \
+ HistoryItemQt.cpp \
+ PageCache.cpp \
+ BaseButtonInputType.cpp \
+ BaseCheckableInputType.cpp \
+ BaseChooserOnlyDateAndTimeInputType.cpp \
+ BaseClickableWithKeyInputType.cpp \
+ BaseDateAndTimeInputType.cpp \
+ BaseMultipleFieldsDateAndTimeInputType.cpp \
+ BaseTextInputType.cpp \
+ ButtonInputType.cpp \
+ CheckboxInputType.cpp \
+ ClassList.cpp \
+ ColorInputType.cpp \
+ DOMFormData.cpp \
+ DOMSettableTokenList.cpp \
+ DOMTokenList.cpp \
+ DOMURL.cpp \
+ DateInputType.cpp \
+ DateTimeInputType.cpp \
+ DateTimeLocalInputType.cpp \
+ EmailInputType.cpp \
+ FTPDirectoryDocument.cpp \
+ FileInputType.cpp \
+ FormAssociatedElement.cpp \
+ FormController.cpp \
+ FormDataList.cpp \
+ HTMLAllCollection.cpp \
+ HTMLCollection.cpp \
+ HTMLDocument.cpp \
+ HTMLFormControlsCollection.cpp \
+ HTMLImageLoader.cpp \
+ HTMLNameCollection.cpp \
+ HTMLOptionsCollection.cpp \
+ HTMLOutputElement.cpp \
+ HTMLParserErrorCodes.cpp \
+ HTMLPropertiesCollection.cpp \
+ HTMLTableRowsCollection.cpp \
+ HTMLViewSourceDocument.cpp \
+ HiddenInputType.cpp \
+ ImageData.cpp \
+ ImageDocument.cpp \
+ ImageInputType.cpp \
+ InputType.cpp \
+ InputTypeNames.cpp \
+ LabelableElement.cpp \
+ LabelsNodeList.cpp \
+ LinkRelAttribute.cpp \
+ MediaDocument.cpp \
+ MicroDataItemValue.cpp \
+ MonthInputType.cpp \
+ NumberInputType.cpp \
+ PasswordInputType.cpp \
+ PluginDocument.cpp \
+ RadioInputType.cpp \
+ RadioNodeList.cpp \
+ RangeInputType.cpp \
+ ResetInputType.cpp \
+ SearchInputType.cpp \
+ StepRange.cpp \
+ SubmitInputType.cpp \
+ TelephoneInputType.cpp \
+ TextDocument.cpp \
+ TextFieldInputType.cpp \
+ TextInputType.cpp \
+ TimeInputType.cpp \
+ TypeAhead.cpp \
+ URLInputType.cpp \
+ ValidationMessage.cpp \
+ ValidityState.cpp \
+ WeekInputType.cpp \
+ CanvasGradient.cpp \
+ CanvasPattern.cpp \
+ CanvasRenderingContext.cpp \
+ CanvasRenderingContext2D.cpp \
+ CanvasStyle.cpp \
+ DataView.cpp \
+ CSSPreloadScanner.cpp \
+ HTMLConstructionSite.cpp \
+ HTMLDocumentParser.cpp \
+ HTMLElementStack.cpp \
+ HTMLEntityParser.cpp \
+ HTMLEntitySearch.cpp \
+ HTMLFormattingElementList.cpp \
+ HTMLMetaCharsetParser.cpp \
+ HTMLParserIdioms.cpp \
+ HTMLParserScheduler.cpp \
+ HTMLPreloadScanner.cpp \
+ HTMLScriptRunner.cpp \
+ HTMLSourceTracker.cpp \
+ HTMLTokenizer.cpp \
+ HTMLTreeBuilder.cpp \
+ HTMLViewSourceParser.cpp \
+ TextDocumentParser.cpp \
+ TextViewSourceParser.cpp \
+ XSSAuditor.cpp \
+ ContentDistributor.cpp \
+ ContentSelectorQuery.cpp \
+ DateTimeEditElement.cpp \
+ DateTimeFieldElement.cpp \
+ DateTimeFieldElements.cpp \
+ DateTimeNumericFieldElement.cpp \
+ DateTimeSymbolicFieldElement.cpp \
+ DetailsMarkerControl.cpp \
+ InsertionPoint.cpp \
+ ImageInnerElement.cpp \
+ MediaControls.cpp \
+ MediaControlsApple.cpp \
+ MeterShadowElement.cpp \
+ ProgressShadowElement.cpp \
+ SelectRuleFeatureSet.cpp \
+ SliderThumbElement.cpp \
+ SpinButtonElement.cpp \
+ TextControlInnerElements.cpp \
+ DOMApplicationCache.cpp \
+ ManifestParser.cpp \
+ ArchiveResource.cpp \
+ ArchiveResourceCollection.cpp \
+ CachedMetadata.cpp \
+ MemoryCache.cpp \
+ CachedCSSStyleSheet.cpp \
+ CachedFont.cpp \
+ CachedImage.cpp \
+ CachedRawResource.cpp \
+ CachedResourceHandle.cpp \
+ CachedResource.cpp \
+ CachedScript.cpp \
+ CachedShader.cpp \
+ CachedSVGDocument.cpp \
+ CachedXSLStyleSheet.cpp \
+ CookieJar.cpp \
+ CrossOriginAccessControl.cpp \
+ CrossOriginPreflightResultCache.cpp \
+ CachedResourceLoader.cpp \
+ CachedResourceRequest.cpp \
+ CachedResourceRequestInitiators.cpp \
+ DocumentLoadTiming.cpp \
+ DocumentLoader.cpp \
+ DocumentThreadableLoader.cpp \
+ DocumentWriter.cpp \
+ EmptyClients.cpp \
+ FormState.cpp \
+ FormSubmission.cpp \
+ FrameLoadRequest.cpp \
+ FrameLoader.cpp \
+ FrameLoaderStateMachine.cpp \
+ HistoryController.cpp \
+ FTPDirectoryParser.cpp \
+ IconController.cpp \
+ IconDatabaseBase.cpp \
+ IconLoader.cpp \
+ ImageLoader.cpp \
+ LinkLoader.cpp \
+ LoaderStrategy.cpp \
+ MainResourceLoader.cpp \
+ MixedContentChecker.cpp \
+ NavigationAction.cpp \
+ NetscapePlugInStreamLoader.cpp \
+ PingLoader.cpp \
+ PlaceholderDocument.cpp \
+ PolicyCallback.cpp \
+ PolicyChecker.cpp \
+ ProgressTracker.cpp \
+ Prerenderer.cpp \
+ PrerendererClient.cpp \
+ NavigationScheduler.cpp \
+ ResourceBuffer.cpp \
+ ResourceLoader.cpp \
+ ResourceLoadNotifier.cpp \
+ ResourceLoadScheduler.cpp \
+ SinkDocument.cpp \
+ SubframeLoader.cpp \
+ SubresourceLoader.cpp \
+ SubstituteData.cpp \
+ TextResourceDecoder.cpp \
+ ThreadableLoader.cpp \
+ AnimationBase.cpp \
+ AnimationController.cpp \
+ CompositeAnimation.cpp \
+ CSSPropertyAnimation.cpp \
+ ImplicitAnimation.cpp \
+ KeyframeAnimation.cpp \
+ WebKitAnimation.cpp \
+ WebKitAnimationList.cpp \
+ BarInfo.cpp \
+ Chrome.cpp \
+ Console.cpp \
+ ContentSecurityPolicy.cpp \
+ ContextMenuController.cpp \
+ Crypto.cpp \
+ DeviceController.cpp \
+ DiagnosticLoggingKeys.cpp \
+ DOMSelection.cpp \
+ DOMTimer.cpp \
+ DOMWindow.cpp \
+ DOMWindowExtension.cpp \
+ DOMWindowProperty.cpp \
+ DragController.cpp \
+ EventHandler.cpp \
+ EventSource.cpp \
+ FeatureObserver.cpp \
+ FocusController.cpp \
+ Frame.cpp \
+ FrameActionScheduler.cpp \
+ FrameDestructionObserver.cpp \
+ FrameTree.cpp \
+ FrameView.cpp \
+ GestureTapHighlighter.cpp \
+ GroupSettings.cpp \
+ History.cpp \
+ Location.cpp \
+ MemoryInfo.cpp \
+ MouseEventWithHitTestResults.cpp \
+ Navigator.cpp \
+ NavigatorBase.cpp \
+ OriginAccessEntry.cpp \
+ Page.cpp \
+ PageGroup.cpp \
+ PageGroupLoadDeferrer.cpp \
+ PageVisibilityState.cpp \
+ Performance.cpp \
+ PerformanceEntry.cpp \
+ PerformanceEntryList.cpp \
+ PerformanceNavigation.cpp \
+ PerformanceResourceTiming.cpp \
+ PerformanceTiming.cpp \
+ PrintContext.cpp \
+ Screen.cpp \
+ ScrollingConstraints.cpp \
+ ScrollingCoordinator.cpp \
+ SecurityOrigin.cpp \
+ SecurityPolicy.cpp \
+ Settings.cpp \
+ SpatialNavigation.cpp \
+ TouchAdjustment.cpp \
+ SuspendableTimer.cpp \
+ UserContentURLPattern.cpp \
+ WindowFeatures.cpp \
+ WindowFocusAllowedIndicator.cpp \
+ PluginData.cpp \
+ DOMPluginArray.cpp \
+ DOMPlugin.cpp \
+ PluginMainThreadScheduler.cpp \
+ DOMMimeType.cpp \
+ DOMMimeTypeArray.cpp \
+ Animation.cpp \
+ AnimationList.cpp \
+ Arena.cpp \
+ BidiContext.cpp \
+ DateTimeFormat.cpp \
+ Hyphenation.cpp \
+ LocaleNone.cpp \
+ LocaleToScriptMappingDefault.cpp \
+ PlatformLocale.cpp \
+ QuotedPrintable.cpp \
+ CalculationValue.cpp \
+ Clock.cpp \
+ ClockGeneric.cpp \
+ ContentType.cpp \
+ CrossThreadCopier.cpp \
+ DateComponents.cpp \
+ Decimal.cpp \
+ DragData.cpp \
+ DragImage.cpp \
+ EventTracer.cpp \
+ FileChooser.cpp \
+ FileIconLoader.cpp \
+ FileStream.cpp \
+ FileSystem.cpp \
+ HistogramSupport.cpp \
+ FontDescription.cpp \
+ FontFallbackList.cpp \
+ FontFamily.cpp \
+ FontFeatureSettings.cpp \
+ BitmapImage.cpp \
+ Color.cpp \
+ CrossfadeGeneratedImage.cpp \
+ FloatPoint3D.cpp \
+ FloatPoint.cpp \
+ FloatQuad.cpp \
+ FloatRect.cpp \
+ FloatSize.cpp \
+ FontData.cpp \
+ Font.cpp \
+ FontCache.cpp \
+ FontFastPath.cpp \
+ LayoutBoxExtent.cpp \
+ LayoutRect.cpp \
+ GeneratedImage.cpp \
+ GeneratorGeneratedImage.cpp \
+ GlyphPageTreeNode.cpp \
+ Gradient.cpp \
+ GraphicsContext.cpp \
+ GraphicsLayer.cpp \
+ GraphicsLayerAnimation.cpp \
+ GraphicsLayerUpdater.cpp \
+ GraphicsLayerTransform.cpp \
+ GraphicsTypes.cpp \
+ Image.cpp \
+ ImageBuffer.cpp \
+ ImageOrientation.cpp \
+ ImageSource.cpp \
+ IntRect.cpp \
+ Path.cpp \
+ PathTraversalState.cpp \
+ Pattern.cpp \
+ FontQt.cpp \
+ Region.cpp \
+ RoundedRect.cpp \
+ SegmentedFontData.cpp \
+ ShadowBlur.cpp \
+ SVGGlyph.cpp \
+ SimpleFontData.cpp \
+ StringTruncator.cpp \
+ GraphicsSurface.cpp \
+ GraphicsSurfaceQt.cpp \
+ SurrogatePairAwareTextIterator.cpp \
+ TextRun.cpp \
+ TiledBackingStore.cpp \
+ AffineTransform.cpp \
+ TransformationMatrix.cpp \
+ MatrixTransformOperation.cpp \
+ Matrix3DTransformOperation.cpp \
+ PerspectiveTransformOperation.cpp \
+ RotateTransformOperation.cpp \
+ ScaleTransformOperation.cpp \
+ SkewTransformOperation.cpp \
+ TransformOperations.cpp \
+ TransformState.cpp \
+ TranslateTransformOperation.cpp \
+ WidthIterator.cpp \
+ ImageDecoder.cpp \
+ BMPImageDecoder.cpp \
+ BMPImageReader.cpp \
+ GIFImageDecoder.cpp \
+ GIFImageReader.cpp \
+ KillRingNone.cpp \
+ KURL.cpp \
+ Language.cpp \
+ LayoutTestSupport.cpp \
+ Length.cpp \
+ LengthBox.cpp \
+ LineEnding.cpp \
+ LevelDBDatabase.cpp \
+ LevelDBTransaction.cpp \
+ LevelDBWriteBatch.cpp \
+ LinkHash.cpp \
+ Logging.cpp \
+ MemoryPressureHandler.cpp \
+ MemoryUsageSupportQt.cpp \
+ MIMETypeRegistry.cpp \
+ DeviceMotionClientMock.cpp \
+ DeviceOrientationClientMock.cpp \
+ GeolocationClientMock.cpp \
+ ScrollbarThemeMock.cpp \
+ AuthenticationChallengeBase.cpp \
+ BlobData.cpp \
+ BlobRegistryImpl.cpp \
+ BlobResourceHandle.cpp \
+ Credential.cpp \
+ CredentialStorage.cpp \
+ FormData.cpp \
+ FormDataBuilder.cpp \
+ HTTPHeaderMap.cpp \
+ HTTPParsers.cpp \
+ HTTPRequest.cpp \
+ HTTPValidation.cpp \
+ MIMEHeader.cpp \
+ NetworkStateNotifier.cpp \
+ ParsedContentType.cpp \
+ ProtectionSpace.cpp \
+ ProxyServer.cpp \
+ ResourceErrorBase.cpp \
+ ResourceHandle.cpp \
+ ResourceLoadTiming.cpp \
+ ResourceRequestBase.cpp \
+ ResourceResponseBase.cpp \
+ RegularExpression.cpp \
+ PlatformEvent.cpp \
+ PlatformInstrumentation.cpp \
+ PlatformMemoryInstrumentation.cpp \
+ RuntimeApplicationChecks.cpp \
+ RunLoop.cpp \
+ SchemeRegistry.cpp \
+ ScrollableArea.cpp \
+ ScrollAnimator.cpp \
+ Scrollbar.cpp \
+ ScrollbarTheme.cpp \
+ ScrollbarThemeComposite.cpp \
+ ScrollView.cpp \
+ SharedBuffer.cpp \
+ SharedBufferChunkReader.cpp \
+ StatsCounter.cpp \
+ SQLiteAuthorizer.cpp \
+ SQLiteDatabase.cpp \
+ SQLiteFileSystem.cpp \
+ SQLiteStatement.cpp \
+ SQLiteTransaction.cpp \
+ SQLValue.cpp \
+ SegmentedString.cpp \
+ ThreadGlobalData.cpp \
+ ThreadTimers.cpp \
+ Timer.cpp \
+ UnicodeRange.cpp \
+ FontTranscoder.cpp \
+ UUID.cpp \
+ VisitedLinks.cpp \
+ Widget.cpp \
+ PlatformStrategies.cpp \
+ IFrameShimSupport.cpp \
+ PluginDatabase.cpp \
+ PluginDebug.cpp \
+ PluginPackage.cpp \
+ PluginStream.cpp \
+ PluginView.cpp \
+ ExclusionInterval.cpp \
+ ExclusionPolygon.cpp \
+ ExclusionRectangle.cpp \
+ ExclusionShape.cpp \
+ ExclusionShapeInsideInfo.cpp \
+ FlowThreadController.cpp \
+ RenderFlexibleBox.cpp \
+ RenderFlowThread.cpp \
+ RenderGeometryMap.cpp \
+ RenderGrid.cpp \
+ RenderLayerBacking.cpp \
+ RenderLayerFilterInfo.cpp \
+ RenderNamedFlowThread.cpp \
+ RenderRegion.cpp \
+ RenderRegionSet.cpp \
+ RenderTextTrackCue.cpp \
+ BasicShapes.cpp \
+ StyleCachedImageSet.cpp \
+ StyleCachedShader.cpp \
+ StorageTask.cpp \
+ StorageThread.cpp \
+ Storage.cpp \
+ StorageAreaImpl.cpp \
+ StorageAreaSync.cpp \
+ StorageEvent.cpp \
+ StorageEventDispatcher.cpp \
+ StorageMap.cpp \
+ StorageNamespace.cpp \
+ StorageNamespaceImpl.cpp \
+ StorageSyncManager.cpp \
+ StorageTracker.cpp \
+ Internals.cpp \
+ InternalSettings.cpp \
+ DOMParser.cpp \
+ NativeXPathNSResolver.cpp \
+ XMLHttpRequest.cpp \
+ XMLHttpRequestException.cpp \
+ XMLHttpRequestProgressEventThrottle.cpp \
+ XMLHttpRequestUpload.cpp \
+ XMLErrors.cpp \
+ XMLSerializer.cpp \
+ XPathEvaluator.cpp \
+ XPathException.cpp \
+ XPathExpression.cpp \
+ XPathExpressionNode.cpp \
+ XPathFunctions.cpp \
+ XPathNodeSet.cpp \
+ XPathNSResolver.cpp \
+ XPathParser.cpp \
+ XPathPath.cpp \
+ XPathPredicate.cpp \
+ XPathResult.cpp \
+ XPathStep.cpp \
+ XPathUtil.cpp \
+ XPathValue.cpp \
+ XPathVariableReference.cpp \
+ NewXMLDocumentParser.cpp \
+ XMLCharacterReferenceParser.cpp \
+ XMLDocumentParser.cpp \
+ XMLTokenizer.cpp \
+ XMLTreeBuilder.cpp \
+ AccessibilityObjectQt.cpp \
+ DragControllerQt.cpp \
+ EventHandlerQt.cpp \
+ TransformationMatrixQt.cpp \
+ ColorQt.cpp \
+ FontPlatformDataQt.cpp \
+ FloatPointQt.cpp \
+ FloatRectQt.cpp \
+ FloatSizeQt.cpp \
+ LayoutPointQt.cpp \
+ LayoutRectQt.cpp \
+ LayoutSizeQt.cpp \
+ GradientQt.cpp \
+ GraphicsContextQt.cpp \
+ IconQt.cpp \
+ ImageBufferQt.cpp \
+ ImageDecoderQt.cpp \
+ ImageQt.cpp \
+ IntPointQt.cpp \
+ IntRectQt.cpp \
+ IntSizeQt.cpp \
+ PathQt.cpp \
+ PatternQt.cpp \
+ StillImageQt.cpp \
+ GraphicsLayerTextureMapper.cpp \
+ TextureMapper.cpp \
+ TextureMapperBackingStore.cpp \
+ TextureMapperImageBuffer.cpp \
+ TextureMapperLayer.cpp \
+ DNSResolveQueue.cpp \
+ MIMESniffing.cpp \
+ CookieJarQt.cpp \
+ CredentialStorageQt.cpp \
+ ResourceHandleQt.cpp \
+ ResourceRequestQt.cpp \
+ DNSQt.cpp \
+ NetworkStateNotifierQt.cpp \
+ ProxyServerQt.cpp \
+ QtMIMETypeSniffer.cpp \
+ QNetworkReplyHandler.cpp \
+ EditorQt.cpp \
+ Cursor.cpp \
+ ClipboardQt.cpp \
+ ContextMenuItemQt.cpp \
+ ContextMenuQt.cpp \
+ CursorQt.cpp \
+ DragDataQt.cpp \
+ DragImageQt.cpp \
+ EventLoopQt.cpp \
+ FileSystemQt.cpp \
+ RunLoopQt.cpp \
+ SharedBufferQt.cpp \
+ ThirdPartyCookiesQt.cpp \
+ UserAgentQt.cpp \
+ FontCacheQt.cpp \
+ FontCustomPlatformDataQt.cpp \
+ GlyphPageTreeNodeQt.cpp \
+ SimpleFontDataQt.cpp \
+ TileQt.cpp \
+ KURLQt.cpp \
+ MIMETypeRegistryQt.cpp \
+ PasteboardQt.cpp \
+ PlatformKeyboardEventQt.cpp \
+ PlatformScreenQt.cpp \
+ RenderThemeQStyle.cpp \
+ RenderThemeQt.cpp \
+ RenderThemeQtMobile.cpp \
+ ScrollbarThemeQStyle.cpp \
+ ScrollbarThemeQt.cpp \
+ ScrollViewQt.cpp \
+ SharedTimerQt.cpp \
+ SoundQt.cpp \
+ LoggingQt.cpp \
+ LanguageQt.cpp \
+ LocalizedStringsQt.cpp \
+ TemporaryLinkStubsQt.cpp \
+ TextBoundariesQt.cpp \
+ TextBreakIteratorInternalICUQt.cpp \
+ TextCodecQt.cpp \
+ WidgetQt.cpp \
+ XMLDocumentParserQt.cpp \
+ ScrollAnimatorNone.cpp \
+ SmartReplaceICU.cpp \
+ PluginPackageNone.cpp \
+ PluginViewNone.cpp \
+ ChangeVersionWrapper.cpp \
+ DatabaseTask.cpp \
+ DatabaseThread.cpp \
+ DatabaseTracker.cpp \
+ OriginQuotaManager.cpp \
+ OriginUsageRecord.cpp \
+ SQLException.cpp \
+ SQLResultSet.cpp \
+ SQLResultSetRowList.cpp \
+ SQLStatement.cpp \
+ SQLStatementSync.cpp \
+ SQLTransaction.cpp \
+ SQLTransactionClient.cpp \
+ SQLTransactionCoordinator.cpp \
+ SQLTransactionSync.cpp \
+ JSCustomSQLStatementErrorCallback.cpp \
+ JSSQLResultSetRowListCustom.cpp \
+ JSSQLTransactionCustom.cpp \
+ JSSQLTransactionSyncCustom.cpp \
+ IconDatabase.cpp \
+ IconRecord.cpp \
+ PageURLRecord.cpp \
+ JSDedicatedWorkerContextCustom.cpp \
+ JSWorkerContextBase.cpp \
+ JSWorkerContextCustom.cpp \
+ JSWorkerCustom.cpp \
+ WorkerScriptController.cpp \
+ WorkerScriptDebugServer.cpp \
+ WorkerThreadableLoader.cpp \
+ WorkerNavigator.cpp \
+ AbstractWorker.cpp \
+ DedicatedWorkerContext.cpp \
+ DedicatedWorkerThread.cpp \
+ Worker.cpp \
+ WorkerContext.cpp \
+ WorkerEventQueue.cpp \
+ WorkerLocation.cpp \
+ WorkerMessagingProxy.cpp \
+ WorkerRunLoop.cpp \
+ WorkerThread.cpp \
+ WorkerScriptLoader.cpp \
+ JSSharedWorkerCustom.cpp \
+ DefaultSharedWorkerRepository.cpp \
+ SharedWorker.cpp \
+ SharedWorkerContext.cpp \
+ SharedWorkerThread.cpp \
+ FELightingNEON.cpp \
+ CustomFilterValidatedProgramTextureMapper.cpp \
+ CustomFilterGlobalContext.cpp \
+ CustomFilterOperation.cpp \
+ CustomFilterParameterList.cpp \
+ ValidatedCustomFilterOperation.cpp \
+ CustomFilterProgram.cpp \
+ CustomFilterProgramInfo.cpp \
+ CustomFilterCompiledProgram.cpp \
+ CustomFilterMesh.cpp \
+ CustomFilterMeshGenerator.cpp \
+ CustomFilterRenderer.cpp \
+ CustomFilterValidatedProgram.cpp \
+ DistantLightSource.cpp \
+ FEBlend.cpp \
+ FEColorMatrix.cpp \
+ FEComponentTransfer.cpp \
+ FEComposite.cpp \
+ FEConvolveMatrix.cpp \
+ FECustomFilter.cpp \
+ FEDiffuseLighting.cpp \
+ FEDisplacementMap.cpp \
+ FEDropShadow.cpp \
+ FEFlood.cpp \
+ FEGaussianBlur.cpp \
+ FELighting.cpp \
+ FEMerge.cpp \
+ FEMorphology.cpp \
+ FEOffset.cpp \
+ FESpecularLighting.cpp \
+ FETile.cpp \
+ FETurbulence.cpp \
+ FilterOperations.cpp \
+ FilterOperation.cpp \
+ FilterEffect.cpp \
+ LightSource.cpp \
+ PointLightSource.cpp \
+ SpotLightSource.cpp \
+ SourceAlpha.cpp \
+ SourceGraphic.cpp \
+ JSSVGElementInstanceCustom.cpp \
+ JSSVGLengthCustom.cpp \
+ JSSVGPathSegCustom.cpp \
+ SVGCSSComputedStyleDeclaration.cpp \
+ SVGCSSParser.cpp \
+ SVGCSSStyleSelector.cpp \
+ SMILTime.cpp \
+ SMILTimeContainer.cpp \
+ SVGSMILElement.cpp \
+ SVGFEImage.cpp \
+ SVGFilter.cpp \
+ SVGFilterBuilder.cpp \
+ SVGImage.cpp \
+ SVGImageCache.cpp \
+ SVGAttributeToPropertyMap.cpp \
+ SVGPathSegListPropertyTearOff.cpp \
+ JSJavaScriptCallFrameCustom.cpp \
+ ScriptProfiler.cpp \
+ JavaScriptCallFrame.cpp \
+ WebSocket.cpp \
+ WebSocketChannel.cpp \
+ WebSocketDeflateFramer.cpp \
+ WebSocketDeflater.cpp \
+ WebSocketExtensionDispatcher.cpp \
+ WebSocketExtensionParser.cpp \
+ WebSocketFrame.cpp \
+ WebSocketHandshake.cpp \
+ WebSocketHandshakeRequest.cpp \
+ WebSocketHandshakeResponse.cpp \
+ WorkerThreadableWebSocketChannel.cpp \
+ ThreadableWebSocketChannel.cpp \
+ ThreadableWebSocketChannelClientWrapper.cpp \
+ SocketStreamErrorBase.cpp \
+ SocketStreamHandleBase.cpp \
+ SocketStreamHandleQt.cpp \
+ JSWebSocketCustom.cpp \
+ Archive.cpp \
+ ArchiveFactory.cpp \
+ MHTMLArchive.cpp \
+ MHTMLParser.cpp \
+ PageSerializer.cpp \
+ ICOImageDecoder.cpp \
+ PNGImageDecoder.cpp \
+ JPEGImageDecoder.cpp \
+ sqlite3.c \
+ MathMLNames.cpp \
+ MathMLElementFactory.cpp \
+ SVGNames.cpp \
+ SVGElementFactory.cpp \
+ JSSVGElementWrapperFactory.cpp \
+ XLinkNames.cpp \
+ CSSPropertyNames.cpp \
+ CSSValueKeywords.cpp \
+ JSDOMFileSystem.cpp \
+ JSDOMFileSystemSync.cpp \
+ JSDOMWindowFileSystem.cpp \
+ JSDirectoryEntry.cpp \
+ JSDirectoryEntrySync.cpp \
+ JSDirectoryReader.cpp \
+ JSDirectoryReaderSync.cpp \
+ JSEntriesCallback.cpp \
+ JSEntry.cpp \
+ JSEntryArray.cpp \
+ JSEntryArraySync.cpp \
+ JSEntryCallback.cpp \
+ JSEntrySync.cpp \
+ JSErrorCallback.cpp \
+ JSFileCallback.cpp \
+ JSFileEntry.cpp \
+ JSFileEntrySync.cpp \
+ JSFileSystemCallback.cpp \
+ JSFileWriter.cpp \
+ JSFileWriterCallback.cpp \
+ JSMetadata.cpp \
+ JSMetadataCallback.cpp \
+ JSWorkerContextFileSystem.cpp \
+ JSGeolocation.cpp \
+ JSGeoposition.cpp \
+ JSNavigatorGeolocation.cpp \
+ JSPositionCallback.cpp \
+ JSPositionError.cpp \
+ JSPositionErrorCallback.cpp \
+ JSDOMWindowIndexedDatabase.cpp \
+ JSIDBAny.cpp \
+ JSIDBCursor.cpp \
+ JSIDBDatabaseException.cpp \
+ JSIDBDatabase.cpp \
+ JSIDBFactory.cpp \
+ JSIDBIndex.cpp \
+ JSIDBKey.cpp \
+ JSIDBKeyRange.cpp \
+ JSIDBObjectStore.cpp \
+ JSIDBRequest.cpp \
+ JSIDBTransaction.cpp \
+ JSWorkerContextIndexedDatabase.cpp \
+ JSDOMWindowNotifications.cpp \
+ JSNotification.cpp \
+ JSNotificationCenter.cpp \
+ JSNotificationPermissionCallback.cpp \
+ JSWorkerContextNotifications.cpp \
+ JSDOMWindowQuota.cpp \
+ JSStorageInfo.cpp \
+ JSStorageInfoErrorCallback.cpp \
+ JSStorageInfoQuotaCallback.cpp \
+ JSStorageInfoUsageCallback.cpp \
+ JSAudioBuffer.cpp \
+ JSAudioBufferCallback.cpp \
+ JSAudioBufferSourceNode.cpp \
+ JSChannelMergerNode.cpp \
+ JSChannelSplitterNode.cpp \
+ JSAudioContext.cpp \
+ JSAudioDestinationNode.cpp \
+ JSAudioGain.cpp \
+ JSGainNode.cpp \
+ JSAudioListener.cpp \
+ JSAudioNode.cpp \
+ JSPannerNode.cpp \
+ JSAudioParam.cpp \
+ JSAudioProcessingEvent.cpp \
+ JSAudioSourceNode.cpp \
+ JSBiquadFilterNode.cpp \
+ JSConvolverNode.cpp \
+ JSDelayNode.cpp \
+ JSDOMWindowWebAudio.cpp \
+ JSDynamicsCompressorNode.cpp \
+ JSScriptProcessorNode.cpp \
+ JSMediaElementAudioSourceNode.cpp \
+ JSMediaStreamAudioSourceNode.cpp \
+ JSOfflineAudioCompletionEvent.cpp \
+ JSOscillatorNode.cpp \
+ JSAnalyserNode.cpp \
+ JSWaveShaperNode.cpp \
+ JSWaveTable.cpp \
+ JSDOMWindowWebDatabase.cpp \
+ JSDatabase.cpp \
+ JSDatabaseCallback.cpp \
+ JSDatabaseSync.cpp \
+ JSSQLError.cpp \
+ JSSQLException.cpp \
+ JSSQLResultSet.cpp \
+ JSSQLResultSetRowList.cpp \
+ JSSQLStatementCallback.cpp \
+ JSSQLStatementErrorCallback.cpp \
+ JSSQLTransaction.cpp \
+ JSSQLTransactionCallback.cpp \
+ JSSQLTransactionErrorCallback.cpp \
+ JSSQLTransactionSync.cpp \
+ JSSQLTransactionSyncCallback.cpp \
+ JSWorkerContextWebDatabase.cpp \
+ JSCloseEvent.cpp \
+ JSDOMWindowWebSocket.cpp \
+ JSWebSocket.cpp \
+ JSWorkerContextWebSocket.cpp \
+ JSCounter.cpp \
+ JSCSSCharsetRule.cpp \
+ JSCSSFontFaceRule.cpp \
+ JSCSSImportRule.cpp \
+ JSCSSMediaRule.cpp \
+ JSCSSPageRule.cpp \
+ JSCSSPrimitiveValue.cpp \
+ JSCSSRule.cpp \
+ JSCSSRuleList.cpp \
+ JSCSSStyleDeclaration.cpp \
+ JSCSSStyleRule.cpp \
+ JSCSSStyleSheet.cpp \
+ JSCSSValue.cpp \
+ JSCSSValueList.cpp \
+ JSMediaList.cpp \
+ JSMediaQueryList.cpp \
+ JSRect.cpp \
+ JSRGBColor.cpp \
+ JSStyleMedia.cpp \
+ JSStyleSheet.cpp \
+ JSStyleSheetList.cpp \
+ JSWebKitCSSFilterValue.cpp \
+ JSWebKitCSSKeyframeRule.cpp \
+ JSWebKitCSSKeyframesRule.cpp \
+ JSWebKitCSSMatrix.cpp \
+ JSWebKitCSSMixFunctionValue.cpp \
+ JSWebKitCSSRegionRule.cpp \
+ JSWebKitCSSTransformValue.cpp \
+ JSWebKitCSSViewportRule.cpp \
+ JSAttr.cpp \
+ JSBeforeLoadEvent.cpp \
+ JSCharacterData.cpp \
+ JSClientRect.cpp \
+ JSClientRectList.cpp \
+ JSClipboard.cpp \
+ JSCDATASection.cpp \
+ JSComment.cpp \
+ JSCompositionEvent.cpp \
+ JSCustomEvent.cpp \
+ JSDataTransferItem.cpp \
+ JSDataTransferItemList.cpp \
+ JSDeviceMotionEvent.cpp \
+ JSDeviceOrientationEvent.cpp \
+ JSDocumentFragment.cpp \
+ JSDocument.cpp \
+ JSDocumentType.cpp \
+ JSDOMCoreException.cpp \
+ JSDOMError.cpp \
+ JSDOMImplementation.cpp \
+ JSDOMStringList.cpp \
+ JSDOMStringMap.cpp \
+ JSElement.cpp \
+ JSEntity.cpp \
+ JSEntityReference.cpp \
+ JSErrorEvent.cpp \
+ JSEvent.cpp \
+ JSEventException.cpp \
+ JSEventTarget.cpp \
+ JSHashChangeEvent.cpp \
+ JSKeyboardEvent.cpp \
+ JSMouseEvent.cpp \
+ JSMessageChannel.cpp \
+ JSMessageEvent.cpp \
+ JSMessagePort.cpp \
+ JSMutationCallback.cpp \
+ JSMutationEvent.cpp \
+ JSMutationObserver.cpp \
+ JSMutationRecord.cpp \
+ JSNamedNodeMap.cpp \
+ JSNode.cpp \
+ JSNodeFilter.cpp \
+ JSNodeIterator.cpp \
+ JSNodeList.cpp \
+ JSNotation.cpp \
+ JSOverflowEvent.cpp \
+ JSPageTransitionEvent.cpp \
+ JSPopStateEvent.cpp \
+ JSProcessingInstruction.cpp \
+ JSProgressEvent.cpp \
+ JSPropertyNodeList.cpp \
+ JSRangeException.cpp \
+ JSRange.cpp \
+ JSRequestAnimationFrameCallback.cpp \
+ JSShadowRoot.cpp \
+ JSStringCallback.cpp \
+ JSText.cpp \
+ JSTextEvent.cpp \
+ JSTouch.cpp \
+ JSTouchEvent.cpp \
+ JSTouchList.cpp \
+ JSTreeWalker.cpp \
+ JSUIEvent.cpp \
+ JSWebKitAnimationEvent.cpp \
+ JSWebKitNamedFlow.cpp \
+ JSDOMNamedFlowCollection.cpp \
+ JSWebKitTransitionEvent.cpp \
+ JSWheelEvent.cpp \
+ JSBlob.cpp \
+ JSFile.cpp \
+ JSFileError.cpp \
+ JSFileException.cpp \
+ JSFileList.cpp \
+ JSFileReader.cpp \
+ JSFileReaderSync.cpp \
+ JSArrayBufferView.cpp \
+ JSArrayBuffer.cpp \
+ JSDataView.cpp \
+ JSInt8Array.cpp \
+ JSFloat32Array.cpp \
+ JSFloat64Array.cpp \
+ JSCanvasGradient.cpp \
+ JSInt32Array.cpp \
+ JSCanvasPattern.cpp \
+ JSCanvasRenderingContext.cpp \
+ JSCanvasRenderingContext2D.cpp \
+ JSEXTTextureFilterAnisotropic.cpp \
+ JSOESStandardDerivatives.cpp \
+ JSOESTextureFloat.cpp \
+ JSOESVertexArrayObject.cpp \
+ JSOESElementIndexUint.cpp \
+ JSWebGLActiveInfo.cpp \
+ JSWebGLBuffer.cpp \
+ JSWebGLCompressedTextureS3TC.cpp \
+ JSWebGLContextAttributes.cpp \
+ JSWebGLContextEvent.cpp \
+ JSWebGLDebugRendererInfo.cpp \
+ JSWebGLDebugShaders.cpp \
+ JSWebGLDepthTexture.cpp \
+ JSWebGLFramebuffer.cpp \
+ JSWebGLLoseContext.cpp \
+ JSWebGLProgram.cpp \
+ JSWebGLRenderbuffer.cpp \
+ JSWebGLRenderingContext.cpp \
+ JSWebGLShader.cpp \
+ JSWebGLShaderPrecisionFormat.cpp \
+ JSInt16Array.cpp \
+ JSWebGLTexture.cpp \
+ JSWebGLUniformLocation.cpp \
+ JSWebGLVertexArrayObjectOES.cpp \
+ JSUint8Array.cpp \
+ JSUint8ClampedArray.cpp \
+ JSUint32Array.cpp \
+ JSUint16Array.cpp \
+ JSDOMFormData.cpp \
+ JSDOMSettableTokenList.cpp \
+ JSDOMTokenList.cpp \
+ JSDOMURL.cpp \
+ JSHTMLAllCollection.cpp \
+ JSHTMLAudioElement.cpp \
+ JSHTMLAnchorElement.cpp \
+ JSHTMLAppletElement.cpp \
+ JSHTMLAreaElement.cpp \
+ JSHTMLBaseElement.cpp \
+ JSHTMLBaseFontElement.cpp \
+ JSHTMLBodyElement.cpp \
+ JSHTMLBRElement.cpp \
+ JSHTMLButtonElement.cpp \
+ JSHTMLCanvasElement.cpp \
+ JSHTMLCollection.cpp \
+ JSHTMLDataListElement.cpp \
+ JSHTMLDetailsElement.cpp \
+ JSHTMLDialogElement.cpp \
+ JSHTMLDirectoryElement.cpp \
+ JSHTMLDivElement.cpp \
+ JSHTMLDListElement.cpp \
+ JSHTMLDocument.cpp \
+ JSHTMLElement.cpp \
+ JSHTMLEmbedElement.cpp \
+ JSHTMLFieldSetElement.cpp \
+ JSHTMLFontElement.cpp \
+ JSHTMLFormControlsCollection.cpp \
+ JSHTMLFormElement.cpp \
+ JSHTMLFrameElement.cpp \
+ JSHTMLFrameSetElement.cpp \
+ JSHTMLHeadElement.cpp \
+ JSHTMLHeadingElement.cpp \
+ JSHTMLHRElement.cpp \
+ JSHTMLHtmlElement.cpp \
+ JSHTMLIFrameElement.cpp \
+ JSHTMLImageElement.cpp \
+ JSHTMLInputElement.cpp \
+ JSHTMLKeygenElement.cpp \
+ JSHTMLLabelElement.cpp \
+ JSHTMLLegendElement.cpp \
+ JSHTMLLIElement.cpp \
+ JSHTMLLinkElement.cpp \
+ JSHTMLMapElement.cpp \
+ JSHTMLMarqueeElement.cpp \
+ JSHTMLMediaElement.cpp \
+ JSHTMLMenuElement.cpp \
+ JSHTMLMetaElement.cpp \
+ JSHTMLMeterElement.cpp \
+ JSHTMLModElement.cpp \
+ JSHTMLObjectElement.cpp \
+ JSHTMLOListElement.cpp \
+ JSHTMLOptGroupElement.cpp \
+ JSHTMLOptionElement.cpp \
+ JSHTMLOptionsCollection.cpp \
+ JSHTMLOutputElement.cpp \
+ JSHTMLParagraphElement.cpp \
+ JSHTMLParamElement.cpp \
+ JSHTMLPreElement.cpp \
+ JSHTMLProgressElement.cpp \
+ JSHTMLPropertiesCollection.cpp \
+ JSHTMLQuoteElement.cpp \
+ JSHTMLScriptElement.cpp \
+ JSHTMLSelectElement.cpp \
+ JSHTMLSourceElement.cpp \
+ JSHTMLSpanElement.cpp \
+ JSHTMLStyleElement.cpp \
+ JSHTMLTableCaptionElement.cpp \
+ JSHTMLTableCellElement.cpp \
+ JSHTMLTableColElement.cpp \
+ JSHTMLTableElement.cpp \
+ JSHTMLTableRowElement.cpp \
+ JSHTMLTableSectionElement.cpp \
+ JSHTMLTextAreaElement.cpp \
+ JSHTMLTitleElement.cpp \
+ JSHTMLTrackElement.cpp \
+ JSHTMLUListElement.cpp \
+ JSHTMLUnknownElement.cpp \
+ JSHTMLVideoElement.cpp \
+ JSImageData.cpp \
+ JSMediaController.cpp \
+ JSMediaError.cpp \
+ JSMicroDataItemValue.cpp \
+ JSRadioNodeList.cpp \
+ JSTextMetrics.cpp \
+ JSTimeRanges.cpp \
+ JSValidityState.cpp \
+ JSVoidCallback.cpp \
+ JSHTMLContentElement.cpp \
+ JSHTMLShadowElement.cpp \
+ JSInjectedScriptHost.cpp \
+ JSInspectorFrontendHost.cpp \
+ JSJavaScriptCallFrame.cpp \
+ JSScriptProfile.cpp \
+ JSScriptProfileNode.cpp \
+ JSDOMApplicationCache.cpp \
+ JSBarInfo.cpp \
+ JSConsole.cpp \
+ JSCoordinates.cpp \
+ JSCrypto.cpp \
+ JSDOMSecurityPolicy.cpp \
+ JSDOMSelection.cpp \
+ JSDOMWindow.cpp \
+ JSEventSource.cpp \
+ JSHistory.cpp \
+ JSLocation.cpp \
+ JSMemoryInfo.cpp \
+ JSNavigator.cpp \
+ JSPerformance.cpp \
+ JSPerformanceEntry.cpp \
+ JSPerformanceEntryList.cpp \
+ JSPerformanceNavigation.cpp \
+ JSPerformanceResourceTiming.cpp \
+ JSPerformanceTiming.cpp \
+ JSScreen.cpp \
+ JSSpeechInputEvent.cpp \
+ JSSpeechInputResult.cpp \
+ JSSpeechInputResultList.cpp \
+ JSWebKitAnimation.cpp \
+ JSWebKitAnimationList.cpp \
+ JSWebKitPoint.cpp \
+ JSWorkerNavigator.cpp \
+ JSDOMPlugin.cpp \
+ JSDOMMimeType.cpp \
+ JSDOMPluginArray.cpp \
+ JSDOMMimeTypeArray.cpp \
+ JSStorage.cpp \
+ JSStorageEvent.cpp \
+ JSInternals.cpp \
+ JSInternalSettings.cpp \
+ JSMallocStatistics.cpp \
+ JSAbstractWorker.cpp \
+ JSDedicatedWorkerContext.cpp \
+ JSSharedWorker.cpp \
+ JSSharedWorkerContext.cpp \
+ JSWorker.cpp \
+ JSWorkerContext.cpp \
+ JSWorkerLocation.cpp \
+ JSDOMParser.cpp \
+ JSXMLHttpRequest.cpp \
+ JSXMLHttpRequestException.cpp \
+ JSXMLHttpRequestProgressEvent.cpp \
+ JSXMLHttpRequestUpload.cpp \
+ JSXMLSerializer.cpp \
+ JSXPathNSResolver.cpp \
+ JSXPathException.cpp \
+ JSXPathExpression.cpp \
+ JSXPathResult.cpp \
+ JSXPathEvaluator.cpp \
+ JSXSLTProcessor.cpp \
+ JSSVGAElement.cpp \
+ JSSVGAltGlyphDefElement.cpp \
+ JSSVGAltGlyphElement.cpp \
+ JSSVGAltGlyphItemElement.cpp \
+ JSSVGAngle.cpp \
+ JSSVGAnimateColorElement.cpp \
+ JSSVGAnimateMotionElement.cpp \
+ JSSVGAnimatedAngle.cpp \
+ JSSVGAnimatedBoolean.cpp \
+ JSSVGAnimatedEnumeration.cpp \
+ JSSVGAnimatedInteger.cpp \
+ JSSVGAnimatedLength.cpp \
+ JSSVGAnimatedLengthList.cpp \
+ JSSVGAnimatedNumber.cpp \
+ JSSVGAnimatedNumberList.cpp \
+ JSSVGAnimatedPreserveAspectRatio.cpp \
+ JSSVGAnimatedRect.cpp \
+ JSSVGAnimatedString.cpp \
+ JSSVGAnimatedTransformList.cpp \
+ JSSVGAnimateElement.cpp \
+ JSSVGAnimateTransformElement.cpp \
+ JSSVGAnimationElement.cpp \
+ JSSVGCircleElement.cpp \
+ JSSVGClipPathElement.cpp \
+ JSSVGColor.cpp \
+ JSSVGComponentTransferFunctionElement.cpp \
+ JSSVGCursorElement.cpp \
+ JSSVGDefsElement.cpp \
+ JSSVGDescElement.cpp \
+ JSSVGDocument.cpp \
+ JSSVGElement.cpp \
+ JSSVGElementInstance.cpp \
+ JSSVGElementInstanceList.cpp \
+ JSSVGEllipseElement.cpp \
+ JSSVGException.cpp \
+ JSSVGFEBlendElement.cpp \
+ JSSVGFEColorMatrixElement.cpp \
+ JSSVGFEComponentTransferElement.cpp \
+ JSSVGFECompositeElement.cpp \
+ JSSVGFEConvolveMatrixElement.cpp \
+ JSSVGFEDiffuseLightingElement.cpp \
+ JSSVGFEDisplacementMapElement.cpp \
+ JSSVGFEDistantLightElement.cpp \
+ JSSVGFEDropShadowElement.cpp \
+ JSSVGFEFloodElement.cpp \
+ JSSVGFEFuncAElement.cpp \
+ JSSVGFEFuncBElement.cpp \
+ JSSVGFEFuncGElement.cpp \
+ JSSVGFEFuncRElement.cpp \
+ JSSVGFEGaussianBlurElement.cpp \
+ JSSVGFEImageElement.cpp \
+ JSSVGFEMergeElement.cpp \
+ JSSVGFEMergeNodeElement.cpp \
+ JSSVGFEMorphologyElement.cpp \
+ JSSVGFEOffsetElement.cpp \
+ JSSVGFEPointLightElement.cpp \
+ JSSVGFESpecularLightingElement.cpp \
+ JSSVGFESpotLightElement.cpp \
+ JSSVGFETileElement.cpp \
+ JSSVGFETurbulenceElement.cpp \
+ JSSVGFilterElement.cpp \
+ JSSVGFontElement.cpp \
+ JSSVGFontFaceElement.cpp \
+ JSSVGFontFaceFormatElement.cpp \
+ JSSVGFontFaceNameElement.cpp \
+ JSSVGFontFaceSrcElement.cpp \
+ JSSVGFontFaceUriElement.cpp \
+ JSSVGForeignObjectElement.cpp \
+ JSSVGGElement.cpp \
+ JSSVGGlyphElement.cpp \
+ JSSVGGlyphRefElement.cpp \
+ JSSVGGradientElement.cpp \
+ JSSVGHKernElement.cpp \
+ JSSVGImageElement.cpp \
+ JSSVGLength.cpp \
+ JSSVGLengthList.cpp \
+ JSSVGLinearGradientElement.cpp \
+ JSSVGLineElement.cpp \
+ JSSVGMarkerElement.cpp \
+ JSSVGMaskElement.cpp \
+ JSSVGMatrix.cpp \
+ JSSVGMetadataElement.cpp \
+ JSSVGMissingGlyphElement.cpp \
+ JSSVGMPathElement.cpp \
+ JSSVGNumber.cpp \
+ JSSVGNumberList.cpp \
+ JSSVGPaint.cpp \
+ JSSVGPathElement.cpp \
+ JSSVGPathSegArcAbs.cpp \
+ JSSVGPathSegArcRel.cpp \
+ JSSVGPathSegClosePath.cpp \
+ JSSVGPathSegCurvetoCubicAbs.cpp \
+ JSSVGPathSegCurvetoCubicRel.cpp \
+ JSSVGPathSegCurvetoCubicSmoothAbs.cpp \
+ JSSVGPathSegCurvetoCubicSmoothRel.cpp \
+ JSSVGPathSegCurvetoQuadraticAbs.cpp \
+ JSSVGPathSegCurvetoQuadraticRel.cpp \
+ JSSVGPathSegCurvetoQuadraticSmoothAbs.cpp \
+ JSSVGPathSegCurvetoQuadraticSmoothRel.cpp \
+ JSSVGPathSeg.cpp \
+ JSSVGPathSegLinetoAbs.cpp \
+ JSSVGPathSegLinetoHorizontalAbs.cpp \
+ JSSVGPathSegLinetoHorizontalRel.cpp \
+ JSSVGPathSegLinetoRel.cpp \
+ JSSVGPathSegLinetoVerticalAbs.cpp \
+ JSSVGPathSegLinetoVerticalRel.cpp \
+ JSSVGPathSegList.cpp \
+ JSSVGPathSegMovetoAbs.cpp \
+ JSSVGPathSegMovetoRel.cpp \
+ JSSVGPatternElement.cpp \
+ JSSVGPoint.cpp \
+ JSSVGPointList.cpp \
+ JSSVGPolygonElement.cpp \
+ JSSVGPolylineElement.cpp \
+ JSSVGPreserveAspectRatio.cpp \
+ JSSVGRadialGradientElement.cpp \
+ JSSVGRectElement.cpp \
+ JSSVGRect.cpp \
+ JSSVGRenderingIntent.cpp \
+ JSSVGScriptElement.cpp \
+ JSSVGSetElement.cpp \
+ JSSVGStopElement.cpp \
+ JSSVGStringList.cpp \
+ JSSVGStyleElement.cpp \
+ JSSVGSVGElement.cpp \
+ JSSVGSwitchElement.cpp \
+ JSSVGSymbolElement.cpp \
+ JSSVGTextContentElement.cpp \
+ JSSVGTextElement.cpp \
+ JSSVGTextPathElement.cpp \
+ JSSVGTextPositioningElement.cpp \
+ JSSVGTitleElement.cpp \
+ JSSVGTransform.cpp \
+ JSSVGTransformList.cpp \
+ JSSVGTRefElement.cpp \
+ JSSVGTSpanElement.cpp \
+ JSSVGUnitTypes.cpp \
+ JSSVGUseElement.cpp \
+ JSSVGViewElement.cpp \
+ JSSVGVKernElement.cpp \
+ JSSVGViewSpec.cpp \
+ JSSVGZoomAndPan.cpp \
+ JSSVGZoomEvent.cpp \
+ InspectorFrontend.cpp \
+ InspectorBackendDispatcher.cpp \
+ InspectorTypeBuilder.cpp \
+ CSSGrammar.cpp \
+ HTMLNames.cpp \
+ HTMLElementFactory.cpp \
+ JSHTMLElementWrapperFactory.cpp \
+ XMLNSNames.cpp \
+ XMLNames.cpp \
+ WebKitFontFamilyNames.cpp \
+ EventFactory.cpp \
+ ExceptionCodeDescription.cpp \
+ HTMLEntityTable.cpp \
+ ColorData.cpp \
+ UserAgentStyleSheetsData.cpp \
+ XPathGrammar.cpp \
+ RenderSVGAllInOne.cpp \
+ SVGAllInOne.cpp \
+ AccessibilityAllInOne.cpp \
+ InspectorAllInOne.cpp \
+ ApplicationCacheAllInOne.cpp \
+ TextAllInOne.cpp \
+ StyleAllInOne.cpp \
+ HTMLElementsAllInOne.cpp \
+ EditingAllInOne.cpp \
+ RenderingAllInOne.cpp \
+ moc_QtMIMETypeSniffer.cpp
+
+QT_VPATH += \
+ qtbase/src/3rdparty/sqlite \
+ qtwebkit/Source/WebCore/accessibility \
+ qtwebkit/Source/WebCore/accessibility/qt \
+ qtwebkit/Source/WebCore/bindings \
+ qtwebkit/Source/WebCore/bindings/generic \
+ qtwebkit/Source/WebCore/bindings/js \
+ qtwebkit/Source/WebCore/bridge \
+ qtwebkit/Source/WebCore/bridge/c \
+ qtwebkit/Source/WebCore/bridge/jsc \
+ qtwebkit/Source/WebCore/bridge/qt \
+ qtwebkit/Source/WebCore/css \
+ qtwebkit/Source/WebCore/dom \
+ qtwebkit/Source/WebCore/dom/default \
+ qtwebkit/Source/WebCore/editing \
+ qtwebkit/Source/WebCore/editing/qt \
+ qtwebkit/Source/WebCore/fileapi \
+ qtwebkit/Source/WebCore/history \
+ qtwebkit/Source/WebCore/history/qt \
+ qtwebkit/Source/WebCore/html \
+ qtwebkit/Source/WebCore/html/canvas \
+ qtwebkit/Source/WebCore/html/parser \
+ qtwebkit/Source/WebCore/html/shadow \
+ qtwebkit/Source/WebCore/inspector \
+ qtwebkit/Source/WebCore/loader \
+ qtwebkit/Source/WebCore/loader/appcache \
+ qtwebkit/Source/WebCore/loader/archive \
+ qtwebkit/Source/WebCore/loader/archive/mhtml \
+ qtwebkit/Source/WebCore/loader/cache \
+ qtwebkit/Source/WebCore/loader/icon \
+ qtwebkit/Source/WebCore/Modules/filesystem \
+ qtwebkit/Source/WebCore/Modules/geolocation \
+ qtwebkit/Source/WebCore/Modules/navigatorcontentutils \
+ qtwebkit/Source/WebCore/Modules/notifications \
+ qtwebkit/Source/WebCore/Modules/webdatabase \
+ qtwebkit/Source/WebCore/Modules/websockets \
+ qtwebkit/Source/WebCore/page \
+ qtwebkit/Source/WebCore/page/animation \
+ qtwebkit/Source/WebCore/page/qt \
+ qtwebkit/Source/WebCore/page/scrolling \
+ qtwebkit/Source/WebCore/platform \
+ qtwebkit/Source/WebCore/platform/animation \
+ qtwebkit/Source/WebCore/platform/graphics \
+ qtwebkit/Source/WebCore/platform/graphics/cpu/arm/filters \
+ qtwebkit/Source/WebCore/platform/graphics/filters \
+ qtwebkit/Source/WebCore/platform/graphics/filters/texmap \
+ qtwebkit/Source/WebCore/platform/graphics/qt \
+ qtwebkit/Source/WebCore/platform/graphics/surfaces \
+ qtwebkit/Source/WebCore/platform/graphics/surfaces/qt \
+ qtwebkit/Source/WebCore/platform/graphics/texmap \
+ qtwebkit/Source/WebCore/platform/graphics/transforms \
+ qtwebkit/Source/WebCore/platform/image-decoders \
+ qtwebkit/Source/WebCore/platform/image-decoders/bmp \
+ qtwebkit/Source/WebCore/platform/image-decoders/gif \
+ qtwebkit/Source/WebCore/platform/image-decoders/ico \
+ qtwebkit/Source/WebCore/platform/image-decoders/jpeg \
+ qtwebkit/Source/WebCore/platform/image-decoders/png \
+ qtwebkit/Source/WebCore/platform/leveldb \
+ qtwebkit/Source/WebCore/platform/mock \
+ qtwebkit/Source/WebCore/platform/network \
+ qtwebkit/Source/WebCore/platform/network/qt \
+ qtwebkit/Source/WebCore/platform/qt \
+ qtwebkit/Source/WebCore/platform/sql \
+ qtwebkit/Source/WebCore/platform/text \
+ qtwebkit/Source/WebCore/platform/text/qt \
+ qtwebkit/Source/WebCore/platform/text/transcoder \
+ qtwebkit/Source/WebCore/plugins \
+ qtwebkit/Source/WebCore/rendering \
+ qtwebkit/Source/WebCore/rendering/style \
+ qtwebkit/Source/WebCore/rendering/svg \
+ qtwebkit/Source/WebCore/storage \
+ qtwebkit/Source/WebCore/svg \
+ qtwebkit/Source/WebCore/svg/animation \
+ qtwebkit/Source/WebCore/svg/graphics \
+ qtwebkit/Source/WebCore/svg/graphics/filters \
+ qtwebkit/Source/WebCore/svg/properties \
+ qtwebkit/Source/WebCore/testing \
+ qtwebkit/Source/WebCore/testing/js \
+ qtwebkit/Source/WebCore/workers \
+ qtwebkit/Source/WebCore/xml \
+ qtwebkit/Source/WebCore/xml/parser \
+
+# 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_QtMIMETypeSniffer.cpp \
+ moc_QNetworkReplyHandler.cpp \
+ moc_NetworkStateNotifierPrivate.cpp \
+ moc_CookieJarQt.cpp \
+ moc_SocketStreamHandlePrivate.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 = \
+ DNSQt.moc \
+ RunLoopQt.moc \
+ SharedTimerQt.moc
+
diff --git a/libports/lib/mk/qt5_webkit.mk b/libports/lib/mk/qt5_webkit.mk
new file mode 100644
index 0000000000..70b6fca8b1
--- /dev/null
+++ b/libports/lib/mk/qt5_webkit.mk
@@ -0,0 +1,25 @@
+include $(REP_DIR)/lib/import/import-qt5_webkit.mk
+
+SHARED_LIB = yes
+
+# additional defines for the Genode version
+CC_OPT += -DSQLITE_NO_SYNC=1 -DSQLITE_THREADSAFE=0
+
+# enable C++ functions that use C99 math functions (disabled by default in the Genode tool chain)
+CC_CXX_OPT += -D_GLIBCXX_USE_C99_MATH
+
+# use default warning level to avoid noise when compiling contrib code
+CC_WARN = -Wno-deprecated-declarations
+
+CC_OPT_sqlite3 += -Wno-int-to-pointer-cast -Wno-pointer-to-int-cast
+
+include $(REP_DIR)/lib/mk/qt5_webkit_generated.inc
+
+QT_INCPATH += qtwebkit/Source/WebCore/generated
+
+include $(REP_DIR)/lib/mk/qt5.inc
+
+LIBS += qt5_webcore qt5_jscore qt5_network qt5_printsupport qt5_core icu libc libm
+
+vpath %.qrc $(REP_DIR)/contrib/$(QT5)/src/3rdparty/webkit/Source/WebCore
+vpath %.qrc $(REP_DIR)/contrib/$(QT5)/src/3rdparty/webkit/Source/WebCore/inspector/front-end
diff --git a/libports/lib/mk/qt5_webkit_generated.inc b/libports/lib/mk/qt5_webkit_generated.inc
new file mode 100644
index 0000000000..3b2dde73e7
--- /dev/null
+++ b/libports/lib/mk/qt5_webkit_generated.inc
@@ -0,0 +1,197 @@
+QT_DEFINES += -DQT_NO_LIBUDEV -DQT_NO_XCB -DQT_NO_XKBCOMMON -DBUILDING_QT__=1 -DNDEBUG -DENABLE_3D_RENDERING=1 -DENABLE_BLOB=1 -DENABLE_CHANNEL_MESSAGING=1 -DENABLE_CSS_BOX_DECORATION_BREAK=1 -DENABLE_CSS_COMPOSITING=1 -DENABLE_CSS_EXCLUSIONS=1 -DENABLE_CSS_FILTERS=1 -DENABLE_CSS_IMAGE_SET=1 -DENABLE_CSS_REGIONS=1 -DENABLE_CSS_STICKY_POSITION=1 -DENABLE_DATALIST_ELEMENT=1 -DENABLE_DETAILS_ELEMENT=1 -DENABLE_FAST_MOBILE_SCROLLING=1 -DENABLE_FILTERS=1 -DENABLE_FTPDIR=1 -DENABLE_GESTURE_EVENTS=1 -DENABLE_ICONDATABASE=1 -DENABLE_IFRAME_SEAMLESS=1 -DENABLE_INPUT_TYPE_COLOR=1 -DENABLE_INSPECTOR=1 -DENABLE_INSPECTOR_SERVER=1 -DENABLE_JAVASCRIPT_DEBUGGER=1 -DENABLE_LEGACY_NOTIFICATIONS=1 -DENABLE_LEGACY_VIEWPORT_ADAPTION=1 -DENABLE_LEGACY_VENDOR_PREFIXES=1 -DENABLE_LINK_PREFETCH=1 -DENABLE_METER_ELEMENT=1 -DENABLE_MHTML=1 -DENABLE_MUTATION_OBSERVERS=1 -DENABLE_NOTIFICATIONS=1 -DENABLE_PAGE_VISIBILITY_API=1 -DENABLE_PROGRESS_ELEMENT=1 -DENABLE_RESOLUTION_MEDIA_QUERY=1 -DENABLE_REQUEST_ANIMATION_FRAME=1 -DENABLE_SHARED_WORKERS=1 -DENABLE_SMOOTH_SCROLLING=1 -DENABLE_SQL_DATABASE=1 -DENABLE_SVG=1 -DENABLE_SVG_FONTS=1 -DENABLE_TOUCH_ADJUSTMENT=1 -DENABLE_TOUCH_EVENTS=1 -DENABLE_WEB_SOCKETS=1 -DENABLE_WEB_TIMING=1 -DENABLE_WORKERS=1 -DENABLE_XHR_TIMEOUT=1 -DWTF_USE_TILED_BACKING_STORE=1 -DHAVE_QTPRINTSUPPORT=1 -DHAVE_QSTYLE=1 -DHAVE_QTTESTLIB=1 -DWTF_USE_LIBJPEG=1 -DWTF_USE_LIBPNG=1 -DPLUGIN_ARCHITECTURE_UNSUPPORTED=1 -DENABLE_TOUCH_SLIDER=1 -DENABLE_ACCELERATED_2D_CANVAS=0 -DENABLE_ANIMATION_API=0 -DENABLE_BATTERY_STATUS=0 -DENABLE_CSP_NEXT=0 -DENABLE_CSS_GRID_LAYOUT=0 -DENABLE_CSS_HIERARCHIES=0 -DENABLE_CSS_IMAGE_ORIENTATION=0 -DENABLE_CSS_IMAGE_RESOLUTION=0 -DENABLE_CSS_SHADERS=0 -DENABLE_CSS_VARIABLES=0 -DENABLE_CSS3_BACKGROUND=0 -DENABLE_CSS3_CONDITIONAL_RULES=0 -DENABLE_CSS3_TEXT=0 -DENABLE_DASHBOARD_SUPPORT=0 -DENABLE_DATAGRID=0 -DENABLE_DATA_TRANSFER_ITEMS=0 -DENABLE_DEVICE_ORIENTATION=0 -DENABLE_DIRECTORY_UPLOAD=0 -DENABLE_DOWNLOAD_ATTRIBUTE=0 -DENABLE_FILE_SYSTEM=0 -DENABLE_FULLSCREEN_API=0 -DENABLE_GAMEPAD=0 -DENABLE_GEOLOCATION=0 -DENABLE_HIGH_DPI_CANVAS=0 -DENABLE_INDEXED_DATABASE=0 -DENABLE_INPUT_SPEECH=0 -DENABLE_INPUT_TYPE_DATE=0 -DENABLE_INPUT_TYPE_DATETIME=0 -DENABLE_INPUT_TYPE_DATETIMELOCAL=0 -DENABLE_INPUT_TYPE_MONTH=0 -DENABLE_INPUT_TYPE_TIME=0 -DENABLE_INPUT_TYPE_WEEK=0 -DENABLE_LEGACY_CSS_VENDOR_PREFIXES=0 -DENABLE_LINK_PRERENDER=0 -DENABLE_MATHML=0 -DENABLE_MEDIA_SOURCE=0 -DENABLE_MEDIA_STATISTICS=0 -DENABLE_MEDIA_STREAM=0 -DENABLE_MICRODATA=0 -DENABLE_NAVIGATOR_CONTENT_UTILS=0 -DENABLE_NETSCAPE_PLUGIN_API=0 -DENABLE_NETWORK_INFO=0 -DENABLE_ORIENTATION_EVENTS=0 -DENABLE_PROXIMITY_EVENTS=0 -DENABLE_QUOTA=0 -DENABLE_SCRIPTED_SPEECH=0 -DENABLE_SHADOW_DOM=0 -DENABLE_STYLE_SCOPED=0 -DENABLE_SVG_DOM_OBJC_BINDINGS=0 -DENABLE_TEXT_AUTOSIZING=0 -DENABLE_TEXT_NOTIFICATIONS_ONLY=0 -DENABLE_TOUCH_ICON_LOADING=0 -DENABLE_VIBRATION=0 -DENABLE_VIDEO=0 -DENABLE_VIDEO_TRACK=0 -DENABLE_WEBGL=0 -DENABLE_WEB_AUDIO=0 -DENABLE_XSLT=0 -DBUILDING_WebKit1 -DBUILDING_WEBKIT -DQT_ASCII_CAST_WARNINGS -DSQLITE_CORE -DSQLITE_OMIT_LOAD_EXTENSION -DSQLITE_OMIT_COMPLETE -DSTATICALLY_LINKED_WITH_WebCore -DSTATICALLY_LINKED_WITH_JavaScriptCore -DSTATICALLY_LINKED_WITH_WTF -DQT_NO_EXCEPTIONS -DQT_NO_DEBUG -DQT_SQL_LIB -DQT_NETWORK_LIB -DQT_GUI_LIB -DQT_CORE_LIB
+
+QT_INCPATH += \
+ qtbase/include \
+ qtbase/include/QtCore \
+ qtbase/include/QtCore/5.1.0 \
+ qtbase/include/QtCore/5.1.0/QtCore \
+ qtbase/include/QtGui \
+ qtbase/include/QtGui/5.1.0 \
+ qtbase/include/QtGui/5.1.0/QtGui \
+ qtbase/include/QtNetwork \
+ qtbase/include/QtSql \
+ qtbase/mkspecs/genode-g++ \
+ qtbase/src/3rdparty/sqlite \
+ qtwebkit/Source \
+ qtwebkit/Source/JavaScriptCore \
+ qtwebkit/Source/JavaScriptCore/API \
+ qtwebkit/Source/JavaScriptCore/assembler \
+ qtwebkit/Source/JavaScriptCore/bytecode \
+ qtwebkit/Source/JavaScriptCore/bytecompiler \
+ qtwebkit/Source/JavaScriptCore/debugger \
+ qtwebkit/Source/JavaScriptCore/dfg \
+ qtwebkit/Source/JavaScriptCore/disassembler \
+ qtwebkit/Source/JavaScriptCore/ForwardingHeaders \
+ qtwebkit/Source/JavaScriptCore/heap \
+ qtwebkit/Source/JavaScriptCore/interpreter \
+ qtwebkit/Source/JavaScriptCore/jit \
+ qtwebkit/Source/JavaScriptCore/llint \
+ qtwebkit/Source/JavaScriptCore/parser \
+ qtwebkit/Source/JavaScriptCore/profiler \
+ qtwebkit/Source/JavaScriptCore/runtime \
+ qtwebkit/Source/JavaScriptCore/tools \
+ qtwebkit/Source/JavaScriptCore/yarr \
+ qtwebkit/Source/ThirdParty \
+ qtwebkit/Source/WebCore \
+ qtwebkit/Source/WebCore/accessibility \
+ qtwebkit/Source/WebCore/bindings \
+ qtwebkit/Source/WebCore/bindings/generic \
+ qtwebkit/Source/WebCore/bindings/js \
+ qtwebkit/Source/WebCore/bridge \
+ qtwebkit/Source/WebCore/bridge/c \
+ qtwebkit/Source/WebCore/bridge/jsc \
+ qtwebkit/Source/WebCore/bridge/qt \
+ qtwebkit/Source/WebCore/css \
+ qtwebkit/Source/WebCore/dom \
+ qtwebkit/Source/WebCore/dom/default \
+ qtwebkit/Source/WebCore/editing \
+ qtwebkit/Source/WebCore/fileapi \
+ qtwebkit/Source/WebCore/history \
+ qtwebkit/Source/WebCore/html \
+ qtwebkit/Source/WebCore/html/canvas \
+ qtwebkit/Source/WebCore/html/parser \
+ qtwebkit/Source/WebCore/html/shadow \
+ qtwebkit/Source/WebCore/html/track \
+ qtwebkit/Source/WebCore/inspector \
+ qtwebkit/Source/WebCore/loader \
+ qtwebkit/Source/WebCore/loader/appcache \
+ qtwebkit/Source/WebCore/loader/archive \
+ qtwebkit/Source/WebCore/loader/cache \
+ qtwebkit/Source/WebCore/loader/icon \
+ qtwebkit/Source/WebCore/mathml \
+ qtwebkit/Source/WebCore/Modules/filesystem \
+ qtwebkit/Source/WebCore/Modules/geolocation \
+ qtwebkit/Source/WebCore/Modules/indexeddb \
+ qtwebkit/Source/WebCore/Modules/navigatorcontentutils \
+ qtwebkit/Source/WebCore/Modules/notifications \
+ qtwebkit/Source/WebCore/Modules/quota \
+ qtwebkit/Source/WebCore/Modules/webaudio \
+ qtwebkit/Source/WebCore/Modules/webdatabase \
+ qtwebkit/Source/WebCore/Modules/websockets \
+ qtwebkit/Source/WebCore/page \
+ qtwebkit/Source/WebCore/page/animation \
+ qtwebkit/Source/WebCore/page/qt \
+ qtwebkit/Source/WebCore/page/scrolling \
+ qtwebkit/Source/WebCore/platform \
+ qtwebkit/Source/WebCore/platform/animation \
+ qtwebkit/Source/WebCore/platform/audio \
+ qtwebkit/Source/WebCore/platform/graphics \
+ qtwebkit/Source/WebCore/platform/graphics/cpu/arm \
+ qtwebkit/Source/WebCore/platform/graphics/cpu/arm/filters \
+ qtwebkit/Source/WebCore/platform/graphics/filters \
+ qtwebkit/Source/WebCore/platform/graphics/filters/texmap \
+ qtwebkit/Source/WebCore/platform/graphics/opengl \
+ qtwebkit/Source/WebCore/platform/graphics/opentype \
+ qtwebkit/Source/WebCore/platform/graphics/qt \
+ qtwebkit/Source/WebCore/platform/graphics/surfaces \
+ qtwebkit/Source/WebCore/platform/graphics/texmap \
+ qtwebkit/Source/WebCore/platform/graphics/transforms \
+ qtwebkit/Source/WebCore/platform/image-decoders \
+ qtwebkit/Source/WebCore/platform/image-decoders/bmp \
+ qtwebkit/Source/WebCore/platform/image-decoders/gif \
+ qtwebkit/Source/WebCore/platform/image-decoders/ico \
+ qtwebkit/Source/WebCore/platform/image-decoders/jpeg \
+ qtwebkit/Source/WebCore/platform/image-decoders/png \
+ qtwebkit/Source/WebCore/platform/image-decoders/webp \
+ qtwebkit/Source/WebCore/platform/leveldb \
+ qtwebkit/Source/WebCore/platform/mock \
+ qtwebkit/Source/WebCore/platform/network \
+ qtwebkit/Source/WebCore/platform/network/qt \
+ qtwebkit/Source/WebCore/platform/qt \
+ qtwebkit/Source/WebCore/platform/sql \
+ qtwebkit/Source/WebCore/platform/text \
+ qtwebkit/Source/WebCore/platform/text/transcoder \
+ qtwebkit/Source/WebCore/plugins \
+ qtwebkit/Source/WebCore/rendering \
+ qtwebkit/Source/WebCore/rendering/mathml \
+ qtwebkit/Source/WebCore/rendering/style \
+ qtwebkit/Source/WebCore/rendering/svg \
+ qtwebkit/Source/WebCore/storage \
+ qtwebkit/Source/WebCore/svg \
+ qtwebkit/Source/WebCore/svg/animation \
+ qtwebkit/Source/WebCore/svg/graphics \
+ qtwebkit/Source/WebCore/svg/graphics/filters \
+ qtwebkit/Source/WebCore/svg/properties \
+ qtwebkit/Source/WebCore/testing \
+ qtwebkit/Source/WebCore/testing/js \
+ qtwebkit/Source/WebCore/websockets \
+ qtwebkit/Source/WebCore/workers \
+ qtwebkit/Source/WebCore/xml \
+ qtwebkit/Source/WebCore/xml/parser \
+ qtwebkit/Source/WebKit \
+ qtwebkit/Source/WebKit/qt/Api \
+ qtwebkit/Source/WebKit/qt/WebCoreSupport \
+ qtwebkit/Source/WTF \
+ qtwebkit/Source/WTF/wtf/qt \
+
+QT_SOURCES += \
+ qhttpheader.cpp \
+ qwebdatabase.cpp \
+ qwebelement.cpp \
+ qwebhistory.cpp \
+ qwebhistoryinterface.cpp \
+ qwebkitglobal.cpp \
+ qwebplugindatabase.cpp \
+ qwebpluginfactory.cpp \
+ qwebsecurityorigin.cpp \
+ qwebsettings.cpp \
+ qwebscriptworld.cpp \
+ ChromeClientQt.cpp \
+ ContextMenuClientQt.cpp \
+ DragClientQt.cpp \
+ DumpRenderTreeSupportQt.cpp \
+ EditorClientQt.cpp \
+ FrameLoaderClientQt.cpp \
+ FrameNetworkingContextQt.cpp \
+ GeolocationPermissionClientQt.cpp \
+ InitWebCoreQt.cpp \
+ InspectorClientQt.cpp \
+ InspectorServerQt.cpp \
+ NotificationPresenterClientQt.cpp \
+ PlatformStrategiesQt.cpp \
+ PopupMenuQt.cpp \
+ QtPlatformPlugin.cpp \
+ QtPluginWidgetAdapter.cpp \
+ QtPrintContext.cpp \
+ QWebFrameAdapter.cpp \
+ QWebPageAdapter.cpp \
+ SearchPopupMenuQt.cpp \
+ TextCheckerClientQt.cpp \
+ TextureMapperLayerClientQt.cpp \
+ UndoStepQt.cpp \
+ WebEventConversion.cpp \
+ IconDatabaseClientQt.cpp \
+ moc_qwebhistoryinterface.cpp \
+ moc_qwebplugindatabase_p.cpp \
+ moc_qwebpluginfactory.cpp \
+ moc_qwebkitplatformplugin.cpp \
+ moc_QtPluginWidgetAdapter.cpp
+
+QT_VPATH += \
+ qtwebkit/Source/WebKit/qt/Api \
+ qtwebkit/Source/WebKit/qt/WebCoreSupport \
+
+# 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_qwebhistoryinterface.cpp \
+ moc_qwebplugindatabase_p.cpp \
+ moc_qwebpluginfactory.cpp \
+ moc_qwebkitplatformplugin.cpp \
+ moc_FrameLoaderClientQt.cpp \
+ moc_InspectorServerQt.cpp \
+ moc_NotificationPresenterClientQt.cpp \
+ moc_PopupMenuQt.cpp \
+ moc_QtPluginWidgetAdapter.cpp \
+ moc_IconDatabaseClientQt.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/libports/lib/mk/qt5_webkitwidgets.mk b/libports/lib/mk/qt5_webkitwidgets.mk
new file mode 100644
index 0000000000..f5dead52fa
--- /dev/null
+++ b/libports/lib/mk/qt5_webkitwidgets.mk
@@ -0,0 +1,22 @@
+include $(REP_DIR)/lib/import/import-qt5_webkitwidgets.mk
+
+SHARED_LIB = yes
+
+# use default warning level to avoid noise when compiling contrib code
+CC_WARN =
+
+include $(REP_DIR)/lib/mk/qt5_webkitwidgets_generated.inc
+
+QT_INCPATH += qtwebkit/Source/WebCore/generated
+
+QT_VPATH += qtwebkit/Source/WebKit/qt/Api \
+
+# remove unneeded files to prevent moc warnings
+COMPILER_MOC_HEADER_MAKE_ALL_FILES_FILTER_OUT = \
+ moc_DefaultFullScreenVideoHandler.cpp \
+
+COMPILER_MOC_SOURCE_MAKE_ALL_FILES_FILTER_OUT = \
+
+include $(REP_DIR)/lib/mk/qt5.inc
+
+LIBS += qt5_webkit qt5_widgets qt5_printsupport qt5_core icu
diff --git a/libports/lib/mk/qt5_webkitwidgets_generated.inc b/libports/lib/mk/qt5_webkitwidgets_generated.inc
new file mode 100644
index 0000000000..a8615a6cae
--- /dev/null
+++ b/libports/lib/mk/qt5_webkitwidgets_generated.inc
@@ -0,0 +1,190 @@
+QT_DEFINES += -DQT_NO_LIBUDEV -DQT_NO_XCB -DQT_NO_XKBCOMMON -DQT_BUILD_WEBKITWIDGETS_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 -DBUILDING_QT__=1 -DNDEBUG -DENABLE_3D_RENDERING=1 -DENABLE_BLOB=1 -DENABLE_CHANNEL_MESSAGING=1 -DENABLE_CSS_BOX_DECORATION_BREAK=1 -DENABLE_CSS_COMPOSITING=1 -DENABLE_CSS_EXCLUSIONS=1 -DENABLE_CSS_FILTERS=1 -DENABLE_CSS_IMAGE_SET=1 -DENABLE_CSS_REGIONS=1 -DENABLE_CSS_STICKY_POSITION=1 -DENABLE_DATALIST_ELEMENT=1 -DENABLE_DETAILS_ELEMENT=1 -DENABLE_FAST_MOBILE_SCROLLING=1 -DENABLE_FILTERS=1 -DENABLE_FTPDIR=1 -DENABLE_GESTURE_EVENTS=1 -DENABLE_ICONDATABASE=1 -DENABLE_IFRAME_SEAMLESS=1 -DENABLE_INPUT_TYPE_COLOR=1 -DENABLE_INSPECTOR=1 -DENABLE_INSPECTOR_SERVER=1 -DENABLE_JAVASCRIPT_DEBUGGER=1 -DENABLE_LEGACY_NOTIFICATIONS=1 -DENABLE_LEGACY_VIEWPORT_ADAPTION=1 -DENABLE_LEGACY_VENDOR_PREFIXES=1 -DENABLE_LINK_PREFETCH=1 -DENABLE_METER_ELEMENT=1 -DENABLE_MHTML=1 -DENABLE_MUTATION_OBSERVERS=1 -DENABLE_NOTIFICATIONS=1 -DENABLE_PAGE_VISIBILITY_API=1 -DENABLE_PROGRESS_ELEMENT=1 -DENABLE_RESOLUTION_MEDIA_QUERY=1 -DENABLE_REQUEST_ANIMATION_FRAME=1 -DENABLE_SHARED_WORKERS=1 -DENABLE_SMOOTH_SCROLLING=1 -DENABLE_SQL_DATABASE=1 -DENABLE_SVG=1 -DENABLE_SVG_FONTS=1 -DENABLE_TOUCH_ADJUSTMENT=1 -DENABLE_TOUCH_EVENTS=1 -DENABLE_WEB_SOCKETS=1 -DENABLE_WEB_TIMING=1 -DENABLE_WORKERS=1 -DENABLE_XHR_TIMEOUT=1 -DWTF_USE_TILED_BACKING_STORE=1 -DHAVE_QTPRINTSUPPORT=1 -DHAVE_QSTYLE=1 -DHAVE_QTTESTLIB=1 -DWTF_USE_LIBJPEG=1 -DWTF_USE_LIBPNG=1 -DPLUGIN_ARCHITECTURE_UNSUPPORTED=1 -DENABLE_TOUCH_SLIDER=1 -DENABLE_ACCELERATED_2D_CANVAS=0 -DENABLE_ANIMATION_API=0 -DENABLE_BATTERY_STATUS=0 -DENABLE_CSP_NEXT=0 -DENABLE_CSS_GRID_LAYOUT=0 -DENABLE_CSS_HIERARCHIES=0 -DENABLE_CSS_IMAGE_ORIENTATION=0 -DENABLE_CSS_IMAGE_RESOLUTION=0 -DENABLE_CSS_SHADERS=0 -DENABLE_CSS_VARIABLES=0 -DENABLE_CSS3_BACKGROUND=0 -DENABLE_CSS3_CONDITIONAL_RULES=0 -DENABLE_CSS3_TEXT=0 -DENABLE_DASHBOARD_SUPPORT=0 -DENABLE_DATAGRID=0 -DENABLE_DATA_TRANSFER_ITEMS=0 -DENABLE_DEVICE_ORIENTATION=0 -DENABLE_DIRECTORY_UPLOAD=0 -DENABLE_DOWNLOAD_ATTRIBUTE=0 -DENABLE_FILE_SYSTEM=0 -DENABLE_FULLSCREEN_API=0 -DENABLE_GAMEPAD=0 -DENABLE_GEOLOCATION=0 -DENABLE_HIGH_DPI_CANVAS=0 -DENABLE_INDEXED_DATABASE=0 -DENABLE_INPUT_SPEECH=0 -DENABLE_INPUT_TYPE_DATE=0 -DENABLE_INPUT_TYPE_DATETIME=0 -DENABLE_INPUT_TYPE_DATETIMELOCAL=0 -DENABLE_INPUT_TYPE_MONTH=0 -DENABLE_INPUT_TYPE_TIME=0 -DENABLE_INPUT_TYPE_WEEK=0 -DENABLE_LEGACY_CSS_VENDOR_PREFIXES=0 -DENABLE_LINK_PRERENDER=0 -DENABLE_MATHML=0 -DENABLE_MEDIA_SOURCE=0 -DENABLE_MEDIA_STATISTICS=0 -DENABLE_MEDIA_STREAM=0 -DENABLE_MICRODATA=0 -DENABLE_NAVIGATOR_CONTENT_UTILS=0 -DENABLE_NETSCAPE_PLUGIN_API=0 -DENABLE_NETWORK_INFO=0 -DENABLE_ORIENTATION_EVENTS=0 -DENABLE_PROXIMITY_EVENTS=0 -DENABLE_QUOTA=0 -DENABLE_SCRIPTED_SPEECH=0 -DENABLE_SHADOW_DOM=0 -DENABLE_STYLE_SCOPED=0 -DENABLE_SVG_DOM_OBJC_BINDINGS=0 -DENABLE_TEXT_AUTOSIZING=0 -DENABLE_TEXT_NOTIFICATIONS_ONLY=0 -DENABLE_TOUCH_ICON_LOADING=0 -DENABLE_VIBRATION=0 -DENABLE_VIDEO=0 -DENABLE_VIDEO_TRACK=0 -DENABLE_WEBGL=0 -DENABLE_WEB_AUDIO=0 -DENABLE_XSLT=0 -DBUILDING_Qt5WebKitWidgets -DBUILDING_WEBKIT -DQT_ASCII_CAST_WARNINGS -DSQLITE_CORE -DSQLITE_OMIT_LOAD_EXTENSION -DSQLITE_OMIT_COMPLETE -DQT_NO_EXCEPTIONS -DQT_NO_DEBUG -DQT_PRINTSUPPORT_LIB -DQT_WEBKIT_LIB -DQT_WIDGETS_LIB -DQT_SQL_LIB -DQT_NETWORK_LIB -DQT_GUI_LIB -DQT_CORE_LIB
+
+QT_INCPATH += \
+ qtbase/include \
+ qtbase/include/QtCore \
+ qtbase/include/QtCore/5.1.0 \
+ qtbase/include/QtCore/5.1.0/QtCore \
+ qtbase/include/QtGui \
+ qtbase/include/QtGui/5.1.0 \
+ qtbase/include/QtGui/5.1.0/QtGui \
+ qtbase/include/QtNetwork \
+ qtbase/include/QtPrintSupport \
+ qtbase/include/QtSql \
+ qtbase/include/QtWidgets \
+ qtbase/include/QtWidgets/5.1.0 \
+ qtbase/include/QtWidgets/5.1.0/QtWidgets \
+ qtbase/mkspecs/genode-g++ \
+ qtwebkit/include \
+ qtwebkit/include/QtWebKit \
+ qtwebkit/include/QtWebKitWidgets \
+ qtwebkit/include/QtWebKitWidgets/5.1.0 \
+ qtwebkit/include/QtWebKitWidgets/5.1.0/QtWebKitWidgets \
+ qtwebkit/Source \
+ qtwebkit/Source/JavaScriptCore \
+ qtwebkit/Source/JavaScriptCore/API \
+ qtwebkit/Source/JavaScriptCore/assembler \
+ qtwebkit/Source/JavaScriptCore/bytecode \
+ qtwebkit/Source/JavaScriptCore/bytecompiler \
+ qtwebkit/Source/JavaScriptCore/debugger \
+ qtwebkit/Source/JavaScriptCore/dfg \
+ qtwebkit/Source/JavaScriptCore/disassembler \
+ qtwebkit/Source/JavaScriptCore/ForwardingHeaders \
+ qtwebkit/Source/JavaScriptCore/heap \
+ qtwebkit/Source/JavaScriptCore/interpreter \
+ qtwebkit/Source/JavaScriptCore/jit \
+ qtwebkit/Source/JavaScriptCore/llint \
+ qtwebkit/Source/JavaScriptCore/parser \
+ qtwebkit/Source/JavaScriptCore/profiler \
+ qtwebkit/Source/JavaScriptCore/runtime \
+ qtwebkit/Source/JavaScriptCore/tools \
+ qtwebkit/Source/JavaScriptCore/yarr \
+ qtwebkit/Source/qt/Api \
+ qtwebkit/Source/qt/WebCoreSupport \
+ qtwebkit/Source/ThirdParty \
+ qtwebkit/Source/WebCore \
+ qtwebkit/Source/WebCore/accessibility \
+ qtwebkit/Source/WebCore/bindings \
+ qtwebkit/Source/WebCore/bindings/generic \
+ qtwebkit/Source/WebCore/bindings/js \
+ qtwebkit/Source/WebCore/bridge \
+ qtwebkit/Source/WebCore/bridge/c \
+ qtwebkit/Source/WebCore/bridge/jsc \
+ qtwebkit/Source/WebCore/bridge/qt \
+ qtwebkit/Source/WebCore/css \
+ qtwebkit/Source/WebCore/dom \
+ qtwebkit/Source/WebCore/dom/default \
+ qtwebkit/Source/WebCore/editing \
+ qtwebkit/Source/WebCore/fileapi \
+ qtwebkit/Source/WebCore/history \
+ qtwebkit/Source/WebCore/html \
+ qtwebkit/Source/WebCore/html/canvas \
+ qtwebkit/Source/WebCore/html/parser \
+ qtwebkit/Source/WebCore/html/shadow \
+ qtwebkit/Source/WebCore/html/track \
+ qtwebkit/Source/WebCore/inspector \
+ qtwebkit/Source/WebCore/loader \
+ qtwebkit/Source/WebCore/loader/appcache \
+ qtwebkit/Source/WebCore/loader/archive \
+ qtwebkit/Source/WebCore/loader/cache \
+ qtwebkit/Source/WebCore/loader/icon \
+ qtwebkit/Source/WebCore/mathml \
+ qtwebkit/Source/WebCore/Modules/filesystem \
+ qtwebkit/Source/WebCore/Modules/geolocation \
+ qtwebkit/Source/WebCore/Modules/indexeddb \
+ qtwebkit/Source/WebCore/Modules/navigatorcontentutils \
+ qtwebkit/Source/WebCore/Modules/notifications \
+ qtwebkit/Source/WebCore/Modules/quota \
+ qtwebkit/Source/WebCore/Modules/webaudio \
+ qtwebkit/Source/WebCore/Modules/webdatabase \
+ qtwebkit/Source/WebCore/Modules/websockets \
+ qtwebkit/Source/WebCore/page \
+ qtwebkit/Source/WebCore/page/animation \
+ qtwebkit/Source/WebCore/page/qt \
+ qtwebkit/Source/WebCore/page/scrolling \
+ qtwebkit/Source/WebCore/platform \
+ qtwebkit/Source/WebCore/platform/animation \
+ qtwebkit/Source/WebCore/platform/audio \
+ qtwebkit/Source/WebCore/platform/graphics \
+ qtwebkit/Source/WebCore/platform/graphics/cpu/arm \
+ qtwebkit/Source/WebCore/platform/graphics/cpu/arm/filters \
+ qtwebkit/Source/WebCore/platform/graphics/filters \
+ qtwebkit/Source/WebCore/platform/graphics/filters/texmap \
+ qtwebkit/Source/WebCore/platform/graphics/opengl \
+ qtwebkit/Source/WebCore/platform/graphics/opentype \
+ qtwebkit/Source/WebCore/platform/graphics/qt \
+ qtwebkit/Source/WebCore/platform/graphics/surfaces \
+ qtwebkit/Source/WebCore/platform/graphics/texmap \
+ qtwebkit/Source/WebCore/platform/graphics/transforms \
+ qtwebkit/Source/WebCore/platform/image-decoders \
+ qtwebkit/Source/WebCore/platform/image-decoders/bmp \
+ qtwebkit/Source/WebCore/platform/image-decoders/gif \
+ qtwebkit/Source/WebCore/platform/image-decoders/ico \
+ qtwebkit/Source/WebCore/platform/image-decoders/jpeg \
+ qtwebkit/Source/WebCore/platform/image-decoders/png \
+ qtwebkit/Source/WebCore/platform/image-decoders/webp \
+ qtwebkit/Source/WebCore/platform/leveldb \
+ qtwebkit/Source/WebCore/platform/mock \
+ qtwebkit/Source/WebCore/platform/network \
+ qtwebkit/Source/WebCore/platform/network/qt \
+ qtwebkit/Source/WebCore/platform/qt \
+ qtwebkit/Source/WebCore/platform/sql \
+ qtwebkit/Source/WebCore/platform/text \
+ qtwebkit/Source/WebCore/platform/text/transcoder \
+ qtwebkit/Source/WebCore/plugins \
+ qtwebkit/Source/WebCore/rendering \
+ qtwebkit/Source/WebCore/rendering/mathml \
+ qtwebkit/Source/WebCore/rendering/style \
+ qtwebkit/Source/WebCore/rendering/svg \
+ qtwebkit/Source/WebCore/storage \
+ qtwebkit/Source/WebCore/svg \
+ qtwebkit/Source/WebCore/svg/animation \
+ qtwebkit/Source/WebCore/svg/graphics \
+ qtwebkit/Source/WebCore/svg/graphics/filters \
+ qtwebkit/Source/WebCore/svg/properties \
+ qtwebkit/Source/WebCore/testing \
+ qtwebkit/Source/WebCore/testing/js \
+ qtwebkit/Source/WebCore/websockets \
+ qtwebkit/Source/WebCore/workers \
+ qtwebkit/Source/WebCore/xml \
+ qtwebkit/Source/WebCore/xml/parser \
+ qtwebkit/Source/WebKit/qt/Api \
+ qtwebkit/Source/WebKit/qt/WebCoreSupport \
+ qtwebkit/Source/WebKit/qt/WidgetApi \
+ qtwebkit/Source/WebKit/qt/WidgetSupport \
+ qtwebkit/Source/WTF \
+ qtwebkit/Source/WTF/wtf/qt \
+
+QT_SOURCES += \
+ qgraphicswebview.cpp \
+ qwebframe.cpp \
+ qwebpage.cpp \
+ qwebview.cpp \
+ qwebinspector.cpp \
+ QtFallbackWebPopup.cpp \
+ QtWebComboBox.cpp \
+ QWebUndoCommand.cpp \
+ DefaultFullScreenVideoHandler.cpp \
+ InitWebKitQt.cpp \
+ InspectorClientWebPage.cpp \
+ PageClientQt.cpp \
+ QStyleFacadeImp.cpp \
+ QGraphicsWidgetPluginImpl.cpp \
+ QWidgetPluginImpl.cpp \
+ moc_qwebinspector.cpp \
+ moc_qwebkitplatformplugin.cpp \
+ moc_InspectorClientWebPage.cpp \
+ moc_DefaultFullScreenVideoHandler.cpp \
+ moc_QtFallbackWebPopup.cpp \
+ moc_QtWebComboBox.cpp
+
+QT_VPATH += \
+ qtwebkit/Source/WebKit/qt/WidgetApi \
+ qtwebkit/Source/WebKit/qt/WidgetSupport \
+
+# 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_qgraphicswebview.cpp \
+ moc_qwebframe.cpp \
+ moc_qwebpage.cpp \
+ moc_qwebview.cpp \
+ moc_qwebinspector.cpp \
+ moc_qwebkitplatformplugin.cpp \
+ moc_InspectorClientWebPage.cpp \
+ moc_DefaultFullScreenVideoHandler.cpp \
+ moc_QtFallbackWebPopup.cpp \
+ moc_QtWebComboBox.cpp \
+ moc_QGraphicsWidgetPluginImpl.cpp \
+ moc_QWidgetPluginImpl.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/libports/lib/mk/qt5_widgets.mk b/libports/lib/mk/qt5_widgets.mk
new file mode 100644
index 0000000000..e2882f3a51
--- /dev/null
+++ b/libports/lib/mk/qt5_widgets.mk
@@ -0,0 +1,19 @@
+include $(REP_DIR)/lib/import/import-qt5_widgets.mk
+
+SHARED_LIB = yes
+
+include $(REP_DIR)/lib/mk/qt5_widgets_generated.inc
+
+# UI headers
+qfiledialog.o: ui_qfiledialog.h
+
+include $(REP_DIR)/lib/mk/qt5.inc
+
+INC_DIR += $(REP_DIR)/include/qt5/qtbase/QtWidgets/private \
+ $(REP_DIR)/contrib/$(QT5)/qtbase/include/QtWidgets/$(QT_VERSION)/QtWidgets \
+ $(REP_DIR)/contrib/$(QT5)/qtbase/include/QtGui/$(QT_VERSION) \
+ $(REP_DIR)/contrib/$(QT5)/qtbase/include/QtGui/$(QT_VERSION)/QtGui \
+ $(REP_DIR)/contrib/$(QT5)/qtbase/include/QtCore/$(QT_VERSION) \
+ $(REP_DIR)/contrib/$(QT5)/qtbase/include/QtCore/$(QT_VERSION)/QtCore
+
+LIBS += qt5_core libc
diff --git a/libports/lib/mk/qt5_widgets_generated.inc b/libports/lib/mk/qt5_widgets_generated.inc
new file mode 100644
index 0000000000..dfd373d923
--- /dev/null
+++ b/libports/lib/mk/qt5_widgets_generated.inc
@@ -0,0 +1,457 @@
+QT_DEFINES += -DQT_NO_LIBUDEV -DQT_NO_XCB -DQT_NO_XKBCOMMON -DQT_NO_USING_NAMESPACE -DQT_BUILD_WIDGETS_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_STYLE_MAC -DQT_STYLE_WINDOWS -DQT_NO_STYLE_WINDOWSVISTA -DQT_NO_STYLE_WINDOWSXP -DQT_NO_STYLE_GTK -DQT_NO_STYLE_WINDOWSCE -DQT_NO_STYLE_WINDOWSMOBILE -DQT_NO_STYLE_ANDROID -DQT_NO_EXCEPTIONS -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB
+
+QT_INCPATH += \
+ qtbase/include \
+ qtbase/include/QtCore \
+ qtbase/include/QtCore/5.1.0 \
+ qtbase/include/QtCore/5.1.0/QtCore \
+ qtbase/include/QtGui \
+ qtbase/include/QtGui/5.1.0 \
+ qtbase/include/QtGui/5.1.0/QtGui \
+ qtbase/include/QtWidgets \
+ qtbase/include/QtWidgets/5.1.0 \
+ qtbase/include/QtWidgets/5.1.0/QtWidgets \
+ qtbase/mkspecs/genode-g++ \
+ qtbase/src/widgets \
+ qtbase/src/widgets/dialogs \
+
+QT_SOURCES += \
+ qaction.cpp \
+ qactiongroup.cpp \
+ qapplication.cpp \
+ qwidgetbackingstore.cpp \
+ qboxlayout.cpp \
+ qformlayout.cpp \
+ qgridlayout.cpp \
+ qlayout.cpp \
+ qlayoutengine.cpp \
+ qlayoutitem.cpp \
+ qshortcut.cpp \
+ qstackedlayout.cpp \
+ qtooltip.cpp \
+ qwhatsthis.cpp \
+ qwidget.cpp \
+ qwidgetaction.cpp \
+ qgesture.cpp \
+ qstandardgestures.cpp \
+ qgesturerecognizer.cpp \
+ qgesturemanager.cpp \
+ qdesktopwidget.cpp \
+ qwidgetsvariant.cpp \
+ qapplication_qpa.cpp \
+ qdesktopwidget_qpa.cpp \
+ qwidget_qpa.cpp \
+ qwidgetwindow.cpp \
+ qwindowcontainer.cpp \
+ qdrawutil.cpp \
+ qstyle.cpp \
+ qstyleanimation.cpp \
+ qstylefactory.cpp \
+ qstyleoption.cpp \
+ qstyleplugin.cpp \
+ qstylehelper.cpp \
+ qcommonstyle.cpp \
+ qproxystyle.cpp \
+ qstylepainter.cpp \
+ qstylesheetstyle.cpp \
+ qstylesheetstyle_default.cpp \
+ qwindowsstyle.cpp \
+ qfusionstyle.cpp \
+ qabstractbutton.cpp \
+ qabstractslider.cpp \
+ qabstractspinbox.cpp \
+ qcalendarwidget.cpp \
+ qcheckbox.cpp \
+ qcombobox.cpp \
+ qcommandlinkbutton.cpp \
+ qdatetimeedit.cpp \
+ qdial.cpp \
+ qdialogbuttonbox.cpp \
+ qdockwidget.cpp \
+ qdockarealayout.cpp \
+ qeffects.cpp \
+ qfontcombobox.cpp \
+ qframe.cpp \
+ qgroupbox.cpp \
+ qlabel.cpp \
+ qlcdnumber.cpp \
+ qlineedit_p.cpp \
+ qlineedit.cpp \
+ qmainwindow.cpp \
+ qmainwindowlayout.cpp \
+ qmdiarea.cpp \
+ qmdisubwindow.cpp \
+ qmenu.cpp \
+ qmenubar.cpp \
+ qprogressbar.cpp \
+ qpushbutton.cpp \
+ qradiobutton.cpp \
+ qrubberband.cpp \
+ qscrollbar.cpp \
+ qsizegrip.cpp \
+ qslider.cpp \
+ qspinbox.cpp \
+ qsplashscreen.cpp \
+ qsplitter.cpp \
+ qstackedwidget.cpp \
+ qstatusbar.cpp \
+ qtabbar.cpp \
+ qtabwidget.cpp \
+ qtextedit.cpp \
+ qtextbrowser.cpp \
+ qtoolbar.cpp \
+ qtoolbarlayout.cpp \
+ qtoolbarextension.cpp \
+ qtoolbarseparator.cpp \
+ qtoolbox.cpp \
+ qtoolbutton.cpp \
+ qabstractscrollarea.cpp \
+ qwidgetresizehandler.cpp \
+ qfocusframe.cpp \
+ qscrollarea.cpp \
+ qwidgetanimator.cpp \
+ qwidgettextcontrol.cpp \
+ qwidgetlinecontrol.cpp \
+ qtoolbararealayout.cpp \
+ qplaintextedit.cpp \
+ qcolordialog.cpp \
+ qdialog.cpp \
+ qerrormessage.cpp \
+ qfiledialog.cpp \
+ qfontdialog.cpp \
+ qinputdialog.cpp \
+ qmessagebox.cpp \
+ qprogressdialog.cpp \
+ qsidebar.cpp \
+ qfilesystemmodel.cpp \
+ qfileinfogatherer.cpp \
+ qwizard.cpp \
+ qabstractitemview.cpp \
+ qheaderview.cpp \
+ qlistview.cpp \
+ qbsptree.cpp \
+ qtableview.cpp \
+ qtreeview.cpp \
+ qabstractitemdelegate.cpp \
+ qitemdelegate.cpp \
+ qdirmodel.cpp \
+ qlistwidget.cpp \
+ qtablewidget.cpp \
+ qtreewidget.cpp \
+ qitemeditorfactory.cpp \
+ qtreewidgetitemiterator.cpp \
+ qdatawidgetmapper.cpp \
+ qfileiconprovider.cpp \
+ qcolumnview.cpp \
+ qcolumnviewgrip.cpp \
+ qstyleditemdelegate.cpp \
+ qgraphicsgridlayout.cpp \
+ qgraphicsitem.cpp \
+ qgraphicsitemanimation.cpp \
+ qgraphicslayout.cpp \
+ qgraphicslayout_p.cpp \
+ qgraphicslayoutitem.cpp \
+ qgraphicslinearlayout.cpp \
+ qgraphicsproxywidget.cpp \
+ qgraphicsscene.cpp \
+ qgraphicsscene_bsp.cpp \
+ qgraphicsscenebsptreeindex.cpp \
+ qgraphicssceneevent.cpp \
+ qgraphicssceneindex.cpp \
+ qgraphicsscenelinearindex.cpp \
+ qgraphicstransform.cpp \
+ qgraphicsview.cpp \
+ qgraphicswidget.cpp \
+ qgraphicswidget_p.cpp \
+ qgridlayoutengine.cpp \
+ qsimplex_p.cpp \
+ qgraphicsanchorlayout_p.cpp \
+ qgraphicsanchorlayout.cpp \
+ qsystemtrayicon.cpp \
+ qcolormap.cpp \
+ qcompleter.cpp \
+ qscroller.cpp \
+ qscrollerproperties.cpp \
+ qflickgesture.cpp \
+ qundogroup.cpp \
+ qundostack.cpp \
+ qundoview.cpp \
+ qsystemtrayicon_qpa.cpp \
+ qguistatemachine.cpp \
+ qkeyeventtransition.cpp \
+ qmouseeventtransition.cpp \
+ qbasickeyeventtransition.cpp \
+ qbasicmouseeventtransition.cpp \
+ qgraphicseffect.cpp \
+ qpixmapfilter.cpp \
+ qrc_qstyle.cpp \
+ qrc_qmessagebox.cpp \
+ moc_qboxlayout.cpp \
+ moc_qdesktopwidget.cpp \
+ moc_qformlayout.cpp \
+ moc_qgridlayout.cpp \
+ moc_qlayout.cpp \
+ moc_qshortcut.cpp \
+ moc_qsizepolicy.cpp \
+ moc_qstackedlayout.cpp \
+ moc_qdesktopwidget_qpa_p.cpp \
+ moc_qwidgetwindow_qpa_p.cpp \
+ moc_qwindowcontainer_p.cpp \
+ moc_qstyle.cpp \
+ moc_qstyleanimation_p.cpp \
+ moc_qstyleplugin.cpp \
+ moc_qproxystyle.cpp \
+ moc_qwindowsstyle_p.cpp \
+ moc_qfusionstyle_p.cpp \
+ moc_qbuttongroup.cpp \
+ moc_qabstractbutton.cpp \
+ moc_qabstractslider.cpp \
+ moc_qcalendartextnavigator_p.cpp \
+ moc_qcheckbox.cpp \
+ moc_qcombobox_p.cpp \
+ moc_qcommandlinkbutton.cpp \
+ moc_qdatetimeedit_p.cpp \
+ moc_qdial.cpp \
+ moc_qdockwidget_p.cpp \
+ moc_qframe.cpp \
+ moc_qlcdnumber.cpp \
+ moc_qmainwindow.cpp \
+ moc_qmainwindowlayout_p.cpp \
+ moc_qprogressbar.cpp \
+ moc_qradiobutton.cpp \
+ moc_qrubberband.cpp \
+ moc_qscrollbar.cpp \
+ moc_qslider.cpp \
+ moc_qspinbox.cpp \
+ moc_qsplashscreen.cpp \
+ moc_qsplitter.cpp \
+ moc_qstackedwidget.cpp \
+ moc_qstatusbar.cpp \
+ moc_qtabbar_p.cpp \
+ moc_qtoolbarlayout_p.cpp \
+ moc_qtoolbarextension_p.cpp \
+ moc_qtoolbarseparator_p.cpp \
+ moc_qwidgetresizehandler_p.cpp \
+ moc_qfocusframe.cpp \
+ moc_qscrollarea.cpp \
+ moc_qwidgetanimator_p.cpp \
+ moc_qwidgetlinecontrol_p.cpp \
+ moc_qerrormessage.cpp \
+ moc_qsidebar_p.cpp \
+ moc_qfileinfogatherer_p.cpp \
+ moc_qlistview.cpp \
+ moc_qabstractitemdelegate.cpp \
+ moc_qlistwidget_p.cpp \
+ moc_qtablewidget_p.cpp \
+ moc_qtreewidget_p.cpp \
+ moc_qitemeditorfactory_p.cpp \
+ moc_qcolumnviewgrip_p.cpp \
+ moc_qgraphicsitemanimation.cpp \
+ moc_qgraphicsscenelinearindex_p.cpp \
+ moc_qgraphicswidget.cpp \
+ moc_qgraphicsanchorlayout.cpp \
+ moc_qcompleter_p.cpp \
+ moc_qsystemtrayicon_p.cpp \
+ moc_qscroller.cpp \
+ moc_qscroller_p.cpp \
+ moc_qflickgesture_p.cpp \
+ moc_qundogroup.cpp \
+ moc_qundostack.cpp \
+ moc_qundostack_p.cpp \
+ moc_qundoview.cpp \
+ moc_qkeyeventtransition.cpp \
+ moc_qmouseeventtransition.cpp \
+ moc_qbasickeyeventtransition_p.cpp \
+ moc_qbasicmouseeventtransition_p.cpp \
+ moc_qgraphicseffect.cpp \
+ moc_qgraphicseffect_p.cpp \
+ moc_qpixmapfilter_p.cpp
+
+QT_VPATH += \
+ qtbase/src/widgets/dialogs \
+ qtbase/src/widgets/effects \
+ qtbase/src/widgets/graphicsview \
+ qtbase/src/widgets/itemviews \
+ qtbase/src/widgets/kernel \
+ qtbase/src/widgets/statemachine \
+ qtbase/src/widgets/styles \
+ qtbase/src/widgets/util \
+ qtbase/src/widgets/widgets \
+
+# 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_qaction.cpp \
+ moc_qactiongroup.cpp \
+ moc_qapplication.cpp \
+ moc_qboxlayout.cpp \
+ moc_qdesktopwidget.cpp \
+ moc_qformlayout.cpp \
+ moc_qgridlayout.cpp \
+ moc_qlayout.cpp \
+ moc_qshortcut.cpp \
+ moc_qsizepolicy.cpp \
+ moc_qstackedlayout.cpp \
+ moc_qwidget.cpp \
+ moc_qwidgetaction.cpp \
+ moc_qgesture.cpp \
+ moc_qgesturemanager_p.cpp \
+ moc_qdesktopwidget_qpa_p.cpp \
+ moc_qwidgetwindow_qpa_p.cpp \
+ moc_qwindowcontainer_p.cpp \
+ moc_qstyle.cpp \
+ moc_qstyleanimation_p.cpp \
+ moc_qstyleplugin.cpp \
+ moc_qcommonstyle.cpp \
+ moc_qproxystyle.cpp \
+ moc_qstylesheetstyle_p.cpp \
+ moc_qwindowsstyle_p.cpp \
+ moc_qfusionstyle_p.cpp \
+ moc_qbuttongroup.cpp \
+ moc_qabstractbutton.cpp \
+ moc_qabstractslider.cpp \
+ moc_qabstractspinbox.cpp \
+ moc_qcalendartextnavigator_p.cpp \
+ moc_qcalendarwidget.cpp \
+ moc_qcheckbox.cpp \
+ moc_qcombobox.cpp \
+ moc_qcombobox_p.cpp \
+ moc_qcommandlinkbutton.cpp \
+ moc_qdatetimeedit.cpp \
+ moc_qdatetimeedit_p.cpp \
+ moc_qdial.cpp \
+ moc_qdialogbuttonbox.cpp \
+ moc_qdockwidget.cpp \
+ moc_qdockwidget_p.cpp \
+ moc_qfontcombobox.cpp \
+ moc_qframe.cpp \
+ moc_qgroupbox.cpp \
+ moc_qlabel.cpp \
+ moc_qlcdnumber.cpp \
+ moc_qlineedit.cpp \
+ moc_qmainwindow.cpp \
+ moc_qmainwindowlayout_p.cpp \
+ moc_qmdiarea.cpp \
+ moc_qmdisubwindow.cpp \
+ moc_qmenu.cpp \
+ moc_qmenubar.cpp \
+ moc_qprogressbar.cpp \
+ moc_qpushbutton.cpp \
+ moc_qradiobutton.cpp \
+ moc_qrubberband.cpp \
+ moc_qscrollbar.cpp \
+ moc_qsizegrip.cpp \
+ moc_qslider.cpp \
+ moc_qspinbox.cpp \
+ moc_qsplashscreen.cpp \
+ moc_qsplitter.cpp \
+ moc_qstackedwidget.cpp \
+ moc_qstatusbar.cpp \
+ moc_qtabbar.cpp \
+ moc_qtabbar_p.cpp \
+ moc_qtabwidget.cpp \
+ moc_qtextedit.cpp \
+ moc_qtextbrowser.cpp \
+ moc_qtoolbar.cpp \
+ moc_qtoolbarlayout_p.cpp \
+ moc_qtoolbarextension_p.cpp \
+ moc_qtoolbarseparator_p.cpp \
+ moc_qtoolbox.cpp \
+ moc_qtoolbutton.cpp \
+ moc_qabstractscrollarea.cpp \
+ moc_qabstractscrollarea_p.cpp \
+ moc_qwidgetresizehandler_p.cpp \
+ moc_qfocusframe.cpp \
+ moc_qscrollarea.cpp \
+ moc_qwidgetanimator_p.cpp \
+ moc_qwidgettextcontrol_p.cpp \
+ moc_qwidgetlinecontrol_p.cpp \
+ moc_qplaintextedit.cpp \
+ moc_qplaintextedit_p.cpp \
+ moc_qcolordialog.cpp \
+ moc_qdialog.cpp \
+ moc_qerrormessage.cpp \
+ moc_qfiledialog.cpp \
+ moc_qfontdialog.cpp \
+ moc_qinputdialog.cpp \
+ moc_qmessagebox.cpp \
+ moc_qprogressdialog.cpp \
+ moc_qsidebar_p.cpp \
+ moc_qfilesystemmodel.cpp \
+ moc_qfileinfogatherer_p.cpp \
+ moc_qwizard.cpp \
+ moc_qabstractitemview.cpp \
+ moc_qheaderview.cpp \
+ moc_qlistview.cpp \
+ moc_qtableview.cpp \
+ moc_qtreeview.cpp \
+ moc_qabstractitemdelegate.cpp \
+ moc_qitemdelegate.cpp \
+ moc_qdirmodel.cpp \
+ moc_qlistwidget.cpp \
+ moc_qlistwidget_p.cpp \
+ moc_qtablewidget.cpp \
+ moc_qtablewidget_p.cpp \
+ moc_qtreewidget.cpp \
+ moc_qtreewidget_p.cpp \
+ moc_qitemeditorfactory_p.cpp \
+ moc_qdatawidgetmapper.cpp \
+ moc_qcolumnviewgrip_p.cpp \
+ moc_qcolumnview.cpp \
+ moc_qstyleditemdelegate.cpp \
+ moc_qgraphicsitem.cpp \
+ moc_qgraphicsitemanimation.cpp \
+ moc_qgraphicsproxywidget.cpp \
+ moc_qgraphicsscene.cpp \
+ moc_qgraphicsscenebsptreeindex_p.cpp \
+ moc_qgraphicssceneindex_p.cpp \
+ moc_qgraphicsscenelinearindex_p.cpp \
+ moc_qgraphicstransform.cpp \
+ moc_qgraphicsview.cpp \
+ moc_qgraphicswidget.cpp \
+ moc_qgraphicsanchorlayout.cpp \
+ moc_qsystemtrayicon.cpp \
+ moc_qcompleter.cpp \
+ moc_qcompleter_p.cpp \
+ moc_qsystemtrayicon_p.cpp \
+ moc_qscroller.cpp \
+ moc_qscroller_p.cpp \
+ moc_qflickgesture_p.cpp \
+ moc_qundogroup.cpp \
+ moc_qundostack.cpp \
+ moc_qundostack_p.cpp \
+ moc_qundoview.cpp \
+ moc_qkeyeventtransition.cpp \
+ moc_qmouseeventtransition.cpp \
+ moc_qbasickeyeventtransition_p.cpp \
+ moc_qbasicmouseeventtransition_p.cpp \
+ moc_qgraphicseffect.cpp \
+ moc_qgraphicseffect_p.cpp \
+ moc_qpixmapfilter_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 = \
+ qtooltip.moc \
+ qwhatsthis.moc \
+ qcalendarwidget.moc \
+ qdockwidget.moc \
+ qeffects.moc \
+ qfontcombobox.moc \
+ qmdisubwindow.moc \
+ qmenu.moc \
+ qtoolbox.moc \
+ qcolordialog.moc \
+ qfontdialog.moc \
+ qinputdialog.moc \
+ qmessagebox.moc \
+ qtableview.moc \
+ qlistwidget.moc \
+ qitemeditorfactory.moc \
+ qundoview.moc
+
diff --git a/libports/lib/mk/qt5_wtf.mk b/libports/lib/mk/qt5_wtf.mk
new file mode 100644
index 0000000000..caa9d2ca83
--- /dev/null
+++ b/libports/lib/mk/qt5_wtf.mk
@@ -0,0 +1,17 @@
+include $(REP_DIR)/lib/import/import-qt5_wtf.mk
+
+SHARED_LIB = yes
+
+# use default warning level to avoid noise when compiling contrib code
+CC_WARN =
+
+include $(REP_DIR)/lib/mk/qt5_wtf_generated.inc
+
+# remove unneeded files to prevent moc warnings
+COMPILER_MOC_HEADER_MAKE_ALL_FILES_FILTER_OUT = \
+
+COMPILER_MOC_SOURCE_MAKE_ALL_FILES_FILTER_OUT = \
+
+include $(REP_DIR)/lib/mk/qt5.inc
+
+LIBS += qt5_core icu
diff --git a/libports/lib/mk/qt5_wtf_generated.inc b/libports/lib/mk/qt5_wtf_generated.inc
new file mode 100644
index 0000000000..e2c699937b
--- /dev/null
+++ b/libports/lib/mk/qt5_wtf_generated.inc
@@ -0,0 +1,98 @@
+QT_DEFINES += -DQT_NO_LIBUDEV -DQT_NO_XCB -DQT_NO_XKBCOMMON -DBUILDING_QT__=1 -DNDEBUG -DENABLE_3D_RENDERING=1 -DENABLE_BLOB=1 -DENABLE_CHANNEL_MESSAGING=1 -DENABLE_CSS_BOX_DECORATION_BREAK=1 -DENABLE_CSS_COMPOSITING=1 -DENABLE_CSS_EXCLUSIONS=1 -DENABLE_CSS_FILTERS=1 -DENABLE_CSS_IMAGE_SET=1 -DENABLE_CSS_REGIONS=1 -DENABLE_CSS_STICKY_POSITION=1 -DENABLE_DATALIST_ELEMENT=1 -DENABLE_DETAILS_ELEMENT=1 -DENABLE_FAST_MOBILE_SCROLLING=1 -DENABLE_FILTERS=1 -DENABLE_FTPDIR=1 -DENABLE_GESTURE_EVENTS=1 -DENABLE_ICONDATABASE=1 -DENABLE_IFRAME_SEAMLESS=1 -DENABLE_INPUT_TYPE_COLOR=1 -DENABLE_INSPECTOR=1 -DENABLE_INSPECTOR_SERVER=1 -DENABLE_JAVASCRIPT_DEBUGGER=1 -DENABLE_LEGACY_NOTIFICATIONS=1 -DENABLE_LEGACY_VIEWPORT_ADAPTION=1 -DENABLE_LEGACY_VENDOR_PREFIXES=1 -DENABLE_LINK_PREFETCH=1 -DENABLE_METER_ELEMENT=1 -DENABLE_MHTML=1 -DENABLE_MUTATION_OBSERVERS=1 -DENABLE_NOTIFICATIONS=1 -DENABLE_PAGE_VISIBILITY_API=1 -DENABLE_PROGRESS_ELEMENT=1 -DENABLE_RESOLUTION_MEDIA_QUERY=1 -DENABLE_REQUEST_ANIMATION_FRAME=1 -DENABLE_SHARED_WORKERS=1 -DENABLE_SMOOTH_SCROLLING=1 -DENABLE_SQL_DATABASE=1 -DENABLE_SVG=1 -DENABLE_SVG_FONTS=1 -DENABLE_TOUCH_ADJUSTMENT=1 -DENABLE_TOUCH_EVENTS=1 -DENABLE_WEB_SOCKETS=1 -DENABLE_WEB_TIMING=1 -DENABLE_WORKERS=1 -DENABLE_XHR_TIMEOUT=1 -DWTF_USE_TILED_BACKING_STORE=1 -DHAVE_QTPRINTSUPPORT=1 -DHAVE_QSTYLE=1 -DHAVE_QTTESTLIB=1 -DWTF_USE_LIBJPEG=1 -DWTF_USE_LIBPNG=1 -DPLUGIN_ARCHITECTURE_UNSUPPORTED=1 -DENABLE_TOUCH_SLIDER=1 -DENABLE_ACCELERATED_2D_CANVAS=0 -DENABLE_ANIMATION_API=0 -DENABLE_BATTERY_STATUS=0 -DENABLE_CSP_NEXT=0 -DENABLE_CSS_GRID_LAYOUT=0 -DENABLE_CSS_HIERARCHIES=0 -DENABLE_CSS_IMAGE_ORIENTATION=0 -DENABLE_CSS_IMAGE_RESOLUTION=0 -DENABLE_CSS_SHADERS=0 -DENABLE_CSS_VARIABLES=0 -DENABLE_CSS3_BACKGROUND=0 -DENABLE_CSS3_CONDITIONAL_RULES=0 -DENABLE_CSS3_TEXT=0 -DENABLE_DASHBOARD_SUPPORT=0 -DENABLE_DATAGRID=0 -DENABLE_DATA_TRANSFER_ITEMS=0 -DENABLE_DEVICE_ORIENTATION=0 -DENABLE_DIRECTORY_UPLOAD=0 -DENABLE_DOWNLOAD_ATTRIBUTE=0 -DENABLE_FILE_SYSTEM=0 -DENABLE_FULLSCREEN_API=0 -DENABLE_GAMEPAD=0 -DENABLE_GEOLOCATION=0 -DENABLE_HIGH_DPI_CANVAS=0 -DENABLE_INDEXED_DATABASE=0 -DENABLE_INPUT_SPEECH=0 -DENABLE_INPUT_TYPE_DATE=0 -DENABLE_INPUT_TYPE_DATETIME=0 -DENABLE_INPUT_TYPE_DATETIMELOCAL=0 -DENABLE_INPUT_TYPE_MONTH=0 -DENABLE_INPUT_TYPE_TIME=0 -DENABLE_INPUT_TYPE_WEEK=0 -DENABLE_LEGACY_CSS_VENDOR_PREFIXES=0 -DENABLE_LINK_PRERENDER=0 -DENABLE_MATHML=0 -DENABLE_MEDIA_SOURCE=0 -DENABLE_MEDIA_STATISTICS=0 -DENABLE_MEDIA_STREAM=0 -DENABLE_MICRODATA=0 -DENABLE_NAVIGATOR_CONTENT_UTILS=0 -DENABLE_NETSCAPE_PLUGIN_API=0 -DENABLE_NETWORK_INFO=0 -DENABLE_ORIENTATION_EVENTS=0 -DENABLE_PROXIMITY_EVENTS=0 -DENABLE_QUOTA=0 -DENABLE_SCRIPTED_SPEECH=0 -DENABLE_SHADOW_DOM=0 -DENABLE_STYLE_SCOPED=0 -DENABLE_SVG_DOM_OBJC_BINDINGS=0 -DENABLE_TEXT_AUTOSIZING=0 -DENABLE_TEXT_NOTIFICATIONS_ONLY=0 -DENABLE_TOUCH_ICON_LOADING=0 -DENABLE_VIBRATION=0 -DENABLE_VIDEO=0 -DENABLE_VIDEO_TRACK=0 -DENABLE_WEBGL=0 -DENABLE_WEB_AUDIO=0 -DENABLE_XSLT=0 -DBUILDING_WTF -DBUILDING_WEBKIT -DQT_ASCII_CAST_WARNINGS -DQT_NO_EXCEPTIONS -DQT_NO_DEBUG -DQT_CORE_LIB
+
+QT_INCPATH += \
+ qtbase/include \
+ qtbase/include/QtCore \
+ qtbase/mkspecs/genode-g++ \
+ qtwebkit/Source \
+ qtwebkit/Source/WTF \
+ qtwebkit/Source/WTF/wtf \
+
+QT_SOURCES += \
+ ArrayBuffer.cpp \
+ ArrayBufferView.cpp \
+ Assertions.cpp \
+ Atomics.cpp \
+ BitVector.cpp \
+ CryptographicallyRandomNumber.cpp \
+ CurrentTime.cpp \
+ DateMath.cpp \
+ DataLog.cpp \
+ DecimalNumber.cpp \
+ dtoa.cpp \
+ bignum-dtoa.cc \
+ bignum.cc \
+ cached-powers.cc \
+ diy-fp.cc \
+ double-conversion.cc \
+ fast-dtoa.cc \
+ fixed-dtoa.cc \
+ strtod.cc \
+ FastMalloc.cpp \
+ FilePrintStream.cpp \
+ GregorianDateTime.cpp \
+ GOwnPtr.cpp \
+ GRefPtr.cpp \
+ HashTable.cpp \
+ MD5.cpp \
+ MainThread.cpp \
+ MediaTime.cpp \
+ MemoryInstrumentation.cpp \
+ MetaAllocator.cpp \
+ NullPtr.cpp \
+ NumberOfCores.cpp \
+ RAMSize.cpp \
+ OSRandomSource.cpp \
+ MainThreadQt.cpp \
+ StringQt.cpp \
+ PageAllocationAligned.cpp \
+ PageBlock.cpp \
+ ParallelJobsGeneric.cpp \
+ PrintStream.cpp \
+ RandomNumber.cpp \
+ RefCountedLeakCounter.cpp \
+ SHA1.cpp \
+ StackBounds.cpp \
+ StringPrintStream.cpp \
+ TCSystemAlloc.cpp \
+ Threading.cpp \
+ TypeTraits.cpp \
+ WTFThreadData.cpp \
+ AtomicString.cpp \
+ Base64.cpp \
+ CString.cpp \
+ StringBuilder.cpp \
+ StringImpl.cpp \
+ StringStatics.cpp \
+ WTFString.cpp \
+ CollatorDefault.cpp \
+ CollatorICU.cpp \
+ UTF8.cpp \
+ OSAllocatorPosix.cpp \
+ ThreadIdentifierDataPthreads.cpp \
+ ThreadingPthreads.cpp
+
+QT_VPATH += \
+ qtwebkit/Source/WTF/wtf \
+ qtwebkit/Source/WTF/wtf/dtoa \
+ qtwebkit/Source/WTF/wtf/gobject \
+ qtwebkit/Source/WTF/wtf/qt \
+ qtwebkit/Source/WTF/wtf/text \
+ qtwebkit/Source/WTF/wtf/unicode \
+ qtwebkit/Source/WTF/wtf/unicode/icu \
+
+# 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 = \
+ MainThreadQt.moc
+
diff --git a/libports/lib/mk/qt5_xml.mk b/libports/lib/mk/qt5_xml.mk
new file mode 100644
index 0000000000..b2f92e1d1b
--- /dev/null
+++ b/libports/lib/mk/qt5_xml.mk
@@ -0,0 +1,12 @@
+include $(REP_DIR)/lib/import/import-qt5_xml.mk
+
+SHARED_LIB = yes
+
+include $(REP_DIR)/lib/mk/qt5_xml_generated.inc
+
+include $(REP_DIR)/lib/mk/qt5.inc
+
+INC_DIR += $(REP_DIR)/include/qt5/qtbase/QtXml/private \
+ $(REP_DIR)/contrib/$(QT5)/qtbase/include/QtCore/$(QT_VERSION)/QtCore \
+
+LIBS += qt5_core libc
diff --git a/libports/lib/mk/qt5_xml_generated.inc b/libports/lib/mk/qt5_xml_generated.inc
new file mode 100644
index 0000000000..afe80ea9b2
--- /dev/null
+++ b/libports/lib/mk/qt5_xml_generated.inc
@@ -0,0 +1,36 @@
+QT_DEFINES += -DQT_NO_LIBUDEV -DQT_NO_XCB -DQT_NO_XKBCOMMON -DQT_NO_USING_NAMESPACE -DQT_BUILD_XML_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 -DQT_NO_DEBUG -DQT_CORE_LIB
+
+QT_INCPATH += \
+ qtbase/include \
+ qtbase/include/QtCore \
+ qtbase/include/QtCore/5.1.0 \
+ qtbase/include/QtCore/5.1.0/QtCore \
+ qtbase/include/QtXml \
+ qtbase/include/QtXml/5.1.0 \
+ qtbase/include/QtXml/5.1.0/QtXml \
+ qtbase/mkspecs/genode-g++ \
+ qtbase/src/xml \
+
+QT_SOURCES += \
+ qdom.cpp \
+ qxml.cpp
+
+QT_VPATH += \
+ qtbase/src/xml/dom \
+ qtbase/src/xml/sax \
+
+# 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 = \
+
+
diff --git a/libports/ports/qt5.mk b/libports/ports/qt5.mk
new file mode 100644
index 0000000000..cb54ba57d6
--- /dev/null
+++ b/libports/ports/qt5.mk
@@ -0,0 +1,731 @@
+#
+# \brief Download and prepare Qt4 source code
+# \author Christian Prochaska
+# \author Norman Feske
+# \date 2009-05-11
+#
+
+REP_DIR := $(realpath .)
+include $(REP_DIR)/lib/mk/qt5_version.inc
+
+QT5_URL = http://download.qt-project.org/official_releases/qt/5.1/$(QT_VERSION)/single
+QT5_TGZ = $(QT5).tar.gz
+QT5_MD5 = 787ce18c7f47fc14538b4362a0aa9edd
+
+QTSCRIPTCLASSIC_URL = http://ftp.heanet.ie/mirrors/ftp.trolltech.com/pub/qt/solutions/lgpl
+QTSCRIPTCLASSIC = qtscriptclassic-1.0_1-opensource
+QTSCRIPTCLASSIC_TGZ = $(QTSCRIPTCLASSIC).tar.gz
+QTSCRIPTCLASSIC_MD5 = a835edfa9de2206ebfaebcb1267453bf
+
+#
+# Interface to top-level prepare Makefile
+#
+PORTS += qt5
+
+prepare-qt5: $(CONTRIB_DIR)/$(QT5) \
+ $(CONTRIB_DIR)/$(QTSCRIPTCLASSIC) \
+ tools \
+ $(REP_DIR)/src/lib/qt5/qtwebkit/Source/JavaScriptCore/generated/generated.tag \
+ $(REP_DIR)/src/lib/qt5/qtwebkit/Source/WebCore/generated/generated.tag
+
+#
+# Port-specific local rules
+#
+PATCHES_DIR = src/lib/qt5/patches
+PATCHES = $(shell cat $(PATCHES_DIR)/series)
+
+$(call check_tool,wget)
+$(call check_tool,patch)
+$(call check_tool,bison)
+$(call check_tool,perl)
+$(call check_tool,python)
+$(call check_tool,sed)
+$(call check_tool,gperf)
+
+$(DOWNLOAD_DIR)/$(QT5_TGZ):
+ $(VERBOSE)wget -c -P $(DOWNLOAD_DIR) $(QT5_URL)/$(QT5_TGZ) && touch $@
+
+$(DOWNLOAD_DIR)/$(QT5_TGZ).verified: $(DOWNLOAD_DIR)/$(QT5_TGZ)
+ $(VERBOSE)$(HASHVERIFIER) $(DOWNLOAD_DIR)/$(QT5_TGZ) $(QT5_MD5) md5
+ $(VERBOSE)touch $@
+
+$(DOWNLOAD_DIR)/$(QTSCRIPTCLASSIC_TGZ): $(DOWNLOAD_DIR)
+ $(VERBOSE)wget -c -P $(DOWNLOAD_DIR) $(QTSCRIPTCLASSIC_URL)/$(QTSCRIPTCLASSIC_TGZ) && touch $@
+
+$(DOWNLOAD_DIR)/$(QTSCRIPTCLASSIC_TGZ).verified: $(DOWNLOAD_DIR)/$(QTSCRIPTCLASSIC_TGZ)
+ $(VERBOSE)$(HASHVERIFIER) $(DOWNLOAD_DIR)/$(QTSCRIPTCLASSIC_TGZ) $(QTSCRIPTCLASSIC_MD5) md5
+ $(VERBOSE)touch $@
+
+$(CONTRIB_DIR)/$(QT5): $(DOWNLOAD_DIR)/$(QT5_TGZ).verified
+ $(VERBOSE)tar xzf $(DOWNLOAD_DIR)/$(QT5_TGZ) -C $(CONTRIB_DIR)
+ $(VERBOSE)touch $(CONTRIB_DIR)/$(QT5)
+ $(VERBOSE)for p in $(PATCHES); do \
+ patch -d $(CONTRIB_DIR)/$(QT5) -p1 -i ../../$(PATCHES_DIR)/$$p; done
+
+$(CONTRIB_DIR)/$(QTSCRIPTCLASSIC): $(DOWNLOAD_DIR)/$(QTSCRIPTCLASSIC_TGZ).verified
+ $(VERBOSE)tar xzf $(DOWNLOAD_DIR)/$(QTSCRIPTCLASSIC_TGZ) -C $(CONTRIB_DIR)
+ $(VERBOSE)touch $(CONTRIB_DIR)/$(QTSCRIPTCLASSIC)
+ $(VERBOSE)patch -d $(CONTRIB_DIR)/$(QTSCRIPTCLASSIC) -p1 -i ../../$(PATCHES_DIR)/qtscriptclassic_qt5.patch
+
+#
+# generated files
+#
+# some of the following lines have been extracted from Makefiles (and modified afterwards), that's why they can be quite long
+#
+
+JAVASCRIPTCORE_DIR = $(CONTRIB_DIR)/$(QT5)/qtwebkit/Source/JavaScriptCore
+
+$(REP_DIR)/src/lib/qt5/qtwebkit/Source/JavaScriptCore/generated/generated.tag:
+
+ $(VERBOSE)mkdir -p $(dir $@)
+
+ @# create_hash_table
+ $(VERBOSE)perl $(JAVASCRIPTCORE_DIR)/create_hash_table $(JAVASCRIPTCORE_DIR)/runtime/ArrayConstructor.cpp -i > $(dir $@)/ArrayConstructor.lut.h
+ $(VERBOSE)perl $(JAVASCRIPTCORE_DIR)/create_hash_table $(JAVASCRIPTCORE_DIR)/runtime/ArrayPrototype.cpp -i > $(dir $@)/ArrayPrototype.lut.h
+ $(VERBOSE)perl $(JAVASCRIPTCORE_DIR)/create_hash_table $(JAVASCRIPTCORE_DIR)/runtime/BooleanPrototype.cpp -i > $(dir $@)/BooleanPrototype.lut.h
+ $(VERBOSE)perl $(JAVASCRIPTCORE_DIR)/create_hash_table $(JAVASCRIPTCORE_DIR)/runtime/DateConstructor.cpp -i > $(dir $@)/DateConstructor.lut.h
+ $(VERBOSE)perl $(JAVASCRIPTCORE_DIR)/create_hash_table $(JAVASCRIPTCORE_DIR)/runtime/DatePrototype.cpp -i > $(dir $@)/DatePrototype.lut.h
+ $(VERBOSE)perl $(JAVASCRIPTCORE_DIR)/create_hash_table $(JAVASCRIPTCORE_DIR)/runtime/ErrorPrototype.cpp -i > $(dir $@)/ErrorPrototype.lut.h
+ $(VERBOSE)perl $(JAVASCRIPTCORE_DIR)/create_hash_table $(JAVASCRIPTCORE_DIR)/runtime/JSGlobalObject.cpp -i > $(dir $@)/JSGlobalObject.lut.h
+ $(VERBOSE)perl $(JAVASCRIPTCORE_DIR)/create_hash_table $(JAVASCRIPTCORE_DIR)/runtime/JSONObject.cpp -i > $(dir $@)/JSONObject.lut.h
+ $(VERBOSE)perl $(JAVASCRIPTCORE_DIR)/create_hash_table $(JAVASCRIPTCORE_DIR)/runtime/MathObject.cpp -i > $(dir $@)/MathObject.lut.h
+ $(VERBOSE)perl $(JAVASCRIPTCORE_DIR)/create_hash_table $(JAVASCRIPTCORE_DIR)/runtime/NamePrototype.cpp -i > $(dir $@)/NamePrototype.lut.h
+ $(VERBOSE)perl $(JAVASCRIPTCORE_DIR)/create_hash_table $(JAVASCRIPTCORE_DIR)/runtime/NumberConstructor.cpp -i > $(dir $@)/NumberConstructor.lut.h
+ $(VERBOSE)perl $(JAVASCRIPTCORE_DIR)/create_hash_table $(JAVASCRIPTCORE_DIR)/runtime/NumberPrototype.cpp -i > $(dir $@)/NumberPrototype.lut.h
+ $(VERBOSE)perl $(JAVASCRIPTCORE_DIR)/create_hash_table $(JAVASCRIPTCORE_DIR)/runtime/ObjectConstructor.cpp -i > $(dir $@)/ObjectConstructor.lut.h
+ $(VERBOSE)perl $(JAVASCRIPTCORE_DIR)/create_hash_table $(JAVASCRIPTCORE_DIR)/runtime/ObjectPrototype.cpp -i > $(dir $@)/ObjectPrototype.lut.h
+ $(VERBOSE)perl $(JAVASCRIPTCORE_DIR)/create_hash_table $(JAVASCRIPTCORE_DIR)/runtime/RegExpConstructor.cpp -i > $(dir $@)/RegExpConstructor.lut.h
+ $(VERBOSE)perl $(JAVASCRIPTCORE_DIR)/create_hash_table $(JAVASCRIPTCORE_DIR)/runtime/RegExpObject.cpp -i > $(dir $@)/RegExpObject.lut.h
+ $(VERBOSE)perl $(JAVASCRIPTCORE_DIR)/create_hash_table $(JAVASCRIPTCORE_DIR)/runtime/RegExpPrototype.cpp -i > $(dir $@)/RegExpPrototype.lut.h
+ $(VERBOSE)perl $(JAVASCRIPTCORE_DIR)/create_hash_table $(JAVASCRIPTCORE_DIR)/runtime/StringConstructor.cpp -i > $(dir $@)/StringConstructor.lut.h
+ $(VERBOSE)perl $(JAVASCRIPTCORE_DIR)/create_hash_table $(JAVASCRIPTCORE_DIR)/runtime/StringPrototype.cpp -i > $(dir $@)/StringPrototype.lut.h
+ $(VERBOSE)perl $(JAVASCRIPTCORE_DIR)/create_hash_table $(JAVASCRIPTCORE_DIR)/parser/Keywords.table -i > $(dir $@)/Lexer.lut.h
+
+ @# KeywordLookupGenerator.py
+ $(VERBOSE)python $(JAVASCRIPTCORE_DIR)/KeywordLookupGenerator.py $(JAVASCRIPTCORE_DIR)/parser/Keywords.table > $(dir $@)/KeywordLookup.h
+
+ @# create_regex_tables
+ $(VERBOSE)python $(JAVASCRIPTCORE_DIR)/create_regex_tables > $(dir $@)/RegExpJitTables.h
+
+ $(VERBOSE)touch $@
+
+
+# command names used by some of the extracted generator commands
+DEL_FILE := rm
+MOVE := mv
+
+QT_DEFINES = "LANGUAGE_JAVASCRIPT=1 ENABLE_3D_RENDERING=1 ENABLE_BLOB=1 ENABLE_CHANNEL_MESSAGING=1 ENABLE_CSS_BOX_DECORATION_BREAK=1 ENABLE_CSS_COMPOSITING=1 ENABLE_CSS_EXCLUSIONS=1 ENABLE_CSS_FILTERS=1 ENABLE_CSS_IMAGE_SET=1 ENABLE_CSS_REGIONS=1 ENABLE_CSS_STICKY_POSITION=1 ENABLE_DATALIST_ELEMENT=1 ENABLE_DETAILS_ELEMENT=1 ENABLE_FAST_MOBILE_SCROLLING=1 ENABLE_FILTERS=1 ENABLE_FTPDIR=1 ENABLE_GESTURE_EVENTS=1 ENABLE_ICONDATABASE=1 ENABLE_IFRAME_SEAMLESS=1 ENABLE_INPUT_TYPE_COLOR=1 ENABLE_INSPECTOR=1 ENABLE_INSPECTOR_SERVER=1 ENABLE_JAVASCRIPT_DEBUGGER=1 ENABLE_LEGACY_NOTIFICATIONS=1 ENABLE_LEGACY_VIEWPORT_ADAPTION=1 ENABLE_LEGACY_VENDOR_PREFIXES=1 ENABLE_LINK_PREFETCH=1 ENABLE_METER_ELEMENT=1 ENABLE_MHTML=1 ENABLE_MUTATION_OBSERVERS=1 ENABLE_NOTIFICATIONS=1 ENABLE_PAGE_VISIBILITY_API=1 ENABLE_PROGRESS_ELEMENT=1 ENABLE_RESOLUTION_MEDIA_QUERY=1 ENABLE_REQUEST_ANIMATION_FRAME=1 ENABLE_SHARED_WORKERS=1 ENABLE_SMOOTH_SCROLLING=1 ENABLE_SQL_DATABASE=1 ENABLE_SVG=1 ENABLE_SVG_FONTS=1 ENABLE_TOUCH_ADJUSTMENT=1 ENABLE_TOUCH_EVENTS=1 ENABLE_WEB_SOCKETS=1 ENABLE_WEB_TIMING=1 ENABLE_WORKERS=1 ENABLE_XHR_TIMEOUT=1 ENABLE_TOUCH_SLIDER=1 ENABLE_ACCELERATED_2D_CANVAS=0 ENABLE_ANIMATION_API=0 ENABLE_BATTERY_STATUS=0 ENABLE_CSP_NEXT=0 ENABLE_CSS_GRID_LAYOUT=0 ENABLE_CSS_HIERARCHIES=0 ENABLE_CSS_IMAGE_ORIENTATION=0 ENABLE_CSS_IMAGE_RESOLUTION=0 ENABLE_CSS_SHADERS=0 ENABLE_CSS_VARIABLES=0 ENABLE_CSS3_BACKGROUND=0 ENABLE_CSS3_CONDITIONAL_RULES=0 ENABLE_CSS3_TEXT=0 ENABLE_DASHBOARD_SUPPORT=0 ENABLE_DATAGRID=0 ENABLE_DATA_TRANSFER_ITEMS=0 ENABLE_DEVICE_ORIENTATION=0 ENABLE_DIRECTORY_UPLOAD=0 ENABLE_DOWNLOAD_ATTRIBUTE=0 ENABLE_FILE_SYSTEM=0 ENABLE_FULLSCREEN_API=0 ENABLE_GAMEPAD=0 ENABLE_GEOLOCATION=0 ENABLE_HIGH_DPI_CANVAS=0 ENABLE_INDEXED_DATABASE=0 ENABLE_INPUT_SPEECH=0 ENABLE_INPUT_TYPE_DATE=0 ENABLE_INPUT_TYPE_DATETIME=0 ENABLE_INPUT_TYPE_DATETIMELOCAL=0 ENABLE_INPUT_TYPE_MONTH=0 ENABLE_INPUT_TYPE_TIME=0 ENABLE_INPUT_TYPE_WEEK=0 ENABLE_LEGACY_CSS_VENDOR_PREFIXES=0 ENABLE_LINK_PRERENDER=0 ENABLE_MATHML=0 ENABLE_MEDIA_SOURCE=0 ENABLE_MEDIA_STATISTICS=0 ENABLE_MEDIA_STREAM=0 ENABLE_MICRODATA=0 ENABLE_NAVIGATOR_CONTENT_UTILS=0 ENABLE_NETSCAPE_PLUGIN_API=0 ENABLE_NETWORK_INFO=0 ENABLE_ORIENTATION_EVENTS=0 ENABLE_PROXIMITY_EVENTS=0 ENABLE_QUOTA=0 ENABLE_SCRIPTED_SPEECH=0 ENABLE_SHADOW_DOM=0 ENABLE_STYLE_SCOPED=0 ENABLE_SVG_DOM_OBJC_BINDINGS=0 ENABLE_TEXT_AUTOSIZING=0 ENABLE_TEXT_NOTIFICATIONS_ONLY=0 ENABLE_TOUCH_ICON_LOADING=0 ENABLE_VIBRATION=0 ENABLE_VIDEO=0 ENABLE_VIDEO_TRACK=0 ENABLE_WEBGL=0 ENABLE_WEB_AUDIO=0 ENABLE_XSLT=0"
+QT_EXTRA_DEFINES = "QT_NO_LIBUDEV QT_NO_XCB QT_NO_XKBCOMMON ENABLE_3D_RENDERING=1 ENABLE_BLOB=1 ENABLE_CHANNEL_MESSAGING=1 ENABLE_CSS_BOX_DECORATION_BREAK=1 ENABLE_CSS_COMPOSITING=1 ENABLE_CSS_EXCLUSIONS=1 ENABLE_CSS_FILTERS=1 ENABLE_CSS_IMAGE_SET=1 ENABLE_CSS_REGIONS=1 ENABLE_CSS_STICKY_POSITION=1 ENABLE_DATALIST_ELEMENT=1 ENABLE_DETAILS_ELEMENT=1 ENABLE_FAST_MOBILE_SCROLLING=1 ENABLE_FILTERS=1 ENABLE_FTPDIR=1 ENABLE_GESTURE_EVENTS=1 ENABLE_ICONDATABASE=1 ENABLE_IFRAME_SEAMLESS=1 ENABLE_INPUT_TYPE_COLOR=1 ENABLE_INSPECTOR=1 ENABLE_INSPECTOR_SERVER=1 ENABLE_JAVASCRIPT_DEBUGGER=1 ENABLE_LEGACY_NOTIFICATIONS=1 ENABLE_LEGACY_VIEWPORT_ADAPTION=1 ENABLE_LEGACY_VENDOR_PREFIXES=1 ENABLE_LINK_PREFETCH=1 ENABLE_METER_ELEMENT=1 ENABLE_MHTML=1 ENABLE_MUTATION_OBSERVERS=1 ENABLE_NOTIFICATIONS=1 ENABLE_PAGE_VISIBILITY_API=1 ENABLE_PROGRESS_ELEMENT=1 ENABLE_RESOLUTION_MEDIA_QUERY=1 ENABLE_REQUEST_ANIMATION_FRAME=1 ENABLE_SHARED_WORKERS=1 ENABLE_SMOOTH_SCROLLING=1 ENABLE_SQL_DATABASE=1 ENABLE_SVG=1 ENABLE_SVG_FONTS=1 ENABLE_TOUCH_ADJUSTMENT=1 ENABLE_TOUCH_EVENTS=1 ENABLE_WEB_SOCKETS=1 ENABLE_WEB_TIMING=1 ENABLE_WORKERS=1 ENABLE_XHR_TIMEOUT=1 WTF_USE_TILED_BACKING_STORE=1 HAVE_QTPRINTSUPPORT=1 HAVE_QSTYLE=1 HAVE_QTTESTLIB=1 WTF_USE_LIBJPEG=1 WTF_USE_LIBPNG=1 PLUGIN_ARCHITECTURE_UNSUPPORTED=1 ENABLE_TOUCH_SLIDER=1 ENABLE_ACCELERATED_2D_CANVAS=0 ENABLE_ANIMATION_API=0 ENABLE_BATTERY_STATUS=0 ENABLE_CSP_NEXT=0 ENABLE_CSS_GRID_LAYOUT=0 ENABLE_CSS_HIERARCHIES=0 ENABLE_CSS_IMAGE_ORIENTATION=0 ENABLE_CSS_IMAGE_RESOLUTION=0 ENABLE_CSS_SHADERS=0 ENABLE_CSS_VARIABLES=0 ENABLE_CSS3_BACKGROUND=0 ENABLE_CSS3_CONDITIONAL_RULES=0 ENABLE_CSS3_TEXT=0 ENABLE_DASHBOARD_SUPPORT=0 ENABLE_DATAGRID=0 ENABLE_DATA_TRANSFER_ITEMS=0 ENABLE_DEVICE_ORIENTATION=0 ENABLE_DIRECTORY_UPLOAD=0 ENABLE_DOWNLOAD_ATTRIBUTE=0 ENABLE_FILE_SYSTEM=0 ENABLE_FULLSCREEN_API=0 ENABLE_GAMEPAD=0 ENABLE_GEOLOCATION=0 ENABLE_HIGH_DPI_CANVAS=0 ENABLE_INDEXED_DATABASE=0 ENABLE_INPUT_SPEECH=0 ENABLE_INPUT_TYPE_DATE=0 ENABLE_INPUT_TYPE_DATETIME=0 ENABLE_INPUT_TYPE_DATETIMELOCAL=0 ENABLE_INPUT_TYPE_MONTH=0 ENABLE_INPUT_TYPE_TIME=0 ENABLE_INPUT_TYPE_WEEK=0 ENABLE_LEGACY_CSS_VENDOR_PREFIXES=0 ENABLE_LINK_PRERENDER=0 ENABLE_MATHML=0 ENABLE_MEDIA_SOURCE=0 ENABLE_MEDIA_STATISTICS=0 ENABLE_MEDIA_STREAM=0 ENABLE_MICRODATA=0 ENABLE_NAVIGATOR_CONTENT_UTILS=0 ENABLE_NETSCAPE_PLUGIN_API=0 ENABLE_NETWORK_INFO=0 ENABLE_ORIENTATION_EVENTS=0 ENABLE_PROXIMITY_EVENTS=0 ENABLE_QUOTA=0 ENABLE_SCRIPTED_SPEECH=0 ENABLE_SHADOW_DOM=0 ENABLE_STYLE_SCOPED=0 ENABLE_SVG_DOM_OBJC_BINDINGS=0 ENABLE_TEXT_AUTOSIZING=0 ENABLE_TEXT_NOTIFICATIONS_ONLY=0 ENABLE_TOUCH_ICON_LOADING=0 ENABLE_VIBRATION=0 ENABLE_VIDEO=0 ENABLE_VIDEO_TRACK=0 ENABLE_WEBGL=0 ENABLE_WEB_AUDIO=0 ENABLE_XSLT=0"
+GENERATE_BINDINGS_PL = $(VERBOSE)export "SOURCE_ROOT=$(WEBCORE_DIR)" && perl -I$(WEBCORE_DIR)/bindings/scripts $(WEBCORE_DIR)/bindings/scripts/generate-bindings.pl --defines $(QT_DEFINES) --generator JS --include Modules/filesystem --include Modules/geolocation --include Modules/indexeddb --include Modules/mediasource --include Modules/notifications --include Modules/quota --include Modules/webaudio --include Modules/webdatabase --include Modules/websockets --include css --include dom --include editing --include fileapi --include html --include html/canvas --include html/shadow --include html/track --include inspector --include loader/appcache --include page --include plugins --include storage --include svg --include testing --include workers --include xml --outputDir $(dir $@) --supplementalDependencyFile $(dir $@)/supplemental_dependency.tmp --preprocessor "$(REP_DIR)/tool/qt5/moc/moc -E"
+# the absolute path is needed for makeprop.pl
+WEBCORE_DIR = $(REP_DIR)/$(CONTRIB_DIR)/$(QT5)/qtwebkit/Source/WebCore
+
+$(REP_DIR)/src/lib/qt5/qtwebkit/Source/WebCore/generated/generated.tag:
+
+ $(VERBOSE)mkdir -p $(dir $@)
+
+ $(VERBOSE)bison -d -p xpathyy $(WEBCORE_DIR)/xml/XPathGrammar.y -o $(dir $@)/XPathGrammar.tab.c && $(MOVE) $(dir $@)/XPathGrammar.tab.c $(dir $@)/XPathGrammar.cpp && $(MOVE) $(dir $@)/XPathGrammar.tab.h $(dir $@)/XPathGrammar.h
+
+ @# preprocess-idls.pl
+ $(VERBOSE)sed -e "s,^,$(CONTRIB_DIR)/$(QT5)/,g" $(dir $@)/../idl_files > $(dir $@)/idl_files.tmp
+ $(VERBOSE)touch $(dir $@)/supplemental_dependency.tmp
+ $(VERBOSE)export "CONTRIB_DIR=$(CONTRIB_DIR)" && export "QT5=$(QT5)" && perl -I$(WEBCORE_DIR)/bindings/scripts $(WEBCORE_DIR)/bindings/scripts/preprocess-idls.pl --defines $(QT_DEFINES) --idlFilesList $(dir $@)/idl_files.tmp --supplementalDependencyFile $(dir $@)/supplemental_dependency.tmp --idlAttributesFile $(WEBCORE_DIR)/bindings/scripts/IDLAttributes.txt --preprocessor "$(REP_DIR)/tool/qt5/moc/moc -E"
+
+ @# generate-bindings.pl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/Modules/filesystem/DOMFileSystem.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/Modules/filesystem/DOMFileSystemSync.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/Modules/filesystem/DOMWindowFileSystem.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/Modules/filesystem/DirectoryEntry.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/Modules/filesystem/DirectoryEntrySync.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/Modules/filesystem/DirectoryReader.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/Modules/filesystem/DirectoryReaderSync.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/Modules/filesystem/EntriesCallback.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/Modules/filesystem/Entry.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/Modules/filesystem/EntryArray.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/Modules/filesystem/EntryArraySync.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/Modules/filesystem/EntryCallback.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/Modules/filesystem/EntrySync.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/Modules/filesystem/ErrorCallback.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/Modules/filesystem/FileCallback.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/Modules/filesystem/FileEntry.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/Modules/filesystem/FileEntrySync.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/Modules/filesystem/FileSystemCallback.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/Modules/filesystem/FileWriter.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/Modules/filesystem/FileWriterCallback.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/Modules/filesystem/Metadata.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/Modules/filesystem/MetadataCallback.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/Modules/filesystem/WorkerContextFileSystem.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/Modules/geolocation/Geolocation.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/Modules/geolocation/Geoposition.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/Modules/geolocation/NavigatorGeolocation.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/Modules/geolocation/PositionCallback.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/Modules/geolocation/PositionError.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/Modules/geolocation/PositionErrorCallback.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/Modules/indexeddb/DOMWindowIndexedDatabase.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/Modules/indexeddb/IDBAny.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/Modules/indexeddb/IDBCursor.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/Modules/indexeddb/IDBDatabaseException.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/Modules/indexeddb/IDBDatabase.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/Modules/indexeddb/IDBFactory.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/Modules/indexeddb/IDBIndex.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/Modules/indexeddb/IDBKey.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/Modules/indexeddb/IDBKeyRange.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/Modules/indexeddb/IDBObjectStore.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/Modules/indexeddb/IDBRequest.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/Modules/indexeddb/IDBTransaction.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/Modules/indexeddb/WorkerContextIndexedDatabase.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/Modules/notifications/DOMWindowNotifications.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/Modules/notifications/Notification.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/Modules/notifications/NotificationCenter.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/Modules/notifications/NotificationPermissionCallback.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/Modules/notifications/WorkerContextNotifications.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/Modules/quota/DOMWindowQuota.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/Modules/quota/StorageInfo.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/Modules/quota/StorageInfoErrorCallback.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/Modules/quota/StorageInfoQuotaCallback.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/Modules/quota/StorageInfoUsageCallback.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/Modules/webaudio/AudioBuffer.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/Modules/webaudio/AudioBufferCallback.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/Modules/webaudio/AudioBufferSourceNode.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/Modules/webaudio/ChannelMergerNode.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/Modules/webaudio/ChannelSplitterNode.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/Modules/webaudio/AudioContext.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/Modules/webaudio/AudioDestinationNode.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/Modules/webaudio/AudioGain.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/Modules/webaudio/GainNode.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/Modules/webaudio/AudioListener.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/Modules/webaudio/AudioNode.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/Modules/webaudio/PannerNode.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/Modules/webaudio/AudioParam.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/Modules/webaudio/AudioProcessingEvent.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/Modules/webaudio/AudioSourceNode.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/Modules/webaudio/BiquadFilterNode.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/Modules/webaudio/ConvolverNode.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/Modules/webaudio/DelayNode.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/Modules/webaudio/DOMWindowWebAudio.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/Modules/webaudio/DynamicsCompressorNode.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/Modules/webaudio/ScriptProcessorNode.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/Modules/webaudio/MediaElementAudioSourceNode.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/Modules/webaudio/MediaStreamAudioSourceNode.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/Modules/webaudio/OfflineAudioCompletionEvent.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/Modules/webaudio/OscillatorNode.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/Modules/webaudio/AnalyserNode.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/Modules/webaudio/WaveShaperNode.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/Modules/webaudio/WaveTable.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/Modules/webdatabase/DOMWindowWebDatabase.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/Modules/webdatabase/Database.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/Modules/webdatabase/DatabaseCallback.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/Modules/webdatabase/DatabaseSync.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/Modules/webdatabase/SQLError.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/Modules/webdatabase/SQLException.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/Modules/webdatabase/SQLResultSet.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/Modules/webdatabase/SQLResultSetRowList.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/Modules/webdatabase/SQLStatementCallback.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/Modules/webdatabase/SQLStatementErrorCallback.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/Modules/webdatabase/SQLTransaction.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/Modules/webdatabase/SQLTransactionCallback.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/Modules/webdatabase/SQLTransactionErrorCallback.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/Modules/webdatabase/SQLTransactionSync.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/Modules/webdatabase/SQLTransactionSyncCallback.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/Modules/webdatabase/WorkerContextWebDatabase.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/Modules/websockets/CloseEvent.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/Modules/websockets/DOMWindowWebSocket.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/Modules/websockets/WebSocket.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/Modules/websockets/WorkerContextWebSocket.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/css/Counter.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/css/CSSCharsetRule.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/css/CSSFontFaceRule.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/css/CSSImportRule.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/css/CSSMediaRule.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/css/CSSPageRule.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/css/CSSPrimitiveValue.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/css/CSSRule.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/css/CSSRuleList.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/css/CSSStyleDeclaration.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/css/CSSStyleRule.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/css/CSSStyleSheet.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/css/CSSValue.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/css/CSSValueList.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/css/MediaList.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/css/MediaQueryList.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/css/Rect.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/css/RGBColor.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/css/StyleMedia.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/css/StyleSheet.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/css/StyleSheetList.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/css/WebKitCSSFilterValue.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/css/WebKitCSSKeyframeRule.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/css/WebKitCSSKeyframesRule.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/css/WebKitCSSMatrix.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/css/WebKitCSSMixFunctionValue.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/css/WebKitCSSRegionRule.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/css/WebKitCSSTransformValue.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/css/WebKitCSSViewportRule.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/dom/Attr.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/dom/BeforeLoadEvent.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/dom/CharacterData.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/dom/ClientRect.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/dom/ClientRectList.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/dom/Clipboard.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/dom/CDATASection.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/dom/Comment.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/dom/CompositionEvent.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/dom/CustomEvent.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/dom/DataTransferItem.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/dom/DataTransferItemList.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/dom/DeviceMotionEvent.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/dom/DeviceOrientationEvent.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/dom/DocumentFragment.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/dom/Document.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/dom/DocumentType.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/dom/DOMCoreException.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/dom/DOMError.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/dom/DOMImplementation.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/dom/DOMStringList.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/dom/DOMStringMap.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/dom/Element.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/dom/Entity.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/dom/EntityReference.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/dom/ErrorEvent.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/dom/Event.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/dom/EventException.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/dom/EventTarget.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/dom/HashChangeEvent.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/dom/KeyboardEvent.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/dom/MouseEvent.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/dom/MessageChannel.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/dom/MessageEvent.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/dom/MessagePort.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/dom/MutationCallback.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/dom/MutationEvent.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/dom/MutationObserver.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/dom/MutationRecord.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/dom/NamedNodeMap.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/dom/Node.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/dom/NodeFilter.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/dom/NodeIterator.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/dom/NodeList.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/dom/Notation.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/dom/OverflowEvent.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/dom/PageTransitionEvent.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/dom/PopStateEvent.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/dom/ProcessingInstruction.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/dom/ProgressEvent.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/dom/PropertyNodeList.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/dom/RangeException.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/dom/Range.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/dom/RequestAnimationFrameCallback.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/dom/ShadowRoot.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/dom/StringCallback.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/dom/Text.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/dom/TextEvent.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/dom/Touch.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/dom/TouchEvent.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/dom/TouchList.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/dom/TreeWalker.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/dom/UIEvent.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/dom/WebKitAnimationEvent.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/dom/WebKitNamedFlow.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/dom/DOMNamedFlowCollection.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/dom/WebKitTransitionEvent.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/dom/WheelEvent.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/fileapi/Blob.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/fileapi/File.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/fileapi/FileError.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/fileapi/FileException.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/fileapi/FileList.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/fileapi/FileReader.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/fileapi/FileReaderSync.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/canvas/ArrayBufferView.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/canvas/ArrayBuffer.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/canvas/DataView.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/canvas/Int8Array.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/canvas/Float32Array.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/canvas/Float64Array.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/canvas/CanvasGradient.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/canvas/Int32Array.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/canvas/CanvasPattern.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/canvas/CanvasRenderingContext.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/canvas/CanvasRenderingContext2D.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/canvas/EXTTextureFilterAnisotropic.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/canvas/OESStandardDerivatives.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/canvas/OESTextureFloat.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/canvas/OESVertexArrayObject.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/canvas/OESElementIndexUint.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/canvas/WebGLActiveInfo.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/canvas/WebGLBuffer.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/canvas/WebGLCompressedTextureS3TC.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/canvas/WebGLContextAttributes.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/canvas/WebGLContextEvent.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/canvas/WebGLDebugRendererInfo.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/canvas/WebGLDebugShaders.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/canvas/WebGLDepthTexture.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/canvas/WebGLFramebuffer.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/canvas/WebGLLoseContext.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/canvas/WebGLProgram.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/canvas/WebGLRenderbuffer.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/canvas/WebGLRenderingContext.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/canvas/WebGLShader.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/canvas/WebGLShaderPrecisionFormat.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/canvas/Int16Array.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/canvas/WebGLTexture.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/canvas/WebGLUniformLocation.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/canvas/WebGLVertexArrayObjectOES.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/canvas/Uint8Array.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/canvas/Uint8ClampedArray.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/canvas/Uint32Array.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/canvas/Uint16Array.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/DOMFormData.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/DOMSettableTokenList.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/DOMTokenList.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/DOMURL.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/HTMLAllCollection.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/HTMLAudioElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/HTMLAnchorElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/HTMLAppletElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/HTMLAreaElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/HTMLBaseElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/HTMLBaseFontElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/HTMLBodyElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/HTMLBRElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/HTMLButtonElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/HTMLCanvasElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/HTMLCollection.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/HTMLDataListElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/HTMLDetailsElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/HTMLDialogElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/HTMLDirectoryElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/HTMLDivElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/HTMLDListElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/HTMLDocument.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/HTMLElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/HTMLEmbedElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/HTMLFieldSetElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/HTMLFontElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/HTMLFormControlsCollection.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/HTMLFormElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/HTMLFrameElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/HTMLFrameSetElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/HTMLHeadElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/HTMLHeadingElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/HTMLHRElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/HTMLHtmlElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/HTMLIFrameElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/HTMLImageElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/HTMLInputElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/HTMLKeygenElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/HTMLLabelElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/HTMLLegendElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/HTMLLIElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/HTMLLinkElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/HTMLMapElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/HTMLMarqueeElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/HTMLMediaElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/HTMLMenuElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/HTMLMetaElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/HTMLMeterElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/HTMLModElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/HTMLObjectElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/HTMLOListElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/HTMLOptGroupElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/HTMLOptionElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/HTMLOptionsCollection.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/HTMLOutputElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/HTMLParagraphElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/HTMLParamElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/HTMLPreElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/HTMLProgressElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/HTMLPropertiesCollection.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/HTMLQuoteElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/HTMLScriptElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/HTMLSelectElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/HTMLSourceElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/HTMLSpanElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/HTMLStyleElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/HTMLTableCaptionElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/HTMLTableCellElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/HTMLTableColElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/HTMLTableElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/HTMLTableRowElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/HTMLTableSectionElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/HTMLTextAreaElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/HTMLTitleElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/HTMLTrackElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/HTMLUListElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/HTMLUnknownElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/HTMLVideoElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/ImageData.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/MediaController.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/MediaError.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/MicroDataItemValue.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/RadioNodeList.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/TextMetrics.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/TimeRanges.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/ValidityState.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/VoidCallback.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/shadow/HTMLContentElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/html/shadow/HTMLShadowElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/inspector/InjectedScriptHost.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/inspector/InspectorFrontendHost.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/inspector/JavaScriptCallFrame.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/inspector/ScriptProfile.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/inspector/ScriptProfileNode.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/loader/appcache/DOMApplicationCache.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/page/BarInfo.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/page/Console.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/page/Coordinates.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/page/Crypto.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/page/DOMSecurityPolicy.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/page/DOMSelection.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/page/DOMWindow.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/page/EventSource.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/page/History.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/page/Location.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/page/MemoryInfo.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/page/Navigator.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/page/Performance.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/page/PerformanceEntry.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/page/PerformanceEntryList.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/page/PerformanceNavigation.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/page/PerformanceResourceTiming.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/page/PerformanceTiming.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/page/Screen.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/page/SpeechInputEvent.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/page/SpeechInputResult.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/page/SpeechInputResultList.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/page/WebKitAnimation.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/page/WebKitAnimationList.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/page/WebKitPoint.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/page/WorkerNavigator.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/plugins/DOMPlugin.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/plugins/DOMMimeType.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/plugins/DOMPluginArray.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/plugins/DOMMimeTypeArray.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/storage/Storage.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/storage/StorageEvent.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/testing/Internals.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/testing/InternalSettings.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/testing/MallocStatistics.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/workers/AbstractWorker.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/workers/DedicatedWorkerContext.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/workers/SharedWorker.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/workers/SharedWorkerContext.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/workers/Worker.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/workers/WorkerContext.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/workers/WorkerLocation.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/xml/DOMParser.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/xml/XMLHttpRequest.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/xml/XMLHttpRequestException.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/xml/XMLHttpRequestProgressEvent.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/xml/XMLHttpRequestUpload.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/xml/XMLSerializer.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/xml/XPathNSResolver.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/xml/XPathException.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/xml/XPathExpression.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/xml/XPathResult.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/xml/XPathEvaluator.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/xml/XSLTProcessor.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGAElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGAltGlyphDefElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGAltGlyphElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGAltGlyphItemElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGAngle.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGAnimateColorElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGAnimateMotionElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGAnimatedAngle.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGAnimatedBoolean.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGAnimatedEnumeration.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGAnimatedInteger.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGAnimatedLength.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGAnimatedLengthList.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGAnimatedNumber.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGAnimatedNumberList.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGAnimatedPreserveAspectRatio.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGAnimatedRect.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGAnimatedString.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGAnimatedTransformList.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGAnimateElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGAnimateTransformElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGAnimationElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGCircleElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGClipPathElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGColor.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGComponentTransferFunctionElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGCursorElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGDefsElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGDescElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGDocument.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGElementInstance.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGElementInstanceList.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGEllipseElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGException.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGFEBlendElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGFEColorMatrixElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGFEComponentTransferElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGFECompositeElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGFEConvolveMatrixElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGFEDiffuseLightingElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGFEDisplacementMapElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGFEDistantLightElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGFEDropShadowElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGFEFloodElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGFEFuncAElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGFEFuncBElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGFEFuncGElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGFEFuncRElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGFEGaussianBlurElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGFEImageElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGFEMergeElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGFEMergeNodeElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGFEMorphologyElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGFEOffsetElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGFEPointLightElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGFESpecularLightingElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGFESpotLightElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGFETileElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGFETurbulenceElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGFilterElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGFontElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGFontFaceElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGFontFaceFormatElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGFontFaceNameElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGFontFaceSrcElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGFontFaceUriElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGForeignObjectElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGGElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGGlyphElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGGlyphRefElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGGradientElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGHKernElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGImageElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGLength.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGLengthList.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGLinearGradientElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGLineElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGMarkerElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGMaskElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGMatrix.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGMetadataElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGMissingGlyphElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGMPathElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGNumber.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGNumberList.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGPaint.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGPathElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGPathSegArcAbs.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGPathSegArcRel.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGPathSegClosePath.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGPathSegCurvetoCubicAbs.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGPathSegCurvetoCubicRel.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGPathSegCurvetoCubicSmoothAbs.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGPathSegCurvetoCubicSmoothRel.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGPathSegCurvetoQuadraticAbs.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGPathSegCurvetoQuadraticRel.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGPathSegCurvetoQuadraticSmoothAbs.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGPathSegCurvetoQuadraticSmoothRel.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGPathSeg.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGPathSegLinetoAbs.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGPathSegLinetoHorizontalAbs.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGPathSegLinetoHorizontalRel.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGPathSegLinetoRel.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGPathSegLinetoVerticalAbs.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGPathSegLinetoVerticalRel.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGPathSegList.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGPathSegMovetoAbs.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGPathSegMovetoRel.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGPatternElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGPoint.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGPointList.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGPolygonElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGPolylineElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGPreserveAspectRatio.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGRadialGradientElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGRectElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGRect.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGRenderingIntent.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGScriptElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGSetElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGStopElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGStringList.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGStyleElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGSVGElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGSwitchElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGSymbolElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGTextContentElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGTextElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGTextPathElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGTextPositioningElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGTitleElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGTransform.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGTransformList.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGTRefElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGTSpanElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGUnitTypes.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGUseElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGViewElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGVKernElement.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGViewSpec.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGZoomAndPan.idl
+ $(GENERATE_BINDINGS_PL) $(WEBCORE_DIR)/svg/SVGZoomEvent.idl
+
+ @# generate-webkit-version.pl
+ $(VERBOSE)perl $(WEBCORE_DIR)/../WebKit/scripts/generate-webkitversion.pl --config $(WEBCORE_DIR)/../WebKit/mac/Configurations/Version.xcconfig --outputDir $(dir $@)/
+
+ @# make-css-file-arrays.pl
+ $(VERBOSE)perl $(WEBCORE_DIR)/css/make-css-file-arrays.pl $(dir $@)/UserAgentStyleSheets.h $(dir $@)/UserAgentStyleSheetsData.cpp $(WEBCORE_DIR)/css/html.css $(WEBCORE_DIR)/css/quirks.css $(WEBCORE_DIR)/css/mathml.css $(WEBCORE_DIR)/css/svg.css $(WEBCORE_DIR)/css/view-source.css $(WEBCORE_DIR)/css/fullscreen.css $(WEBCORE_DIR)/css/mediaControls.css $(WEBCORE_DIR)/css/mediaControlsQt.css $(WEBCORE_DIR)/css/mediaControlsQtFullscreen.css $(WEBCORE_DIR)/css/themeQtNoListboxes.css $(WEBCORE_DIR)/css/mobileThemeQt.css
+
+ @# make-dom-exceptions.pl
+ $(VERBOSE)perl -I$(WEBCORE_DIR)/bindings/scripts $(WEBCORE_DIR)/dom/make_dom_exceptions.pl --input $(WEBCORE_DIR)/dom/DOMExceptions.in --outputDir $(dir $@)
+
+ @# make_event_factory.pl
+ $(VERBOSE)perl -I$(WEBCORE_DIR)/bindings/scripts $(WEBCORE_DIR)/dom/make_event_factory.pl --input $(WEBCORE_DIR)/dom/EventNames.in --outputDir $(dir $@)
+ $(VERBOSE)perl -I$(WEBCORE_DIR)/bindings/scripts $(WEBCORE_DIR)/dom/make_event_factory.pl --input $(WEBCORE_DIR)/dom/EventTargetFactory.in --outputDir $(dir $@)
+
+ @# make-hash-tools.pl
+ $(VERBOSE)perl $(WEBCORE_DIR)/make-hash-tools.pl $(dir $@) $(WEBCORE_DIR)/platform/ColorData.gperf
+
+ @# make_names.pl
+ $(VERBOSE)perl -I$(WEBCORE_DIR)/bindings/scripts $(WEBCORE_DIR)/dom/make_names.pl --tags $(WEBCORE_DIR)/mathml/mathtags.in --attrs $(WEBCORE_DIR)/mathml/mathattrs.in --extraDefines $(QT_EXTRA_DEFINES) --preprocessor "$(REP_DIR)/tool/qt5/moc/moc -E" --factory --wrapperFactory --outputDir $(dir $@)
+ $(VERBOSE)perl -I$(WEBCORE_DIR)/bindings/scripts $(WEBCORE_DIR)/dom/make_names.pl --tags $(WEBCORE_DIR)/html/HTMLTagNames.in --attrs $(WEBCORE_DIR)/html/HTMLAttributeNames.in --extraDefines $(QT_EXTRA_DEFINES) --preprocessor "$(REP_DIR)/tool/qt5/moc/moc -E" --factory --wrapperFactory --outputDir $(dir $@)
+ $(VERBOSE)perl -I$(WEBCORE_DIR)/bindings/scripts $(WEBCORE_DIR)/dom/make_names.pl --fonts $(WEBCORE_DIR)/css/WebKitFontFamilyNames.in --outputDir $(dir $@)
+ $(VERBOSE)perl -I$(WEBCORE_DIR)/bindings/scripts $(WEBCORE_DIR)/dom/make_names.pl --tags $(WEBCORE_DIR)/svg/svgtags.in --attrs $(WEBCORE_DIR)/svg/svgattrs.in --extraDefines $(QT_EXTRA_DEFINES) --preprocessor "$(REP_DIR)/tool/qt5/moc/moc -E" --factory --wrapperFactory --outputDir $(dir $@)
+ $(VERBOSE)perl -I$(WEBCORE_DIR)/bindings/scripts $(WEBCORE_DIR)/dom/make_names.pl --attrs $(WEBCORE_DIR)/xml/xmlnsattrs.in --preprocessor "$(REP_DIR)/tool/qt5/moc/moc -E" --outputDir $(dir $@)
+ $(VERBOSE)perl -I$(WEBCORE_DIR)/bindings/scripts $(WEBCORE_DIR)/dom/make_names.pl --attrs $(WEBCORE_DIR)/svg/xlinkattrs.in --preprocessor "$(REP_DIR)/tool/qt5/moc/moc -E" --outputDir $(dir $@)
+ $(VERBOSE)perl -I$(WEBCORE_DIR)/bindings/scripts $(WEBCORE_DIR)/dom/make_names.pl --attrs $(WEBCORE_DIR)/xml/xmlattrs.in --preprocessor "$(REP_DIR)/tool/qt5/moc/moc -E" --outputDir $(dir $@)
+
+ @# make_settings.pl
+ $(VERBOSE)perl -I$(WEBCORE_DIR)/bindings/scripts $(WEBCORE_DIR)/page/make_settings.pl --input $(WEBCORE_DIR)/page/Settings.in --outputDir $(dir $@)
+
+ @# makeprop.pl
+ $(VERBOSE)perl -ne "print $1" $(WEBCORE_DIR)/css/CSSPropertyNames.in $(WEBCORE_DIR)/css/SVGCSSPropertyNames.in > $(dir $@)/CSSPropertyNames.in && cd $(dir $@) && perl -I$(WEBCORE_DIR)/bindings/scripts $(WEBCORE_DIR)/css/makeprop.pl --defines $(QT_DEFINES) --preprocessor "$(REP_DIR)/tool/qt5/moc/moc -E" $(WEBCORE_DIR)/css/CSSPropertyNames.in && $(DEL_FILE) CSSPropertyNames.in CSSPropertyNames.gperf
+
+ @# makegrammar.pl
+ $(VERBOSE)perl -I $(WEBCORE_DIR)/bindings/scripts $(WEBCORE_DIR)/css/makegrammar.pl --outputDir $(dir $@) --extraDefines $(QT_EXTRA_DEFINES) --preprocessor "$(REP_DIR)/tool/qt5/moc/moc -E" --symbolsPrefix cssyy $(WEBCORE_DIR)/css/CSSGrammar.y.in
+
+ @# makevalues.pl
+ $(VERBOSE)perl -ne "print $1" $(WEBCORE_DIR)/css/CSSValueKeywords.in $(WEBCORE_DIR)/css/SVGCSSValueKeywords.in > $(dir $@)/CSSValueKeywords.in && cd $(dir $@) && perl -I$(WEBCORE_DIR)/bindings/scripts $(WEBCORE_DIR)/css/makevalues.pl --defines $(QT_DEFINES) --preprocessor "$(REP_DIR)/tool/qt5/moc/moc -E" $(WEBCORE_DIR)/css/CSSValueKeywords.in && $(DEL_FILE) CSSValueKeywords.in CSSValueKeywords.gperf
+
+ @# xxd.pl
+ $(VERBOSE)perl $(WEBCORE_DIR)/inspector/xxd.pl InspectorOverlayPage_html $(WEBCORE_DIR)/inspector/InspectorOverlayPage.html $(dir $@)/InspectorOverlayPage.h
+ $(VERBOSE)perl $(WEBCORE_DIR)/inspector/xxd.pl InjectedScriptSource_js $(WEBCORE_DIR)/inspector/InjectedScriptSource.js $(dir $@)/InjectedScriptSource.h
+ $(VERBOSE)perl $(WEBCORE_DIR)/inspector/xxd.pl InjectedScriptCanvasModuleSource_js $(WEBCORE_DIR)/inspector/InjectedScriptCanvasModuleSource.js $(dir $@)/InjectedScriptCanvasModuleSource.h
+
+ @# CodeGeneratorInspector.py
+ $(VERBOSE)python $(WEBCORE_DIR)/inspector/CodeGeneratorInspector.py $(WEBCORE_DIR)/inspector/Inspector.json --output_h_dir $(dir $@) --output_cpp_dir $(dir $@)
+
+ @# create-html-entity-table
+ $(VERBOSE)python $(WEBCORE_DIR)/html/parser/create-html-entity-table -o $(dir $@)/HTMLEntityTable.cpp $(WEBCORE_DIR)/html/parser/HTMLEntityNames.in
+
+ $(VERBOSE)touch $@
+
+
+tools:
+ $(VERBOSE)make -C tool/qt5
+
+clean-qt5:
+ $(VERBOSE)make -C tool/qt5 clean
+ $(VERBOSE)rm -rf $(CONTRIB_DIR)/$(QT5)
+ $(VERBOSE)rm -rf $(CONTRIB_DIR)/$(QTSCRIPTCLASSIC)
+ $(VERBOSE)rm -rf $(REP_DIR)/src/lib/qt5/qtwebkit/Source/JavaScriptCore
+ $(VERBOSE)rm -rf $(REP_DIR)/src/lib/qt5/qtwebkit/Source/WebCore/generated
diff --git a/libports/run/qt5.run b/libports/run/qt5.run
new file mode 100644
index 0000000000..30aaff2d82
--- /dev/null
+++ b/libports/run/qt5.run
@@ -0,0 +1,136 @@
+#
+# Build
+#
+
+build {
+ core
+ init
+ drivers/input/ps2
+ drivers/pci
+ drivers/framebuffer
+ drivers/timer
+ server/nitpicker
+ server/liquid_framebuffer
+ app/qt5/qt_launchpad
+ app/qt5/examples/textedit
+ app/qt5/examples/tetrix
+}
+
+
+create_boot_directory
+
+#
+# Generate config
+#
+
+set config {
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ }
+
+append_if [have_spec sdl] config {
+
+
+
+
+
+
+ }
+
+append_if [have_spec pci] config {
+
+
+
+ }
+
+append_if [have_spec framebuffer] config {
+
+
+
+ }
+
+append_if [have_spec ps2] config {
+
+
+
+ }
+
+append config {
+
+
+
+
+
+
+
+
+
+
+
+
+}
+
+install_config $config
+
+#
+# Boot modules
+#
+
+# generic modules
+set boot_modules {
+ core
+ init
+ timer
+ nitpicker
+ liquid_fb
+ qt_launchpad
+ freetype.lib.so
+ icu.lib.so
+ ld.lib.so
+ libc.lib.so
+ libc_log.lib.so
+ libc_lock_pipe.lib.so
+ libm.lib.so
+ libpng.lib.so
+ jpeg.lib.so
+ pthread.lib.so
+ qt5_core.lib.so
+ qt5_dejavusans.lib.so
+ qt5_gui.lib.so
+ qt5_widgets.lib.so
+ qt5_xml.lib.so
+ qt5_scriptclassic.lib.so
+ qt5_ui_tools.lib.so
+ zlib.lib.so
+ stdcxx.lib.so
+ textedit
+ tetrix
+}
+
+
+# platform-specific modules
+lappend_if [have_spec linux] boot_modules fb_sdl
+lappend_if [have_spec pci] boot_modules pci_drv
+lappend_if [have_spec framebuffer] boot_modules fb_drv
+lappend_if [have_spec ps2] boot_modules ps2_drv
+
+build_boot_image $boot_modules
+
+append qemu_args " -m 512"
+
+run_genode_until forever
+
diff --git a/libports/run/qt5_avplay.run b/libports/run/qt5_avplay.run
new file mode 100644
index 0000000000..4619c8636f
--- /dev/null
+++ b/libports/run/qt5_avplay.run
@@ -0,0 +1,160 @@
+#
+# Build
+#
+
+build {
+ core
+ init
+ drivers/input/ps2
+ drivers/pci
+ drivers/framebuffer
+ drivers/timer
+ drivers/oss
+ server/nitpicker
+ server/liquid_framebuffer
+ app/avplay
+ app/qt5/qt_avplay
+}
+
+#
+# Download media file
+#
+
+set media_url "ftp://ftp.untergrund.net/users/ae/dhstv/escape-chotro.mp4"
+if {![file exists bin/mediafile]} {
+ puts "downloading media file from $media_url"
+ catch { exec wget -O bin/mediafile $media_url }
+}
+
+create_boot_directory
+
+#
+# Generate config
+#
+
+set config {
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ }
+
+append_if [have_spec sdl] config {
+
+
+
+
+
+
+ }
+
+append_if [have_spec pci] config {
+
+
+
+ }
+
+append_if [have_spec framebuffer] config {
+
+
+
+ }
+
+append_if [have_spec ps2] config {
+
+
+
+ }
+
+append config {
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+}
+
+install_config $config
+
+#
+# Boot modules
+#
+
+# generic modules
+set boot_modules {
+ core
+ init
+ timer
+ oss_drv
+ nitpicker
+ liquid_fb
+ qt_avplay
+ freetype.lib.so
+ icu.lib.so
+ ld.lib.so
+ libc.lib.so
+ libc_log.lib.so
+ libc_lock_pipe.lib.so
+ libm.lib.so
+ libpng.lib.so
+ jpeg.lib.so
+ pthread.lib.so
+ qt5_core.lib.so
+ qt5_dejavusans.lib.so
+ qt5_gui.lib.so
+ qt5_qnitpickerviewwidget.lib.so
+ qt5_widgets.lib.so
+ qt5_xml.lib.so
+ zlib.lib.so
+ avcodec.lib.so
+ avformat.lib.so
+ avutil.lib.so
+ avfilter.lib.so
+ swscale.lib.so
+ sdl.lib.so
+ pthread.lib.so
+ libc_log.lib.so
+ libc_rom.lib.so
+ avplay
+ mediafile
+ stdcxx.lib.so
+}
+
+# platform-specific modules
+lappend_if [have_spec linux] boot_modules fb_sdl
+lappend_if [have_spec pci] boot_modules pci_drv
+lappend_if [have_spec framebuffer] boot_modules fb_drv
+lappend_if [have_spec ps2] boot_modules ps2_drv
+
+build_boot_image $boot_modules
+
+append qemu_args " -m 768 -soundhw all"
+
+run_genode_until forever
+
diff --git a/libports/run/qt5_calculatorform.run b/libports/run/qt5_calculatorform.run
new file mode 100644
index 0000000000..174ac68084
--- /dev/null
+++ b/libports/run/qt5_calculatorform.run
@@ -0,0 +1,127 @@
+#
+# Build
+#
+
+build {
+ core
+ init
+ drivers/input/ps2
+ drivers/pci
+ drivers/framebuffer
+ drivers/timer
+ server/nitpicker
+ server/liquid_framebuffer
+ app/qt5/examples/calculatorform
+}
+
+create_boot_directory
+
+#
+# Generate config
+#
+
+set config {
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ }
+
+append_if [have_spec sdl] config {
+
+
+
+
+
+
+ }
+
+append_if [have_spec pci] config {
+
+
+
+ }
+
+append_if [have_spec framebuffer] config {
+
+
+
+ }
+
+append_if [have_spec ps2] config {
+
+
+
+ }
+
+append config {
+
+
+
+
+
+
+
+
+
+
+
+
+}
+
+install_config $config
+
+#
+# Boot modules
+#
+
+# generic modules
+set boot_modules {
+ core
+ init
+ timer
+ nitpicker
+ liquid_fb
+ calculatorform
+ freetype.lib.so
+ icu.lib.so
+ ld.lib.so
+ libc.lib.so
+ libc_log.lib.so
+ libc_lock_pipe.lib.so
+ libm.lib.so
+ libpng.lib.so
+ jpeg.lib.so
+ pthread.lib.so
+ qt5_core.lib.so
+ qt5_dejavusans.lib.so
+ qt5_gui.lib.so
+ qt5_widgets.lib.so
+ qt5_xml.lib.so
+ zlib.lib.so
+ stdcxx.lib.so
+}
+
+# platform-specific modules
+lappend_if [have_spec linux] boot_modules fb_sdl
+lappend_if [have_spec pci] boot_modules pci_drv
+lappend_if [have_spec framebuffer] boot_modules fb_drv
+lappend_if [have_spec ps2] boot_modules ps2_drv
+
+build_boot_image $boot_modules
+
+append qemu_args " -m 128"
+
+run_genode_until forever
diff --git a/libports/run/qt5_previewer.run b/libports/run/qt5_previewer.run
new file mode 100644
index 0000000000..b363748aa0
--- /dev/null
+++ b/libports/run/qt5_previewer.run
@@ -0,0 +1,137 @@
+#
+# Build
+#
+
+build {
+ core
+ init
+ drivers/input/ps2
+ drivers/pci
+ drivers/framebuffer
+ drivers/timer
+ server/nitpicker
+ server/liquid_framebuffer
+ app/qt5/examples/previewer
+}
+
+create_boot_directory
+
+#
+# Generate config
+#
+
+set config {
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ }
+
+append_if [have_spec sdl] config {
+
+
+
+
+
+
+ }
+
+append_if [have_spec pci] config {
+
+
+
+ }
+
+append_if [have_spec framebuffer] config {
+
+
+
+ }
+
+append_if [have_spec ps2] config {
+
+
+
+ }
+
+append config {
+
+
+
+
+
+
+
+
+
+
+
+
+}
+
+install_config $config
+
+#
+# Boot modules
+#
+
+# generic modules
+set boot_modules {
+ core
+ init
+ timer
+ nitpicker
+ liquid_fb
+ previewer
+ freetype.lib.so
+ icu.lib.so
+ ld.lib.so
+ libc.lib.so
+ libc_log.lib.so
+ libc_lock_pipe.lib.so
+ libm.lib.so
+ libpng.lib.so
+ jpeg.lib.so
+ libcrypto.lib.so
+ libssl.lib.so
+ pthread.lib.so
+ qt5_core.lib.so
+ qt5_dejavusans.lib.so
+ qt5_gui.lib.so
+ qt5_jscore.lib.so
+ qt5_network.lib.so
+ qt5_printsupport.lib.so
+ qt5_sql.lib.so
+ qt5_webcore.lib.so
+ qt5_webkit.lib.so
+ qt5_webkitwidgets.lib.so
+ qt5_widgets.lib.so
+ qt5_wtf.lib.so
+ qt5_xml.lib.so
+ zlib.lib.so
+ stdcxx.lib.so
+}
+
+# platform-specific modules
+lappend_if [have_spec linux] boot_modules fb_sdl
+lappend_if [have_spec pci] boot_modules pci_drv
+lappend_if [have_spec framebuffer] boot_modules fb_drv
+lappend_if [have_spec ps2] boot_modules ps2_drv
+
+build_boot_image $boot_modules
+
+append qemu_args " -m 256"
+
+run_genode_until forever
diff --git a/libports/run/qt5_qpluginwidget.run b/libports/run/qt5_qpluginwidget.run
new file mode 100644
index 0000000000..bcf112c2b7
--- /dev/null
+++ b/libports/run/qt5_qpluginwidget.run
@@ -0,0 +1,145 @@
+#
+# Build
+#
+
+build {
+ core
+ init
+ drivers/input/ps2
+ drivers/pci
+ drivers/framebuffer
+ drivers/timer
+ server/nitpicker
+ server/liquid_framebuffer
+ server/loader
+ server/tar_rom
+ test/nitpicker
+ test/qt5/qpluginwidget
+}
+
+create_boot_directory
+
+#
+# Generate config
+#
+
+set config {
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ }
+
+append_if [have_spec sdl] config {
+
+
+
+
+
+
+ }
+
+append_if [have_spec pci] config {
+
+
+
+ }
+
+append_if [have_spec framebuffer] config {
+
+
+
+ }
+
+append_if [have_spec ps2] config {
+
+
+
+ }
+
+append config {
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+}
+
+install_config $config
+
+#
+# Boot modules
+#
+
+exec sh -c "ln -sf ../test/qt5/qpluginwidget/test-plugin.tar bin/"
+
+# generic modules
+set boot_modules {
+ core
+ init
+ timer
+ nitpicker
+ liquid_fb
+ loader
+ tar_rom
+ testnit
+ test-qpluginwidget
+ freetype.lib.so
+ icu.lib.so
+ ld.lib.so
+ libc.lib.so
+ libc_log.lib.so
+ libc_lock_pipe.lib.so
+ libcrypto.lib.so
+ libm.lib.so
+ libpng.lib.so
+ libssl.lib.so
+ jpeg.lib.so
+ pthread.lib.so
+ qt5_core.lib.so
+ qt5_dejavusans.lib.so
+ qt5_gui.lib.so
+ qt5_qnitpickerviewwidget.lib.so
+ qt5_qpluginwidget.lib.so
+ qt5_widgets.lib.so
+ qt5_xml.lib.so
+ qt5_network.lib.so
+ zlib.lib.so
+ test-plugin.tar
+ stdcxx.lib.so
+}
+
+# platform-specific modules
+lappend_if [have_spec linux] boot_modules fb_sdl
+lappend_if [have_spec pci] boot_modules pci_drv
+lappend_if [have_spec framebuffer] boot_modules fb_drv
+lappend_if [have_spec ps2] boot_modules ps2_drv
+
+build_boot_image $boot_modules
+
+append qemu_args " -m 128"
+
+run_genode_until forever
diff --git a/libports/run/qt5_tetrix.run b/libports/run/qt5_tetrix.run
new file mode 100644
index 0000000000..216e1fe5c7
--- /dev/null
+++ b/libports/run/qt5_tetrix.run
@@ -0,0 +1,131 @@
+#
+# Build
+#
+
+build {
+ core
+ init
+ drivers/input/ps2
+ drivers/pci
+ drivers/framebuffer
+ drivers/timer
+ server/nitpicker
+ server/nit_fb
+ server/liquid_framebuffer
+ app/qt5/examples/tetrix
+}
+
+create_boot_directory
+
+#
+# Generate config
+#
+
+set config {
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ }
+
+append_if [have_spec sdl] config {
+
+
+
+
+
+
+ }
+
+append_if [have_spec pci] config {
+
+
+
+ }
+
+append_if [have_spec framebuffer] config {
+
+
+
+ }
+
+append_if [have_spec ps2] config {
+
+
+
+ }
+
+append config {
+
+
+
+
+
+
+
+
+
+
+
+
+}
+
+install_config $config
+
+#
+# Boot modules
+#
+
+# generic modules
+set boot_modules {
+ core
+ init
+ timer
+ nitpicker
+ nit_fb
+ liquid_fb
+ tetrix
+ freetype.lib.so
+ icu.lib.so
+ ld.lib.so
+ libc.lib.so
+ libc_log.lib.so
+ libc_lock_pipe.lib.so
+ libm.lib.so
+ libpng.lib.so
+ jpeg.lib.so
+ pthread.lib.so
+ qt5_core.lib.so
+ qt5_dejavusans.lib.so
+ qt5_gui.lib.so
+ qt5_widgets.lib.so
+ qt5_scriptclassic.lib.so
+ qt5_ui_tools.lib.so
+ qt5_xml.lib.so
+ zlib.lib.so
+ stdcxx.lib.so
+}
+
+# platform-specific modules
+lappend_if [have_spec linux] boot_modules fb_sdl
+lappend_if [have_spec pci] boot_modules pci_drv
+lappend_if [have_spec framebuffer] boot_modules fb_drv
+lappend_if [have_spec ps2] boot_modules ps2_drv
+
+build_boot_image $boot_modules
+
+append qemu_args " -m 128"
+
+run_genode_until forever
diff --git a/libports/run/qt5_textedit.run b/libports/run/qt5_textedit.run
new file mode 100644
index 0000000000..61e152242b
--- /dev/null
+++ b/libports/run/qt5_textedit.run
@@ -0,0 +1,185 @@
+#
+# Build
+#
+
+set build_components {
+ core
+ init
+ drivers/atapi
+ drivers/framebuffer
+ drivers/timer
+ server/ffat_fs
+ server/nitpicker
+ server/liquid_framebuffer
+ app/qt5/examples/textedit
+}
+
+set use_sd_card_driver [expr [have_spec omap4] || [have_spec exynos5]]
+set use_usb_driver [expr [have_spec omap4] || [have_spec exynos5]]
+
+lappend_if $use_sd_card_driver build_components drivers/sd_card
+lappend_if $use_usb_driver build_components drivers/usb
+lappend_if [have_spec pci] build_components drivers/pci
+lappend_if [have_spec acpi] build_components drivers/acpi
+lappend_if [have_spec ps2] build_components drivers/input/ps2
+
+build $build_components
+create_boot_directory
+
+#
+# Generate config
+#
+
+set config {
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ }
+
+append_if [have_spec sdl] config {
+
+
+
+
+
+
+ }
+
+append_if [have_spec pci] config {
+
+
+
+
+
+
+
+
+ }
+
+append_if [expr [have_spec pl180] || [have_spec omap4]] config {
+
+
+
+ }
+
+append_if [have_spec framebuffer] config {
+
+
+
+ }
+
+append_if [expr ![have_spec ps2] && [have_spec usb]] config {
+
+
+
+
+ }
+
+append_if [have_spec ps2] config {
+
+
+
+ }
+
+append config {
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+}
+
+install_config $config
+
+#
+# Boot modules
+#
+
+# generic modules
+set boot_modules {
+ core
+ init
+ timer
+ nitpicker
+ liquid_fb
+ ffat_fs
+ textedit
+ freetype.lib.so
+ icu.lib.so
+ ld.lib.so
+ libc.lib.so
+ libc_log.lib.so
+ libc_lock_pipe.lib.so
+ libc_fs.lib.so
+ libm.lib.so
+ libpng.lib.so
+ jpeg.lib.so
+ pthread.lib.so
+ qt5_core.lib.so
+ qt5_dejavusans.lib.so
+ qt5_gui.lib.so
+ qt5_widgets.lib.so
+ qt5_xml.lib.so
+ zlib.lib.so
+ stdcxx.lib.so
+}
+
+# platform-specific modules
+lappend_if [have_spec linux] boot_modules fb_sdl
+lappend_if [have_spec pci] boot_modules pci_drv
+lappend_if [have_spec pci] boot_modules atapi_drv
+lappend_if [have_spec ps2] boot_modules ps2_drv
+lappend_if [have_spec framebuffer] boot_modules fb_drv
+lappend_if $use_sd_card_driver boot_modules sd_card_drv
+lappend_if $use_usb_driver boot_modules usb_drv
+
+build_boot_image $boot_modules
+
+set disk_image "bin/test.hda"
+set cmd "dd if=/dev/zero of=$disk_image bs=1024 count=65536"
+puts "creating disk image: $cmd"
+catch { exec sh -c $cmd }
+
+set cmd "mkfs.vfat -F32 $disk_image"
+puts "formating disk image with vfat file system: $cmd"
+catch { exec sh -c $cmd }
+
+append_if [have_spec pci] qemu_args " -hda $disk_image -boot order=d "
+
+append qemu_args " -m 256"
+
+run_genode_until forever
diff --git a/libports/src/app/qt5/examples/calculatorform/target.mk b/libports/src/app/qt5/examples/calculatorform/target.mk
new file mode 100644
index 0000000000..4facec810b
--- /dev/null
+++ b/libports/src/app/qt5/examples/calculatorform/target.mk
@@ -0,0 +1,14 @@
+# identify the qt4 repository by searching for a file that is unique for qt4
+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
+
+QMAKE_PROJECT_PATH = $(realpath $(QT5_REP_DIR)/contrib/$(QT5)/qttools/examples/designer/calculatorform)
+QMAKE_PROJECT_FILE = $(QMAKE_PROJECT_PATH)/calculatorform.pro
+
+vpath % $(QMAKE_PROJECT_PATH)
+
+include $(QT5_REP_DIR)/src/app/qt5/tmpl/target_defaults.inc
+
+include $(QT5_REP_DIR)/src/app/qt5/tmpl/target_final.inc
diff --git a/libports/src/app/qt5/examples/previewer/target.mk b/libports/src/app/qt5/examples/previewer/target.mk
new file mode 100644
index 0000000000..36a008f3ca
--- /dev/null
+++ b/libports/src/app/qt5/examples/previewer/target.mk
@@ -0,0 +1,14 @@
+# identify the qt4 repository by searching for a file that is unique for qt4
+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
+
+QMAKE_PROJECT_PATH = $(realpath $(QT5_REP_DIR)/contrib/$(QT5)/qtwebkit-examples/examples/webkitwidgets/previewer)
+QMAKE_PROJECT_FILE = $(QMAKE_PROJECT_PATH)/previewer.pro
+
+vpath % $(QMAKE_PROJECT_PATH)
+
+include $(QT5_REP_DIR)/src/app/qt5/tmpl/target_defaults.inc
+
+include $(QT5_REP_DIR)/src/app/qt5/tmpl/target_final.inc
diff --git a/libports/src/app/qt5/examples/tetrix/target.mk b/libports/src/app/qt5/examples/tetrix/target.mk
new file mode 100644
index 0000000000..e233939f3c
--- /dev/null
+++ b/libports/src/app/qt5/examples/tetrix/target.mk
@@ -0,0 +1,16 @@
+# 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
+
+QMAKE_PROJECT_PATH = $(realpath $(QT5_REP_DIR)/contrib/$(QT5)/qtscript/examples/script/qstetrix)
+QMAKE_PROJECT_FILE = $(QMAKE_PROJECT_PATH)/qstetrix.pro
+
+vpath % $(QMAKE_PROJECT_PATH)
+
+include $(QT5_REP_DIR)/src/app/qt5/tmpl/target_defaults.inc
+
+CC_CXX_OPT += -DQT_NO_SCRIPTTOOLS
+
+include $(QT5_REP_DIR)/src/app/qt5/tmpl/target_final.inc
diff --git a/libports/src/app/qt5/examples/textedit/target.mk b/libports/src/app/qt5/examples/textedit/target.mk
new file mode 100644
index 0000000000..81c40c0dbe
--- /dev/null
+++ b/libports/src/app/qt5/examples/textedit/target.mk
@@ -0,0 +1,16 @@
+# identify the qt4 repository by searching for a file that is unique for qt4
+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
+
+QMAKE_PROJECT_PATH = $(realpath $(QT5_REP_DIR)/contrib/$(QT5)/qtbase/examples/widgets/richtext/textedit)
+QMAKE_PROJECT_FILE = $(QMAKE_PROJECT_PATH)/textedit.pro
+
+vpath % $(QMAKE_PROJECT_PATH)
+
+include $(QT5_REP_DIR)/src/app/qt5/tmpl/target_defaults.inc
+
+include $(QT5_REP_DIR)/src/app/qt5/tmpl/target_final.inc
+
+LIBS += libc_fs
diff --git a/libports/src/app/qt5/qt_avplay/README b/libports/src/app/qt5/qt_avplay/README
new file mode 100644
index 0000000000..5e9a2ef515
--- /dev/null
+++ b/libports/src/app/qt5/qt_avplay/README
@@ -0,0 +1,18 @@
+This directory contains a simple Qt-based media player which is actually a
+graphical user interface for the SDL-based 'avplay' media player from 'libav'.
+It starts 'avplay' as a child and shows its graphical output in a
+'QNitpickerViewWidget'. The widgets for controlling the player state send the
+according keyboard and mouse input events to 'avplay'.
+
+The 'qt_avplay' player supports the following configuration options:
+
+:':'
+ name of the media file to play
+
+:'':
+
+ This node contains the name of a framebuffer filter service to filter the
+ video output. It may appear multiple times. If specified more than once, it
+ is possible to build a post-processing pipeline for the video display where
+ each processing stage is executed by a separate program.
+
diff --git a/libports/src/app/qt5/qt_avplay/avplay_policy.h b/libports/src/app/qt5/qt_avplay/avplay_policy.h
new file mode 100644
index 0000000000..1bcb30df9b
--- /dev/null
+++ b/libports/src/app/qt5/qt_avplay/avplay_policy.h
@@ -0,0 +1,115 @@
+/*
+ * \brief Avplay policy
+ * \author Christian Prochaska
+ * \date 2012-04-05
+ */
+
+/*
+ * Copyright (C) 2012-2013 Genode Labs GmbH
+ *
+ * This file is part of the Genode OS framework, which is distributed
+ * under the terms of the GNU General Public License version 2.
+ */
+
+#ifndef _AVPLAY_POLICY_H_
+#define _AVPLAY_POLICY_H_
+
+/* Qt4 includes */
+#include
+#include
+#include
+#include
+#include
+
+/* Genode includes */
+#include
+
+
+class Avplay_policy : public QObject, public Genode::Slave_policy
+{
+ Q_OBJECT
+
+ private:
+
+ Genode::Service_registry &_input_in;
+ Genode::Service_registry &_framebuffer_in;
+
+ const char *_mediafile;
+ int _sdl_audio_volume;
+ QByteArray _config_byte_array;
+
+
+ const char *_config()
+ {
+ QDomDocument config_doc;
+
+ QDomElement config_node = config_doc.createElement("config");
+ config_doc.appendChild(config_node);
+
+ QDomElement arg0_node = config_doc.createElement("arg");
+ arg0_node.setAttribute("value", "avplay");
+ config_node.appendChild(arg0_node);
+
+ QDomElement arg1_node = config_doc.createElement("arg");
+ arg1_node.setAttribute("value", _mediafile);
+ config_node.appendChild(arg1_node);
+
+ QDomElement sdl_audio_volume_node = config_doc.createElement("sdl_audio_volume");
+ sdl_audio_volume_node.setAttribute("value", QString::number(_sdl_audio_volume));
+ config_node.appendChild(sdl_audio_volume_node);
+
+ _config_byte_array = config_doc.toByteArray(4);
+
+ return _config_byte_array.constData();
+ }
+
+ protected:
+
+ const char **_permitted_services() const
+ {
+ static const char *permitted_services[] = {
+ "CAP", "LOG", "RM", "ROM", "SIGNAL",
+ "Timer", "Audio_out", 0 };
+
+ return permitted_services;
+ };
+
+ public:
+
+ Avplay_policy(Genode::Rpc_entrypoint &entrypoint,
+ Genode::Service_registry &input_in,
+ Genode::Service_registry &framebuffer_in,
+ const char *mediafile)
+ : Genode::Slave_policy("avplay", entrypoint, Genode::env()->ram_session()),
+ _input_in(input_in),
+ _framebuffer_in(framebuffer_in),
+ _mediafile(mediafile),
+ _sdl_audio_volume(100)
+ {
+ configure(_config());
+ }
+
+ Genode::Service *resolve_session_request(const char *service_name,
+ const char *args)
+ {
+ if (strcmp(service_name, "Input") == 0)
+ return _input_in.find(service_name);
+
+ if (strcmp(service_name, "Framebuffer") == 0) {
+ Genode::Client client;
+ return _framebuffer_in.wait_for_service(service_name, &client, name());
+ }
+
+ return Slave_policy::resolve_session_request(service_name, args);
+ }
+
+ public Q_SLOTS:
+
+ void volume_changed(int value)
+ {
+ _sdl_audio_volume = value;
+ configure(_config());
+ }
+};
+
+#endif /* _AVPLAY_POLICY_H_ */
diff --git a/libports/src/app/qt5/qt_avplay/control_bar.cpp b/libports/src/app/qt5/qt_avplay/control_bar.cpp
new file mode 100644
index 0000000000..2fb88fc6dd
--- /dev/null
+++ b/libports/src/app/qt5/qt_avplay/control_bar.cpp
@@ -0,0 +1,73 @@
+/*
+ * \brief Control bar
+ * \author Christian Prochaska
+ * \date 2012-03-30
+ */
+
+/*
+ * Copyright (C) 2012-2013 Genode Labs GmbH
+ *
+ * This file is part of the Genode OS framework, which is distributed
+ * under the terms of the GNU General Public License version 2.
+ */
+
+/* Genode includes */
+#include
+
+/* Qoost includes */
+#include
+
+#include "input_service.h"
+#include "main_window.h"
+
+
+void Control_bar::_rewind()
+{
+ /* mouse click at horizontal position 0 */
+ ev_queue.add(Input::Event(Input::Event::PRESS, Input::BTN_LEFT, 0, 0, 0, 0));
+ ev_queue.add(Input::Event(Input::Event::RELEASE, Input::BTN_LEFT, 0, 0, 0, 0));
+}
+
+
+void Control_bar::_pause_resume()
+{
+ ev_queue.add(Input::Event(Input::Event::PRESS, Input::KEY_SPACE, 0, 0, 0, 0));
+ ev_queue.add(Input::Event(Input::Event::RELEASE, Input::KEY_SPACE, 0, 0, 0, 0));
+
+ _playing = !_playing;
+ if (_playing)
+ update_style_id(_play_pause_button, "play");
+ else
+ update_style_id(_play_pause_button, "pause");
+}
+
+
+void Control_bar::_stop()
+{
+ if (_playing)
+ _pause_resume();
+
+ _rewind();
+}
+
+
+Control_bar::Control_bar()
+: _playing(true)
+{
+ update_style_id(_play_pause_button, "play");
+
+ _volume_slider->setOrientation(Qt::Horizontal);
+ _volume_slider->setRange(0, 100);
+ _volume_slider->setTickInterval(10);
+ _volume_slider->setValue(100);
+
+ _layout->addWidget(_play_pause_button);
+ _layout->addWidget(_stop_button);
+ _layout->addStretch();
+ _layout->addWidget(_volume_label);
+ _layout->addWidget(_volume_slider);
+
+ connect(_play_pause_button, SIGNAL(clicked()), this, SLOT(_pause_resume()));
+ connect(_stop_button, SIGNAL(clicked()), this, SLOT(_stop()));
+ connect(_volume_slider, SIGNAL(valueChanged(int)), this, SIGNAL(volume_changed(int)));
+}
diff --git a/libports/src/app/qt5/qt_avplay/control_bar.h b/libports/src/app/qt5/qt_avplay/control_bar.h
new file mode 100644
index 0000000000..86f1afcf45
--- /dev/null
+++ b/libports/src/app/qt5/qt_avplay/control_bar.h
@@ -0,0 +1,59 @@
+/*
+ * \brief Control bar
+ * \author Christian Prochaska
+ * \date 2012-03-30
+ */
+
+/*
+ * Copyright (C) 2012-2013 Genode Labs GmbH
+ *
+ * This file is part of the Genode OS framework, which is distributed
+ * under the terms of the GNU General Public License version 2.
+ */
+
+#ifndef _CONTROL_BAR_H_
+#define _CONTROL_BAR_H_
+
+/* Qt includes */
+#include
+#include
+
+/* Qoost includes */
+#include
+#include
+
+struct Play_pause_button : QPushButton { Q_OBJECT };
+struct Stop_button : QPushButton { Q_OBJECT };
+struct Volume_label : QLabel { Q_OBJECT };
+struct Volume_slider : QSlider { Q_OBJECT };
+
+class Control_bar : public Compound_widget
+{
+ Q_OBJECT
+
+ private:
+
+ QMember _play_pause_button;
+ QMember _stop_button;
+ QMember _volume_label;
+ QMember _volume_slider;
+
+ bool _playing;
+
+ void _rewind();
+
+ private Q_SLOTS:
+
+ void _pause_resume();
+ void _stop();
+
+ public:
+
+ Control_bar();
+
+ Q_SIGNALS:
+
+ void volume_changed(int value);
+};
+
+#endif /* _CONTROL_BAR_H_ */
diff --git a/libports/src/app/qt5/qt_avplay/filter_framebuffer_policy.h b/libports/src/app/qt5/qt_avplay/filter_framebuffer_policy.h
new file mode 100644
index 0000000000..0a6b40572f
--- /dev/null
+++ b/libports/src/app/qt5/qt_avplay/filter_framebuffer_policy.h
@@ -0,0 +1,77 @@
+/*
+ * \brief Filter framebuffer policy
+ * \author Christian Prochaska
+ * \date 2012-04-11
+ */
+
+/*
+ * Copyright (C) 2012-2013 Genode Labs GmbH
+ *
+ * This file is part of the Genode OS framework, which is distributed
+ * under the terms of the GNU General Public License version 2.
+ */
+
+#ifndef _FILTER_FRAMEBUFFER_POLICY_H_
+#define _FILTER_FRAMEBUFFER_POLICY_H_
+
+/* Genode includes */
+#include
+#include
+
+
+class Filter_framebuffer_policy : public Genode::Slave_policy
+{
+ private:
+
+ Genode::Service_registry &_framebuffer_in;
+ Genode::Service_registry &_framebuffer_out;
+
+ protected:
+
+ const char **_permitted_services() const
+ {
+ static const char *permitted_services[] = {
+ "CAP", "LOG", "RM", "ROM", "SIGNAL",
+ "Timer", 0 };
+
+ return permitted_services;
+ };
+
+ public:
+
+ Filter_framebuffer_policy(const char *name,
+ Genode::Rpc_entrypoint &entrypoint,
+ Genode::Service_registry &framebuffer_in,
+ Genode::Service_registry &framebuffer_out)
+ : Genode::Slave_policy(name, entrypoint, Genode::env()->ram_session()),
+ _framebuffer_in(framebuffer_in),
+ _framebuffer_out(framebuffer_out) { }
+
+ Genode::Service *resolve_session_request(const char *service_name,
+ const char *args)
+ {
+ if (strcmp(service_name, "Framebuffer") == 0) {
+ Genode::Client client;
+ return _framebuffer_in.wait_for_service(service_name, &client, name());
+ }
+
+ return Slave_policy::resolve_session_request(service_name, args);
+ }
+
+ bool announce_service(const char *name,
+ Genode::Root_capability root,
+ Genode::Allocator *alloc,
+ Genode::Server *server)
+ {
+ if (strcmp(name, "Framebuffer") == 0) {
+ _framebuffer_out.insert(new (alloc) Genode::Child_service(name, root, server));
+ return true;
+ }
+
+ return Slave_policy::announce_service(name, root, alloc, server);
+ }
+
+
+};
+
+#endif /* _FILTER_FRAMEBUFFER_POLICY_H_ */
diff --git a/libports/src/app/qt5/qt_avplay/framebuffer_root.h b/libports/src/app/qt5/qt_avplay/framebuffer_root.h
new file mode 100644
index 0000000000..ad46f893a4
--- /dev/null
+++ b/libports/src/app/qt5/qt_avplay/framebuffer_root.h
@@ -0,0 +1,64 @@
+/*
+ * \brief Framebuffer root
+ * \author Christian Prochaska
+ * \date 2012-04-02
+ */
+
+/*
+ * Copyright (C) 2012-2013 Genode Labs GmbH
+ *
+ * This file is part of the Genode OS framework, which is distributed
+ * under the terms of the GNU General Public License version 2.
+ */
+
+
+#ifndef _FRAMEBUFFER_ROOT_H_
+#define _FRAMEBUFFER_ROOT_H_
+
+/* Genode includes */
+#include
+
+#include "framebuffer_session_component.h"
+
+namespace Framebuffer {
+
+ /**
+ * Shortcut for single-client root component
+ */
+ typedef Genode::Root_component Root_component;
+
+
+ class Root : public Root_component
+ {
+ private:
+
+ QNitpickerViewWidget &_nitpicker_view_widget;
+ int _max_width;
+ int _max_height;
+
+ protected:
+
+ Session_component *_create_session(const char *args)
+ {
+ return new (md_alloc())
+ Session_component(args, _nitpicker_view_widget,
+ _max_width, _max_height);
+ }
+
+ public:
+
+ Root(Genode::Rpc_entrypoint *session_ep,
+ Genode::Allocator *md_alloc,
+ QNitpickerViewWidget &nitpicker_view_widget,
+ int max_width = 0,
+ int max_height = 0)
+ : Root_component(session_ep, md_alloc),
+ _nitpicker_view_widget(nitpicker_view_widget),
+ _max_width(max_width),
+ _max_height(max_height) { }
+
+ };
+
+}
+
+#endif /* _FRAMEBUFFER_ROOT_H_ */
diff --git a/libports/src/app/qt5/qt_avplay/framebuffer_session_component.cc b/libports/src/app/qt5/qt_avplay/framebuffer_session_component.cc
new file mode 100644
index 0000000000..f12b48ad5a
--- /dev/null
+++ b/libports/src/app/qt5/qt_avplay/framebuffer_session_component.cc
@@ -0,0 +1,86 @@
+/*
+ * \brief Framebuffer session component
+ * \author Christian Prochaska
+ * \date 2012-04-02
+ */
+
+/*
+ * Copyright (C) 2012-2013 Genode Labs GmbH
+ *
+ * This file is part of the Genode OS framework, which is distributed
+ * under the terms of the GNU General Public License version 2.
+ */
+
+/* Genode includes */
+#include
+#include
+#include
+#include
+
+#include "framebuffer_session_component.h"
+
+namespace Framebuffer {
+
+
+ int Session_component::_limited_size(int requested_size, int max_size)
+ {
+ if (requested_size == 0)
+ return max_size;
+ else
+ return (max_size > 0) ? Genode::min(requested_size, max_size) : requested_size;
+ }
+
+
+ static inline long session_arg(const char *arg, const char *key)
+ {
+ return Genode::Arg_string::find_arg(arg, key).long_value(0);
+ }
+
+
+ Session_component::Session_component(const char *args,
+ QNitpickerViewWidget &nitpicker_view_widget,
+ int max_width,
+ int max_height)
+ : _nitpicker(Nitpicker::Connection(
+ _limited_size(session_arg(args, "fb_width"), max_width),
+ _limited_size(session_arg(args, "fb_height"), max_height))),
+ _framebuffer(_nitpicker.framebuffer_session())
+ {
+ Nitpicker::View_capability nitpicker_view_cap = _nitpicker.create_view();
+ Mode _mode = _framebuffer.mode();
+ nitpicker_view_widget.setNitpickerView(nitpicker_view_cap,
+ 0, 0,
+ _mode.width(),
+ _mode.height());
+ }
+
+
+ Genode::Dataspace_capability Session_component::dataspace()
+ {
+ return _framebuffer.dataspace();
+ }
+
+
+ void Session_component::release()
+ {
+ _framebuffer.release();
+ }
+
+
+ Mode Session_component::mode() const
+ {
+ return _framebuffer.mode();
+ }
+
+
+ void Session_component::mode_sigh(Genode::Signal_context_capability sigh_cap)
+ {
+ _framebuffer.mode_sigh(sigh_cap);
+ }
+
+
+ void Session_component::refresh(int x, int y, int w, int h)
+ {
+ _framebuffer.refresh(x, y, w, h);
+ }
+}
diff --git a/libports/src/app/qt5/qt_avplay/framebuffer_session_component.h b/libports/src/app/qt5/qt_avplay/framebuffer_session_component.h
new file mode 100644
index 0000000000..b2ea637f2f
--- /dev/null
+++ b/libports/src/app/qt5/qt_avplay/framebuffer_session_component.h
@@ -0,0 +1,57 @@
+/*
+ * \brief Framebuffer session component
+ * \author Christian Prochaska
+ * \date 2012-04-02
+ */
+
+/*
+ * Copyright (C) 2012-2013 Genode Labs GmbH
+ *
+ * This file is part of the Genode OS framework, which is distributed
+ * under the terms of the GNU General Public License version 2.
+ */
+
+
+#ifndef _FRAMEBUFFER_SESSION_COMPONENT_H_
+#define _FRAMEBUFFER_SESSION_COMPONENT_H_
+
+/* Genode includes */
+#include
+#include
+#include
+
+/* Qt4 includes */
+#include
+
+
+namespace Framebuffer {
+
+ class Session_component : public Genode::Rpc_object
+ {
+ private:
+
+ Nitpicker::Connection _nitpicker;
+ Session_client _framebuffer;
+
+ int _limited_size(int requested_size, int max_size);
+
+ public:
+
+ /**
+ * Constructor
+ */
+ Session_component(const char *args,
+ QNitpickerViewWidget &nitpicker_view_widget,
+ int max_width = 0,
+ int max_height = 0);
+
+ Genode::Dataspace_capability dataspace();
+ void release();
+ Mode mode() const;
+ void mode_sigh(Genode::Signal_context_capability sigh_cap);
+ void refresh(int x, int y, int w, int h);
+ };
+
+}
+
+#endif /* _FRAMEBUFFER_SESSION_COMPONENT_H_ */
diff --git a/libports/src/app/qt5/qt_avplay/input_service.cpp b/libports/src/app/qt5/qt_avplay/input_service.cpp
new file mode 100644
index 0000000000..65bb5a5c4c
--- /dev/null
+++ b/libports/src/app/qt5/qt_avplay/input_service.cpp
@@ -0,0 +1,40 @@
+/*
+ * \brief Input service
+ * \author Christian Prochaska
+ * \date 2012-03-29
+ */
+
+/*
+ * Copyright (C) 2012-2013 Genode Labs GmbH
+ *
+ * This file is part of the Genode OS framework, which is distributed
+ * under the terms of the GNU General Public License version 2.
+ */
+
+/* Genode includes */
+#include
+
+#include "input_service.h"
+
+using namespace Genode;
+
+Event_queue ev_queue;
+
+
+namespace Input {
+
+ /*
+ * Event handling is disabled on queue creation and will be enabled later if a
+ * session is created.
+ */
+ void event_handling(bool enable)
+ {
+ if (enable)
+ ev_queue.enable();
+ else
+ ev_queue.disable();
+ }
+
+ bool event_pending() { return !ev_queue.empty(); }
+ Event get_event() { return ev_queue.get(); }
+}
diff --git a/libports/src/app/qt5/qt_avplay/input_service.h b/libports/src/app/qt5/qt_avplay/input_service.h
new file mode 100644
index 0000000000..7612f26997
--- /dev/null
+++ b/libports/src/app/qt5/qt_avplay/input_service.h
@@ -0,0 +1,24 @@
+/*
+ * \brief Input service
+ * \author Christian Prochaska
+ * \date 2012-03-29
+ */
+
+/*
+ * Copyright (C) 2012-2013 Genode Labs GmbH
+ *
+ * This file is part of the Genode OS framework, which is distributed
+ * under the terms of the GNU General Public License version 2.
+ */
+
+#ifndef _INPUT_SERVICE_H_
+#define _INPUT_SERVICE_H_
+
+/* Genode includes */
+#include
+
+extern Event_queue ev_queue;
+
+extern void create_input_service();
+
+#endif /* _INPUT_SERVICE_H_ */
diff --git a/libports/src/app/qt5/qt_avplay/main.cpp b/libports/src/app/qt5/qt_avplay/main.cpp
new file mode 100644
index 0000000000..84a751adf7
--- /dev/null
+++ b/libports/src/app/qt5/qt_avplay/main.cpp
@@ -0,0 +1,45 @@
+/*
+ * \brief Simple Qt interface for 'avplay' media player
+ * \author Christian Prochaska
+ * \date 2012-03-21
+ */
+
+/*
+ * Copyright (C) 2012-2013 Genode Labs GmbH
+ *
+ * This file is part of the Genode OS framework, which is distributed
+ * under the terms of the GNU General Public License version 2.
+ */
+
+/* Qt includes */
+#include
+
+/* qt_avplay includes */
+#include "main_window.h"
+
+
+static inline void load_stylesheet()
+{
+ QFile file(":style.qss");
+ if (!file.open(QFile::ReadOnly)) {
+ qWarning() << "Warning:" << file.errorString()
+ << "opening file" << file.fileName();
+ return;
+ }
+
+ qApp->setStyleSheet(QLatin1String(file.readAll()));
+}
+
+
+int main(int argc, char *argv[])
+{
+ QApplication app(argc, argv);
+
+ load_stylesheet();
+
+ QMember main_window;
+
+ main_window->show();
+
+ return app.exec();
+}
diff --git a/libports/src/app/qt5/qt_avplay/main_window.cpp b/libports/src/app/qt5/qt_avplay/main_window.cpp
new file mode 100644
index 0000000000..e3c0909785
--- /dev/null
+++ b/libports/src/app/qt5/qt_avplay/main_window.cpp
@@ -0,0 +1,129 @@
+/*
+ * \brief Main window of the media player
+ * \author Christian Prochaska
+ * \date 2012-03-29
+ */
+
+/*
+ * Copyright (C) 2012-2013 Genode Labs GmbH
+ *
+ * This file is part of the Genode OS framework, which is distributed
+ * under the terms of the GNU General Public License version 2.
+ */
+
+/* Genode includes */
+#include
+#include
+#include
+#include
+
+/* qt_avplay includes */
+#include "avplay_policy.h"
+#include "filter_framebuffer_policy.h"
+#include "framebuffer_root.h"
+#include "input_service.h"
+#include "main_window.h"
+
+
+using namespace Genode;
+
+
+struct Framebuffer_filter
+{
+ enum { MAX_FILTER_NAME_SIZE = 32 };
+ char name[MAX_FILTER_NAME_SIZE];
+ Genode::Number_of_bytes ram_quota;
+
+ Service_registry *framebuffer_out_registry;
+ Rpc_entrypoint *ep;
+ Filter_framebuffer_policy *policy;
+ Slave *slave;
+};
+
+
+Main_window::Main_window()
+{
+ /* look for dynamic linker */
+
+ try {
+ static Rom_connection ldso_rom("ld.lib.so");
+ Process::dynamic_linker(ldso_rom.dataspace());
+ } catch (...) {
+ PERR("ld.lib.so not found");
+ }
+
+ /* get the name of the media file from the config file */
+ enum { MAX_LEN_MEDIAFILE_NAME = 256 };
+ static char mediafile[MAX_LEN_MEDIAFILE_NAME] = "mediafile";
+ try {
+ config()->xml_node().sub_node("mediafile").attribute("name").value(mediafile, sizeof(mediafile));
+ } catch(...) {
+ PWRN("no config node found, using \"mediafile\"");
+ }
+
+ /* create local services */
+
+ enum { STACK_SIZE = 2*sizeof(addr_t)*1024 };
+ static Cap_connection cap;
+ static Rpc_entrypoint avplay_ep(&cap, STACK_SIZE, "avplay_ep");
+ static Service_registry input_registry;
+ static Service_registry nitpicker_framebuffer_registry;
+
+ static Input::Root input_root(&avplay_ep, env()->heap());
+ static Local_service input_service(Input::Session::service_name(), &input_root);
+ input_registry.insert(&input_service);
+ avplay_ep.manage(&input_root);
+
+ /* find out which filtering framebuffer services to start and sort them in reverse order */
+
+ static QList framebuffer_filters;
+ try {
+ Xml_node node = config()->xml_node().sub_node("framebuffer_filter");
+ for (; ; node = node.next("framebuffer_filter")) {
+ Framebuffer_filter *framebuffer_filter = new Framebuffer_filter;
+ node.attribute("name").value(framebuffer_filter->name, sizeof(framebuffer_filter->name));
+ node.attribute("ram_quota").value(&framebuffer_filter->ram_quota);
+ qDebug() << "filter:" << framebuffer_filter->name << "," << framebuffer_filter->ram_quota;
+ framebuffer_filters.prepend(framebuffer_filter);
+ }
+ } catch (Config::Invalid) {
+ } catch (Xml_node::Nonexistent_sub_node) {
+ }
+
+ /* start the filtering framebuffer services */
+
+ Service_registry *framebuffer_in_registry = &nitpicker_framebuffer_registry;
+
+ Q_FOREACH(Framebuffer_filter *framebuffer_filter, framebuffer_filters) {
+ framebuffer_filter->framebuffer_out_registry = new Service_registry;
+ framebuffer_filter->ep = new Rpc_entrypoint(&cap, STACK_SIZE, "filter_fb_ep");
+ framebuffer_filter->policy = new Filter_framebuffer_policy(framebuffer_filter->name,
+ *framebuffer_filter->ep,
+ *framebuffer_in_registry,
+ *framebuffer_filter->framebuffer_out_registry);
+ framebuffer_filter->slave = new Slave(*framebuffer_filter->ep,
+ *framebuffer_filter->policy,
+ framebuffer_filter->ram_quota);
+ framebuffer_in_registry = framebuffer_filter->framebuffer_out_registry;
+ }
+
+ Rpc_entrypoint *local_framebuffer_ep = framebuffer_filters.isEmpty() ?
+ &avplay_ep :
+ framebuffer_filters.at(0)->ep;
+
+ static Framebuffer::Root framebuffer_root(local_framebuffer_ep, env()->heap(), *_avplay_widget, 640, 480);
+ static Local_service framebuffer_service(Framebuffer::Session::service_name(), &framebuffer_root);
+ nitpicker_framebuffer_registry.insert(&framebuffer_service);
+
+ /* start avplay */
+
+ static Avplay_policy avplay_policy(avplay_ep, input_registry, *framebuffer_in_registry, mediafile);
+ static Genode::Slave avplay_slave(avplay_ep, avplay_policy, 32*1024*1024);
+
+ /* add widgets to layout */
+
+ _layout->addWidget(_avplay_widget);
+ _layout->addWidget(_control_bar);
+
+ connect(_control_bar, SIGNAL(volume_changed(int)), &avplay_policy, SLOT(volume_changed(int)));
+}
diff --git a/libports/src/app/qt5/qt_avplay/main_window.h b/libports/src/app/qt5/qt_avplay/main_window.h
new file mode 100644
index 0000000000..aaf8699223
--- /dev/null
+++ b/libports/src/app/qt5/qt_avplay/main_window.h
@@ -0,0 +1,43 @@
+/*
+ * \brief Main window of the media player
+ * \author Christian Prochaska
+ * \date 2012-03-29
+ */
+
+/*
+ * Copyright (C) 2012-2013 Genode Labs GmbH
+ *
+ * This file is part of the Genode OS framework, which is distributed
+ * under the terms of the GNU General Public License version 2.
+ */
+
+#ifndef _MAIN_WINDOW_H_
+#define _MAIN_WINDOW_H_
+
+/* Qt includes */
+#include
+#include
+#include
+
+/* Qoost includes */
+#include
+#include
+
+#include "control_bar.h"
+
+
+class Main_window : public Compound_widget
+{
+ Q_OBJECT
+
+ private:
+
+ QMember _avplay_widget;
+ QMember _control_bar;
+
+ public:
+
+ Main_window();
+};
+
+#endif /* _MAIN_WINDOW_H_ */
diff --git a/libports/src/app/qt5/qt_avplay/qt_avplay.pro b/libports/src/app/qt5/qt_avplay/qt_avplay.pro
new file mode 100644
index 0000000000..8b9dc41c57
--- /dev/null
+++ b/libports/src/app/qt5/qt_avplay/qt_avplay.pro
@@ -0,0 +1,12 @@
+TEMPLATE = app
+TARGET = qt_avplay
+QT = core gui xml
+HEADERS = avplay_policy.h \
+ control_bar.h \
+ main_window.h
+SOURCES = control_bar.cpp \
+ framebuffer_session_component.cc \
+ input_service.cpp \
+ main.cpp \
+ main_window.cpp
+RESOURCES = style.qrc
diff --git a/libports/src/app/qt5/qt_avplay/style.qrc b/libports/src/app/qt5/qt_avplay/style.qrc
new file mode 100644
index 0000000000..631a62ef22
--- /dev/null
+++ b/libports/src/app/qt5/qt_avplay/style.qrc
@@ -0,0 +1,10 @@
+
+
+
+style.qss
+../../../../contrib/qt-everywhere-opensource-src-5.1.0/qtbase/examples/network/torrent/icons/player_play.png
+../../../../contrib/qt-everywhere-opensource-src-5.1.0/qtbase/examples/network/torrent/icons/player_pause.png
+../../../../contrib/qt-everywhere-opensource-src-5.1.0/qtbase/examples/network/torrent/icons/player_stop.png
+../../../../contrib/qt-everywhere-opensource-src-5.1.0/qtwebkit/Source/WebKit/efl/DefaultTheme/widget/mediacontrol/mutebutton/unmutebutton.png
+
+
diff --git a/libports/src/app/qt5/qt_avplay/style.qss b/libports/src/app/qt5/qt_avplay/style.qss
new file mode 100644
index 0000000000..66d19169fa
--- /dev/null
+++ b/libports/src/app/qt5/qt_avplay/style.qss
@@ -0,0 +1,32 @@
+Main_window {
+ max-width: 640px;
+ max-height: 512px;
+}
+
+Play_pause_button, Stop_button {
+ width: 32px;
+ height: 32px;
+}
+
+Play_pause_button#play {
+ border-image: url(:player_pause.png);
+}
+
+
+Play_pause_button#pause {
+ border-image: url(:player_play.png);
+}
+
+
+Stop_button {
+ border-image: url(:player_stop.png);
+}
+
+Volume_label {
+ border-image: url(:volume.png);
+ min-width: 32px;
+ max-width: 32px;
+ min-height: 32px;
+ max-height: 32px;
+ margin-right: 5px;
+}
diff --git a/libports/src/app/qt5/qt_avplay/target.mk b/libports/src/app/qt5/qt_avplay/target.mk
new file mode 100644
index 0000000000..125eb934e8
--- /dev/null
+++ b/libports/src/app/qt5/qt_avplay/target.mk
@@ -0,0 +1,9 @@
+# identify the qt4 repository by searching for a file that is unique for qt4
+QT5_REP_DIR := $(call select_from_repositories,lib/import/import-qt5.inc)
+QT5_REP_DIR := $(realpath $(dir $(QT5_REP_DIR))../..)
+
+include $(QT5_REP_DIR)/src/app/qt5/tmpl/target_defaults.inc
+
+include $(QT5_REP_DIR)/src/app/qt5/tmpl/target_final.inc
+
+LIBS += qt5_qnitpickerviewwidget
diff --git a/libports/src/app/qt5/qt_launchpad/child_entry.cpp b/libports/src/app/qt5/qt_launchpad/child_entry.cpp
new file mode 100644
index 0000000000..4dd13c7deb
--- /dev/null
+++ b/libports/src/app/qt5/qt_launchpad/child_entry.cpp
@@ -0,0 +1,29 @@
+/*
+ * \brief Child entry widget implementation
+ * \author Christian Prochaska
+ * \date 2008-04-06
+ */
+
+#include "child_entry.h"
+
+Child_entry::Child_entry(const char *name, int quota_kb, int max_quota_kb,
+ Launchpad *launchpad, Launchpad_child *launchpad_child,
+ QWidget *parent)
+ : QWidget(parent), _launchpad(launchpad), _launchpad_child(launchpad_child)
+{
+ ui.setupUi(this);
+
+ ui.nameLabel->setText(name);
+ ui.quotaBar->setMaximum(max_quota_kb);
+ ui.quotaBar->setValue(quota_kb);
+}
+
+Child_entry::~Child_entry()
+{
+
+}
+
+void Child_entry::on_exitButton_clicked()
+{
+ _launchpad->exit_child(_launchpad_child);
+}
diff --git a/libports/src/app/qt5/qt_launchpad/child_entry.h b/libports/src/app/qt5/qt_launchpad/child_entry.h
new file mode 100644
index 0000000000..ac825a375c
--- /dev/null
+++ b/libports/src/app/qt5/qt_launchpad/child_entry.h
@@ -0,0 +1,43 @@
+/*
+ * \brief Child entry widget interface
+ * \author Christian Prochaska
+ * \date 2008-04-06
+ */
+
+/*
+ * Copyright (C) 2008-2013 Genode Labs GmbH
+ *
+ * This file is part of the Genode OS framework, which is distributed
+ * under the terms of the GNU General Public License version 2.
+ */
+
+#ifndef CHILD_ENTRY_H
+#define CHILD_ENTRY_H
+
+#include
+
+#include
+
+#include "ui_child_entry.h"
+
+class Child_entry : public QWidget
+{
+ Q_OBJECT
+
+public:
+ Child_entry(const char *name, int quota_kb, int max_quota_kb,
+ Launchpad *launchpad, Launchpad_child *launchpad_child,
+ QWidget *parent = 0);
+ ~Child_entry();
+
+private:
+ Ui::Child_entryClass ui;
+
+ Launchpad *_launchpad;
+ Launchpad_child *_launchpad_child;
+
+private slots:
+ void on_exitButton_clicked();
+};
+
+#endif // CHILD_ENTRY_H
diff --git a/libports/src/app/qt5/qt_launchpad/child_entry.ui b/libports/src/app/qt5/qt_launchpad/child_entry.ui
new file mode 100644
index 0000000000..7004ca5096
--- /dev/null
+++ b/libports/src/app/qt5/qt_launchpad/child_entry.ui
@@ -0,0 +1,148 @@
+
+ Child_entryClass
+
+
+
+ 0
+ 0
+ 396
+ 30
+
+
+
+
+ 4
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 100
+ 22
+
+
+
+ Qt::AlignCenter
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 0
+ 20
+
+
+
+
+ -
+
+
+
+ 240
+ 22
+
+
+
+
+ 240
+ 16777215
+
+
+
+ 0
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+ QSizePolicy::Fixed
+
+
+
+ 6
+ 30
+
+
+
+
+ -
+
+
+
+ 20
+ 20
+
+
+
+
+ 20
+ 20
+
+
+
+
+ 75
+ true
+
+
+
+ X
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+ QSizePolicy::Fixed
+
+
+
+ 6
+ 30
+
+
+
+
+
+
+
+
+
+ Kbyte_loadbar
+ QProgressBar
+
+
+
+
+
+
diff --git a/libports/src/app/qt5/qt_launchpad/kbyte_loadbar.cpp b/libports/src/app/qt5/qt_launchpad/kbyte_loadbar.cpp
new file mode 100644
index 0000000000..216091fe9b
--- /dev/null
+++ b/libports/src/app/qt5/qt_launchpad/kbyte_loadbar.cpp
@@ -0,0 +1,24 @@
+/*
+ * \brief KByte loadbar implementation
+ * \author Christian Prochaska
+ * \date 2008-04-05
+ */
+
+#include "kbyte_loadbar.h"
+
+Kbyte_loadbar::Kbyte_loadbar(QWidget *parent)
+ : QProgressBar(parent)
+{
+}
+
+Kbyte_loadbar::~Kbyte_loadbar()
+{
+
+}
+
+QString Kbyte_loadbar::text() const
+{
+ return QString::number(value()) + " KByte / " +
+ QString::number(maximum()) + " KByte";
+
+}
diff --git a/libports/src/app/qt5/qt_launchpad/kbyte_loadbar.h b/libports/src/app/qt5/qt_launchpad/kbyte_loadbar.h
new file mode 100644
index 0000000000..69d8462acd
--- /dev/null
+++ b/libports/src/app/qt5/qt_launchpad/kbyte_loadbar.h
@@ -0,0 +1,33 @@
+/*
+ * \brief KByte loadbar interface
+ * \author Christian Prochaska
+ * \date 2008-04-05
+ */
+
+/*
+ * Copyright (C) 2008-2013 Genode Labs GmbH
+ *
+ * This file is part of the Genode OS framework, which is distributed
+ * under the terms of the GNU General Public License version 2.
+ */
+
+#ifndef KBYTE_LOADBAR_H
+#define KBYTE_LOADBAR_H
+
+#include
+
+class Kbyte_loadbar : public QProgressBar
+{
+ Q_OBJECT
+
+public:
+ Kbyte_loadbar(QWidget *parent = 0);
+ ~Kbyte_loadbar();
+
+ virtual QString text() const;
+
+protected:
+
+};
+
+#endif // KBYTE_LOADBAR_H
diff --git a/libports/src/app/qt5/qt_launchpad/launch_entry.cpp b/libports/src/app/qt5/qt_launchpad/launch_entry.cpp
new file mode 100644
index 0000000000..d82c204bb3
--- /dev/null
+++ b/libports/src/app/qt5/qt_launchpad/launch_entry.cpp
@@ -0,0 +1,31 @@
+/*
+ * \brief Launcher entry widget implementation
+ * \author Christian Prochaska
+ * \date 2008-04-06
+ */
+
+#include "launch_entry.h"
+
+Launch_entry::Launch_entry(const char *filename, unsigned long default_quota,
+ unsigned long max_quota, Launchpad *launchpad,
+ QWidget *parent)
+ : QWidget(parent), _filename(filename), _launchpad(launchpad)
+{
+ ui.setupUi(this);
+
+ ui.launchButton->setText(filename);
+
+ ui.quotaDial->setMaximum(max_quota);
+ ui.quotaDial->setSingleStep(max_quota / 100);
+ ui.quotaDial->setValue(default_quota);
+}
+
+Launch_entry::~Launch_entry()
+{
+
+}
+
+void Launch_entry::on_launchButton_clicked()
+{
+ _launchpad->start_child(_filename, 1024 * ui.quotaDial->value(), Genode::Dataspace_capability());
+}
diff --git a/libports/src/app/qt5/qt_launchpad/launch_entry.h b/libports/src/app/qt5/qt_launchpad/launch_entry.h
new file mode 100644
index 0000000000..8a647f58ca
--- /dev/null
+++ b/libports/src/app/qt5/qt_launchpad/launch_entry.h
@@ -0,0 +1,43 @@
+/*
+ * \brief Launcher entry widget interface
+ * \author Christian Prochaska
+ * \date 2008-04-06
+ */
+
+/*
+ * Copyright (C) 2008-2013 Genode Labs GmbH
+ *
+ * This file is part of the Genode OS framework, which is distributed
+ * under the terms of the GNU General Public License version 2.
+ */
+
+#ifndef LAUNCH_ENTRY_H
+#define LAUNCH_ENTRY_H
+
+#include
+
+#include
+
+#include "ui_launch_entry.h"
+
+class Launch_entry : public QWidget
+{
+ Q_OBJECT
+
+public:
+ Launch_entry(const char *filename, unsigned long default_quota,
+ unsigned long max_quota, Launchpad *launchpad,
+ QWidget *parent = 0);
+ ~Launch_entry();
+
+private:
+ Ui::Launch_entryClass ui;
+
+ const char *_filename;
+ Launchpad *_launchpad;
+
+private slots:
+ void on_launchButton_clicked();
+};
+
+#endif // LAUNCH_ENTRY_H
diff --git a/libports/src/app/qt5/qt_launchpad/launch_entry.ui b/libports/src/app/qt5/qt_launchpad/launch_entry.ui
new file mode 100644
index 0000000000..dae32b8244
--- /dev/null
+++ b/libports/src/app/qt5/qt_launchpad/launch_entry.ui
@@ -0,0 +1,133 @@
+
+ Launch_entryClass
+
+
+
+ 0
+ 0
+ 396
+ 40
+
+
+
+
+ 4
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+ -
+
+
+
+ 100
+ 40
+
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 0
+ 20
+
+
+
+
+ -
+
+
+
+ 240
+ 40
+
+
+
+
+ 240
+ 16777215
+
+
+
+ 0
+
+
+
+ -
+
+
+
+ 40
+ 40
+
+
+
+ 100
+
+
+ false
+
+
+ true
+
+
+
+
+
+
+
+ Kbyte_loadbar
+ QProgressBar
+
+
+
+
+
+
+ quotaDial
+ valueChanged(int)
+ quotaBar
+ setValue(int)
+
+
+ 395
+ 43
+
+
+ 355
+ 43
+
+
+
+
+ quotaDial
+ rangeChanged(int,int)
+ quotaBar
+ setRange(int,int)
+
+
+ 395
+ 30
+
+
+ 355
+ 30
+
+
+
+
+
diff --git a/libports/src/app/qt5/qt_launchpad/main.cpp b/libports/src/app/qt5/qt_launchpad/main.cpp
new file mode 100644
index 0000000000..3c2043732f
--- /dev/null
+++ b/libports/src/app/qt5/qt_launchpad/main.cpp
@@ -0,0 +1,47 @@
+/*
+ * \brief Qt Launchpad main program
+ * \author Christian Prochaska
+ * \date 2008-04-05
+ */
+
+/* local includes */
+#include "qt_launchpad.h"
+
+/* Qt includes */
+#include
+#include
+
+/* Genode includes */
+#include
+#include
+
+int main(int argc, char *argv[])
+{
+ /* look for dynamic linker */
+ try {
+ static Genode::Rom_connection rom("ld.lib.so");
+ Genode::Process::dynamic_linker(rom.dataspace());
+ } catch (...) { }
+
+ int result;
+
+ QApplication *a = new QApplication(argc, argv);
+
+ Qt_launchpad *launchpad = new Qt_launchpad(Genode::env()->ram_session()->quota());
+
+ launchpad->add_launcher("previewer", 25*1024*1024);
+ launchpad->add_launcher("textedit", 25*1024*1024);
+ launchpad->add_launcher("tetrix", 40*1024*1024);
+
+ launchpad->move(300,100);
+ launchpad->show();
+
+ a->connect(a, SIGNAL(lastWindowClosed()), a, SLOT(quit()));
+
+ result = a->exec();
+
+ delete launchpad;
+ delete a;
+
+ return result;
+}
diff --git a/libports/src/app/qt5/qt_launchpad/qt_launchpad.cpp b/libports/src/app/qt5/qt_launchpad/qt_launchpad.cpp
new file mode 100644
index 0000000000..2ad8604edb
--- /dev/null
+++ b/libports/src/app/qt5/qt_launchpad/qt_launchpad.cpp
@@ -0,0 +1,115 @@
+/*
+ * \brief Qt Launchpad window implementation
+ * \author Christian Prochaska
+ * \date 2008-04-05
+ */
+
+#include
+
+#include "qt_launchpad.h"
+
+#include "launch_entry.h"
+#include "child_entry.h"
+
+Qt_launchpad::Qt_launchpad(unsigned long initial_quota, QWidget *parent)
+ : QMainWindow(parent), Launchpad(initial_quota)
+{
+ setupUi(this);
+
+ // disable minimize and maximize buttons
+ Qt::WindowFlags flags = windowFlags();
+ flags &= ~Qt::WindowMinMaxButtonsHint;
+ setWindowFlags(flags);
+
+ // put a QScrollArea into launcherDockWidget for scrolling of launcher entries
+ QScrollArea *launcherScrollArea = new QScrollArea;
+ launcherScrollArea->setFrameStyle(QFrame::NoFrame);
+ launcherScrollArea->setWidget(launcherDockWidgetContents);
+
+ launcherDockWidget->setWidget(launcherScrollArea);
+
+ QVBoxLayout *launcherDockWidgetLayout = new QVBoxLayout;
+ launcherDockWidgetLayout->setContentsMargins(2, 2, 2, 2);
+ launcherDockWidgetLayout->setSpacing(2);
+ launcherDockWidgetContents->setLayout(launcherDockWidgetLayout);
+
+ // put a QScrollArea into childrenDockWidget for scrolling of child entries
+ QScrollArea *childrenScrollArea = new QScrollArea;
+ childrenScrollArea->setFrameStyle(QFrame::NoFrame);
+ childrenScrollArea->setWidget(childrenDockWidgetContents);
+
+ childrenDockWidget->setWidget(childrenScrollArea);
+
+ QVBoxLayout *childrenDockWidgetLayout = new QVBoxLayout;
+ childrenDockWidgetLayout->setContentsMargins(2, 2, 2, 2);
+ childrenDockWidgetLayout->setSpacing(2);
+ childrenDockWidgetContents->setLayout(childrenDockWidgetLayout);
+
+ // update the available quota bar every 200ms
+ QTimer *avail_quota_timer = new QTimer(this);
+ connect(avail_quota_timer, SIGNAL(timeout()), this, SLOT(avail_quota_update()));
+ avail_quota_timer->start(200);
+}
+
+Qt_launchpad::~Qt_launchpad()
+{
+
+}
+
+void Qt_launchpad::avail_quota_update()
+{
+ static Genode::size_t _avail = 0;
+
+ Genode::size_t new_avail = Genode::env()->ram_session()->avail();
+
+ if (new_avail != _avail)
+ quota(new_avail);
+
+ _avail = new_avail;
+}
+
+void Qt_launchpad::quota(unsigned long quota)
+{
+ totalQuotaProgressBar->setMaximum(initial_quota() / 1024);
+ totalQuotaProgressBar->setValue(quota / 1024);
+}
+
+void Qt_launchpad::add_launcher(const char *filename,
+ unsigned long default_quota)
+{
+ Launch_entry *launch_entry = new Launch_entry(filename, default_quota / 1024,
+ initial_quota() / 1024, this);
+ launcherDockWidgetContents->layout()->addWidget(launch_entry);
+ launch_entry->show();
+ launcherDockWidgetContents->adjustSize();
+}
+
+void Qt_launchpad::add_child(const char *unique_name,
+ unsigned long quota,
+ Launchpad_child *launchpad_child,
+ Genode::Allocator *alloc)
+{
+ Child_entry *child_entry = new Child_entry(unique_name, quota / 1024,
+ initial_quota() / 1024,
+ this, launchpad_child);
+ child_entry->setObjectName(QString(unique_name) + "_child_entry");
+ childrenDockWidgetContents->layout()->addWidget(child_entry);
+ child_entry->show();
+ childrenDockWidgetContents->adjustSize();
+}
+
+void Qt_launchpad::remove_child(const char *name, Genode::Allocator *alloc)
+{
+ Child_entry *child_entry =
+ childrenDockWidgetContents->findChild(QString(name) + "_child_entry");
+
+ if (!child_entry) {
+ PWRN("child entry lookup failed");
+ return;
+ }
+
+ // still in "button clicked" event handler
+ child_entry->deleteLater();
+
+ childrenDockWidgetContents->adjustSize();
+}
diff --git a/libports/src/app/qt5/qt_launchpad/qt_launchpad.h b/libports/src/app/qt5/qt_launchpad/qt_launchpad.h
new file mode 100644
index 0000000000..c817f2556b
--- /dev/null
+++ b/libports/src/app/qt5/qt_launchpad/qt_launchpad.h
@@ -0,0 +1,46 @@
+/*
+ * \brief Qt Launchpad window interface
+ * \author Christian Prochaska
+ * \date 2008-04-05
+ */
+
+/*
+ * Copyright (C) 2008-2013 Genode Labs GmbH
+ *
+ * This file is part of the Genode OS framework, which is distributed
+ * under the terms of the GNU General Public License version 2.
+ */
+
+#ifndef QT_LAUNCHPAD_H
+#define QT_LAUNCHPAD_H
+
+#include
+
+#include
+#include "ui_qt_launchpad.h"
+
+class Qt_launchpad : public QMainWindow, public Launchpad, private Ui::Qt_launchpadClass
+{
+ Q_OBJECT
+
+public:
+ Qt_launchpad(unsigned long initial_quota, QWidget *parent = 0);
+ ~Qt_launchpad();
+
+ virtual void quota(unsigned long quota);
+
+ virtual void add_launcher(const char *filename,
+ unsigned long default_quota);
+
+ virtual void add_child(const char *unique_name,
+ unsigned long quota,
+ Launchpad_child *launchpad_child,
+ Genode::Allocator *alloc);
+
+ virtual void remove_child(const char *name, Genode::Allocator *alloc);
+
+private slots:
+ void avail_quota_update();
+};
+
+#endif // QT_LAUNCHPAD_H
diff --git a/libports/src/app/qt5/qt_launchpad/qt_launchpad.pro b/libports/src/app/qt5/qt_launchpad/qt_launchpad.pro
new file mode 100644
index 0000000000..0546c53e01
--- /dev/null
+++ b/libports/src/app/qt5/qt_launchpad/qt_launchpad.pro
@@ -0,0 +1,15 @@
+TEMPLATE = app
+TARGET = qt_launchpad
+QT = core gui
+HEADERS += child_entry.h \
+ kbyte_loadbar.h \
+ launch_entry.h \
+ qt_launchpad.h
+SOURCES += child_entry.cpp \
+ kbyte_loadbar.cpp \
+ launch_entry.cpp \
+ main.cpp \
+ qt_launchpad.cpp
+FORMS += child_entry.ui \
+ launch_entry.ui \
+ qt_launchpad.ui
diff --git a/libports/src/app/qt5/qt_launchpad/qt_launchpad.ui b/libports/src/app/qt5/qt_launchpad/qt_launchpad.ui
new file mode 100644
index 0000000000..31e7820af9
--- /dev/null
+++ b/libports/src/app/qt5/qt_launchpad/qt_launchpad.ui
@@ -0,0 +1,152 @@
+
+ Qt_launchpadClass
+
+
+
+ 0
+ 0
+ 410
+ 500
+
+
+
+
+ 410
+ 500
+
+
+
+
+ 410
+ 500
+
+
+
+ Qt Launchpad
+
+
+
+
+
+ 410
+ 0
+
+
+
+ QDockWidget::DockWidgetFloatable|QDockWidget::DockWidgetMovable|QDockWidget::NoDockWidgetFeatures
+
+
+ Qt::LeftDockWidgetArea
+
+
+ Status
+
+
+ 1
+
+
+
+
+ 16777215
+ 50
+
+
+
+ -
+
+
+
+ 100
+ 0
+
+
+
+ Quota
+
+
+ Qt::AlignCenter
+
+
+
+ -
+
+
+
+ 240
+ 0
+
+
+
+ 0
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 40
+ 20
+
+
+
+
+
+
+
+
+
+
+ 410
+ 0
+
+
+
+ QDockWidget::DockWidgetFloatable|QDockWidget::DockWidgetMovable|QDockWidget::NoDockWidgetFeatures
+
+
+ Qt::LeftDockWidgetArea
+
+
+ Launcher
+
+
+ 1
+
+
+
+
+
+
+ 410
+ 0
+
+
+
+ QDockWidget::DockWidgetFloatable|QDockWidget::DockWidgetMovable|QDockWidget::NoDockWidgetFeatures
+
+
+ Qt::LeftDockWidgetArea
+
+
+ Children
+
+
+ 1
+
+
+
+
+
+
+ Kbyte_loadbar
+ QProgressBar
+
+
+
+
+
+
diff --git a/libports/src/app/qt5/qt_launchpad/target.mk b/libports/src/app/qt5/qt_launchpad/target.mk
new file mode 100644
index 0000000000..1f035e42bf
--- /dev/null
+++ b/libports/src/app/qt5/qt_launchpad/target.mk
@@ -0,0 +1,7 @@
+# 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)/src/app/qt5/tmpl/target_defaults.inc
+
+include $(QT5_REP_DIR)/src/app/qt5/tmpl/target_final.inc
diff --git a/libports/src/app/qt5/tmpl/target.mk.example b/libports/src/app/qt5/tmpl/target.mk.example
new file mode 100644
index 0000000000..2e7ce237a4
--- /dev/null
+++ b/libports/src/app/qt5/tmpl/target.mk.example
@@ -0,0 +1,7 @@
+# identify the qt4 repository by searching for a file that is unique for qt4
+QT5_REP_DIR := $(call select_from_repositories,lib/import/import-qt5.inc)
+QT5_REP_DIR := $(realpath $(dir $(QT5_REP_DIR))../..)
+
+include $(QT5_REP_DIR)/src/app/qt5/tmpl/target_defaults.inc
+
+include $(QT5_REP_DIR)/src/app/qt5/tmpl/target_final.inc
diff --git a/libports/src/app/qt5/tmpl/target_defaults.inc b/libports/src/app/qt5/tmpl/target_defaults.inc
new file mode 100644
index 0000000000..a3a42736d2
--- /dev/null
+++ b/libports/src/app/qt5/tmpl/target_defaults.inc
@@ -0,0 +1,31 @@
+# build with QtCore and QtGui support by default
+# - can be overridden in the qmake project file
+
+QT = core gui
+
+# find out the name of the project directory
+
+PROJECT_DIR_NAME = $(notdir $(abspath $(PRG_DIR)))
+
+# include the qmake project file
+# - if the qmake project file has a different name than the project directory,
+# set QMAKE_PROJECT_FILE in target.mk before the inclusion of this file
+
+QMAKE_PROJECT_FILE ?= $(realpath $(PRG_DIR)/$(PROJECT_DIR_NAME).pro)
+
+ifneq ($(strip $(QMAKE_PROJECT_FILE)),)
+include $(QMAKE_PROJECT_FILE)
+endif
+
+# how to name the generated executable
+# (if not already defined in the qmake project file)
+# - can be overridden in target.mk after inclusion of this file
+
+ifndef TARGET
+TARGET = $(PROJECT_DIR_NAME)
+endif
+
+# default stack size of the main thread
+# - can be overridden anywhere in target.mk
+
+QT_MAIN_STACK_SIZE ?= 512*1024
diff --git a/libports/src/app/qt5/tmpl/target_final.inc b/libports/src/app/qt5/tmpl/target_final.inc
new file mode 100644
index 0000000000..756efaf40b
--- /dev/null
+++ b/libports/src/app/qt5/tmpl/target_final.inc
@@ -0,0 +1,71 @@
+INC_DIR += $(PRG_DIR)
+
+LIBS += libc libc_log
+
+# set the stack size of the main thread
+CC_CXX_OPT += -DQT_MAIN_STACK_SIZE=$(QT_MAIN_STACK_SIZE)
+
+# static Qt plugins
+#ifeq ($(findstring qgif, $(QT_PLUGIN)), qgif)
+#LIBS += qgif
+#endif
+#ifeq ($(findstring qjpeg, $(QT_PLUGIN)), qjpeg)
+#LIBS += qjpeg
+#endif
+
+# QtCore
+ifeq ($(findstring core, $(QT)), core)
+QT_DEFINES += -DQT_CORE_LIB
+LIBS += qt5_core
+endif
+
+# QtGui
+ifeq ($(findstring gui, $(QT)), gui)
+QT_DEFINES += -DQT_GUI_LIB
+LIBS += qt5_gui qt5_qpa_nitpicker qt5_widgets qt5_dejavusans
+endif
+
+# QtNetwork
+ifeq ($(findstring network, $(QT)), network)
+LIBS += qt5_network
+endif
+
+# QtScript
+ifeq ($(findstring scriptclassic, $(QT)), scriptclassic)
+LIBS += qt5_scriptclassic
+else
+ifeq ($(findstring script, $(QT)), script)
+# qt5_script does dot work very well at this time, so qt5_scriptclassic gets used in any case
+LIBS += qt5_scriptclassic
+endif
+endif
+
+# QtScriptTools
+ifeq ($(findstring scripttools, $(QT)), scripttools)
+LIBS += qt5_scripttools
+endif
+
+# QtSvg
+ifeq ($(findstring svg, $(QT)), svg)
+LIBS += qt5_svg
+endif
+
+# QtXml
+ifeq ($(findstring xml, $(QT)), xml)
+LIBS += qt5_xml
+endif
+
+# QtUiTools
+# Qt4 documentation says: CONFIG += uitools
+ifeq ($(findstring uitools, $(CONFIG)), uitools)
+LIBS += qt5_ui_tools
+endif
+# Qt5 documentation says: QT += uitools
+ifeq ($(findstring uitools, $(QT)), uitools)
+LIBS += qt5_ui_tools
+endif
+
+# QtWebKit
+ifeq ($(findstring webkit, $(QT)), webkit)
+LIBS += qt5_webcore qt5_webkit qt5_webkitwidgets
+endif
diff --git a/libports/src/lib/qt5/dejavusans/dejavusans.qrc b/libports/src/lib/qt5/dejavusans/dejavusans.qrc
new file mode 100644
index 0000000000..56c13579f1
--- /dev/null
+++ b/libports/src/lib/qt5/dejavusans/dejavusans.qrc
@@ -0,0 +1,6 @@
+
+
+
+../../../../contrib/qt-everywhere-opensource-src-5.1.0/qtbase/lib/fonts/DejaVuSans.ttf
+
+
diff --git a/libports/src/lib/qt5/patches/qt5_configuration.patch b/libports/src/lib/qt5/patches/qt5_configuration.patch
new file mode 100644
index 0000000000..7fece002c6
--- /dev/null
+++ b/libports/src/lib/qt5/patches/qt5_configuration.patch
@@ -0,0 +1,220 @@
+qt5_configuration.patch
+
+From: Christian Prochaska
+
+
+---
+ configure | 2 -
+ qt.pro | 42 ++++++++++----------
+ qtbase/configure | 6 +--
+ qtbase/mkspecs/genode-g++/qmake.conf | 1
+ qtbase/mkspecs/genode-g++/qplatformdefs.h | 1
+ qtbase/src/corelib/global/qconfig-genode.h | 1
+ qtdeclarative/examples/quick/quick.pro | 6 ++-
+ qtdeclarative/src/imports/imports.pro | 2 -
+ qtdeclarative/tests/tests.pro | 4 +-
+ qtquick1/examples/declarative/declarative.pro | 1
+ qtwebkit/Tools/qmake/mkspecs/features/features.prf | 6 +--
+ 11 files changed, 39 insertions(+), 33 deletions(-)
+ create mode 120000 qtbase/mkspecs/genode-g++/qmake.conf
+ create mode 120000 qtbase/mkspecs/genode-g++/qplatformdefs.h
+ create mode 120000 qtbase/src/corelib/global/qconfig-genode.h
+
+diff --git a/configure b/configure
+index 9ba24b5..d0f1357 100755
+--- a/configure
++++ b/configure
+@@ -60,4 +60,4 @@ echo "+ cd .."
+ cd ..
+
+ echo "+ qtbase/bin/qmake $srcpath"
+-exec qtbase/bin/qmake "$srcpath"
++exec qtbase/bin/qmake -r "$srcpath"
+diff --git a/qt.pro b/qt.pro
+index 218701a..bb4c037 100644
+--- a/qt.pro
++++ b/qt.pro
+@@ -54,33 +54,33 @@ defineTest(addModule) {
+ # it may not build.
+
+ addModule(qtbase)
+-addModule(qtx11extras, qtbase)
+-addModule(qlalr, qtbase)
++#addModule(qtx11extras, qtbase)
++#addModule(qlalr, qtbase)
+ addModule(qtsvg, qtbase)
+ addModule(qtxmlpatterns, qtbase)
+ addModule(qtjsbackend, qtbase)
+ addModule(qtdeclarative, qtjsbackend, qtsvg qtxmlpatterns)
+-addModule(qtquickcontrols, qtdeclarative)
+-addModule(qtmultimedia, qtdeclarative)
+-addModule(qtactiveqt, qtbase)
+-addModule(qt3d, qtdeclarative)
+-addModule(qtjsondb, qtdeclarative)
+-addModule(qtsystems, qtbase, qtdeclarative qtjsondb)
+-addModule(qtlocation, qtbase, qt3d qtjsondb qtsystems qtmultimedia)
+-addModule(qtsensors, qtbase, qtdeclarative)
+-addModule(qtconnectivity, qtsystems)
+-addModule(qtfeedback, qtdeclarative, qtmultimedia)
+-addModule(qtpim, qtdeclarative, qtjsondb)
++#addModule(qtquickcontrols, qtdeclarative)
++#addModule(qtmultimedia, qtdeclarative)
++#addModule(qtactiveqt, qtbase)
++#addModule(qt3d, qtdeclarative)
++#addModule(qtjsondb, qtdeclarative)
++#addModule(qtsystems, qtbase, qtdeclarative qtjsondb)
++#addModule(qtlocation, qtbase, qt3d qtjsondb qtsystems qtmultimedia)
++#addModule(qtsensors, qtbase, qtdeclarative)
++#addModule(qtconnectivity, qtsystems)
++#addModule(qtfeedback, qtdeclarative, qtmultimedia)
++#addModule(qtpim, qtdeclarative, qtjsondb)
+ addModule(qtwebkit, qtdeclarative, qtlocation qtsensors, WebKit.pro)
+ addModule(qttools, qtbase, qtdeclarative qtactiveqt qtwebkit)
+ addModule(qtwebkit-examples, qtwebkit qttools)
+ addModule(qtimageformats, qtbase)
+-addModule(qtgraphicaleffects, qtdeclarative)
++#addModule(qtgraphicaleffects, qtdeclarative)
+ addModule(qtscript, qtbase)
+-addModule(qtquick1, qtscript, qtsvg qtxmlpatterns qtwebkit qttools)
+-addModule(qtdocgallery, qtdeclarative, qtjsondb)
+-!win32:!mac:addModule(qtwayland, qtbase, qtdeclarative)
+-addModule(qtserialport, qtbase)
+-addModule(qttranslations, qttools)
+-addModule(qtdoc, qtdeclarative)
+-addModule(qtqa, qtbase)
++#addModule(qtquick1, qtscript, qtsvg qtxmlpatterns qtwebkit qttools)
++#addModule(qtdocgallery, qtdeclarative, qtjsondb)
++#!win32:!mac:addModule(qtwayland, qtbase, qtdeclarative)
++#addModule(qtserialport, qtbase)
++#addModule(qttranslations, qttools)
++#addModule(qtdoc, qtdeclarative)
++#addModule(qtqa, qtbase)
+diff --git a/qtbase/configure b/qtbase/configure
+index d7c9674..f4198b8 100755
+--- a/qtbase/configure
++++ b/qtbase/configure
+@@ -857,10 +857,10 @@ CFG_XINERAMA=runtime
+ CFG_XFIXES=runtime
+ CFG_ZLIB=auto
+ CFG_SQLITE=qt
+-CFG_GIF=auto
++CFG_GIF=yes
+ CFG_PNG=yes
+ CFG_LIBPNG=auto
+-CFG_JPEG=auto
++CFG_JPEG=yes
+ CFG_LIBJPEG=auto
+ CFG_XCURSOR=runtime
+ CFG_XRANDR=runtime
+@@ -949,7 +949,7 @@ CFG_GETADDRINFO=auto
+ CFG_IPV6IFNAME=auto
+ CFG_GETIFADDRS=auto
+ CFG_INOTIFY=auto
+-CFG_EVENTFD=auto
++CFG_EVENTFD=no
+ CFG_RPATH=yes
+ CFG_FRAMEWORK=auto
+ CFG_MAC_HARFBUZZ=no
+diff --git a/qtbase/mkspecs/genode-g++/qmake.conf b/qtbase/mkspecs/genode-g++/qmake.conf
+new file mode 120000
+index 0000000..d4c4a25
+--- /dev/null
++++ b/qtbase/mkspecs/genode-g++/qmake.conf
+@@ -0,0 +1 @@
++../../../../../src/lib/qt5/qtbase/mkspecs/genode-g++/qmake.conf
+\ No newline at end of file
+diff --git a/qtbase/mkspecs/genode-g++/qplatformdefs.h b/qtbase/mkspecs/genode-g++/qplatformdefs.h
+new file mode 120000
+index 0000000..7d0c24b
+--- /dev/null
++++ b/qtbase/mkspecs/genode-g++/qplatformdefs.h
+@@ -0,0 +1 @@
++../../../../../src/lib/qt5/qtbase/mkspecs/genode-g++/qplatformdefs.h
+\ No newline at end of file
+diff --git a/qtbase/src/corelib/global/qconfig-genode.h b/qtbase/src/corelib/global/qconfig-genode.h
+new file mode 120000
+index 0000000..ca3b847
+--- /dev/null
++++ b/qtbase/src/corelib/global/qconfig-genode.h
+@@ -0,0 +1 @@
++../../../../../../src/lib/qt5/qtbase/src/corelib/global/qconfig-genode.h
+\ No newline at end of file
+diff --git a/qtdeclarative/examples/quick/quick.pro b/qtdeclarative/examples/quick/quick.pro
+index 311e264..b356a56 100644
+--- a/qtdeclarative/examples/quick/quick.pro
++++ b/qtdeclarative/examples/quick/quick.pro
+@@ -12,7 +12,6 @@ SUBDIRS = accessibility \
+ positioners \
+ righttoleft \
+ scenegraph \
+- shadereffects \
+ text \
+ threading \
+ touchinteraction \
+@@ -29,6 +28,11 @@ qtHaveModule(widgets) {
+ SUBDIRS += embeddedinwidgets
+ }
+
++# OpenGL dependent examples
++qtHaveModule(opengl) {
++ SUBDIRS += shadereffects
++}
++
+ EXAMPLE_FILES = \
+ ui-components \
+ shared
+diff --git a/qtdeclarative/src/imports/imports.pro b/qtdeclarative/src/imports/imports.pro
+index 733c7c4..fb1a413 100644
+--- a/qtdeclarative/src/imports/imports.pro
++++ b/qtdeclarative/src/imports/imports.pro
+@@ -16,4 +16,4 @@ qtHaveModule(quick) {
+
+ qtHaveModule(xmlpatterns) : SUBDIRS += xmllistmodel
+
+-qtHaveModule(widgets) : SUBDIRS += widgets
++qtHaveModule(widgets),qtHaveModule(quick): SUBDIRS += widgets
+diff --git a/qtdeclarative/tests/tests.pro b/qtdeclarative/tests/tests.pro
+index 85e4f3a..9aa752b 100644
+--- a/qtdeclarative/tests/tests.pro
++++ b/qtdeclarative/tests/tests.pro
+@@ -1,2 +1,2 @@
+-TEMPLATE = subdirs
+-SUBDIRS += auto
++#TEMPLATE = subdirs
++#SUBDIRS += auto
+diff --git a/qtquick1/examples/declarative/declarative.pro b/qtquick1/examples/declarative/declarative.pro
+index 91378da..123539f 100644
+--- a/qtquick1/examples/declarative/declarative.pro
++++ b/qtquick1/examples/declarative/declarative.pro
+@@ -16,7 +16,6 @@ SUBDIRS = \
+ righttoleft \
+ rssnews \
+ samegame \
+- shadereffects \
+ snake \
+ sqllocalstorage \
+ text \
+diff --git a/qtwebkit/Tools/qmake/mkspecs/features/features.prf b/qtwebkit/Tools/qmake/mkspecs/features/features.prf
+index ddbccf9..e4d3999 100644
+--- a/qtwebkit/Tools/qmake/mkspecs/features/features.prf
++++ b/qtwebkit/Tools/qmake/mkspecs/features/features.prf
+@@ -39,8 +39,8 @@ defineTest(detectFeatures) {
+
+ config_libxml2: WEBKIT_CONFIG += use_libxml2
+ config_libxslt: WEBKIT_CONFIG += xslt
+- config_libzlib: WEBKIT_CONFIG += use_zlib
+- config_libwebp: WEBKIT_CONFIG += use_webp
++ #config_libzlib: WEBKIT_CONFIG += use_zlib
++ #config_libwebp: WEBKIT_CONFIG += use_webp
+
+ # We can't use Qt's 3rdparty sources for libjpeg and libpng outside of qtbase, but if Qt
+ # is using the system libraries, use them to take advantage of the WebCore image decoders as well.
+@@ -81,7 +81,7 @@ defineTest(detectFeatures) {
+
+ # Enable the USE(3D_GRAPHICS) flag when QtOpenGL is enabled.
+ # Disable on Windows CE for now, as ANGLE won't compile.
+- !wince*:contains(QT_CONFIG, opengl): WEBKIT_CONFIG += use_3d_graphics
++ #!wince*:contains(QT_CONFIG, opengl): WEBKIT_CONFIG += use_3d_graphics
+
+ # Temporarily disable FTPDIR on Windows CE (missing functions from time.h)
+ wince* {
diff --git a/libports/src/lib/qt5/patches/qt5_generated_headers.patch b/libports/src/lib/qt5/patches/qt5_generated_headers.patch
new file mode 100644
index 0000000000..b7a9f8b628
--- /dev/null
+++ b/libports/src/lib/qt5/patches/qt5_generated_headers.patch
@@ -0,0 +1,155 @@
+qt5_generated_headers.patch
+
+From: Christian Prochaska
+
+
+---
+ .stgit-new.txt~ | 0
+ qtbase/include/QtCore/QtCoreDepends | 1 +
+ qtbase/include/QtGui/QtGuiDepends | 2 ++
+ qtbase/include/QtNetwork/QtNetworkDepends | 2 ++
+ .../include/QtPrintSupport/QtPrintSupportDepends | 4 ++++
+ qtbase/include/QtSql/QtSqlDepends | 2 ++
+ qtbase/include/QtWidgets/QtWidgetsDepends | 3 +++
+ qtbase/include/QtXml/QtXmlDepends | 2 ++
+ qtscript/include/QtScript/QtScriptDepends | 2 ++
+ qtsvg/include/QtSvg/QtSvgDepends | 4 ++++
+ qttools/include/QtUiTools/QtUiToolsDepends | 2 ++
+ qtwebkit/include/QtWebKit/QtWebKitDepends | 4 ++++
+ .../include/QtWebKitWidgets/QtWebKitWidgetsDepends | 7 +++++++
+ .../include/QtXmlPatterns/QtXmlPatternsDepends | 3 +++
+ 14 files changed, 38 insertions(+)
+ create mode 100644 .stgit-new.txt~
+ create mode 100644 qtbase/include/QtCore/QtCoreDepends
+ create mode 100644 qtbase/include/QtGui/QtGuiDepends
+ create mode 100644 qtbase/include/QtNetwork/QtNetworkDepends
+ create mode 100644 qtbase/include/QtPrintSupport/QtPrintSupportDepends
+ create mode 100644 qtbase/include/QtSql/QtSqlDepends
+ create mode 100644 qtbase/include/QtWidgets/QtWidgetsDepends
+ create mode 100644 qtbase/include/QtXml/QtXmlDepends
+ create mode 100644 qtscript/include/QtScript/QtScriptDepends
+ create mode 100644 qtsvg/include/QtSvg/QtSvgDepends
+ create mode 100644 qttools/include/QtUiTools/QtUiToolsDepends
+ create mode 100644 qtwebkit/include/QtWebKit/QtWebKitDepends
+ create mode 100644 qtwebkit/include/QtWebKitWidgets/QtWebKitWidgetsDepends
+ create mode 100644 qtxmlpatterns/include/QtXmlPatterns/QtXmlPatternsDepends
+
+diff --git a/.stgit-new.txt~ b/.stgit-new.txt~
+new file mode 100644
+index 0000000..e69de29
+diff --git a/qtbase/include/QtCore/QtCoreDepends b/qtbase/include/QtCore/QtCoreDepends
+new file mode 100644
+index 0000000..f6a4430
+--- /dev/null
++++ b/qtbase/include/QtCore/QtCoreDepends
+@@ -0,0 +1 @@
++/* This file was generated by qmake with the info from /src/corelib/corelib.pro. */
+diff --git a/qtbase/include/QtGui/QtGuiDepends b/qtbase/include/QtGui/QtGuiDepends
+new file mode 100644
+index 0000000..52697ae
+--- /dev/null
++++ b/qtbase/include/QtGui/QtGuiDepends
+@@ -0,0 +1,2 @@
++/* This file was generated by qmake with the info from /src/gui/gui.pro. */
++#include
+diff --git a/qtbase/include/QtNetwork/QtNetworkDepends b/qtbase/include/QtNetwork/QtNetworkDepends
+new file mode 100644
+index 0000000..cb2c29d
+--- /dev/null
++++ b/qtbase/include/QtNetwork/QtNetworkDepends
+@@ -0,0 +1,2 @@
++/* This file was generated by qmake with the info from /src/network/network.pro. */
++#include
+diff --git a/qtbase/include/QtPrintSupport/QtPrintSupportDepends b/qtbase/include/QtPrintSupport/QtPrintSupportDepends
+new file mode 100644
+index 0000000..520b700
+--- /dev/null
++++ b/qtbase/include/QtPrintSupport/QtPrintSupportDepends
+@@ -0,0 +1,4 @@
++/* This file was generated by qmake with the info from /src/printsupport/printsupport.pro. */
++#include
++#include
++#include
+diff --git a/qtbase/include/QtSql/QtSqlDepends b/qtbase/include/QtSql/QtSqlDepends
+new file mode 100644
+index 0000000..42eb220
+--- /dev/null
++++ b/qtbase/include/QtSql/QtSqlDepends
+@@ -0,0 +1,2 @@
++/* This file was generated by qmake with the info from /src/sql/sql.pro. */
++#include
+diff --git a/qtbase/include/QtWidgets/QtWidgetsDepends b/qtbase/include/QtWidgets/QtWidgetsDepends
+new file mode 100644
+index 0000000..03776b6
+--- /dev/null
++++ b/qtbase/include/QtWidgets/QtWidgetsDepends
+@@ -0,0 +1,3 @@
++/* This file was generated by qmake with the info from /src/widgets/widgets.pro. */
++#include
++#include
+diff --git a/qtbase/include/QtXml/QtXmlDepends b/qtbase/include/QtXml/QtXmlDepends
+new file mode 100644
+index 0000000..39dd8ec
+--- /dev/null
++++ b/qtbase/include/QtXml/QtXmlDepends
+@@ -0,0 +1,2 @@
++/* This file was generated by qmake with the info from /src/xml/xml.pro. */
++#include
+diff --git a/qtscript/include/QtScript/QtScriptDepends b/qtscript/include/QtScript/QtScriptDepends
+new file mode 100644
+index 0000000..b88d662
+--- /dev/null
++++ b/qtscript/include/QtScript/QtScriptDepends
+@@ -0,0 +1,2 @@
++/* This file was generated by qmake with the info from /src/script/script.pro. */
++#include
+diff --git a/qtsvg/include/QtSvg/QtSvgDepends b/qtsvg/include/QtSvg/QtSvgDepends
+new file mode 100644
+index 0000000..549510d
+--- /dev/null
++++ b/qtsvg/include/QtSvg/QtSvgDepends
+@@ -0,0 +1,4 @@
++/* This file was generated by qmake with the info from /src/svg/svg.pro. */
++#include
++#include
++#include
+diff --git a/qttools/include/QtUiTools/QtUiToolsDepends b/qttools/include/QtUiTools/QtUiToolsDepends
+new file mode 100644
+index 0000000..2c0063e
+--- /dev/null
++++ b/qttools/include/QtUiTools/QtUiToolsDepends
+@@ -0,0 +1,2 @@
++/* This file was generated by qmake with the info from /src/designer/src/uitools/uitools.pro. */
++#include
+diff --git a/qtwebkit/include/QtWebKit/QtWebKitDepends b/qtwebkit/include/QtWebKit/QtWebKitDepends
+new file mode 100644
+index 0000000..1b3f8ad
+--- /dev/null
++++ b/qtwebkit/include/QtWebKit/QtWebKitDepends
+@@ -0,0 +1,4 @@
++/* This file was generated by qmake with the info from /Source/api.pri. */
++#include
++#include
++#include
+diff --git a/qtwebkit/include/QtWebKitWidgets/QtWebKitWidgetsDepends b/qtwebkit/include/QtWebKitWidgets/QtWebKitWidgetsDepends
+new file mode 100644
+index 0000000..672bd42
+--- /dev/null
++++ b/qtwebkit/include/QtWebKitWidgets/QtWebKitWidgetsDepends
+@@ -0,0 +1,7 @@
++/* This file was generated by qmake with the info from /Source/widgetsapi.pri. */
++#include
++#include
++#include
++#include
++#include
++#include
+diff --git a/qtxmlpatterns/include/QtXmlPatterns/QtXmlPatternsDepends b/qtxmlpatterns/include/QtXmlPatterns/QtXmlPatternsDepends
+new file mode 100644
+index 0000000..60615c7
+--- /dev/null
++++ b/qtxmlpatterns/include/QtXmlPatterns/QtXmlPatternsDepends
+@@ -0,0 +1,3 @@
++/* This file was generated by qmake with the info from /src/xmlpatterns/xmlpatterns.pro. */
++#include
++#include
diff --git a/libports/src/lib/qt5/patches/qt5_qarraydata.patch b/libports/src/lib/qt5/patches/qt5_qarraydata.patch
new file mode 100644
index 0000000000..ded4198524
--- /dev/null
+++ b/libports/src/lib/qt5/patches/qt5_qarraydata.patch
@@ -0,0 +1,24 @@
+qt5_qarraydata.patch
+
+From: Christian Prochaska
+
+
+---
+ qtbase/src/corelib/tools/qarraydata.cpp | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/qtbase/src/corelib/tools/qarraydata.cpp b/qtbase/src/corelib/tools/qarraydata.cpp
+index a61147a..ee9cde3 100644
+--- a/qtbase/src/corelib/tools/qarraydata.cpp
++++ b/qtbase/src/corelib/tools/qarraydata.cpp
+@@ -97,8 +97,8 @@ QArrayData *QArrayData::allocate(size_t objectSize, size_t alignment,
+
+ QArrayData *header = static_cast(::malloc(allocSize));
+ if (header) {
+- quintptr data = (quintptr(header) + sizeof(QArrayData) + alignment - 1)
+- & ~(alignment - 1);
++ quintptr data = (quintptr(header) + sizeof(QArrayData) + /*alignment*/4 - 1)
++ & ~(/*alignment*/4 - 1);
+
+ header->ref.atomic.store(bool(!(options & Unsharable)));
+ header->size = 0;
diff --git a/libports/src/lib/qt5/patches/qt5_qpa.patch b/libports/src/lib/qt5/patches/qt5_qpa.patch
new file mode 100644
index 0000000000..b726175054
--- /dev/null
+++ b/libports/src/lib/qt5/patches/qt5_qpa.patch
@@ -0,0 +1,93 @@
+qt5_qpa.patch
+
+From: Christian Prochaska
+
+
+---
+ .../fontdatabases/basic/qbasicfontdatabase.cpp | 9 +++++++++
+ .../input/evdevkeyboard/qevdevkeyboardhandler.cpp | 9 ++++++---
+ .../input/evdevkeyboard/qevdevkeyboardhandler_p.h | 2 ++
+ 3 files changed, 17 insertions(+), 3 deletions(-)
+
+diff --git a/qtbase/src/platformsupport/fontdatabases/basic/qbasicfontdatabase.cpp b/qtbase/src/platformsupport/fontdatabases/basic/qbasicfontdatabase.cpp
+index 9b87418..aa25c6b 100644
+--- a/qtbase/src/platformsupport/fontdatabases/basic/qbasicfontdatabase.cpp
++++ b/qtbase/src/platformsupport/fontdatabases/basic/qbasicfontdatabase.cpp
+@@ -114,7 +114,16 @@ void QBasicFontDatabase::populateFontDatabase()
+ for (int i = 0; i < int(dir.count()); ++i) {
+ const QByteArray file = QFile::encodeName(dir.absoluteFilePath(dir[i]));
+ // qDebug() << "looking at" << file;
++#ifdef Q_OS_GENODE
++ QByteArray data;
++ QFile f(file);
++ if (!f.open(QIODevice::ReadOnly))
++ continue;
++ data = f.readAll();
++ addTTFile(data, file);
++#else
+ addTTFile(QByteArray(), file);
++#endif
+ }
+ }
+
+diff --git a/qtbase/src/platformsupport/input/evdevkeyboard/qevdevkeyboardhandler.cpp b/qtbase/src/platformsupport/input/evdevkeyboard/qevdevkeyboardhandler.cpp
+index 26dc116..3d0e3e2 100644
+--- a/qtbase/src/platformsupport/input/evdevkeyboard/qevdevkeyboardhandler.cpp
++++ b/qtbase/src/platformsupport/input/evdevkeyboard/qevdevkeyboardhandler.cpp
+@@ -49,7 +49,9 @@
+ #include
+ #include
+
++#ifndef Q_OS_GENODE
+ #include
++#endif /* Q_OS_GENODE */
+
+ //#define QT_QPA_KEYMAP_DEBUG
+
+@@ -78,11 +80,12 @@ QEvdevKeyboardHandler::QEvdevKeyboardHandler(const QString &device, int fd, bool
+
+ if (keymapFile.isEmpty() || !loadKeymap(keymapFile))
+ unloadKeymap();
+-
++#ifndef Q_OS_GENODE
+ // socket notifier for events on the keyboard device
+ QSocketNotifier *notifier;
+ notifier = new QSocketNotifier(m_fd, QSocketNotifier::Read, this);
+ connect(notifier, SIGNAL(activated(int)), this, SLOT(readKeycode()));
++#endif /* Q_OS_GENODE */
+ }
+
+ QEvdevKeyboardHandler::~QEvdevKeyboardHandler()
+@@ -92,7 +95,7 @@ QEvdevKeyboardHandler::~QEvdevKeyboardHandler()
+ if (m_fd >= 0)
+ qt_safe_close(m_fd);
+ }
+-
++#ifndef Q_OS_GENODE
+ QEvdevKeyboardHandler *QEvdevKeyboardHandler::create(const QString &device, const QString &specification)
+ {
+ #ifdef QT_QPA_KEYMAP_DEBUG
+@@ -218,7 +221,7 @@ void QEvdevKeyboardHandler::readKeycode()
+ }
+ }
+ }
+-
++#endif /* Q_OS_GENODE */
+ void QEvdevKeyboardHandler::processKeyEvent(int nativecode, int unicode, int qtcode,
+ Qt::KeyboardModifiers modifiers, bool isPress, bool autoRepeat)
+ {
+diff --git a/qtbase/src/platformsupport/input/evdevkeyboard/qevdevkeyboardhandler_p.h b/qtbase/src/platformsupport/input/evdevkeyboard/qevdevkeyboardhandler_p.h
+index 1065b05..b395d46 100644
+--- a/qtbase/src/platformsupport/input/evdevkeyboard/qevdevkeyboardhandler_p.h
++++ b/qtbase/src/platformsupport/input/evdevkeyboard/qevdevkeyboardhandler_p.h
+@@ -161,8 +161,10 @@ public:
+ return qtmod;
+ }
+
++#ifndef Q_OS_GENODE
+ private slots:
+ void readKeycode();
++#endif /* Q_OS_GENODE */
+ KeycodeAction processKeycode(quint16 keycode, bool pressed, bool autorepeat);
+
+ private:
diff --git a/libports/src/lib/qt5/patches/qt5_qtbase_genode.patch b/libports/src/lib/qt5/patches/qt5_qtbase_genode.patch
new file mode 100644
index 0000000000..7ffce5940f
--- /dev/null
+++ b/libports/src/lib/qt5/patches/qt5_qtbase_genode.patch
@@ -0,0 +1,623 @@
+qt5_qtbase_genode.patch
+
+From: Christian Prochaska
+
+Genode-specific adaptations
+---
+ qtbase/src/corelib/codecs/qtextcodec.cpp | 4 +
+ qtbase/src/corelib/global/qlogging.cpp | 6 ++
+ qtbase/src/corelib/global/qsystemdetection.h | 5 +-
+ qtbase/src/corelib/io/qprocess.cpp | 64 ++++++++++++++++++++
+ qtbase/src/corelib/io/qprocess_p.h | 45 ++++++++++++++
+ qtbase/src/corelib/io/qresource.cpp | 2 -
+ qtbase/src/corelib/kernel/qcoreapplication.cpp | 2 -
+ .../src/corelib/kernel/qeventdispatcher_unix.cpp | 14 ++++
+ qtbase/src/corelib/kernel/qtranslator.cpp | 2 -
+ qtbase/src/corelib/thread/qmutex.cpp | 2 +
+ qtbase/src/corelib/thread/qmutex_p.h | 8 +++
+ qtbase/src/corelib/thread/qthread.cpp | 5 +-
+ qtbase/src/corelib/thread/qthread_p.h | 55 +++++++++++++++++
+ qtbase/src/corelib/tools/qdatetime.cpp | 12 ++++
+ qtbase/src/gui/image/qxpmhandler.cpp | 8 +++
+ .../network/access/qnetworkaccessfilebackend.cpp | 5 ++
+ qtbase/src/network/kernel/qhostinfo.cpp | 5 ++
+ qtbase/src/network/kernel/qhostinfo_unix.cpp | 7 ++
+ qtbase/src/widgets/dialogs/qfiledialog.cpp | 2 -
+ qtbase/src/widgets/styles/qstylefactory.cpp | 7 ++
+ 20 files changed, 252 insertions(+), 8 deletions(-)
+
+diff --git a/qtbase/src/corelib/codecs/qtextcodec.cpp b/qtbase/src/corelib/codecs/qtextcodec.cpp
+index 1cedd3a..646be07 100644
+--- a/qtbase/src/corelib/codecs/qtextcodec.cpp
++++ b/qtbase/src/corelib/codecs/qtextcodec.cpp
+@@ -203,7 +203,11 @@ static QTextCodec *setupLocaleMapper()
+ // First part is getting that locale name. First try setlocale() which
+ // definitely knows it, but since we cannot fully trust it, get ready
+ // to fall back to environment variables.
++#ifdef Q_OS_GENODE
++ const QByteArray ctype;
++#else
+ const QByteArray ctype = setlocale(LC_CTYPE, 0);
++#endif /* Q_OS_GENODE */
+
+ // Get the first nonempty value from $LC_ALL, $LC_CTYPE, and $LANG
+ // environment variables.
+diff --git a/qtbase/src/corelib/global/qlogging.cpp b/qtbase/src/corelib/global/qlogging.cpp
+index c8293be..c7e9422 100644
+--- a/qtbase/src/corelib/global/qlogging.cpp
++++ b/qtbase/src/corelib/global/qlogging.cpp
+@@ -61,6 +61,10 @@
+ #include
+ #endif
+
++#ifdef Q_OS_GENODE
++#include
++#endif
++
+ #include
+
+ QT_BEGIN_NAMESPACE
+@@ -875,6 +879,8 @@ static void qDefaultMessageHandler(QtMsgType type, const QMessageLogContext &con
+
+ #if defined(QT_USE_SLOG2)
+ slog2_default_handler(type, logMessage.toLocal8Bit().constData());
++#elif defined(Q_OS_GENODE)
++ PDBG("%s", logMessage.toLocal8Bit().constData());
+ #elif defined(Q_OS_ANDROID)
+ static bool logToAndroid = qEnvironmentVariableIsEmpty("QT_ANDROID_PLAIN_LOG");
+ if (logToAndroid) {
+diff --git a/qtbase/src/corelib/global/qsystemdetection.h b/qtbase/src/corelib/global/qsystemdetection.h
+index cb55fa8..7d5c507 100644
+--- a/qtbase/src/corelib/global/qsystemdetection.h
++++ b/qtbase/src/corelib/global/qsystemdetection.h
+@@ -49,6 +49,7 @@
+ /*
+ The operating system, must be one of: (Q_OS_x)
+
++ GENODE - Genode
+ DARWIN - Darwin OS (synonym for Q_OS_MAC)
+ MAC - OS X or iOS (synonym for Q_OS_DARWIN)
+ MACX - OS X
+@@ -84,7 +85,9 @@
+ ANDROID - Android platform
+ */
+
+-#if defined(__APPLE__) && (defined(__GNUC__) || defined(__xlC__) || defined(__xlc__))
++#if defined(__GENODE__)
++# define Q_OS_GENODE
++#elif defined(__APPLE__) && (defined(__GNUC__) || defined(__xlC__) || defined(__xlc__))
+ # define Q_OS_DARWIN
+ # define Q_OS_BSD4
+ # ifdef __LP64__
+diff --git a/qtbase/src/corelib/io/qprocess.cpp b/qtbase/src/corelib/io/qprocess.cpp
+index b1861d8..b1cbf57 100644
+--- a/qtbase/src/corelib/io/qprocess.cpp
++++ b/qtbase/src/corelib/io/qprocess.cpp
+@@ -98,6 +98,11 @@ QT_END_NAMESPACE
+ #include
+ #endif
+
++#ifdef Q_OS_GENODE
++#include
++#include
++#endif
++
+ #ifndef QT_NO_PROCESS
+
+ QT_BEGIN_NAMESPACE
+@@ -789,6 +794,65 @@ QProcessPrivate::QProcessPrivate()
+ #ifdef Q_OS_UNIX
+ serial = 0;
+ #endif
++#ifdef Q_OS_GENODE
++ launchpad_child = 0;
++
++ /* request config file from ROM service */
++ Genode::Rom_connection rom("config");
++ rom.on_destruction(Genode::Rom_connection::KEEP_OPEN);
++ void *addr;
++ try {
++ addr = Genode::env()->rm_session()->attach(rom.dataspace());
++ } catch(Genode::Parent::Service_denied) {
++ qWarning("Error: Couldn't open config file.");
++ return;
++ }
++
++ /*
++ * The XML data of a valid config file starts with
++ * a tag.
++ */
++ Genode::Xml_node config_node((const char *)addr);
++
++ if (!config_node.has_type("config")) {
++ qWarning("Error: Root node of config file is not a tag.");
++ return;
++ }
++
++ /*
++ * Iterate through all entries of the config file and start
++ * children as specified.
++ */
++ for (int i = 0; i < config_node.num_sub_nodes(); i++) {
++ Genode::Xml_node program_node = config_node.sub_node(i);
++ if (program_node.has_type("program")) {
++
++ /* add filename and ram_quota to ram_quota_hash */
++ char filename[32];
++ try {
++ program_node.sub_node("filename").value(filename, sizeof(filename));
++ } catch (Genode::Xml_node::Nonexistent_sub_node) {
++ qWarning("Warning: Missing valid in config-file entry.");
++ return;
++ }
++
++ size_t ram_quota = 0;
++ try {
++ program_node.sub_node("ram_quota").value(&ram_quota);
++ } catch (Genode::Xml_node::Nonexistent_sub_node) {
++ qWarning("Warning: Missing valid in config-file entry.");
++ return;
++ }
++
++ ram_quota_hash()->insert(QString(filename), ram_quota);
++ } else {
++ char buf[32];
++ program_node.type_name(buf, sizeof(buf));
++ qWarning("Warning: Ignoring unsupported tag <%s>.", buf);
++ }
++ }
++
++#endif
+ }
+
+ /*!
+diff --git a/qtbase/src/corelib/io/qprocess_p.h b/qtbase/src/corelib/io/qprocess_p.h
+index 2a2cc9f..2173aa0 100644
+--- a/qtbase/src/corelib/io/qprocess_p.h
++++ b/qtbase/src/corelib/io/qprocess_p.h
+@@ -74,6 +74,11 @@ typedef int Q_PIPE;
+
+ #ifndef QT_NO_PROCESS
+
++#ifdef Q_OS_GENODE
++#include
++#include
++#endif
++
+ QT_BEGIN_NAMESPACE
+
+ class QSocketNotifier;
+@@ -235,6 +240,28 @@ template<> Q_INLINE_TEMPLATE void QSharedDataPointer
+ d = x;
+ }
+
++#ifdef Q_OS_GENODE
++
++class QProcess_launchpad : public Launchpad
++{
++public:
++ QProcess_launchpad(unsigned long initial_quota) : Launchpad(initial_quota) {}
++
++ virtual void quota(unsigned long quota) {}
++
++ virtual void add_launcher(const char *filename,
++ unsigned long default_quota) {}
++
++ virtual void add_child(const char *unique_name,
++ unsigned long quota,
++ Launchpad_child *launchpad_child,
++ Genode::Allocator *alloc) {}
++
++ virtual void remove_child(const char *name, Genode::Allocator *alloc) {}
++};
++
++#endif
++
+ class QProcessPrivate : public QIODevicePrivate
+ {
+ public:
+@@ -347,7 +374,7 @@ public:
+ #endif
+
+ void startProcess();
+-#if defined(Q_OS_UNIX) && !defined(Q_OS_QNX)
++#if defined(Q_OS_UNIX) && !defined(Q_OS_QNX) && !defined(Q_OS_GENODE)
+ void execChild(const char *workingDirectory, char **path, char **argv, char **envp);
+ #elif defined(Q_OS_QNX)
+ pid_t spawnChild(const char *workingDirectory, char **argv, char **envp);
+@@ -375,6 +402,22 @@ public:
+ int serial;
+ #endif
+
++#ifdef Q_OS_GENODE
++ static QProcess_launchpad *launchpad()
++ {
++ static QProcess_launchpad _launchpad(Genode::env()->ram_session()->quota());
++ return &_launchpad;
++ }
++
++ static QHash *ram_quota_hash()
++ {
++ static QHash _ram_quota_hash;
++ return &_ram_quota_hash;
++ }
++
++ Launchpad_child *launchpad_child;
++#endif
++
+ bool waitForStarted(int msecs = 30000);
+ bool waitForReadyRead(int msecs = 30000);
+ bool waitForBytesWritten(int msecs = 30000);
+diff --git a/qtbase/src/corelib/io/qresource.cpp b/qtbase/src/corelib/io/qresource.cpp
+index 04ec81e..2211125 100644
+--- a/qtbase/src/corelib/io/qresource.cpp
++++ b/qtbase/src/corelib/io/qresource.cpp
+@@ -920,7 +920,7 @@ public:
+ }
+ };
+
+-#if defined(Q_OS_UNIX) && !defined (Q_OS_NACL) && !defined(Q_OS_INTEGRITY)
++#if defined(Q_OS_UNIX) && !defined (Q_OS_NACL) && !defined(Q_OS_INTEGRITY) && !defined(Q_OS_GENODE)
+ #define QT_USE_MMAP
+ #endif
+
+diff --git a/qtbase/src/corelib/kernel/qcoreapplication.cpp b/qtbase/src/corelib/kernel/qcoreapplication.cpp
+index 100e014..00263a0 100644
+--- a/qtbase/src/corelib/kernel/qcoreapplication.cpp
++++ b/qtbase/src/corelib/kernel/qcoreapplication.cpp
+@@ -525,7 +525,7 @@ void QCoreApplicationPrivate::initLocale()
+ if (qt_locale_initialized)
+ return;
+ qt_locale_initialized = true;
+-#ifdef Q_OS_UNIX
++#if defined(Q_OS_UNIX) && !defined(Q_OS_GENODE)
+ setlocale(LC_ALL, "");
+ #endif
+ }
+diff --git a/qtbase/src/corelib/kernel/qeventdispatcher_unix.cpp b/qtbase/src/corelib/kernel/qeventdispatcher_unix.cpp
+index 69363bc..0a7aa7d 100644
+--- a/qtbase/src/corelib/kernel/qeventdispatcher_unix.cpp
++++ b/qtbase/src/corelib/kernel/qeventdispatcher_unix.cpp
+@@ -74,6 +74,11 @@
+ # include
+ #endif
+
++#ifdef Q_OS_GENODE
++#include
++#define perror PERR
++#endif /* Q_OS_GENODE */
++
+ QT_BEGIN_NAMESPACE
+
+ #if defined(Q_OS_INTEGRITY) || defined(Q_OS_VXWORKS)
+@@ -287,6 +292,9 @@ int QEventDispatcherUNIXPrivate::processThreadWakeUp(int nsel)
+ char c[16];
+ ::read(thread_pipe[0], c, sizeof(c));
+ ::ioctl(thread_pipe[0], FIOFLUSH, 0);
++#elif defined(Q_OS_GENODE)
++ char c[16];
++ ::read(thread_pipe[0], c, sizeof(c)); // FIXME: the while loop only works in non-blocking mode
+ #else
+ # ifndef QT_NO_EVENTFD
+ if (thread_pipe[1] == -1) {
+@@ -325,6 +333,12 @@ QEventDispatcherUNIX::~QEventDispatcherUNIX()
+ int QEventDispatcherUNIX::select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds,
+ timespec *timeout)
+ {
++#ifdef Q_OS_GENODE
++ /* if < 10ms round up to the 10ms minimum granularity supported by
++ * the timed semaphore */
++ if (timeout && (timeout->tv_sec == 0) && (timeout->tv_nsec > 0) && (timeout->tv_nsec < 10*1000*1000))
++ timeout->tv_nsec = 10*1000*1000;
++#endif /* Q_OS_GENODE */
+ return qt_safe_select(nfds, readfds, writefds, exceptfds, timeout);
+ }
+
+diff --git a/qtbase/src/corelib/kernel/qtranslator.cpp b/qtbase/src/corelib/kernel/qtranslator.cpp
+index 9243d09..d953b20 100644
+--- a/qtbase/src/corelib/kernel/qtranslator.cpp
++++ b/qtbase/src/corelib/kernel/qtranslator.cpp
+@@ -60,7 +60,7 @@
+ #include "qendian.h"
+ #include "qresource.h"
+
+-#if defined(Q_OS_UNIX) && !defined(Q_OS_INTEGRITY)
++#if defined(Q_OS_UNIX) && !defined(Q_OS_INTEGRITY) && !defined(Q_OS_GENODE)
+ #define QT_USE_MMAP
+ #include "private/qcore_unix_p.h"
+ #endif
+diff --git a/qtbase/src/corelib/thread/qmutex.cpp b/qtbase/src/corelib/thread/qmutex.cpp
+index 1ed4a77..d1c10d1 100644
+--- a/qtbase/src/corelib/thread/qmutex.cpp
++++ b/qtbase/src/corelib/thread/qmutex.cpp
+@@ -649,6 +649,8 @@ QT_END_NAMESPACE
+ # include "qmutex_mac.cpp"
+ #elif defined(Q_OS_WIN)
+ # include "qmutex_win.cpp"
++#elif defined(Q_OS_GENODE)
++# include "qmutex_genode.cpp"
+ #else
+ # include "qmutex_unix.cpp"
+ #endif
+diff --git a/qtbase/src/corelib/thread/qmutex_p.h b/qtbase/src/corelib/thread/qmutex_p.h
+index bec2d93..74c0df4 100644
+--- a/qtbase/src/corelib/thread/qmutex_p.h
++++ b/qtbase/src/corelib/thread/qmutex_p.h
+@@ -65,6 +65,12 @@
+ # include
+ #endif
+
++#include
++
++#ifdef Q_OS_GENODE
++#include
++#endif
++
+ #if defined(Q_OS_LINUX) && !defined(QT_LINUXBASE)
+ // use Linux mutexes everywhere except for LSB builds
+ # define QT_LINUX_FUTEX
+@@ -128,6 +134,8 @@ public:
+ //platform specific stuff
+ #if defined(Q_OS_MAC)
+ semaphore_t mach_semaphore;
++#elif defined(Q_OS_GENODE)
++ Genode::Timed_semaphore sem;
+ #elif defined(Q_OS_UNIX)
+ bool wakeup;
+ pthread_mutex_t mutex;
+diff --git a/qtbase/src/corelib/thread/qthread.cpp b/qtbase/src/corelib/thread/qthread.cpp
+index 4d5bee3..622056e 100644
+--- a/qtbase/src/corelib/thread/qthread.cpp
++++ b/qtbase/src/corelib/thread/qthread.cpp
+@@ -150,7 +150,10 @@ QThreadPrivate::QThreadPrivate(QThreadData *d)
+ stackSize(0), priority(QThread::InheritPriority), data(d)
+ {
+ #if defined (Q_OS_UNIX)
+- thread_id = 0;
++ thread_id = 0;
++#ifdef Q_OS_GENODE
++ genode_thread = 0;
++#endif /* Q_OS_GENODE */
+ #elif defined (Q_OS_WIN)
+ handle = 0;
+ id = 0;
+diff --git a/qtbase/src/corelib/thread/qthread_p.h b/qtbase/src/corelib/thread/qthread_p.h
+index 9d773b3..9beb7e6 100644
+--- a/qtbase/src/corelib/thread/qthread_p.h
++++ b/qtbase/src/corelib/thread/qthread_p.h
+@@ -54,6 +54,10 @@
+ //
+ //
+
++#ifdef Q_OS_GENODE
++#include
++#endif
++
+ #include "qplatformdefs.h"
+ #include "QtCore/qthread.h"
+ #include "QtCore/qmutex.h"
+@@ -160,12 +164,63 @@ public:
+ static QThread *threadForId(int id);
+
+ #ifdef Q_OS_UNIX
++#ifdef Q_OS_GENODE
++
++ class Genode_thread : public Genode::Thread_qt
++ {
++ private:
++
++ /*
++ * The '_finished_lock' is necessary because 'QThreadPrivate::mutex'
++ * uses a 'Genode::Timed_semaphore' internally and it isn't safe
++ * to delete a Genode thread that just called 'Semaphore::up()',
++ * because the 'Semaphore::_meta_lock' could still be locked.
++ */
++ Genode::Lock _finished_lock;
++ QThread *_qthread;
++
++ public:
++
++ Genode_thread(QThread *qthread)
++ : _finished_lock(Genode::Lock::LOCKED),
++ _qthread(qthread) { }
++
++ virtual void entry()
++ {
++ QThreadPrivate::start(_qthread);
++ QThreadPrivate::finish(_qthread);
++ _finished_lock.unlock();
++ }
++
++ void join()
++ {
++ _finished_lock.lock();
++ }
++ };
++
++ Genode_thread *genode_thread;
++
++ struct tls_struct {
++ QThreadData *data;
++ bool termination_enabled;
++ };
++
++ static QHash tls;
++
++ Qt::HANDLE thread_id;
++ QWaitCondition thread_done;
++
++ static void *start(void *arg);
++ static void finish(void *arg);
++
++#else // Q_OS_UNIX && !Q_OS_GENODE
+ pthread_t thread_id;
+ QWaitCondition thread_done;
+
+ static void *start(void *arg);
+ static void finish(void *);
+
++#endif // Q_OS_GENODE
+ #endif // Q_OS_UNIX
+
+ #ifdef Q_OS_WIN
+diff --git a/qtbase/src/corelib/tools/qdatetime.cpp b/qtbase/src/corelib/tools/qdatetime.cpp
+index d8e3a78..6a579e9 100644
+--- a/qtbase/src/corelib/tools/qdatetime.cpp
++++ b/qtbase/src/corelib/tools/qdatetime.cpp
+@@ -3072,6 +3072,9 @@ QTime QTime::currentTime()
+ // posix compliant system
+ struct timeval tv;
+ gettimeofday(&tv, 0);
++#ifdef Q_OS_GENODE
++ ct.mds = (tv.tv_sec * 1000) + (tv.tv_usec / 1000);
++#else
+ time_t ltime = tv.tv_sec;
+ struct tm *t = 0;
+
+@@ -3086,6 +3089,7 @@ QTime QTime::currentTime()
+ Q_CHECK_PTR(t);
+
+ ct.mds = msecsFromDecomposed(t->tm_hour, t->tm_min, t->tm_sec, tv.tv_usec / 1000);
++#endif /* Q_OS_GENODE */
+ return ct;
+ }
+
+@@ -3970,6 +3974,10 @@ static QDate adjustDate(QDate date)
+
+ static QDateTimePrivate::Spec utcToLocal(QDate &date, QTime &time)
+ {
++#ifdef Q_OS_GENODE
++ /* no timezones in Genode */
++ return QDateTimePrivate::LocalUnknown;
++#endif
+ QDate fakeDate = adjustDate(date);
+
+ // won't overflow because of fakeDate
+@@ -4023,6 +4031,10 @@ static QDateTimePrivate::Spec utcToLocal(QDate &date, QTime &time)
+
+ static void localToUtc(QDate &date, QTime &time, int isdst)
+ {
++#ifdef Q_OS_GENODE
++ /* no timezones in Genode */
++ return;
++#endif
+ if (!date.isValid())
+ return;
+
+diff --git a/qtbase/src/gui/image/qxpmhandler.cpp b/qtbase/src/gui/image/qxpmhandler.cpp
+index a7936f9..eee3a87 100644
+--- a/qtbase/src/gui/image/qxpmhandler.cpp
++++ b/qtbase/src/gui/image/qxpmhandler.cpp
+@@ -848,8 +848,16 @@ static bool read_xpm_header(
+ #if defined(_MSC_VER) && _MSC_VER >= 1400 && !defined(Q_OS_WINCE)
+ if (sscanf_s(buf, "%d %d %d %d", w, h, ncols, cpp) < 4)
+ #else
++#ifdef Q_OS_GENODE
++ *w = QString(buf).section(" ", 0, 0, QString::SectionSkipEmpty).toInt();
++ *h = QString(buf).section(" ", 1, 1, QString::SectionSkipEmpty).toInt();
++ *ncols = QString(buf).section(" ", 2, 2, QString::SectionSkipEmpty).toInt();
++ *cpp = QString(buf).section(" ", 3, 3, QString::SectionSkipEmpty).toInt();
++ if (*w <= 0 || *h <= 0 || *ncols <= 0 || *cpp <= 0)
++#else
+ if (sscanf(buf, "%d %d %d %d", w, h, ncols, cpp) < 4)
+ #endif
++#endif
+ return false; // < 4 numbers parsed
+
+ return true;
+diff --git a/qtbase/src/network/access/qnetworkaccessfilebackend.cpp b/qtbase/src/network/access/qnetworkaccessfilebackend.cpp
+index 13428cc..0713528 100644
+--- a/qtbase/src/network/access/qnetworkaccessfilebackend.cpp
++++ b/qtbase/src/network/access/qnetworkaccessfilebackend.cpp
+@@ -115,6 +115,7 @@ void QNetworkAccessFileBackend::open()
+ url.setPath(QLatin1String("/"));
+ setUrl(url);
+
++#ifndef Q_OS_GENODE
+ QString fileName = url.toLocalFile();
+ if (fileName.isEmpty()) {
+ if (url.scheme() == QLatin1String("qrc")) {
+@@ -128,6 +129,10 @@ void QNetworkAccessFileBackend::open()
+ fileName = url.toString(QUrl::RemoveAuthority | QUrl::RemoveFragment | QUrl::RemoveQuery);
+ }
+ }
++#else
++ QString fileName = QLatin1String(":") + url.path();
++#endif
++
+ file.setFileName(fileName);
+
+ if (operation() == QNetworkAccessManager::GetOperation) {
+diff --git a/qtbase/src/network/kernel/qhostinfo.cpp b/qtbase/src/network/kernel/qhostinfo.cpp
+index d25372e..131100e 100644
+--- a/qtbase/src/network/kernel/qhostinfo.cpp
++++ b/qtbase/src/network/kernel/qhostinfo.cpp
+@@ -508,7 +508,12 @@ QHostInfoLookupManager::QHostInfoLookupManager() : mutex(QMutex::Recursive), was
+ {
+ moveToThread(QCoreApplicationPrivate::mainThread());
+ connect(QCoreApplication::instance(), SIGNAL(destroyed()), SLOT(waitForThreadPoolDone()), Qt::DirectConnection);
++#ifdef Q_OS_GENODE
++ /* 'getaddrinfo()' is currently not thread-safe on Genode */
++ threadPool.setMaxThreadCount(1);
++#else
+ threadPool.setMaxThreadCount(5); // do 5 DNS lookups in parallel
++#endif
+ }
+
+ QHostInfoLookupManager::~QHostInfoLookupManager()
+diff --git a/qtbase/src/network/kernel/qhostinfo_unix.cpp b/qtbase/src/network/kernel/qhostinfo_unix.cpp
+index 04daf2e..001354c 100644
+--- a/qtbase/src/network/kernel/qhostinfo_unix.cpp
++++ b/qtbase/src/network/kernel/qhostinfo_unix.cpp
+@@ -144,6 +144,11 @@ QHostInfo QHostInfoAgent::fromName(const QString &hostName)
+ QHostAddress address;
+ if (address.setAddress(hostName)) {
+ // Reverse lookup
++#ifdef Q_OS_GENODE
++ results.setError(QHostInfo::HostNotFound);
++ results.setErrorString(tr("Reverse lookup is not implemented because of missing support in lwip."));
++ return results;
++#else
+ // Reverse lookups using getnameinfo are broken on darwin, use gethostbyaddr instead.
+ #if !defined (QT_NO_GETADDRINFO) && !defined (Q_OS_DARWIN)
+ sockaddr_in sa4;
+@@ -174,7 +179,7 @@ QHostInfo QHostInfoAgent::fromName(const QString &hostName)
+ if (ent)
+ results.setHostName(QString::fromLatin1(ent->h_name));
+ #endif
+-
++#endif
+ if (results.hostName().isEmpty())
+ results.setHostName(address.toString());
+ results.setAddresses(QList() << address);
+diff --git a/qtbase/src/widgets/dialogs/qfiledialog.cpp b/qtbase/src/widgets/dialogs/qfiledialog.cpp
+index c427523..ed92116 100644
+--- a/qtbase/src/widgets/dialogs/qfiledialog.cpp
++++ b/qtbase/src/widgets/dialogs/qfiledialog.cpp
+@@ -943,7 +943,7 @@ Q_AUTOTEST_EXPORT QString qt_tildeExpansion(const QString &path, bool *expanded
+ userName.remove(0, 1);
+ #if defined(Q_OS_VXWORKS)
+ const QString homePath = QDir::homePath();
+-#elif defined(_POSIX_THREAD_SAFE_FUNCTIONS) && !defined(Q_OS_OPENBSD)
++#elif defined(_POSIX_THREAD_SAFE_FUNCTIONS) && !defined(Q_OS_OPENBSD) && !defined(Q_OS_GENODE)
+ passwd pw;
+ passwd *tmpPw;
+ char buf[200];
+diff --git a/qtbase/src/widgets/styles/qstylefactory.cpp b/qtbase/src/widgets/styles/qstylefactory.cpp
+index 2b81acf..eb3510a 100644
+--- a/qtbase/src/widgets/styles/qstylefactory.cpp
++++ b/qtbase/src/widgets/styles/qstylefactory.cpp
+@@ -192,6 +192,13 @@ QStringList QStyleFactory::keys()
+ for (PluginKeyMap::const_iterator it = keyMap.constBegin(); it != cend; ++it)
+ list.append(it.value());
+ #endif
++#ifdef Q_OS_GENODE
++/* on Genode, the first style in the list gets selected by default and we want the "Fusion" style */
++#ifndef QT_NO_STYLE_FUSION
++ if (!list.contains(QLatin1String("Fusion")))
++ list << QLatin1String("Fusion");
++#endif
++#endif
+ #ifndef QT_NO_STYLE_WINDOWS
+ if (!list.contains(QLatin1String("Windows")))
+ list << QLatin1String("Windows");
diff --git a/libports/src/lib/qt5/patches/qt5_qtbase_lwip_connect_semantics_adaption.patch b/libports/src/lib/qt5/patches/qt5_qtbase_lwip_connect_semantics_adaption.patch
new file mode 100644
index 0000000000..d2f7d24dc9
--- /dev/null
+++ b/libports/src/lib/qt5/patches/qt5_qtbase_lwip_connect_semantics_adaption.patch
@@ -0,0 +1,36 @@
+qt5_qtbase_lwip_connect_semantics_adaption.patch
+
+From: Christian Prochaska
+
+
+---
+ .../network/socket/qnativesocketengine_unix.cpp | 16 ++++++++++++++++
+ 1 file changed, 16 insertions(+)
+
+diff --git a/qtbase/src/network/socket/qnativesocketengine_unix.cpp b/qtbase/src/network/socket/qnativesocketengine_unix.cpp
+index 4c94c4d..03c98fa 100644
+--- a/qtbase/src/network/socket/qnativesocketengine_unix.cpp
++++ b/qtbase/src/network/socket/qnativesocketengine_unix.cpp
+@@ -408,6 +408,22 @@ bool QNativeSocketEnginePrivate::nativeConnect(const QHostAddress &addr, quint16
+ case EISCONN:
+ socketState = QAbstractSocket::ConnectedState;
+ break;
++#ifdef Q_OS_GENODE
++ /* to have Arora get an error indication, socketState needs to change
++ * to "ConnectingState" before changing to "UnconnectedState" again
++ */
++ case ECONNABORTED:
++ if (socketState == QAbstractSocket::UnconnectedState) {
++ /* interpret ECONNABORTED as EINPROGRESS */
++ setError(QAbstractSocket::UnfinishedSocketOperationError, InvalidSocketErrorString);
++ socketState = QAbstractSocket::ConnectingState;
++ } else {
++ /* interpret ECONNABORTED as EHOSTUNREACH */
++ setError(QAbstractSocket::NetworkError, HostUnreachableErrorString);
++ socketState = QAbstractSocket::UnconnectedState;
++ }
++ break;
++#endif
+ case ECONNREFUSED:
+ case EINVAL:
+ setError(QAbstractSocket::ConnectionRefusedError, ConnectionRefusedErrorString);
diff --git a/libports/src/lib/qt5/patches/qt5_qtbase_virtual_deletelater.patch b/libports/src/lib/qt5/patches/qt5_qtbase_virtual_deletelater.patch
new file mode 100644
index 0000000000..272052801c
--- /dev/null
+++ b/libports/src/lib/qt5/patches/qt5_qtbase_virtual_deletelater.patch
@@ -0,0 +1,22 @@
+qt5_qtbase_virtual_deletelater.patch
+
+From: Christian Prochaska
+
+
+---
+ qtbase/src/corelib/kernel/qobject.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/qtbase/src/corelib/kernel/qobject.h b/qtbase/src/corelib/kernel/qobject.h
+index aaa09fa..5e07216 100644
+--- a/qtbase/src/corelib/kernel/qobject.h
++++ b/qtbase/src/corelib/kernel/qobject.h
+@@ -389,7 +389,7 @@ public:
+ { return const_cast(this)->qt_metacast(classname) != 0; }
+
+ public Q_SLOTS:
+- void deleteLater();
++ virtual void deleteLater();
+
+ protected:
+ QObject *sender() const;
diff --git a/libports/src/lib/qt5/patches/qt5_qtnetwork.patch b/libports/src/lib/qt5/patches/qt5_qtnetwork.patch
new file mode 100644
index 0000000000..e7a84622e7
--- /dev/null
+++ b/libports/src/lib/qt5/patches/qt5_qtnetwork.patch
@@ -0,0 +1,68 @@
+qt5_qtnetwork.patch
+
+From: Christian Prochaska
+
+
+---
+ qtbase/src/network/access/qhttpnetworkreply.cpp | 8 ++++++++
+ qtbase/src/network/ssl/qsslconfiguration_p.h | 9 +++++++++
+ qtbase/src/network/ssl/qsslsocket_openssl.cpp | 3 +++
+ 3 files changed, 20 insertions(+)
+
+diff --git a/qtbase/src/network/access/qhttpnetworkreply.cpp b/qtbase/src/network/access/qhttpnetworkreply.cpp
+index eb8a886..1150088 100644
+--- a/qtbase/src/network/access/qhttpnetworkreply.cpp
++++ b/qtbase/src/network/access/qhttpnetworkreply.cpp
+@@ -238,8 +238,16 @@ void QHttpNetworkReply::setReadBufferSize(qint64 size)
+
+ bool QHttpNetworkReply::supportsUserProvidedDownloadBuffer()
+ {
++#ifdef Q_OS_GENODE
++ /*
++ * Without this change Arora shows garbage when loading, for example,
++ * www.genode.org
++ */
++ return false;
++#else
+ Q_D(QHttpNetworkReply);
+ return (!d->isChunked() && !d->autoDecompress && d->bodyLength > 0 && d->statusCode == 200);
++#endif
+ }
+
+ void QHttpNetworkReply::setUserProvidedDownloadBuffer(char* b)
+diff --git a/qtbase/src/network/ssl/qsslconfiguration_p.h b/qtbase/src/network/ssl/qsslconfiguration_p.h
+index 54b7264..5702e01 100644
+--- a/qtbase/src/network/ssl/qsslconfiguration_p.h
++++ b/qtbase/src/network/ssl/qsslconfiguration_p.h
+@@ -81,7 +81,16 @@ class QSslConfigurationPrivate: public QSharedData
+ public:
+ QSslConfigurationPrivate()
+ : protocol(QSsl::SecureProtocols),
++#ifdef Q_OS_GENODE
++ /*
++ * With enabled peer verification, currently often a 'handshake error'
++ * occurs. This patch disables the peer verification until a fix for
++ * the handshake problem has been found.
++ */
++ peerVerifyMode(QSslSocket::VerifyNone),
++#else
+ peerVerifyMode(QSslSocket::AutoVerifyPeer),
++#endif
+ peerVerifyDepth(0),
+ allowRootCertOnDemandLoading(true),
+ peerSessionShared(false),
+diff --git a/qtbase/src/network/ssl/qsslsocket_openssl.cpp b/qtbase/src/network/ssl/qsslsocket_openssl.cpp
+index 675bd7d..647f3fd 100644
+--- a/qtbase/src/network/ssl/qsslsocket_openssl.cpp
++++ b/qtbase/src/network/ssl/qsslsocket_openssl.cpp
+@@ -445,7 +445,10 @@ bool QSslSocketPrivate::ensureLibraryLoaded()
+ if (q_SSL_library_init() != 1)
+ return false;
+ q_SSL_load_error_strings();
++#ifndef Q_OS_GENODE
++ /* FIXME: currently, on Genode this function causes 'exit(1)' */
+ q_OpenSSL_add_all_algorithms();
++#endif
+
+ // Initialize OpenSSL's random seed.
+ if (!q_RAND_status()) {
diff --git a/libports/src/lib/qt5/patches/qt5_qtscript.patch b/libports/src/lib/qt5/patches/qt5_qtscript.patch
new file mode 100644
index 0000000000..efce5bacb8
--- /dev/null
+++ b/libports/src/lib/qt5/patches/qt5_qtscript.patch
@@ -0,0 +1,149 @@
+qt5_qtscript.patch
+
+From: Christian Prochaska
+
+
+---
+ qtbase/src/corelib/global/qglobal.h | 6 +++++-
+ qtbase/src/corelib/kernel/qvariant_p.h | 3 +++
+ .../JavaScriptCore/runtime/Collector.cpp | 21 ++++++++++++++++++++
+ .../javascriptcore/JavaScriptCore/wtf/Assertions.h | 11 ++++++++++
+ .../javascriptcore/JavaScriptCore/wtf/Platform.h | 5 +++++
+ 5 files changed, 45 insertions(+), 1 deletion(-)
+
+diff --git a/qtbase/src/corelib/global/qglobal.h b/qtbase/src/corelib/global/qglobal.h
+index 79e32fe..324c168 100644
+--- a/qtbase/src/corelib/global/qglobal.h
++++ b/qtbase/src/corelib/global/qglobal.h
+@@ -763,13 +763,17 @@ inline void qSwap(T &value1, T &value2)
+ swap(value1, value2);
+ }
+
++#ifndef Q_OS_GENODE
+ #if QT_DEPRECATED_SINCE(5, 0)
++#endif
++#else
++/* QtScript classic still needs these functions */
+ Q_CORE_EXPORT QT_DEPRECATED void *qMalloc(size_t size) Q_ALLOC_SIZE(1);
+ Q_CORE_EXPORT QT_DEPRECATED void qFree(void *ptr);
+ Q_CORE_EXPORT QT_DEPRECATED void *qRealloc(void *ptr, size_t size) Q_ALLOC_SIZE(2);
+ Q_CORE_EXPORT QT_DEPRECATED void *qMemCopy(void *dest, const void *src, size_t n);
+ Q_CORE_EXPORT QT_DEPRECATED void *qMemSet(void *dest, int c, size_t n);
+-#endif
++#endif /* Q_OS_GENODE */
+ Q_CORE_EXPORT void *qMallocAligned(size_t size, size_t alignment) Q_ALLOC_SIZE(1);
+ Q_CORE_EXPORT void *qReallocAligned(void *ptr, size_t size, size_t oldsize, size_t alignment) Q_ALLOC_SIZE(2);
+ Q_CORE_EXPORT void qFreeAligned(void *ptr);
+diff --git a/qtbase/src/corelib/kernel/qvariant_p.h b/qtbase/src/corelib/kernel/qvariant_p.h
+index 4ec049e..e5e8dc4 100644
+--- a/qtbase/src/corelib/kernel/qvariant_p.h
++++ b/qtbase/src/corelib/kernel/qvariant_p.h
+@@ -401,7 +401,10 @@ public:
+
+ void delegate(const void*)
+ {
++#ifndef Q_OS_GENODE
++ /* this warning appears often when using the QtScript classic lib (tetrix), not sure if it is serious */
+ qWarning("Trying to create a QVariant instance of QMetaType::Void type, an invalid QVariant will be constructed instead");
++#endif
+ m_x->type = QMetaType::UnknownType;
+ m_x->is_shared = false;
+ m_x->is_null = !m_copy;
+diff --git a/qtscript/src/3rdparty/javascriptcore/JavaScriptCore/runtime/Collector.cpp b/qtscript/src/3rdparty/javascriptcore/JavaScriptCore/runtime/Collector.cpp
+index d5adbd7..d9dd773 100644
+--- a/qtscript/src/3rdparty/javascriptcore/JavaScriptCore/runtime/Collector.cpp
++++ b/qtscript/src/3rdparty/javascriptcore/JavaScriptCore/runtime/Collector.cpp
+@@ -64,6 +64,13 @@
+
+ #include
+
++#elif OS(GENODE)
++
++#include
++#include
++#include
++#include
++
+ #elif OS(UNIX)
+
+ #include
+@@ -209,6 +216,15 @@ NEVER_INLINE CollectorBlock* Heap::allocateBlock()
+ void* address = _aligned_malloc(BLOCK_SIZE, BLOCK_SIZE);
+ #endif
+ memset(address, 0, BLOCK_SIZE);
++#elif OS(GENODE)
++ void* real_address = malloc(sizeof(Genode::addr_t) + BLOCK_SIZE + BLOCK_SIZE);
++ Genode::addr_t address = reinterpret_cast(real_address);
++ address += sizeof(Genode::addr_t);
++ address = Genode::align_addr(address, Genode::log2(BLOCK_SIZE));
++ address -= sizeof(Genode::addr_t);
++ *(Genode::addr_t*)address = (Genode::addr_t)real_address;
++ address += sizeof(Genode::addr_t);
++ memset(reinterpret_cast(address), 0, BLOCK_SIZE);
+ #elif HAVE(POSIX_MEMALIGN)
+ void* address;
+ posix_memalign(&address, BLOCK_SIZE, BLOCK_SIZE);
+@@ -299,6 +315,9 @@ NEVER_INLINE void Heap::freeBlockPtr(CollectorBlock* block)
+ #else
+ _aligned_free(block);
+ #endif
++#elif OS(GENODE)
++ void *real_address = (void*)*(Genode::addr_t*)((Genode::addr_t)block - sizeof(Genode::addr_t));
++ free(real_address);
+ #elif HAVE(POSIX_MEMALIGN)
+ free(block);
+ #else
+@@ -649,6 +668,8 @@ static inline void* currentThreadStackBase()
+ thread_info threadInfo;
+ get_thread_info(find_thread(NULL), &threadInfo);
+ return threadInfo.stack_end;
++#elif OS(GENODE)
++ return Genode::Thread_qt::myself()->stack_top();
+ #elif OS(UNIX)
+ AtomicallyInitializedStatic(Mutex&, mutex = *new Mutex);
+ MutexLocker locker(mutex);
+diff --git a/qtscript/src/3rdparty/javascriptcore/JavaScriptCore/wtf/Assertions.h b/qtscript/src/3rdparty/javascriptcore/JavaScriptCore/wtf/Assertions.h
+index 352a74b..6a1aea3 100644
+--- a/qtscript/src/3rdparty/javascriptcore/JavaScriptCore/wtf/Assertions.h
++++ b/qtscript/src/3rdparty/javascriptcore/JavaScriptCore/wtf/Assertions.h
+@@ -44,6 +44,10 @@
+
+ #include "Platform.h"
+
++#if OS(GENODE)
++#include
++#endif
++
+ #if COMPILER(MSVC)
+ #include
+ #else
+@@ -156,6 +160,13 @@ void WTFLogVerbose(const char* file, int line, const char* function, WTFLogChann
+ __DEBUGGER(); \
+ User::Panic(_L("Webkit CRASH"),0); \
+ } while(false)
++#elif OS(GENODE)
++#define CRASH() ( \
++ PERR("QtScript CRASH in '%s'", WTF_PRETTY_FUNCTION), \
++ PERR(" in %s:%d", __FILE__, __LINE__), \
++ *(int *)(uintptr_t)0xbbadbeef = 0, \
++ ((void(*)())0)() /* More reliable, but doesn't say BBADBEEF */ \
++)
+ #else
+ #define CRASH() do { \
+ *(int *)(uintptr_t)0xbbadbeef = 0; \
+diff --git a/qtscript/src/3rdparty/javascriptcore/JavaScriptCore/wtf/Platform.h b/qtscript/src/3rdparty/javascriptcore/JavaScriptCore/wtf/Platform.h
+index d483806..e956b49 100644
+--- a/qtscript/src/3rdparty/javascriptcore/JavaScriptCore/wtf/Platform.h
++++ b/qtscript/src/3rdparty/javascriptcore/JavaScriptCore/wtf/Platform.h
+@@ -330,6 +330,11 @@
+ /* ==== OS() - underlying operating system; only to be used for mandated low-level services like
+ virtual memory, not to choose a GUI toolkit ==== */
+
++/* OS(GENODE) - Genode */
++#ifdef __GENODE__
++#define WTF_OS_GENODE 1
++#endif
++
+ /* OS(ANDROID) - Android */
+ #ifdef ANDROID
+ #define WTF_OS_ANDROID 1
diff --git a/libports/src/lib/qt5/patches/qt5_qtwebkit.patch b/libports/src/lib/qt5/patches/qt5_qtwebkit.patch
new file mode 100644
index 0000000000..f28aa237f4
--- /dev/null
+++ b/libports/src/lib/qt5/patches/qt5_qtwebkit.patch
@@ -0,0 +1,303 @@
+qt5_qtwebkit.patch
+
+From: Christian Prochaska
+
+
+---
+ .../Source/JavaScriptCore/dfg/DFGOperations.cpp | 1 +
+ qtwebkit/Source/WTF/wtf/Assertions.h | 11 ++++++++++
+ qtwebkit/Source/WTF/wtf/FastMalloc.cpp | 2 +-
+ qtwebkit/Source/WTF/wtf/InlineASM.h | 4 ++--
+ qtwebkit/Source/WTF/wtf/OSAllocatorPosix.cpp | 13 ++++++++++++
+ qtwebkit/Source/WTF/wtf/OSRandomSource.cpp | 8 ++++++++
+ qtwebkit/Source/WTF/wtf/Platform.h | 19 +++++++++++++++---
+ qtwebkit/Source/WTF/wtf/StackBounds.cpp | 12 +++++++++++
+ qtwebkit/Source/WTF/wtf/TCSystemAlloc.cpp | 21 ++++++++++++++++++++
+ .../platform/graphics/qt/MediaPlayerPrivateQt.cpp | 3 +++
+ 10 files changed, 88 insertions(+), 6 deletions(-)
+
+diff --git a/qtwebkit/Source/JavaScriptCore/dfg/DFGOperations.cpp b/qtwebkit/Source/JavaScriptCore/dfg/DFGOperations.cpp
+index bb9ccc3..077cbed 100644
+--- a/qtwebkit/Source/JavaScriptCore/dfg/DFGOperations.cpp
++++ b/qtwebkit/Source/JavaScriptCore/dfg/DFGOperations.cpp
+@@ -1624,6 +1624,7 @@ namespace JSC {
+
+ #if COMPILER(GCC) && CPU(X86_64)
+ asm (
++".text" "\n" \
+ ".globl " SYMBOL_STRING(getHostCallReturnValue) "\n"
+ HIDE_SYMBOL(getHostCallReturnValue) "\n"
+ SYMBOL_STRING(getHostCallReturnValue) ":" "\n"
+diff --git a/qtwebkit/Source/WTF/wtf/Assertions.h b/qtwebkit/Source/WTF/wtf/Assertions.h
+index 7e079ab..cac10fc 100644
+--- a/qtwebkit/Source/WTF/wtf/Assertions.h
++++ b/qtwebkit/Source/WTF/wtf/Assertions.h
+@@ -50,6 +50,10 @@
+ #include
+ #endif
+
++#if OS(GENODE)
++#include
++#endif
++
+ #ifdef NDEBUG
+ /* Disable ASSERT* macros in release mode. */
+ #define ASSERTIONS_DISABLED_DEFAULT 1
+@@ -173,6 +177,13 @@ WTF_EXPORT_PRIVATE void WTFInstallReportBacktraceOnCrashHook();
+ WTFInvokeCrashHook(), \
+ (*(int *)(uintptr_t)0xbbadbeef = 0), \
+ __builtin_trap())
++#elif OS(GENODE)
++#define CRASH() ( \
++ PERR("WebKit CRASH in '%s'", WTF_PRETTY_FUNCTION), \
++ PERR(" in %s:%d", __FILE__, __LINE__), \
++ *(int *)(uintptr_t)0xbbadbeef = 0, \
++ ((void(*)())0)() /* More reliable, but doesn't say BBADBEEF */ \
++)
+ #else
+ #define CRASH() \
+ (WTFReportBacktrace(), \
+diff --git a/qtwebkit/Source/WTF/wtf/FastMalloc.cpp b/qtwebkit/Source/WTF/wtf/FastMalloc.cpp
+index f2e34c7..f91c2fc 100644
+--- a/qtwebkit/Source/WTF/wtf/FastMalloc.cpp
++++ b/qtwebkit/Source/WTF/wtf/FastMalloc.cpp
+@@ -101,7 +101,7 @@
+ #endif
+
+ // Use a background thread to periodically scavenge memory to release back to the system
+-#if PLATFORM(IOS)
++#if PLATFORM(IOS) || OS(GENODE)
+ #define USE_BACKGROUND_THREAD_TO_SCAVENGE_MEMORY 0
+ #else
+ #define USE_BACKGROUND_THREAD_TO_SCAVENGE_MEMORY 1
+diff --git a/qtwebkit/Source/WTF/wtf/InlineASM.h b/qtwebkit/Source/WTF/wtf/InlineASM.h
+index 0a2fe78..d1fdd01 100644
+--- a/qtwebkit/Source/WTF/wtf/InlineASM.h
++++ b/qtwebkit/Source/WTF/wtf/InlineASM.h
+@@ -62,12 +62,12 @@
+ #elif OS(AIX)
+ // IBM's own file format
+ #define HIDE_SYMBOL(name) ".lglobl " #name
+-#elif OS(LINUX) \
++#elif (OS(LINUX) \
+ || OS(FREEBSD) \
+ || OS(OPENBSD) \
+ || OS(SOLARIS) \
+ || (OS(HPUX) && CPU(IA64)) \
+- || OS(NETBSD)
++ || OS(NETBSD)) \
+ // ELF platform
+ #define HIDE_SYMBOL(name) ".hidden " #name
+ #else
+diff --git a/qtwebkit/Source/WTF/wtf/OSAllocatorPosix.cpp b/qtwebkit/Source/WTF/wtf/OSAllocatorPosix.cpp
+index a2f6a79..be8fff9 100644
+--- a/qtwebkit/Source/WTF/wtf/OSAllocatorPosix.cpp
++++ b/qtwebkit/Source/WTF/wtf/OSAllocatorPosix.cpp
+@@ -120,6 +120,7 @@ void* OSAllocator::reserveAndCommit(size_t bytes, Usage usage, bool writable, bo
+ #endif
+ CRASH();
+ }
++#if !OS(GENODE)
+ if (result && includesGuardPages) {
+ // We use mmap to remap the guardpages rather than using mprotect as
+ // mprotect results in multiple references to the code region. This
+@@ -128,6 +129,7 @@ void* OSAllocator::reserveAndCommit(size_t bytes, Usage usage, bool writable, bo
+ mmap(result, pageSize(), PROT_NONE, MAP_FIXED | MAP_PRIVATE | MAP_ANON, fd, 0);
+ mmap(static_cast(result) + bytes - pageSize(), pageSize(), PROT_NONE, MAP_FIXED | MAP_PRIVATE | MAP_ANON, fd, 0);
+ }
++#endif /* OS(GENODE) */
+ return result;
+ }
+
+@@ -179,9 +181,20 @@ void OSAllocator::decommit(void* address, size_t bytes)
+
+ void OSAllocator::releaseDecommitted(void* address, size_t bytes)
+ {
++#if OS(GENODE)
++ /*
++ * 'releaseDecommitted()' sometimes gets called with a start address
++ * different than the one returned by 'mmap()' to release only a part of the
++ * allocated memory. This feature is currently not supported by Genode's
++ * 'munmap()' implementation, so we don't crash on purpose if the result of
++ * 'munmap()' is -1.
++ */
++ munmap(address, bytes);
++#else
+ int result = munmap(address, bytes);
+ if (result == -1)
+ CRASH();
++#endif /* OS(GENODE) */
+ }
+
+ } // namespace WTF
+diff --git a/qtwebkit/Source/WTF/wtf/OSRandomSource.cpp b/qtwebkit/Source/WTF/wtf/OSRandomSource.cpp
+index 0c1416a..5a10b3d 100644
+--- a/qtwebkit/Source/WTF/wtf/OSRandomSource.cpp
++++ b/qtwebkit/Source/WTF/wtf/OSRandomSource.cpp
+@@ -29,6 +29,10 @@
+ #include
+ #include
+
++#if OS(GENODE)
++#include
++#endif /* OS(GENODE) */
++
+ #if OS(UNIX)
+ #include
+ #include
+@@ -44,6 +48,10 @@ namespace WTF {
+ #if USE(OS_RANDOMNESS)
+ void cryptographicallyRandomValuesFromOS(unsigned char* buffer, size_t length)
+ {
++#if OS(GENODE)
++ PWRN("cryptographicallyRandomValuesFromOS(): no strong source of randomness available");
++ return;
++#endif /* OS(GENODE) */
+ #if OS(UNIX)
+ int fd = open("/dev/urandom", O_RDONLY, 0);
+ if (fd < 0)
+diff --git a/qtwebkit/Source/WTF/wtf/Platform.h b/qtwebkit/Source/WTF/wtf/Platform.h
+index 35fa7e3..89e6205 100644
+--- a/qtwebkit/Source/WTF/wtf/Platform.h
++++ b/qtwebkit/Source/WTF/wtf/Platform.h
+@@ -426,6 +426,12 @@
+ #define WTF_OS_UNIX 1
+ #endif
+
++/* OS(GENODE) */
++#ifdef __GENODE__
++/* Note: WTF_OS_FREEBSD is defined, too */
++#define WTF_OS_GENODE 1
++#endif
++
+ /* Operating environments */
+
+ /* FIXME: these are all mixes of OS, operating environment and policy choices. */
+@@ -699,7 +705,8 @@
+
+ #if !OS(WINDOWS) && !OS(SOLARIS) \
+ && !OS(RVCT) \
+- && !OS(ANDROID)
++ && !OS(ANDROID) \
++ && !OS(GENODE)
+ #define HAVE_TM_GMTOFF 1
+ #define HAVE_TM_ZONE 1
+ #define HAVE_TIMEGM 1
+@@ -764,6 +771,11 @@
+ #define HAVE_SYS_PARAM_H 1
+ #define HAVE_SYS_TIME_H 1
+
++#elif OS(GENODE)
++
++#define HAVE_ERRNO_H 1
++#define HAVE_SYS_TIME_H 1
++
+ #else
+
+ /* FIXME: is this actually used or do other platforms generate their own config.h? */
+@@ -782,7 +794,7 @@
+ #if PLATFORM(QT)
+ /* We must not customize the global operator new and delete for the Qt port. */
+ #define ENABLE_GLOBAL_FASTMALLOC_NEW 0
+-#if !OS(UNIX)
++#if !OS(UNIX) || OS(GENODE)
+ #define USE_SYSTEM_MALLOC 1
+ #endif
+ #endif
+@@ -1005,7 +1017,8 @@
+ #define ENABLE_REGEXP_TRACING 0
+
+ /* Yet Another Regex Runtime - turned on by default for JIT enabled ports. */
+-#if !defined(ENABLE_YARR_JIT) && (ENABLE(JIT) || ENABLE(LLINT_C_LOOP)) && !PLATFORM(CHROMIUM)
++/* When enabled for Genode, the 'exec()' function returns invalid string objects */
++#if !defined(ENABLE_YARR_JIT) && (ENABLE(JIT) || ENABLE(LLINT_C_LOOP)) && !PLATFORM(CHROMIUM) && !OS(GENODE)
+ #define ENABLE_YARR_JIT 1
+
+ /* Setting this flag compares JIT results with interpreter results. */
+diff --git a/qtwebkit/Source/WTF/wtf/StackBounds.cpp b/qtwebkit/Source/WTF/wtf/StackBounds.cpp
+index a272ce3..a2e7484 100644
+--- a/qtwebkit/Source/WTF/wtf/StackBounds.cpp
++++ b/qtwebkit/Source/WTF/wtf/StackBounds.cpp
+@@ -44,6 +44,10 @@
+ #include
+ #include
+
++#elif OS(GENODE)
++
++#include
++
+ #elif OS(UNIX)
+
+ #include
+@@ -128,6 +132,14 @@ void StackBounds::initialize()
+ m_bound = estimateStackBound(m_origin);
+ }
+
++#elif OS(GENODE)
++
++void StackBounds::initialize()
++{
++ m_bound = Genode::Thread_base::myself()->stack_base();
++ m_origin = Genode::Thread_base::myself()->stack_top();
++}
++
+ #elif OS(UNIX)
+
+ void StackBounds::initialize()
+diff --git a/qtwebkit/Source/WTF/wtf/TCSystemAlloc.cpp b/qtwebkit/Source/WTF/wtf/TCSystemAlloc.cpp
+index f547085..07fc9b0 100644
+--- a/qtwebkit/Source/WTF/wtf/TCSystemAlloc.cpp
++++ b/qtwebkit/Source/WTF/wtf/TCSystemAlloc.cpp
+@@ -49,6 +49,12 @@
+ #include
+ #endif
+
++#if OS(GENODE)
++#include
++#include
++#include
++#endif
++
+ #ifndef MAP_ANONYMOUS
+ #define MAP_ANONYMOUS MAP_ANON
+ #endif
+@@ -367,6 +373,21 @@ void* TCMalloc_SystemAlloc(size_t size, size_t *actual_size, size_t alignment) {
+ }
+ #endif
+
++#if OS(GENODE)
++ if (actual_size)
++ *actual_size = size;
++
++ void* real_address = malloc(sizeof(Genode::addr_t) + size + alignment);
++ Genode::addr_t address = reinterpret_cast(real_address);
++ address += sizeof(Genode::addr_t);
++ address = Genode::align_addr(address, Genode::log2(alignment));
++ address -= sizeof(Genode::addr_t);
++ *(Genode::addr_t*)address = (Genode::addr_t)real_address;
++ address += sizeof(Genode::addr_t);
++
++ return (void*)address;;
++#endif
++
+ // nothing worked - reset failure flags and try again
+ devmem_failure = false;
+ sbrk_failure = false;
+diff --git a/qtwebkit/Source/WebCore/platform/graphics/qt/MediaPlayerPrivateQt.cpp b/qtwebkit/Source/WebCore/platform/graphics/qt/MediaPlayerPrivateQt.cpp
+index e083e29..dc73aac 100644
+--- a/qtwebkit/Source/WebCore/platform/graphics/qt/MediaPlayerPrivateQt.cpp
++++ b/qtwebkit/Source/WebCore/platform/graphics/qt/MediaPlayerPrivateQt.cpp
+@@ -18,6 +18,8 @@
+ */
+
+ #include "config.h"
++
++#if ENABLE(VIDEO)
+ #include "MediaPlayerPrivateQt.h"
+
+ #include "Frame.h"
+@@ -661,3 +663,4 @@ PlatformMedia MediaPlayerPrivateQt::platformMedia() const
+ } // namespace WebCore
+
+ #include "moc_MediaPlayerPrivateQt.cpp"
++#endif /* ENABLE(VIDEO) */
diff --git a/libports/src/lib/qt5/patches/qt5_qwidgetanimator.patch b/libports/src/lib/qt5/patches/qt5_qwidgetanimator.patch
new file mode 100644
index 0000000000..d21658af88
--- /dev/null
+++ b/libports/src/lib/qt5/patches/qt5_qwidgetanimator.patch
@@ -0,0 +1,32 @@
+qt5_qwidgetanimator.patch
+
+From: Christian Prochaska
+
+
+---
+ qtbase/src/widgets/widgets/qwidgetanimator.cpp | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/qtbase/src/widgets/widgets/qwidgetanimator.cpp b/qtbase/src/widgets/widgets/qwidgetanimator.cpp
+index bbd96ca..d3fbf92 100644
+--- a/qtbase/src/widgets/widgets/qwidgetanimator.cpp
++++ b/qtbase/src/widgets/widgets/qwidgetanimator.cpp
+@@ -74,7 +74,8 @@ void QWidgetAnimator::abort(QWidget *w)
+ void QWidgetAnimator::animationFinished()
+ {
+ QPropertyAnimation *anim = qobject_cast(sender());
+- abort(static_cast(anim->targetObject()));
++ if (anim)
++ abort(static_cast(anim->targetObject()));
+ }
+ #endif //QT_NO_ANIMATION
+
+@@ -92,7 +93,7 @@ void QWidgetAnimator::animate(QWidget *widget, const QRect &_final_geometry, boo
+
+ #ifndef QT_NO_ANIMATION
+ AnimationMap::const_iterator it = m_animation_map.constFind(widget);
+- if (it != m_animation_map.constEnd() && (*it)->endValue().toRect() == final_geometry)
++ if (it != m_animation_map.constEnd() && (*it) && (*it)->endValue().toRect() == final_geometry)
+ return;
+
+ QPropertyAnimation *anim = new QPropertyAnimation(widget, "geometry", widget);
diff --git a/libports/src/lib/qt5/patches/qt5_qwidgetwindow.patch b/libports/src/lib/qt5/patches/qt5_qwidgetwindow.patch
new file mode 100644
index 0000000000..b1e13f14fa
--- /dev/null
+++ b/libports/src/lib/qt5/patches/qt5_qwidgetwindow.patch
@@ -0,0 +1,23 @@
+qt5_qwidgetwindow.patch
+
+From: Christian Prochaska
+
+
+---
+ qtbase/src/widgets/kernel/qwidgetwindow.cpp | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/qtbase/src/widgets/kernel/qwidgetwindow.cpp b/qtbase/src/widgets/kernel/qwidgetwindow.cpp
+index 18dd315..347ce7e 100644
+--- a/qtbase/src/widgets/kernel/qwidgetwindow.cpp
++++ b/qtbase/src/widgets/kernel/qwidgetwindow.cpp
+@@ -231,6 +231,9 @@ bool QWidgetWindow::event(QEvent *event)
+ case QEvent::Hide:
+ return QWindow::event(event);
+
++ case QEvent::MetaCall:
++ return QWindow::event(event);
++
+ default:
+ break;
+ }
diff --git a/libports/src/lib/qt5/patches/qt5_textedit_example.patch b/libports/src/lib/qt5/patches/qt5_textedit_example.patch
new file mode 100644
index 0000000000..1bc2cbbed2
--- /dev/null
+++ b/libports/src/lib/qt5/patches/qt5_textedit_example.patch
@@ -0,0 +1,100 @@
+qt5_textedit_example.patch
+
+From: Christian Prochaska
+
+
+---
+ qtbase/examples/widgets/richtext/textedit/main.cpp | 21 +++++++++++++++++++-
+ .../widgets/richtext/textedit/textedit.cpp | 11 +++++-----
+ .../widgets/richtext/textedit/textedit.pro | 4 ----
+ 3 files changed, 25 insertions(+), 11 deletions(-)
+
+diff --git a/qtbase/examples/widgets/richtext/textedit/main.cpp b/qtbase/examples/widgets/richtext/textedit/main.cpp
+index 196dbfc..2513df9 100644
+--- a/qtbase/examples/widgets/richtext/textedit/main.cpp
++++ b/qtbase/examples/widgets/richtext/textedit/main.cpp
+@@ -39,16 +39,35 @@
+ **
+ ****************************************************************************/
+
++/* Genode includes */
++#include
++
++/* Qt includes */
+ #include "textedit.h"
+ #include
+
++/* disable "not implemented yet" messages */
++extern "C" void _sigprocmask() { }
++extern "C" void sigprocmask() { }
++
+ int main(int argc, char *argv[])
+ {
+ Q_INIT_RESOURCE(textedit);
+
++ unsigned int x = 300;
++ unsigned int y = 0;
++ unsigned int w = 700;
++ unsigned int h = 700;
++
++ try { Genode::config()->xml_node().attribute("xpos").value(&x); } catch (...) { }
++ try { Genode::config()->xml_node().attribute("ypos").value(&y); } catch (...) { }
++ try { Genode::config()->xml_node().attribute("width").value(&w); } catch (...) { }
++ try { Genode::config()->xml_node().attribute("height").value(&h); } catch (...) { }
++
+ QApplication a(argc, argv);
+ TextEdit mw;
+- mw.resize(700, 800);
++ mw.move(x, y);
++ mw.resize(w, h);
+ mw.show();
+ return a.exec();
+ }
+diff --git a/qtbase/examples/widgets/richtext/textedit/textedit.cpp b/qtbase/examples/widgets/richtext/textedit/textedit.cpp
+index ae2bded..be98558 100644
+--- a/qtbase/examples/widgets/richtext/textedit/textedit.cpp
++++ b/qtbase/examples/widgets/richtext/textedit/textedit.cpp
+@@ -476,7 +476,7 @@ void TextEdit::fileNew()
+ void TextEdit::fileOpen()
+ {
+ QString fn = QFileDialog::getOpenFileName(this, tr("Open File..."),
+- QString(), tr("HTML-Files (*.htm *.html);;All Files (*)"));
++ QString("/"), tr("HTML-Files (*.htm *.html);;All Files (*)"));
+ if (!fn.isEmpty())
+ load(fn);
+ }
+@@ -495,15 +495,14 @@ bool TextEdit::fileSave()
+
+ bool TextEdit::fileSaveAs()
+ {
+- QString fn = QFileDialog::getSaveFileName(this, tr("Save as..."), QString(),
+- tr("ODF files (*.odt);;HTML-Files "
++ QString fn = QFileDialog::getSaveFileName(this, tr("Save as..."), QString("/"),
++ tr("HTML-Files "
+ "(*.htm *.html);;All Files (*)"));
+ if (fn.isEmpty())
+ return false;
+- if (!(fn.endsWith(".odt", Qt::CaseInsensitive)
+- || fn.endsWith(".htm", Qt::CaseInsensitive)
++ if (!(fn.endsWith(".htm", Qt::CaseInsensitive)
+ || fn.endsWith(".html", Qt::CaseInsensitive))) {
+- fn += ".odt"; // default
++ fn += ".html"; // default
+ }
+ setCurrentFileName(fn);
+ return fileSave();
+diff --git a/qtbase/examples/widgets/richtext/textedit/textedit.pro b/qtbase/examples/widgets/richtext/textedit/textedit.pro
+index c32bf68..704f738 100644
+--- a/qtbase/examples/widgets/richtext/textedit/textedit.pro
++++ b/qtbase/examples/widgets/richtext/textedit/textedit.pro
+@@ -9,10 +9,6 @@ SOURCES = textedit.cpp \
+ main.cpp
+
+ RESOURCES += textedit.qrc
+-build_all:!build_pass {
+- CONFIG -= build_all
+- CONFIG += release
+-}
+
+ EXAMPLE_FILES = textedit.qdoc
+
diff --git a/libports/src/lib/qt5/patches/qt5_tools.patch b/libports/src/lib/qt5/patches/qt5_tools.patch
new file mode 100644
index 0000000000..ae82c5c04f
--- /dev/null
+++ b/libports/src/lib/qt5/patches/qt5_tools.patch
@@ -0,0 +1,123 @@
+qt5_tools.patch
+
+From: Christian Prochaska
+
+Support out-of-tree build of Qt host tools.
+This patch should not be applied when running the Qt 'configure' script.
+---
+ qtbase/mkspecs/features/qt_build_config.prf | 2 +
+ qtbase/mkspecs/features/qt_functions.prf | 2 +
+ qtbase/mkspecs/features/qt_module.prf | 4 +-
+ qtbase/mkspecs/features/qt_tool.prf | 54 ++++++++++++++-------------
+ 4 files changed, 31 insertions(+), 31 deletions(-)
+
+diff --git a/qtbase/mkspecs/features/qt_build_config.prf b/qtbase/mkspecs/features/qt_build_config.prf
+index a29e09c..32c8388 100644
+--- a/qtbase/mkspecs/features/qt_build_config.prf
++++ b/qtbase/mkspecs/features/qt_build_config.prf
+@@ -12,7 +12,7 @@
+ !contains(QMAKE_INTERNAL_INCLUDED_FILES, .*qmodule\\.pri) {
+ QMAKE_QT_MODULE = $$[QT_HOST_DATA/get]/mkspecs/qmodule.pri
+ !exists($$QMAKE_QT_MODULE)|!include($$QMAKE_QT_MODULE, "", true) {
+- error("Cannot load qmodule.pri!")
++ debug(1, "Cannot load qmodule.pri!")
+ } else {
+ debug(1, "Loaded qmodule.pri from ($$QMAKE_QT_MODULE)")
+ }
+diff --git a/qtbase/mkspecs/features/qt_functions.prf b/qtbase/mkspecs/features/qt_functions.prf
+index bbbb5d3..62006ee 100644
+--- a/qtbase/mkspecs/features/qt_functions.prf
++++ b/qtbase/mkspecs/features/qt_functions.prf
+@@ -167,7 +167,7 @@ defineTest(qtAddModules) {
+
+ qtAddModule($$QTLIB, $$eval(QT.$${QTLIB}.want_private), $$2)
+ }
+- !isEmpty(BAD_QT):error("Unknown module(s) in $$1: $$BAD_QT")
++ !isEmpty(BAD_QT):debug(1, "Unknown module(s) in $$1: $$BAD_QT")
+
+ export(using_privates)
+ }
+diff --git a/qtbase/mkspecs/features/qt_module.prf b/qtbase/mkspecs/features/qt_module.prf
+index 53a5499..035480d 100644
+--- a/qtbase/mkspecs/features/qt_module.prf
++++ b/qtbase/mkspecs/features/qt_module.prf
+@@ -21,7 +21,7 @@ load(qt_build_config) # loads qmodule.pri if hasn't been loaded already
+
+ isEmpty(MODULE):MODULE = $$section($$list($$basename(_PRO_FILE_)), ., 0, 0)
+ isEmpty(VERSION): VERSION = $$MODULE_VERSION
+-isEmpty(VERSION): error("Module does not define version.")
++isEmpty(VERSION): debug(1, "Module does not define version.")
+
+ # Compile as shared/DLL or static according to the option given to configure
+ # unless overridden. Host builds are always static
+@@ -53,7 +53,7 @@ else: \
+ MODULE_DEFINE = QT_$${ucmodule}_LIB
+ MODULE_DEFINES = $$MODULE_DEFINE $$MODULE_DEFINES
+
+-load(qt_module_pris)
++#load(qt_module_pris)
+
+ INCLUDEPATH *= $$eval(QT.$${MODULE}.includes) $$eval(QT.$${MODULE}.private_includes)
+
+diff --git a/qtbase/mkspecs/features/qt_tool.prf b/qtbase/mkspecs/features/qt_tool.prf
+index 9a6b963..30a2059 100644
+--- a/qtbase/mkspecs/features/qt_tool.prf
++++ b/qtbase/mkspecs/features/qt_tool.prf
+@@ -16,30 +16,30 @@ CONFIG += console
+ # If we are doing a prefix build, create a "module" pri which enables
+ # qtPrepareTool() to work with the non-installed build.
+ # Non-bootstrapped tools always need this because of the environment setup.
+-!build_pass:if(!host_build|!force_bootstrap|force_independent) {
+- isEmpty(MODULE):MODULE = $$TARGET
+-
+- !host_build|!force_bootstrap: MODULE_DEPENDS = $$replace(QT, -private$, )
+-
+- load(qt_build_paths)
+-
+- load(resolve_target)
+-
+- TOOL_PRI = $$MODULE_QMAKE_OUTDIR/mkspecs/modules/qt_tool_$${MODULE}.pri
+-
+- TOOL_PRI_CONT = \
+- "QT_TOOL.$${MODULE}.binary = $$QMAKE_RESOLVED_TARGET" \
+- "QT_TOOL.$${MODULE}.depends =$$join(MODULE_DEPENDS, " ", " ")"
+- write_file($$TOOL_PRI, TOOL_PRI_CONT)|error("Aborting.")
+-
+- # Then, inject the new tool into the current cache state
+- !contains(QMAKE_INTERNAL_INCLUDED_FILES, $$TOOL_PRI) { # before the actual include()!
+- added = $$TOOL_PRI
+- cache(QMAKE_INTERNAL_INCLUDED_FILES, add transient, added)
+- unset(added)
+- }
+- include($$TOOL_PRI)
+- for(var, $$list(binary depends)): \
+- cache(QT_TOOL.$${MODULE}.$$var, transient)
+-
+-}
++#!build_pass:if(!host_build|!force_bootstrap|force_independent) {
++# isEmpty(MODULE):MODULE = $$TARGET
++#
++# !host_build|!force_bootstrap: MODULE_DEPENDS = $$replace(QT, -private$, )
++#
++# load(qt_build_paths)
++#
++# load(resolve_target)
++#
++# TOOL_PRI = $$MODULE_QMAKE_OUTDIR/mkspecs/modules/qt_tool_$${MODULE}.pri
++#
++# TOOL_PRI_CONT = \
++# "QT_TOOL.$${MODULE}.binary = $$QMAKE_RESOLVED_TARGET" \
++# "QT_TOOL.$${MODULE}.depends =$$join(MODULE_DEPENDS, " ", " ")"
++# write_file($$TOOL_PRI, TOOL_PRI_CONT)|error("Aborting.")
++#
++# # Then, inject the new tool into the current cache state
++# !contains(QMAKE_INTERNAL_INCLUDED_FILES, $$TOOL_PRI) { # before the actual include()!
++# added = $$TOOL_PRI
++# cache(QMAKE_INTERNAL_INCLUDED_FILES, add transient, added)
++# unset(added)
++# }
++# include($$TOOL_PRI)
++# for(var, $$list(binary depends)): \
++# cache(QT_TOOL.$${MODULE}.$$var, transient)
++#
++#}
diff --git a/libports/src/lib/qt5/patches/qtscriptclassic_qt5.patch b/libports/src/lib/qt5/patches/qtscriptclassic_qt5.patch
new file mode 100644
index 0000000000..65bc4ebef4
--- /dev/null
+++ b/libports/src/lib/qt5/patches/qtscriptclassic_qt5.patch
@@ -0,0 +1,472 @@
+qtscriptclassic_qt5.patch
+
+From: Christian Prochaska
+
+
+---
+ src/qscriptcontextinfo.cpp | 2 -
+ src/qscriptecmafunction.cpp | 12 ++++-----
+ src/qscriptengine_p.cpp | 30 ++++++++++++++--------
+ src/qscriptextqobject.cpp | 52 +++++++++++++++++---------------------
+ src/qscriptstring.cpp | 1 -
+ src/qscriptsyntaxcheckresult_p.h | 2 +
+ src/qscriptvalue.cpp | 4 +--
+ src/qscriptvalue.h | 4 +--
+ src/qscriptvalue_p.h | 1 -
+ src/qscriptvalueimpl_p.h | 3 +-
+ 10 files changed, 55 insertions(+), 56 deletions(-)
+
+diff --git a/src/qscriptcontextinfo.cpp b/src/qscriptcontextinfo.cpp
+index ef080ff..df0e555 100644
+--- a/src/qscriptcontextinfo.cpp
++++ b/src/qscriptcontextinfo.cpp
+@@ -108,7 +108,6 @@ QT_BEGIN_NAMESPACE
+ QScriptContextInfoPrivate::QScriptContextInfoPrivate()
+ : q_ptr(0)
+ {
+- ref = 0;
+ functionType = QScriptContextInfo::NativeFunction;
+ functionMetaIndex = -1;
+ functionStartLineNumber = -1;
+@@ -125,7 +124,6 @@ QScriptContextInfoPrivate::QScriptContextInfoPrivate(const QScriptContext *conte
+ : q_ptr(0)
+ {
+ Q_ASSERT(context);
+- ref = 0;
+ functionType = QScriptContextInfo::NativeFunction;
+ functionMetaIndex = -1;
+ functionStartLineNumber = -1;
+diff --git a/src/qscriptecmafunction.cpp b/src/qscriptecmafunction.cpp
+index 7ba4596..fade83f 100644
+--- a/src/qscriptecmafunction.cpp
++++ b/src/qscriptecmafunction.cpp
+@@ -328,7 +328,7 @@ QScriptValueImpl Function::method_disconnect(QScriptContextPrivate *context, QSc
+ return context->throwError(QScriptContext::TypeError,
+ QString::fromLatin1("Function.prototype.disconnect: %0::%1 is not a signal")
+ .arg(QLatin1String(qtSignal->metaObject()->className()))
+- .arg(QLatin1String(sig.signature())));
++ .arg(QLatin1String(sig.methodSignature())));
+ }
+
+ QScriptValueImpl receiver;
+@@ -357,7 +357,7 @@ QScriptValueImpl Function::method_disconnect(QScriptContextPrivate *context, QSc
+ return context->throwError(
+ QString::fromLatin1("Function.prototype.disconnect: failed to disconnect from %0::%1")
+ .arg(QLatin1String(qtSignal->metaObject()->className()))
+- .arg(QLatin1String(sig.signature())));
++ .arg(QLatin1String(sig.methodSignature())));
+ }
+ return eng->undefinedValue();
+ #else
+@@ -399,20 +399,20 @@ QScriptValueImpl Function::method_connect(QScriptContextPrivate *context, QScrip
+ return context->throwError(QScriptContext::TypeError,
+ QString::fromLatin1("Function.prototype.connect: %0::%1 is not a signal")
+ .arg(QLatin1String(qtSignal->metaObject()->className()))
+- .arg(QLatin1String(sig.signature())));
++ .arg(QLatin1String(sig.methodSignature())));
+ }
+
+ {
+ QList overloads = qtSignal->overloadedIndexes();
+ if (!overloads.isEmpty()) {
+ overloads.append(qtSignal->initialIndex());
+- QByteArray signature = sig.signature();
++ QByteArray signature = sig.methodSignature();
+ QString message = QString::fromLatin1("Function.prototype.connect: ambiguous connect to %0::%1(); candidates are\n")
+ .arg(QLatin1String(qtSignal->metaObject()->className()))
+ .arg(QLatin1String(signature.left(signature.indexOf('('))));
+ for (int i = 0; i < overloads.size(); ++i) {
+ QMetaMethod mtd = meta->method(overloads.at(i));
+- message.append(QString::fromLatin1(" %0\n").arg(QString::fromLatin1(mtd.signature())));
++ message.append(QString::fromLatin1(" %0\n").arg(QString::fromLatin1(mtd.methodSignature())));
+ }
+ message.append(QString::fromLatin1("Use e.g. object['%0'].connect() to connect to a particular overload")
+ .arg(QLatin1String(signature)));
+@@ -446,7 +446,7 @@ QScriptValueImpl Function::method_connect(QScriptContextPrivate *context, QScrip
+ return context->throwError(
+ QString::fromLatin1("Function.prototype.connect: failed to connect to %0::%1")
+ .arg(QLatin1String(qtSignal->metaObject()->className()))
+- .arg(QLatin1String(sig.signature())));
++ .arg(QLatin1String(sig.methodSignature())));
+ }
+ return eng->undefinedValue();
+ #else
+diff --git a/src/qscriptengine_p.cpp b/src/qscriptengine_p.cpp
+index d36b605..4e9076d 100644
+--- a/src/qscriptengine_p.cpp
++++ b/src/qscriptengine_p.cpp
+@@ -1436,7 +1436,6 @@ QScriptValueImpl QScriptEnginePrivate::create(int type, const void *ptr)
+ #endif
+ #ifndef QT_NO_QOBJECT
+ case QMetaType::QObjectStar:
+- case QMetaType::QWidgetStar:
+ newQObject(&result, *reinterpret_cast(ptr));
+ break;
+ #endif
+@@ -1448,6 +1447,10 @@ QScriptValueImpl QScriptEnginePrivate::create(int type, const void *ptr)
+ }
+
+ #ifndef QT_NO_QOBJECT
++ else if (type == qMetaTypeId()) {
++ newQObject(&result, *reinterpret_cast(ptr));
++ }
++
+ // lazy registration of some common list types
+ else if (type == qMetaTypeId()) {
+ qScriptRegisterSequenceMetaType(q);
+@@ -1563,14 +1566,6 @@ bool QScriptEnginePrivate::convert(const QScriptValueImpl &value,
+ *reinterpret_cast(ptr) = value.toQObject();
+ return true;
+ } break;
+- case QMetaType::QWidgetStar:
+- if (value.isQObject() || value.isNull()) {
+- QObject *qo = value.toQObject();
+- if (!qo || qo->isWidgetType()) {
+- *reinterpret_cast(ptr) = reinterpret_cast(qo);
+- return true;
+- }
+- } break;
+ #endif
+ case QMetaType::QStringList:
+ if (value.isArray()) {
+@@ -1588,6 +1583,17 @@ bool QScriptEnginePrivate::convert(const QScriptValueImpl &value,
+ return true;
+ } break;
+ default:
++#ifndef QT_NO_QOBJECT
++ if (type == qMetaTypeId()) {
++ if (value.isQObject() || value.isNull()) {
++ QObject *qo = value.toQObject();
++ if (!qo || qo->isWidgetType()) {
++ *reinterpret_cast(ptr) = reinterpret_cast(qo);
++ return true;
++ }
++ }
++ }
++#endif
+ ;
+ }
+
+@@ -2609,6 +2615,7 @@ static QScriptValueImpl qsTranslate(QScriptContextPrivate *ctx, QScriptEnginePri
+ QString comment;
+ if (ctx->argumentCount() > 2)
+ comment = ctx->argument(2).toString();
++#if 0
+ QCoreApplication::Encoding encoding = QCoreApplication::CodecForTr;
+ if (ctx->argumentCount() > 3) {
+ QString encStr = ctx->argument(3).toString();
+@@ -2619,6 +2626,7 @@ static QScriptValueImpl qsTranslate(QScriptContextPrivate *ctx, QScriptEnginePri
+ else
+ return ctx->throwError(QString::fromLatin1("qsTranslate(): invalid encoding '%s'").arg(encStr));
+ }
++#endif
+ int n = -1;
+ if (ctx->argumentCount() > 4)
+ n = ctx->argument(4).toInt32();
+@@ -2628,7 +2636,7 @@ static QScriptValueImpl qsTranslate(QScriptContextPrivate *ctx, QScriptEnginePri
+ result = QCoreApplication::translate(context.toLatin1().constData(),
+ text.toLatin1().constData(),
+ comment.toLatin1().constData(),
+- encoding, n);
++ n);
+ #else
+ result = text;
+ #endif
+@@ -2669,7 +2677,7 @@ static QScriptValueImpl qsTr(QScriptContextPrivate *ctx, QScriptEnginePrivate *e
+ result = QCoreApplication::translate(context.toLatin1().constData(),
+ text.toLatin1().constData(),
+ comment.toLatin1().constData(),
+- QCoreApplication::CodecForTr, n);
++ n);
+ #else
+ result = text;
+ #endif
+diff --git a/src/qscriptextqobject.cpp b/src/qscriptextqobject.cpp
+index 06db925..cbf4e2a 100644
+--- a/src/qscriptextqobject.cpp
++++ b/src/qscriptextqobject.cpp
+@@ -98,9 +98,9 @@ namespace QScript {
+ class QObjectNotifyCaller : public QObject
+ {
+ public:
+- void callConnectNotify(const char *signal)
++ void callConnectNotify(const QMetaMethod &signal)
+ { connectNotify(signal); }
+- void callDisconnectNotify(const char *signal)
++ void callDisconnectNotify(const QMetaMethod &signal)
+ { disconnectNotify(signal); }
+ };
+
+@@ -135,7 +135,7 @@ public:
+
+ static inline QByteArray methodName(const QMetaMethod &method)
+ {
+- QByteArray signature = method.signature();
++ QByteArray signature = method.methodSignature();
+ return signature.left(signature.indexOf('('));
+ }
+
+@@ -555,22 +555,22 @@ static void callQtMethod(QScriptContextPrivate *context, QMetaMethod::MethodType
+ } else if (actual.isQObject()) {
+ switch (tid) {
+ case QMetaType::QObjectStar:
+- case QMetaType::QWidgetStar:
+ // perfect
+ break;
+ default:
+- matchDistance += 10;
++ if (tid != qMetaTypeId())
++ matchDistance += 10;
+ break;
+ }
+ } else if (actual.isNull()) {
+ switch (tid) {
+ case QMetaType::VoidStar:
+ case QMetaType::QObjectStar:
+- case QMetaType::QWidgetStar:
+ // perfect
+ break;
+ default:
+- if (!argType.name().endsWith('*'))
++ if (!argType.name().endsWith('*') &&
++ (tid != qMetaTypeId()))
+ matchDistance += 10;
+ break;
+ }
+@@ -647,7 +647,7 @@ static void callQtMethod(QScriptContextPrivate *context, QMetaMethod::MethodType
+ if (i > 0)
+ message += QLatin1String("\n");
+ QMetaMethod mtd = metaMethod(meta, callType, conversionFailed.at(i));
+- message += QString::fromLatin1(" %0").arg(QString::fromLatin1(mtd.signature()));
++ message += QString::fromLatin1(" %0").arg(QString::fromLatin1(mtd.methodSignature()));
+ }
+ result = context->throwError(QScriptContext::TypeError, message);
+ } else if (!unresolved.isEmpty()) {
+@@ -674,7 +674,7 @@ static void callQtMethod(QScriptContextPrivate *context, QMetaMethod::MethodType
+ if (i > 0)
+ message += QLatin1String("\n");
+ QMetaMethod mtd = metaMethod(meta, callType, tooFewArgs.at(i));
+- message += QString::fromLatin1(" %0").arg(QString::fromLatin1(mtd.signature()));
++ message += QString::fromLatin1(" %0").arg(QString::fromLatin1(mtd.methodSignature()));
+ }
+ result = context->throwError(QScriptContext::SyntaxError, message);
+ }
+@@ -691,7 +691,7 @@ static void callQtMethod(QScriptContextPrivate *context, QMetaMethod::MethodType
+ if (i > 0)
+ message += QLatin1String("\n");
+ QMetaMethod mtd = metaMethod(meta, callType, candidates.at(i).index);
+- message += QString::fromLatin1(" %0").arg(QString::fromLatin1(mtd.signature()));
++ message += QString::fromLatin1(" %0").arg(QString::fromLatin1(mtd.methodSignature()));
+ }
+ result = context->throwError(QScriptContext::TypeError, message);
+ } else {
+@@ -847,7 +847,7 @@ bool ExtQObjectDataIterator::hasNext() const
+ for ( ; i < meta->methodCount(); ++i) {
+ QMetaMethod method = meta->method(i);
+ if (hasMethodAccess(method, i, inst->options)
+- && !isObjectProperty(m_object, method.signature())) {
++ && !isObjectProperty(m_object, method.methodSignature())) {
+ return true;
+ }
+ }
+@@ -909,9 +909,9 @@ void ExtQObjectDataIterator::next(QScript::Member *member)
+ for ( ; i < meta->methodCount(); ++i) {
+ QMetaMethod method = meta->method(i);
+ if (hasMethodAccess(method, i, inst->options)
+- && !isObjectProperty(m_object, method.signature())) {
++ && !isObjectProperty(m_object, method.methodSignature())) {
+ QMetaMethod method = meta->method(i);
+- QScriptNameIdImpl *nameId = eng->nameId(QLatin1String(method.signature()));
++ QScriptNameIdImpl *nameId = eng->nameId(QLatin1String(method.methodSignature()));
+ member->native(nameId, i,
+ QScriptValue::QObjectMember
+ | METHOD_ID);
+@@ -941,7 +941,7 @@ bool ExtQObjectDataIterator::hasPrevious() const
+ for ( ; i >= limit; --i) {
+ QMetaMethod method = meta->method(i);
+ if (hasMethodAccess(method, i, inst->options)
+- && !isObjectProperty(m_object, method.signature())) {
++ && !isObjectProperty(m_object, method.methodSignature())) {
+ return true;
+ }
+ }
+@@ -993,9 +993,9 @@ void ExtQObjectDataIterator::previous(QScript::Member *member)
+ for ( ; i >= limit; --i) {
+ QMetaMethod method = meta->method(i);
+ if (hasMethodAccess(method, i, inst->options)
+- && !isObjectProperty(m_object, method.signature())) {
++ && !isObjectProperty(m_object, method.methodSignature())) {
+ QMetaMethod method = meta->method(i);
+- QScriptNameIdImpl *nameId = eng->nameId(QLatin1String(method.signature()));
++ QScriptNameIdImpl *nameId = eng->nameId(QLatin1String(method.methodSignature()));
+ member->native(nameId, i,
+ QScriptValue::QObjectMember
+ | METHOD_ID);
+@@ -1508,7 +1508,7 @@ QScriptValueImpl QScript::ExtQObject::method_findChild(QScriptContextPrivate *co
+ if (Instance *instance = Instance::get(context->thisObject(), classInfo)) {
+ QObject *obj = instance->value;
+ QString name = context->argument(0).toString();
+- QObject *child = qFindChild(obj, name);
++ QObject *child = obj->findChild(name);
+ QScriptEngine::QObjectWrapOptions opt = QScriptEngine::PreferExistingWrapperObject;
+ QScriptValueImpl result;
+ eng->newQObject(&result, child, QScriptEngine::QtOwnership, opt);
+@@ -1526,12 +1526,12 @@ QScriptValueImpl QScript::ExtQObject::method_findChildren(QScriptContextPrivate
+ #ifndef QT_NO_REGEXP
+ if (arg.isRegExp()) {
+ QRegExp re = arg.toRegExp();
+- found = qFindChildren(obj, re);
++ found = obj->findChildren(re);
+ } else
+ #endif
+ {
+ QString name = arg.isUndefined() ? QString() : arg.toString();
+- found = qFindChildren(obj, name);
++ found = obj->findChildren(name);
+ }
+ QScriptValueImpl result = eng->newArray(found.size());
+ QScriptEngine::QObjectWrapOptions opt = QScriptEngine::PreferExistingWrapperObject;
+@@ -1582,7 +1582,7 @@ static const char qt_meta_stringdata_QObjectConnectionManager[] = {
+ };
+
+ const QMetaObject QScript::QObjectConnectionManager::staticMetaObject = {
+- { &QObject::staticMetaObject, qt_meta_stringdata_QObjectConnectionManager,
++ { &QObject::staticMetaObject, reinterpret_cast(qt_meta_stringdata_QObjectConnectionManager),
+ qt_meta_data_QObjectConnectionManager, 0 }
+ };
+
+@@ -1684,7 +1684,7 @@ void QScript::QObjectConnectionManager::execute(int slotIndex, void **argv)
+ } else {
+ qWarning("QScriptEngine: Unable to handle unregistered datatype '%s' "
+ "when invoking handler of signal %s::%s",
+- typeName.constData(), meta->className(), method.signature());
++ typeName.constData(), meta->className(), method.methodSignature().constData());
+ actual = eng->undefinedValue();
+ }
+ } else {
+@@ -1758,10 +1758,7 @@ bool QScript::QObjectConnectionManager::addSignalHandler(
+ if (ok) {
+ cs.append(QScript::QObjectConnection(m_slotCounter++, receiver, function, senderWrapper));
+ QMetaMethod signal = sender->metaObject()->method(signalIndex);
+- QByteArray signalString;
+- signalString.append('2'); // signal code
+- signalString.append(signal.signature());
+- static_cast(sender)->callConnectNotify(signalString);
++ static_cast(sender)->callConnectNotify(signal);
+ }
+ return ok;
+ }
+@@ -1782,10 +1779,7 @@ bool QScript::QObjectConnectionManager::removeSignalHandler(
+ if (ok) {
+ cs.remove(i);
+ QMetaMethod signal = sender->metaObject()->method(signalIndex);
+- QByteArray signalString;
+- signalString.append('2'); // signal code
+- signalString.append(signal.signature());
+- static_cast(sender)->callDisconnectNotify(signalString);
++ static_cast(sender)->callDisconnectNotify(signal);
+ }
+ return ok;
+ }
+diff --git a/src/qscriptstring.cpp b/src/qscriptstring.cpp
+index 1ed7f33..2436061 100644
+--- a/src/qscriptstring.cpp
++++ b/src/qscriptstring.cpp
+@@ -88,7 +88,6 @@ QT_BEGIN_NAMESPACE
+ QScriptStringPrivate::QScriptStringPrivate()
+ : nameId(0), engine(0), q_ptr(0)
+ {
+- ref = 0;
+ }
+
+ /*!
+diff --git a/src/qscriptsyntaxcheckresult_p.h b/src/qscriptsyntaxcheckresult_p.h
+index bd6ef51..ed32383 100644
+--- a/src/qscriptsyntaxcheckresult_p.h
++++ b/src/qscriptsyntaxcheckresult_p.h
+@@ -72,7 +72,7 @@ QT_BEGIN_NAMESPACE
+ class QScriptSyntaxCheckResultPrivate
+ {
+ public:
+- QScriptSyntaxCheckResultPrivate() { ref = 0; }
++ QScriptSyntaxCheckResultPrivate() {}
+ ~QScriptSyntaxCheckResultPrivate() {}
+
+ QScriptSyntaxCheckResult::State state;
+diff --git a/src/qscriptvalue.cpp b/src/qscriptvalue.cpp
+index 7fa655e..5d3d875 100644
+--- a/src/qscriptvalue.cpp
++++ b/src/qscriptvalue.cpp
+@@ -347,7 +347,7 @@ QScriptValue::QScriptValue(QScriptEngine *engine, const char *val)
+ if (engine) {
+ QScriptValueImpl v;
+ QScriptEnginePrivate *eng_p = QScriptEnginePrivate::get(engine);
+- eng_p->newString(&v, QString::fromAscii(val));
++ eng_p->newString(&v, QString::fromLatin1(val));
+ d_ptr = eng_p->registerValue(v);
+ d_ptr->ref.ref();
+ } else {
+@@ -453,7 +453,7 @@ QScriptValue::QScriptValue(const char *value)
+ : d_ptr(new QScriptValuePrivate)
+ {
+ d_ptr->value.m_type = QScript::LazyStringType;
+- d_ptr->value.m_lazy_string_value = new QString(QString::fromAscii(value));
++ d_ptr->value.m_lazy_string_value = new QString(QString::fromLatin1(value));
+ d_ptr->ref.ref();
+ }
+ #endif
+diff --git a/src/qscriptvalue.h b/src/qscriptvalue.h
+index 726fc26..a9c9ae9 100644
+--- a/src/qscriptvalue.h
++++ b/src/qscriptvalue.h
+@@ -120,7 +120,7 @@ public:
+ QScriptValue(QScriptEngine *engine, qsreal val);
+ QScriptValue(QScriptEngine *engine, const QString &val);
+ #ifndef QT_NO_CAST_FROM_ASCII
+- QT_ASCII_CAST_WARN_CONSTRUCTOR QScriptValue(QScriptEngine *engine, const char *val);
++ QT_ASCII_CAST_WARN QScriptValue(QScriptEngine *engine, const char *val);
+ #endif
+
+ QScriptValue(SpecialValue value);
+@@ -131,7 +131,7 @@ public:
+ QScriptValue(const QString &value);
+ QScriptValue(const QLatin1String &value);
+ #ifndef QT_NO_CAST_FROM_ASCII
+- QT_ASCII_CAST_WARN_CONSTRUCTOR QScriptValue(const char *value);
++ QT_ASCII_CAST_WARN QScriptValue(const char *value);
+ #endif
+
+ QScriptValue &operator=(const QScriptValue &other);
+diff --git a/src/qscriptvalue_p.h b/src/qscriptvalue_p.h
+index 7d891ed..86b62e4 100644
+--- a/src/qscriptvalue_p.h
++++ b/src/qscriptvalue_p.h
+@@ -67,7 +67,6 @@ QT_BEGIN_NAMESPACE
+ inline QScriptValuePrivate::QScriptValuePrivate()
+ {
+ engine = 0;
+- ref = 0;
+ }
+
+ inline QScriptValuePrivate::~QScriptValuePrivate()
+diff --git a/src/qscriptvalueimpl_p.h b/src/qscriptvalueimpl_p.h
+index cf2695b..72b3252 100644
+--- a/src/qscriptvalueimpl_p.h
++++ b/src/qscriptvalueimpl_p.h
+@@ -64,6 +64,7 @@
+ #include "qscriptcontextfwd_p.h"
+
+ #include
++#include
+
+ QT_BEGIN_NAMESPACE
+
+@@ -348,7 +349,7 @@ inline QObject *QScriptValueImpl::toQObject() const
+ return data->value;
+ } else if (isVariant()) {
+ int type = variantValue().userType();
+- if ((type == QMetaType::QObjectStar) || (type == QMetaType::QWidgetStar))
++ if ((type == QMetaType::QObjectStar) || (type == qMetaTypeId()))
+ return *reinterpret_cast(variantValue().constData());
+ }
+ #endif
diff --git a/libports/src/lib/qt5/patches/series b/libports/src/lib/qt5/patches/series
new file mode 100644
index 0000000000..e7343d11fe
--- /dev/null
+++ b/libports/src/lib/qt5/patches/series
@@ -0,0 +1,14 @@
+qt5_configuration.patch
+qt5_generated_headers.patch
+qt5_qtbase_genode.patch
+qt5_qtbase_virtual_deletelater.patch
+qt5_qtbase_lwip_connect_semantics_adaption.patch
+qt5_qpa.patch
+qt5_qarraydata.patch
+qt5_qwidgetanimator.patch
+qt5_qwidgetwindow.patch
+qt5_qtscript.patch
+qt5_qtnetwork.patch
+qt5_qtwebkit.patch
+qt5_textedit_example.patch
+qt5_tools.patch
diff --git a/libports/src/lib/qt5/qnitpickerviewwidget/qnitpickerviewwidget.cpp b/libports/src/lib/qt5/qnitpickerviewwidget/qnitpickerviewwidget.cpp
new file mode 100644
index 0000000000..b8baa2a662
--- /dev/null
+++ b/libports/src/lib/qt5/qnitpickerviewwidget/qnitpickerviewwidget.cpp
@@ -0,0 +1,282 @@
+/*
+ * \brief A Qt Widget that shows a nitpicker view
+ * \author Christian Prochaska
+ * \date 2010-08-26
+ */
+
+#include
+
+#include
+
+#include
+#if 0
+#include
+#include
+#endif
+
+#include
+
+
+QNitpickerViewWidget::QNitpickerViewWidget(QWidget *parent)
+ : QWidget(parent), vc(0), orig_w(0), orig_h(0), orig_buf_x(0), orig_buf_y(0)
+{
+}
+
+
+void QNitpickerViewWidget::setNitpickerView(Nitpicker::View_capability view, int buf_x, int buf_y, int w, int h)
+{
+ orig_buf_x = buf_x;
+ orig_buf_y = buf_y;
+ orig_w = w;
+ orig_h = h;
+// PDBG("orig_w = %d, orig_h = %d", orig_w, orig_h);
+ vc = new Nitpicker::View_client(view);
+ setFixedSize(orig_w, orig_h);
+}
+
+
+QNitpickerViewWidget::~QNitpickerViewWidget()
+{
+ delete vc;
+}
+
+
+void QNitpickerViewWidget::showEvent(QShowEvent *event)
+{
+// qDebug() << "showEvent()";
+#if 0
+ connect(qwsServer, SIGNAL(windowEvent(QWSWindow*, QWSServer::WindowEvent)),
+ this, SLOT(windowEvent(QWSWindow*, QWSServer::WindowEvent)));
+#endif
+ QWidget::showEvent(event);
+}
+
+void QNitpickerViewWidget::hideEvent(QHideEvent *event)
+{
+// qDebug() << "hideEvent()";
+#if 0
+ disconnect(this, SLOT(windowEvent(QWSWindow*, QWSServer::WindowEvent)));
+#endif
+ QWidget::hideEvent(event);
+
+ if (vc)
+ vc->viewport(mapToGlobal(pos()).x(), mapToGlobal(pos()).y(), 0, 0, orig_buf_x, orig_buf_y, 1);
+}
+
+void QNitpickerViewWidget::paintEvent(QPaintEvent *event)
+{
+ QWidget::paintEvent(event);
+
+ if (!vc)
+ return;
+
+ /* mark all sliders as unchecked */
+ QHashIterator i(_scrollbars);
+ while(i.hasNext()) {
+ i.next();
+ _scrollbars.insert(i.key(), false);
+ }
+
+#if 0
+// qDebug() << "paintEvent()";
+ qDebug() << "geometry: " << geometry(); /* widget relative to parent widget */
+ qDebug() << "rect: " << rect(); /* (0, 0, width(), height()) without frames */
+ qDebug() << "event->rect(): " << event->rect();
+ qDebug() << "event->region(): " << event->region();
+ qDebug() << "global(0, 0): " << mapToGlobal(QPoint(0, 0));
+ qDebug() << "x(): " << x() << "y(): " << y();
+ qDebug() << "global(x, y): " << mapToGlobal(QPoint(x(), y()));
+ qDebug() << "window =" << window();
+// qDebug() << "window->geometry() =" << window()->geometry();
+// qDebug() << "mapToGlobal(window->geometry().topLeft()) =" << mapToGlobal(window()->geometry().topLeft());
+ qDebug() << "window->rect().topLeft() =" << window()->rect().topLeft();
+ qDebug() << "mapToGlobal(window->rect().topLeft()) =" << mapToGlobal(window()->rect().topLeft());
+ qDebug() << "mapToGlobal(window->childrenRect().topLeft()) =" << mapToGlobal(window()->childrenRect().topLeft());
+ qDebug() << "mapToGlobal(window->contentsRect().topLeft()) =" << mapToGlobal(window()->contentsRect().topLeft());
+ qDebug() << "mapToGlobal(mask().boundingRect().bottomRight()) =" << mapToGlobal(mask().boundingRect().bottomRight());
+#endif
+
+// QPainter painter(this);
+// painter.fillRect(rect(), Qt::black);
+
+ QWidget *parent = parentWidget();
+
+ int w = 0;
+ int h = 0;
+
+ int diff_x = 0;
+ int diff_y = 0;
+
+ int x0 = mapToGlobal(QPoint(0, 0)).x();
+// qDebug() << "x0 = " << x0;
+ int x1 = mapToGlobal(QPoint(orig_w - 1, 0)).x();
+// qDebug() << "x1 = " << x1;
+ int y0 = mapToGlobal(QPoint(0, 0)).y();
+// qDebug() << "y0 = " << y0;
+ int y1 = mapToGlobal(QPoint(0, orig_h - 1)).y();
+// qDebug() << "y1 = " << y1;
+
+ while(parent) {
+#if 0
+ qDebug() << "parent =" << parent;
+ qDebug() << "parent's rect: " << parent->rect();
+ qDebug() << "parent's children rect:" << parent->childrenRect();
+ qDebug() << "parent's contents rect:" << parent->contentsRect();
+
+ /* start of view = most right window start position */
+// qDebug() << "parent->geometry() =" << parent->geometry();
+// qDebug() << "parent->frameGeometry() =" << parent->frameGeometry();
+// qDebug() << "mapToGlobal(parent->frameGeometry().topLeft()) =" << parent->mapToGlobal(parent->frameGeometry().topLeft());
+ qDebug() << "mapToGlobal(parent->geometry().bottomRight()) =" << parent->mapToGlobal(parent->geometry().bottomRight());
+ qDebug() << "mapToGlobal(parent->rect().topLeft()) =" << parent->mapToGlobal(parent->rect().topLeft());
+ qDebug() << "mapToGlobal(parent->rect().bottomRight()) =" << parent->mapToGlobal(parent->rect().bottomRight());
+ qDebug() << "mapToGlobal(parent->childrenRect().topLeft()) =" << parent->mapToGlobal(parent->childrenRect().topLeft());
+ qDebug() << "mapToGlobal(parent->childrenRect().bottomRight()) =" << parent->mapToGlobal(parent->childrenRect().bottomRight());
+ qDebug() << "mapToGlobal(parent->contentsRect().topLeft()) =" << parent->mapToGlobal(parent->contentsRect().topLeft());
+ qDebug() << "mapToGlobal(parent->contentsRect().bottomRight()) =" << parent->mapToGlobal(parent->contentsRect().bottomRight());
+ qDebug() << "parentWidget()->childAt(" << geometry().topRight() << ") = " << parentWidget()->childAt(geometry().topRight());
+ qDebug() << "visibleRegion() = " << visibleRegion();
+ qDebug() << "geometry().contains(" << geometry().topRight() << ") = " << geometry().contains(geometry().topRight());
+ qDebug() << "mask() = " << mask();
+#endif
+
+ if (parent->inherits("QAbstractScrollArea")) {
+ QAbstractScrollArea *scrollarea = qobject_cast(parent);
+ QScrollBar *scrollbar;
+
+ scrollbar = scrollarea->horizontalScrollBar();
+ if (!_scrollbars.contains(scrollbar)) {
+ connect(scrollbar, SIGNAL(valueChanged(int)), this, SLOT(valueChanged()));
+ connect(scrollbar, SIGNAL(destroyed(QObject*)), this, SLOT(destroyed(QObject*)));
+ }
+ /* update/insert value */
+ _scrollbars.insert(scrollbar, true);
+
+ scrollbar = scrollarea->verticalScrollBar();
+ if (!_scrollbars.contains(scrollbar)) {
+ connect(scrollbar, SIGNAL(valueChanged(int)), this, SLOT(valueChanged()));
+ connect(scrollbar, SIGNAL(destroyed(QObject*)), this, SLOT(destroyed(QObject*)));
+ }
+ /* update/insert value */
+ _scrollbars.insert(scrollbar, true);
+
+// w = qMin(w, parent->contentsRect().width() + parent->childrenRect().x());
+// qDebug() << "mapToGlobal(viewport->rect().topLeft()) =" << scrollarea->viewport()->mapToGlobal(scrollarea->viewport()->rect().topLeft());
+// qDebug() << "mapToGlobal(viewport->rect().bottomRight()) =" << scrollarea->viewport()->mapToGlobal(scrollarea->viewport()->rect().bottomRight());
+ }
+
+ x0 = qMax(x0, parent->mapToGlobal(parent->contentsRect().topLeft()).x());
+// qDebug() << "x0 = " << x0;
+ x1 = qMin(x1, parent->mapToGlobal(parent->contentsRect().bottomRight()).x());
+// qDebug() << "x1 = " << x1;
+ y0 = qMax(y0, parent->mapToGlobal(parent->contentsRect().topLeft()).y());
+// qDebug() << "y0 = " << y0;
+ y1 = qMin(y1, parent->mapToGlobal(parent->contentsRect().bottomRight()).y());
+// qDebug() << "y1 = " << y1;
+
+ //w = qMin(w, parent->contentsRect().width() /*+ parent->childrenRect().x()*/);
+ w = x1 - x0 + 1;
+// qDebug() << "w = " << w;
+ h = y1 - y0 + 1;
+// qDebug() << "h = " << h;
+
+ if (parent->childrenRect().x() < 0) {
+ diff_x += parent->childrenRect().x();
+ }
+
+ if (parent->childrenRect().y() < 0) {
+ diff_y += parent->childrenRect().y();
+ }
+
+ parent = parent->parentWidget();
+ }
+
+ /* disconnect and remove any scrollbar that is not in the hierarchy anymore */
+ i.toBack();
+ while(i.hasNext()) {
+ i.next();
+ if (_scrollbars.value(i.key()) == false) {
+ disconnect(i.key(), SIGNAL(valueChanged(int)), this, SLOT(valueChanged()));
+ disconnect(i.key(), SIGNAL(destroyed(QObject*)), this, SLOT(destroyed(QObject*)));
+ _scrollbars.remove(i.key());
+ }
+ }
+
+ /* argument to mapToGlobal() is relative to the Widget's origin
+ * the plugin view starts at (0, 0)
+ */
+ if (mask().isEmpty()) {
+// PDBG("x0 = %d, y0 = %d, w = %d, h = %d, buf_x = %d, buf_y = %d", x0, y0, w, h, orig_buf_x + diff_x, orig_buf_y + diff_y);
+ vc->viewport(x0,
+ y0,
+ /*qMin(width(), w)*/w,
+ /*qMin(height(), h)*/h,
+ orig_buf_x + diff_x,
+ orig_buf_y + diff_y,
+ true);
+ } else {
+// PDBG("x = %d, y = %d, w = %d, h = %d, buf_x = %d, buf_y = %d", mapToGlobal(mask().boundingRect().topLeft()).x(), mapToGlobal(mask().boundingRect().topLeft()).y(), mask().boundingRect().width(), mask().boundingRect().height(), orig_buf_x + diff_x, orig_buf_y + diff_y);
+ vc->viewport(mapToGlobal(mask().boundingRect().topLeft()).x(),
+ mapToGlobal(mask().boundingRect().topLeft()).y(),
+ mask().boundingRect().width(),
+ mask().boundingRect().height(),
+ orig_buf_x + diff_x,
+ orig_buf_y + diff_y,
+ true);
+ }
+#if 0
+ /* bring the plugin view to the front of the Qt window */
+ QWSNitpickerWindowSurface *ws = static_cast(windowSurface());
+ vc->stack(ws->view_cap(), false, true);
+#endif
+}
+#if 0
+void QNitpickerViewWidget::windowEvent(QWSWindow *window,
+ QWSServer::WindowEvent eventType)
+{
+ if (this->window()->windowSurface() && (window->winId() == static_cast(this->window()->windowSurface())->winId())) {
+
+ switch (eventType) {
+
+ /* the window has changed its geometry */
+ case QWSServer::Geometry:
+ {
+ if (isVisible()) {
+ QPaintEvent e(rect());
+ paintEvent(&e);
+ }
+ break;
+ }
+
+ case QWSServer::Raise:
+ {
+ if (vc) {
+ try {
+ vc->stack(Nitpicker::View_capability(), true, true);
+ } catch (Genode::Ipc_error) {
+ delete vc;
+ vc = 0;
+ }
+ }
+ break;
+ }
+
+ default:
+ break;
+ }
+ }
+}
+#endif
+void QNitpickerViewWidget::valueChanged()
+{
+// qDebug() << "valueChanged()";
+ if (isVisible()) {
+ QPaintEvent e(rect());
+ paintEvent(&e);
+ }
+}
+
+void QNitpickerViewWidget::destroyed(QObject *obj)
+{
+ _scrollbars.remove(qobject_cast(obj));
+}
diff --git a/libports/src/lib/qt5/qpluginwidget/qpluginwidget.cpp b/libports/src/lib/qt5/qpluginwidget/qpluginwidget.cpp
new file mode 100644
index 0000000000..bb617f2aeb
--- /dev/null
+++ b/libports/src/lib/qt5/qpluginwidget/qpluginwidget.cpp
@@ -0,0 +1,395 @@
+/*
+ * \brief A Qt Widget that can load a plugin application and show its Nitpicker view
+ * \author Christian Prochaska
+ * \date 2010-08-26
+ */
+
+#include
+#include
+#include
+#include
+#include
+
+#include
+#include
+
+#include
+#if 0
+#include
+#endif
+
+#include
+
+QPluginWidget *QPluginWidget::_last = 0;
+
+using namespace Genode;
+
+
+const char *config = " \
+ \
+ \
+ \
+ \
+ \
+ \
+ \
+ \
+ \
+ \
+ \
+ \
+ \
+ \
+ \
+ \
+ \
+ \
+ \
+ \
+ \
+ \
+ \
+ \
+ \
+ \
+ \
+ \
+ \
+ \
+ \
+ \
+ \
+ \
+ \
+";
+
+
+class Signal_wait_thread : public QThread
+{
+ private:
+
+ Signal_receiver &_signal_receiver;
+ Timed_semaphore &_timeout_semaphore;
+
+ protected:
+
+ void run()
+ {
+ _signal_receiver.wait_for_signal();
+ _timeout_semaphore.up();
+ }
+
+ public:
+
+ Signal_wait_thread(Signal_receiver &signal_receiver, Timed_semaphore &timeout_semaphore)
+ : _signal_receiver(signal_receiver),
+ _timeout_semaphore(timeout_semaphore) { }
+};
+
+
+PluginStarter::PluginStarter(QUrl plugin_url, QString &args,
+ int max_width, int max_height)
+: _plugin_url(plugin_url),
+ _args(args.toLatin1()),
+ _max_width(max_width),
+ _max_height(max_height),
+ _pc(0),
+ _plugin_loading_state(LOADING),
+ _qnam(0),
+ _reply(0)
+{
+}
+
+
+void PluginStarter::_start_plugin(QString &file_name, QByteArray const &file_buf)
+{
+ if (file_name.endsWith(".gz")) {
+ file_name.remove(".gz");
+
+ uint32_t file_size = *(uint32_t*)(file_buf.constData() + file_buf.size() - sizeof(uint32_t));
+
+ PDBG("file_size_uncompressed = %u", file_size);
+
+ size_t ram_quota = Arg_string::find_arg(_args.constData(), "ram_quota").long_value(0) + file_size;
+
+ if ((long)env()->ram_session()->avail() - (long)ram_quota < QPluginWidget::RAM_QUOTA) {
+ PERR("quota exceeded");
+ _plugin_loading_state = QUOTA_EXCEEDED_ERROR;
+ return;
+ }
+
+ _pc = new Loader::Connection(ram_quota);
+
+ Dataspace_capability ds = _pc->alloc_rom_module(file_name.toUtf8().constData(), file_size);
+ if (ds.valid()) {
+ void *ds_addr = env()->rm_session()->attach(ds);
+
+ z_stream zs;
+ zs.next_in = (Bytef*)(file_buf.data());
+ zs.avail_in = file_buf.size();
+ zs.total_in = 0;
+ zs.next_out = (Bytef*)ds_addr;
+ zs.avail_out = file_size;
+ zs.total_out = 0;
+ zs.zalloc = Z_NULL;
+ zs.zfree = Z_NULL;
+
+ /* enable gzip format detection */
+ if (inflateInit2(&zs, 16 + MAX_WBITS) != Z_OK) {
+ PERR("inflateInit2() failed");
+ _plugin_loading_state = INFLATE_ERROR;
+
+ inflateEnd(&zs);
+ env()->rm_session()->detach(ds_addr);
+ return;
+ }
+
+ /* uncompress */
+ if (inflate(&zs, Z_SYNC_FLUSH) != Z_STREAM_END) {
+ PERR("inflate() failed");
+ _plugin_loading_state = INFLATE_ERROR;
+
+ inflateEnd(&zs);
+ env()->rm_session()->detach(ds_addr);
+ return;
+ }
+
+ inflateEnd(&zs);
+
+ env()->rm_session()->detach(ds_addr);
+ _pc->commit_rom_module(file_name.toUtf8().constData());
+ }
+ } else {
+ size_t ram_quota = Arg_string::find_arg(_args.constData(), "ram_quota").long_value(0);
+
+ if ((long)env()->ram_session()->avail() - (long)ram_quota < QPluginWidget::RAM_QUOTA) {
+ _plugin_loading_state = QUOTA_EXCEEDED_ERROR;
+ return;
+ }
+
+ _pc = new Loader::Connection(ram_quota);
+
+ Dataspace_capability plugin_ds = _pc->alloc_rom_module("plugin.tar", file_buf.size());
+ if (plugin_ds.valid()) {
+ void *plugin_ds_addr = env()->rm_session()->attach(plugin_ds);
+ ::memcpy(plugin_ds_addr, file_buf.constData(), file_buf.size());
+ env()->rm_session()->detach(plugin_ds_addr);
+ _pc->commit_rom_module("plugin.tar");
+ }
+ }
+
+ Dataspace_capability config_ds = _pc->alloc_rom_module("config", ::strlen(config) + 1);
+ if (config_ds.valid()) {
+ void *config_ds_addr = env()->rm_session()->attach(config_ds);
+ ::memcpy(config_ds_addr, config, ::strlen(config) + 1);
+ env()->rm_session()->detach(config_ds_addr);
+ _pc->commit_rom_module("config");
+ }
+
+ Signal_context sig_ctx;
+ Signal_receiver sig_rec;
+
+ _pc->view_ready_sigh(sig_rec.manage(&sig_ctx));
+ _pc->constrain_geometry(_max_width, _max_height);
+ _pc->start("init", "init");
+
+ Timed_semaphore view_ready_semaphore;
+ Signal_wait_thread signal_wait_thread(sig_rec, view_ready_semaphore);
+ signal_wait_thread.start();
+ try {
+ view_ready_semaphore.down(10000);
+ _plugin_loading_state = LOADED;
+ } catch (Timeout_exception) {
+ _plugin_loading_state = TIMEOUT_EXCEPTION;
+ signal_wait_thread.terminate();
+ }
+ signal_wait_thread.wait();
+}
+
+
+void PluginStarter::run()
+{
+ if (_plugin_url.scheme() == "rom") {
+
+ QString file_name = _plugin_url.path().remove("/");
+
+ try {
+ Rom_connection rc(file_name.toLatin1().constData());
+
+ Dataspace_capability rom_ds = rc.dataspace();
+
+ char const *rom_ds_addr = (char const *)env()->rm_session()->attach(rom_ds);
+
+ QByteArray file_buf = QByteArray::fromRawData(rom_ds_addr, Dataspace_client(rom_ds).size());
+
+ _start_plugin(file_name, file_buf);
+
+ env()->rm_session()->detach(rom_ds_addr);
+
+ } catch (Rom_connection::Rom_connection_failed) {
+ _plugin_loading_state = ROM_CONNECTION_FAILED_EXCEPTION;
+ }
+
+ emit finished();
+
+ } else if (_plugin_url.scheme() == "http") {
+
+ _qnam = new QNetworkAccessManager();
+ _reply = _qnam->get(QNetworkRequest(_plugin_url));
+
+ connect(_reply, SIGNAL(finished()), this, SLOT(networkReplyFinished()));
+ }
+
+ exec();
+
+ delete _pc;
+
+ moveToThread(QApplication::instance()->thread());
+}
+
+
+void PluginStarter::networkReplyFinished()
+{
+ if (_reply->error() != QNetworkReply::NoError) {
+ _plugin_loading_state = NETWORK_ERROR;
+ _plugin_loading_error_string = _reply->errorString();
+ _reply->deleteLater();
+ emit finished();
+ return;
+ }
+
+ qDebug() << "download finished, size = " << _reply->size();
+
+ QString file_name = _plugin_url.path().remove("/");;
+ QByteArray file_buf = _reply->readAll();
+
+ _start_plugin(file_name, file_buf);
+
+ _reply->deleteLater();
+ _qnam->deleteLater();
+
+ emit finished();
+}
+
+
+Nitpicker::View_capability PluginStarter::plugin_view(int *w, int *h, int *buf_x, int *buf_y)
+{
+ Loader::Session::View_geometry geometry = _pc->view_geometry();
+ if (w) *w = geometry.width;
+ if (h) *h = geometry.height;
+ if (buf_x) *buf_x = geometry.buf_x;
+ if (buf_y) *buf_y = geometry.buf_y;
+ return _pc->view();
+}
+
+
+QPluginWidget::QPluginWidget(QWidget *parent, QUrl plugin_url, QString &args,
+ int max_width, int max_height)
+:
+ QNitpickerViewWidget(parent),
+ _plugin_loading_state(LOADING),
+ _plugin_starter(0),
+ _max_width(max_width),
+ _max_height(max_height)
+{
+ qDebug() << "plugin_url = " << plugin_url;
+ qDebug() << "plugin_url.scheme() = " << plugin_url.scheme();
+ qDebug() << "plugin_url.path() = " << plugin_url.path();
+ qDebug() << "plugin_url.toLocalFile() = " << plugin_url.toLocalFile();
+ qDebug() << "args =" << args;
+
+ if (_last) {
+ _last->cleanup();
+ _last = this;
+ }
+
+ _plugin_starter = new PluginStarter(plugin_url, args, max_width, max_height);
+ _plugin_starter->moveToThread(_plugin_starter);
+ connect(_plugin_starter, SIGNAL(finished()), this, SLOT(pluginStartFinished()));
+ _plugin_starter->start();
+}
+
+
+QPluginWidget::~QPluginWidget()
+{
+ cleanup();
+
+ if (_last == this)
+ _last = 0;
+}
+
+
+void QPluginWidget::cleanup()
+{
+ if (_plugin_starter) {
+ /* make the thread leave the event loop */
+ _plugin_starter->exit();
+ /* wait until the thread has left the run() function */
+ _plugin_starter->wait();
+ /* delete the QThread object */
+ delete _plugin_starter;
+ _plugin_starter = 0;
+ delete vc;
+ vc = 0;
+ }
+}
+
+
+void QPluginWidget::paintEvent(QPaintEvent *event)
+{
+ if (_plugin_loading_state == LOADED)
+ QNitpickerViewWidget::paintEvent(event);
+ else {
+ QWidget::paintEvent(event);
+ QPainter painter(this);
+ painter.drawRect(0, 0, width() - 1, height() - 1);
+ switch (_plugin_loading_state) {
+ case LOADING:
+ painter.drawText(rect(), Qt::AlignCenter, tr("Loading plugin..."));
+ break;
+ case NETWORK_ERROR:
+ painter.drawText(rect(), Qt::AlignCenter, tr("Could not load plugin: ") +
+ _plugin_loading_error_string);
+ break;
+ case INFLATE_ERROR:
+ painter.drawText(rect(), Qt::AlignCenter,
+ tr("Could not load plugin: error decompressing gzipped file."));
+ break;
+ case QUOTA_EXCEEDED_ERROR:
+ painter.drawText(rect(), Qt::AlignCenter,
+ tr("Could not load plugin: not enough memory."));
+ break;
+ case TIMEOUT_EXCEPTION:
+ painter.drawText(rect(), Qt::AlignCenter, tr("Could not load plugin: timeout."));
+ break;
+ case ROM_CONNECTION_FAILED_EXCEPTION:
+ painter.drawText(rect(), Qt::AlignCenter, tr("Could not load plugin: file not found."));
+ break;
+ default:
+ break;
+ }
+ }
+}
+
+
+void QPluginWidget::pluginStartFinished()
+{
+ _plugin_loading_state = _plugin_starter->plugin_loading_state();
+
+ if (_plugin_loading_state == LOADED) {
+ Nitpicker::View_capability view = _plugin_starter->plugin_view(&orig_w, &orig_h, &orig_buf_x, &orig_buf_y);
+
+ vc = new Nitpicker::View_client(view);
+
+ setFixedSize((_max_width > -1) ? qMin(orig_w, _max_width) : orig_w,
+ (_max_height > -1) ? qMin(orig_h, _max_height) : orig_h);
+ } else {
+ _plugin_loading_error_string = _plugin_starter->plugin_loading_error_string();
+ setFixedSize((_max_width > -1) ? _max_width : 100,
+ (_max_height > -1) ? _max_height : 100);
+ cleanup();
+ }
+
+ update();
+}
+
diff --git a/libports/src/lib/qt5/qt_main.cc b/libports/src/lib/qt5/qt_main.cc
new file mode 100644
index 0000000000..7f81bceee0
--- /dev/null
+++ b/libports/src/lib/qt5/qt_main.cc
@@ -0,0 +1,77 @@
+/*
+ * \brief main() wrapper for customizing main()'s stack size
+ * \author Christian Prochaska
+ * \date 2008-08-20
+ */
+
+/*
+ * Copyright (C) 2008-2013 Genode Labs GmbH
+ *
+ * This file is part of the Genode OS framework, which is distributed
+ * under the terms of the GNU General Public License version 2.
+ */
+
+#ifdef QT_MAIN_STACK_SIZE
+
+#include
+#include
+#include
+
+#include
+
+using namespace Genode;
+
+extern int qt_main(int argc, char *argv[]);
+
+class Main_thread : public Thread_qt
+{
+ protected:
+
+ int _argc;
+ char **_argv;
+ Semaphore &_finished;
+ int _result;
+
+ public:
+
+ Main_thread(int argc, char *argv[], Semaphore &finished) :
+ Thread_qt("Qt main thread"),
+ _argc(argc),
+ _argv(argv),
+ _finished(finished),
+ _result(0) { }
+
+ virtual void entry()
+ {
+ /* call the real main() function */
+ _result = ::qt_main(_argc, _argv);
+
+ _finished.up();
+
+ sleep_forever();
+ }
+
+ int result() { return _result; }
+};
+
+#define qt_main main
+
+int main(int argc, char *argv[])
+{
+// PDBG("QT_MAIN_STACK_SIZE == %d", QT_MAIN_STACK_SIZE);
+
+ Semaphore finished;
+
+ Main_thread main_thread(argc, argv, finished);
+ main_thread.set_stack_size(QT_MAIN_STACK_SIZE);
+ main_thread.start();
+
+ /* wait for the thread to finish */
+ finished.down();
+
+// PDBG("main_thread finished");
+
+ return main_thread.result();
+}
+
+#endif /* QT_MAIN_STACK_SIZE */
diff --git a/libports/src/lib/qt5/qtbase/mkspecs/genode-g++/qmake.conf b/libports/src/lib/qt5/qtbase/mkspecs/genode-g++/qmake.conf
new file mode 100644
index 0000000000..f99671fc15
--- /dev/null
+++ b/libports/src/lib/qt5/qtbase/mkspecs/genode-g++/qmake.conf
@@ -0,0 +1,12 @@
+#
+# qmake configuration for genode-g++
+#
+
+MAKEFILE_GENERATOR = UNIX
+CONFIG += incremental gdb_dwarf_index
+QMAKE_INCREMENTAL_STYLE = sublib
+
+include(../common/linux.conf)
+include(../common/gcc-base-unix.conf)
+include(../common/g++-unix.conf)
+load(qt_config)
diff --git a/libports/src/lib/qt5/qtbase/mkspecs/genode-g++/qplatformdefs.h b/libports/src/lib/qt5/qtbase/mkspecs/genode-g++/qplatformdefs.h
new file mode 100644
index 0000000000..d3b5acfa14
--- /dev/null
+++ b/libports/src/lib/qt5/qtbase/mkspecs/genode-g++/qplatformdefs.h
@@ -0,0 +1,116 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the qmake spec of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QPLATFORMDEFS_H
+#define QPLATFORMDEFS_H
+
+// Get Qt defines/settings
+
+#include "qglobal.h"
+
+// Set any POSIX/XOPEN defines at the top of this file to turn on specific APIs
+
+// 1) need to reset default environment if _BSD_SOURCE is defined
+// 2) need to specify POSIX thread interfaces explicitly in glibc 2.0
+// 3) it seems older glibc need this to include the X/Open stuff
+#ifndef _GNU_SOURCE
+# define _GNU_SOURCE
+#endif
+
+#include
+
+
+// We are hot - unistd.h should have turned on the specific APIs we requested
+
+#ifndef Q_OS_GENODE
+#include
+#endif
+#include
+#include
+#include
+#include
+#include
+#include
+
+#include
+#include
+#include
+#include
+#ifndef Q_OS_GENODE
+#include
+#endif
+#include
+#include
+#include
+#include
+#ifdef Q_OS_GENODE
+#define QT_NO_IPV6IFNAME
+#endif
+#ifndef QT_NO_IPV6IFNAME
+#include
+#endif
+
+#define QT_USE_XOPEN_LFS_EXTENSIONS
+#ifdef Q_OS_GENODE
+#include "../../../../../contrib/qt-everywhere-opensource-src-5.1.0/qtbase/mkspecs/common/posix/qplatformdefs.h"
+#else
+#include "../common/posix/qplatformdefs.h"
+#endif
+
+#ifdef Q_OS_GENODE
+#undef QT_OPEN_LARGEFILE
+#define QT_OPEN_LARGEFILE 0
+#endif
+
+#undef QT_SOCKLEN_T
+
+#if (defined(__GLIBC__) && (__GLIBC__ >= 2)) || defined(Q_OS_GENODE)
+#define QT_SOCKLEN_T socklen_t
+#else
+#define QT_SOCKLEN_T int
+#endif
+
+#if defined(_XOPEN_SOURCE) && (_XOPEN_SOURCE >= 500)
+#define QT_SNPRINTF ::snprintf
+#define QT_VSNPRINTF ::vsnprintf
+#endif
+
+#endif // QPLATFORMDEFS_H
diff --git a/libports/src/lib/qt5/qtbase/src/corelib/global/qconfig-genode.h b/libports/src/lib/qt5/qtbase/src/corelib/global/qconfig-genode.h
new file mode 100644
index 0000000000..68c47e9361
--- /dev/null
+++ b/libports/src/lib/qt5/qtbase/src/corelib/global/qconfig-genode.h
@@ -0,0 +1,550 @@
+/* Data structures */
+#ifndef QT_NO_STL
+# define QT_NO_STL
+#endif
+//#ifndef QT_NO_TEXTDATE
+//# define QT_NO_TEXTDATE
+//#endif
+//#ifndef QT_NO_DATESTRING
+//# define QT_NO_DATESTRING
+//#endif
+
+/* Dialogs */
+//#ifndef QT_NO_COLORDIALOG
+//# define QT_NO_COLORDIALOG
+//#endif
+//#ifndef QT_NO_ERRORMESSAGE
+//# define QT_NO_ERRORMESSAGE
+//#endif
+//#ifndef QT_NO_FILEDIALOG
+//# define QT_NO_FILEDIALOG
+//#endif
+//#ifndef QT_NO_FONTDIALOG
+//# define QT_NO_FONTDIALOG
+//#endif
+//#ifndef QT_NO_INPUTDIALOG
+//# define QT_NO_INPUTDIALOG
+//#endif
+//#ifndef QT_NO_MESSAGEBOX
+//# define QT_NO_MESSAGEBOX
+//#endif
+#ifndef QT_NO_PRINTDIALOG
+# define QT_NO_PRINTDIALOG
+#endif
+#ifndef QT_NO_PRINTPREVIEWDIALOG
+# define QT_NO_PRINTPREVIEWDIALOG
+#endif
+//#ifndef QT_NO_PROGRESSDIALOG
+//# define QT_NO_PROGRESSDIALOG
+//#endif
+//#ifndef QT_NO_TABDIALOG
+//# define QT_NO_TABDIALOG
+//#endif
+//#ifndef QT_NO_WIZARD
+//# define QT_NO_WIZARD
+//#endif
+
+/* File I/O */
+//#ifndef QT_NO_DOM
+//# define QT_NO_DOM
+//#endif
+//#ifndef QT_NO_FILESYSTEMWATCHER
+//# define QT_NO_FILESYSTEMWATCHER
+//#endif
+//#ifndef QT_NO_FILESYSTEMMODEL
+//# define QT_NO_FILESYSTEMMODEL
+//#endif
+//#ifndef QT_NO_PROCESS
+//# define QT_NO_PROCESS
+//#endif
+//#ifndef QT_NO_TEMPORARYFILE
+//# define QT_NO_TEMPORARYFILE
+//#endif
+//#ifndef QT_NO_SETTINGS
+//# define QT_NO_SETTINGS
+//#endif
+//#ifndef QT_NO_LIBRARY
+//# define QT_NO_LIBRARY
+//#endif
+
+/* Fonts */
+//#ifndef QT_NO_FREETYPE
+//# define QT_NO_FREETYPE
+//#endif
+#ifndef QT_NO_QWS_QPF2
+# define QT_NO_QWS_QPF2
+#endif
+#ifndef QT_FONTS_ARE_RESOURCES
+# define QT_FONTS_ARE_RESOURCES
+#endif
+
+
+/* Images */
+//#ifndef QT_NO_IMAGEFORMATPLUGIN
+//# define QT_NO_IMAGEFORMATPLUGIN
+//#endif
+//#ifndef QT_NO_IMAGEFORMAT_BMP
+//# define QT_NO_IMAGEFORMAT_BMP
+//#endif
+//#ifndef QT_NO_IMAGEFORMAT_JPEG
+//# define QT_NO_IMAGEFORMAT_JPEG
+//#endif
+//#ifndef QT_NO_IMAGEFORMAT_PNG
+//# define QT_NO_IMAGEFORMAT_PNG
+//#endif
+//#ifndef QT_NO_IMAGEFORMAT_PPM
+//# define QT_NO_IMAGEFORMAT_PPM
+//#endif
+//#ifndef QT_NO_IMAGEFORMAT_XBM
+//# define QT_NO_IMAGEFORMAT_XBM
+//#endif
+//#ifndef QT_NO_IMAGEFORMAT_XPM
+//# define QT_NO_IMAGEFORMAT_XPM
+//#endif
+//#ifndef QT_NO_IMAGE_HEURISTIC_MASK
+//# define QT_NO_IMAGE_HEURISTIC_MASK
+//#endif
+//#ifndef QT_NO_MOVIE
+//# define QT_NO_MOVIE
+//#endif
+
+/* Internationalization */
+//#ifndef QT_NO_BIG_CODECS
+//# define QT_NO_BIG_CODECS
+//#endif
+//#ifndef QT_NO_QWS_INPUTMETHODS
+//# define QT_NO_QWS_INPUTMETHODS
+//#endif
+//#ifndef QT_NO_TEXTCODEC
+//# define QT_NO_TEXTCODEC
+//#endif
+//#ifndef QT_NO_CODECS
+//# define QT_NO_CODECS
+//#endif
+//#ifndef QT_NO_TRANSLATION
+//# define QT_NO_TRANSLATION
+//#endif
+//#ifndef QT_NO_TRANSLATION_UTF8
+//# define QT_NO_TRANSLATION_UTF8
+//#endif
+
+/* ItemViews */
+//#ifndef QT_NO_ITEMVIEWS
+//# define QT_NO_ITEMVIEWS
+//#endif
+//#ifndef QT_NO_DATAWIDGETMAPPER
+//# define QT_NO_DATAWIDGETMAPPER
+//#endif
+//#ifndef QT_NO_DIRMODEL
+//# define QT_NO_DIRMODEL
+//#endif
+//#ifndef QT_NO_LISTVIEW
+//# define QT_NO_LISTVIEW
+//#endif
+//#ifndef QT_NO_COLUMNVIEW
+//# define QT_NO_COLUMNVIEW
+//#endif
+//#ifndef QT_NO_PROXYMODEL
+//# define QT_NO_PROXYMODEL
+//#endif
+//#ifndef QT_NO_SORTFILTERPROXYMODEL
+//# define QT_NO_SORTFILTERPROXYMODEL
+//#endif
+//#ifndef QT_NO_STANDARDITEMMODEL
+//# define QT_NO_STANDARDITEMMODEL
+//#endif
+//#ifndef QT_NO_STRINGLISTMODEL
+//# define QT_NO_STRINGLISTMODEL
+//#endif
+//#ifndef QT_NO_TABLEVIEW
+//# define QT_NO_TABLEVIEW
+//#endif
+//#ifndef QT_NO_TREEVIEW
+//# define QT_NO_TREEVIEW
+//#endif
+
+/* Kernel */
+//#ifndef QT_NO_ACTION
+//# define QT_NO_ACTION
+//#endif
+//#ifndef QT_NO_CLIPBOARD
+//# define QT_NO_CLIPBOARD
+//#endif
+//#ifndef QT_NO_CSSPARSER
+//# define QT_NO_CSSPARSER
+//#endif
+//#ifndef QT_NO_CURSOR
+//# define QT_NO_CURSOR
+//#endif
+//#ifndef QT_NO_DRAGANDDROP
+//# define QT_NO_DRAGANDDROP
+//#endif
+//#ifndef QT_NO_EFFECTS
+//# define QT_NO_EFFECTS
+//#endif
+//#ifndef QT_NO_PROPERTIES
+//# define QT_NO_PROPERTIES
+//#endif
+#ifndef QT_NO_SESSIONMANAGER
+# define QT_NO_SESSIONMANAGER
+#endif
+#ifndef QT_NO_SHAREDMEMORY
+# define QT_NO_SHAREDMEMORY
+#endif
+//#ifndef QT_NO_SHORTCUT
+//# define QT_NO_SHORTCUT
+//#endif
+#ifndef QT_NO_SOUND
+# define QT_NO_SOUND
+#endif
+#ifndef QT_NO_SYSTEMLOCALE
+# define QT_NO_SYSTEMLOCALE
+#endif
+#ifndef QT_NO_SYSTEMSEMAPHORE
+# define QT_NO_SYSTEMSEMAPHORE
+#endif
+//#ifndef QT_NO_TABLETEVENT
+//# define QT_NO_TABLETEVENT
+//#endif
+//#ifndef QT_NO_TEXTHTMLPARSER
+//# define QT_NO_TEXTHTMLPARSER
+//#endif
+#ifndef QT_NO_CONCURRENT
+# define QT_NO_CONCURRENT
+#endif
+//#ifndef QT_NO_WHEELEVENT
+//# define QT_NO_WHEELEVENT
+//#endif
+//#ifndef QT_NO_XMLSTREAM
+//# define QT_NO_XMLSTREAM
+//#endif
+//#ifndef QT_NO_XMLSTREAMREADER
+//# define QT_NO_XMLSTREAMREADER
+//#endif
+//#ifndef QT_NO_XMLSTREAMWRITER
+//# define QT_NO_XMLSTREAMWRITER
+//#endif
+
+/* Networking */
+#ifndef QT_NO_COP
+# define QT_NO_COP
+#endif
+//#ifndef QT_NO_HOSTINFO
+//# define QT_NO_HOSTINFO
+//#endif
+//#ifndef QT_NO_HTTP
+//# define QT_NO_HTTP
+//#endif
+//#ifndef QT_NO_NETWORKPROXY
+//# define QT_NO_NETWORKPROXY
+//#endif
+//#ifndef QT_NO_SOCKS5
+//# define QT_NO_SOCKS5
+//#endif
+#ifndef QT_NO_UDPSOCKET
+# define QT_NO_UDPSOCKET
+#endif
+#ifndef QT_NO_URLINFO
+# define QT_NO_URLINFO
+#endif
+#ifndef QT_NO_FTP
+# define QT_NO_FTP
+#endif
+/* found in source files */
+//#ifndef QT_NO_LOCALSOCKET
+//# define QT_NO_LOCALSOCKET
+//#endif
+//#ifndef QT_NO_LOCALSERVER
+//# define QT_NO_LOCALSERVER
+//#endif
+#ifndef QT_NO_NETWORKINTERFACE
+# define QT_NO_NETWORKINTERFACE
+#endif
+
+
+/* Painting */
+//#ifndef QT_NO_COLORNAMES
+//# define QT_NO_COLORNAMES
+//#endif
+//#ifndef QT_NO_DIRECTPAINTER
+//# define QT_NO_DIRECTPAINTER
+//#endif
+//#ifndef QT_NO_PAINTONSCREEN
+//# define QT_NO_PAINTONSCREEN
+//#endif
+//#ifndef QT_NO_PAINT_DEBUG
+//# define QT_NO_PAINT_DEBUG
+//#endif
+//#ifndef QT_NO_PICTURE
+//# define QT_NO_PICTURE
+//#endif
+#ifndef QT_NO_PRINTER
+# define QT_NO_PRINTER
+#endif
+#ifndef QT_NO_CUPS
+# define QT_NO_CUPS
+#endif
+
+/* Qt for Embedded Linux */
+//#ifndef QT_NO_QWSEMBEDWIDGET
+//# define QT_NO_QWSEMBEDWIDGET
+//#endif
+//#ifndef QT_NO_QWS_ALPHA_CURSOR
+//# define QT_NO_QWS_ALPHA_CURSOR
+//#endif
+#ifndef QT_NO_QWS_CURSOR
+# define QT_NO_QWS_CURSOR
+#endif
+//#ifndef QT_NO_QWS_DECORATION_DEFAULT
+//# define QT_NO_QWS_DECORATION_DEFAULT
+//#endif
+//#ifndef QT_NO_QWS_DECORATION_STYLED
+//# define QT_NO_QWS_DECORATION_STYLED
+//#endif
+//#ifndef QT_NO_QWS_DECORATION_WINDOWS
+//# define QT_NO_QWS_DECORATION_WINDOWS
+//#endif
+//#ifndef QT_NO_QWS_MANAGER
+//# define QT_NO_QWS_MANAGER
+//#endif
+//#ifndef QT_NO_QWS_KEYBOARD
+//# define QT_NO_QWS_KEYBOARD
+//#endif
+//#ifndef QT_NO_QWS_MOUSE
+//# define QT_NO_QWS_MOUSE
+//#endif
+//#ifndef QT_NO_QWS_MOUSE_AUTO
+//# define QT_NO_QWS_MOUSE_AUTO
+//#endif
+//#ifndef QT_NO_QWS_MOUSE_MANUAL
+//# define QT_NO_QWS_MOUSE_MANUAL
+//#endif
+#ifndef QT_NO_QWS_MULTIPROCESS
+# define QT_NO_QWS_MULTIPROCESS
+#endif
+#ifndef QT_NO_QWS_SOUNDSERVER
+# define QT_NO_QWS_SOUNDSERVER
+#endif
+//#ifndef QT_NO_QWS_PROPERTIES
+//# define QT_NO_QWS_PROPERTIES
+//#endif
+//#ifndef QT_NO_QWS_PROXYSCREEN
+//# define QT_NO_QWS_PROXYSCREEN
+//#endif
+//#ifndef QT_NO_QWS_DYNAMICSCREENTRANSFORMATION
+//# define QT_NO_QWS_DYNAMICSCREENTRANSFORMATION
+//#endif
+
+/* SVG */
+//#ifndef QT_NO_SVG
+//# define QT_NO_SVG
+//#endif
+//#ifndef QT_NO_GRAPHICSSVGITEM
+//# define QT_NO_GRAPHICSSVGITEM
+//#endif
+//#ifndef QT_NO_SVGGENERATOR
+//# define QT_NO_SVGGENERATOR
+//#endif
+//#ifndef QT_NO_SVGRENDERER
+//# define QT_NO_SVGRENDERER
+//#endif
+//#ifndef QT_NO_SVGWIDGET
+//# define QT_NO_SVGWIDGET
+//#endif
+
+/* Styles */
+//#ifndef QT_NO_STYLE_FUSION
+//# define QT_NO_STYLE_FUSION
+//#endif
+//#ifndef QT_NO_STYLE_STYLESHEET
+//# define QT_NO_STYLE_STYLESHEET
+//#endif
+//#ifndef QT_NO_STYLE_WINDOWSCE
+//# define QT_NO_STYLE_WINDOWSCE
+//#endif
+//#ifndef QT_NO_STYLE_WINDOWSMOBILE
+//# define QT_NO_STYLE_WINDOWSMOBILE
+//#endif
+//#ifndef QT_NO_STYLE_WINDOWSVISTA
+//# define QT_NO_STYLE_WINDOWSVISTA
+//#endif
+//#ifndef QT_NO_STYLE_WINDOWSXP
+//# define QT_NO_STYLE_WINDOWSXP
+//#endif
+
+/* Utilities */
+//#ifndef QT_NO_ACCESSIBILITY
+//# define QT_NO_ACCESSIBILITY
+//#endif
+//#ifndef QT_NO_COMPLETER
+//# define QT_NO_COMPLETER
+//#endif
+//#ifndef QT_NO_DESKTOPSERVICES
+//# define QT_NO_DESKTOPSERVICES
+//#endif
+//#ifndef QT_NO_SCRIPT
+//# define QT_NO_SCRIPT
+//#endif
+//#ifndef QT_NO_SYSTEMTRAYICON
+//# define QT_NO_SYSTEMTRAYICON
+//#endif
+//#ifndef QT_NO_UNDOCOMMAND
+//# define QT_NO_UNDOCOMMAND
+//#endif
+//#ifndef QT_NO_UNDOGROUP
+//# define QT_NO_UNDOGROUP
+//#endif
+//#ifndef QT_NO_UNDOSTACK
+//# define QT_NO_UNDOSTACK
+//#endif
+//#ifndef QT_NO_UNDOVIEW
+//# define QT_NO_UNDOVIEW
+//#endif
+//#ifndef QT_NO_GESTURES
+//# define QT_NO_GESTURES
+//#endif
+
+/* Widgets */
+//#ifndef QT_NO_GROUPBOX
+//# define QT_NO_GROUPBOX
+//#endif
+//#ifndef QT_NO_BUTTONGROUP
+//# define QT_NO_BUTTONGROUP
+//#endif
+//#ifndef QT_NO_LCDNUMBER
+//# define QT_NO_LCDNUMBER
+//#endif
+//#ifndef QT_NO_LINEEDIT
+//# define QT_NO_LINEEDIT
+//#endif
+//#ifndef QT_NO_COMBOBOX
+//# define QT_NO_COMBOBOX
+//#endif
+//#ifndef QT_NO_FONTCOMBOBOX
+//# define QT_NO_FONTCOMBOBOX
+//#endif
+//#ifndef QT_NO_SPINBOX
+//# define QT_NO_SPINBOX
+//#endif
+//#ifndef QT_NO_CALENDARWIDGET
+//# define QT_NO_CALENDARWIDGET
+//#endif
+//#ifndef QT_NO_DATETIMEEDIT
+//# define QT_NO_DATETIMEEDIT
+//#endif
+//#ifndef QT_NO_LISTWIDGET
+//# define QT_NO_LISTWIDGET
+//#endif
+//#ifndef QT_NO_MENU
+//# define QT_NO_MENU
+//#endif
+//#ifndef QT_NO_CONTEXTMENU
+//# define QT_NO_CONTEXTMENU
+//#endif
+//#ifndef QT_NO_MAINWINDOW
+//# define QT_NO_MAINWINDOW
+//#endif
+//#ifndef QT_NO_DOCKWIDGET
+//# define QT_NO_DOCKWIDGET
+//#endif
+//#ifndef QT_NO_TOOLBAR
+//# define QT_NO_TOOLBAR
+//#endif
+//#ifndef QT_NO_MENUBAR
+//# define QT_NO_MENUBAR
+//#endif
+//#ifndef QT_NO_PROGRESSBAR
+//# define QT_NO_PROGRESSBAR
+//#endif
+//#ifndef QT_NO_RESIZEHANDLER
+//# define QT_NO_RESIZEHANDLER
+//#endif
+//#ifndef QT_NO_RUBBERBAND
+//# define QT_NO_RUBBERBAND
+//#endif
+//#ifndef QT_NO_SPLITTER
+//# define QT_NO_SPLITTER
+//#endif
+//#ifndef QT_NO_SIGNALMAPPER
+//# define QT_NO_SIGNALMAPPER
+//#endif
+//#ifndef QT_NO_SIZEGRIP
+//# define QT_NO_SIZEGRIP
+//#endif
+//#ifndef QT_NO_SLIDER
+//# define QT_NO_SLIDER
+//#endif
+//#ifndef QT_NO_DIAL
+//# define QT_NO_DIAL
+//#endif
+//#ifndef QT_NO_SCROLLBAR
+//# define QT_NO_SCROLLBAR
+//#endif
+//#ifndef QT_NO_SCROLLAREA
+//# define QT_NO_SCROLLAREA
+//#endif
+//#ifndef QT_NO_GRAPHICSVIEW
+//# define QT_NO_GRAPHICSVIEW
+//#endif
+//#ifndef QT_NO_PRINTPREVIEWWIDGET
+//# define QT_NO_PRINTPREVIEWWIDGET
+//#endif
+//#ifndef QT_NO_MDIAREA
+//# define QT_NO_MDIAREA
+//#endif
+//#ifndef QT_NO_TEXTEDIT
+//# define QT_NO_TEXTEDIT
+//#endif
+//#ifndef QT_NO_SYNTAXHIGHLIGHTER
+//# define QT_NO_SYNTAXHIGHLIGHTER
+//#endif
+//#ifndef QT_NO_TEXTBROWSER
+//# define QT_NO_TEXTBROWSER
+//#endif
+//#ifndef QT_NO_SPINWIDGET
+//# define QT_NO_SPINWIDGET
+//#endif
+//#ifndef QT_NO_SPLASHSCREEN
+//# define QT_NO_SPLASHSCREEN
+//#endif
+//#ifndef QT_NO_STACKEDWIDGET
+//# define QT_NO_STACKEDWIDGET
+//#endif
+//#ifndef QT_NO_TABWIDGET
+//# define QT_NO_TABWIDGET
+//#endif
+//#ifndef QT_NO_STATUSBAR
+//# define QT_NO_STATUSBAR
+//#endif
+//#ifndef QT_NO_STATUSTIP
+//# define QT_NO_STATUSTIP
+//#endif
+//#ifndef QT_NO_TABLEWIDGET
+//# define QT_NO_TABLEWIDGET
+//#endif
+//#ifndef QT_NO_TOOLBUTTON
+//# define QT_NO_TOOLBUTTON
+//#endif
+//#ifndef QT_NO_TABBAR
+//# define QT_NO_TABBAR
+//#endif
+//#ifndef QT_NO_TOOLBOX
+//# define QT_NO_TOOLBOX
+//#endif
+//#ifndef QT_NO_WHATSTHIS
+//# define QT_NO_WHATSTHIS
+//#endif
+//#ifndef QT_NO_TOOLTIP
+//# define QT_NO_TOOLTIP
+//#endif
+//#ifndef QT_NO_TREEWIDGET
+//# define QT_NO_TREEWIDGET
+//#endif
+//#ifndef QT_NO_VALIDATOR
+//# define QT_NO_VALIDATOR
+//#endif
+
+/* Windows */
+//#ifndef QT_NO_WIN_ACTIVEQT
+//# define QT_NO_WIN_ACTIVEQT
+//#endif
diff --git a/libports/src/lib/qt5/qtbase/src/corelib/global/qconfig.cpp b/libports/src/lib/qt5/qtbase/src/corelib/global/qconfig.cpp
new file mode 100644
index 0000000000..89d4e0fd58
--- /dev/null
+++ b/libports/src/lib/qt5/qtbase/src/corelib/global/qconfig.cpp
@@ -0,0 +1,39 @@
+/* License Info */
+static const char qt_configure_licensee_str [256 + 12] = "qt_lcnsuser=Open Source";
+static const char qt_configure_licensed_products_str [256 + 12] = "qt_lcnsprod=OpenSource";
+
+/* Installation date */
+static const char qt_configure_installation [12+11] = "qt_instdate=2013-05-23";
+
+/* Installation Info */
+static const char qt_configure_prefix_path_strs[][256 + 12] = {
+ "qt_prfxpath=:/qt",
+ "qt_docspath=:/qt/doc",
+ "qt_hdrspath=:/qt/include",
+ "qt_libspath=:/qt/lib",
+ "qt_lbexpath=:/qt/libexec",
+ "qt_binspath=:/qt/bin",
+ "qt_plugpath=:/qt/plugins",
+ "qt_impspath=:/qt/imports",
+ "qt_qml2path=:/qt/qml",
+ "qt_adatpath=:/qt",
+ "qt_datapath=:/qt",
+ "qt_trnspath=:/qt/translations",
+ "qt_xmplpath=:/qt/examples",
+ "qt_tstspath=:/qt/tests",
+#ifdef QT_BUILD_QMAKE
+ "qt_ssrtpath=",
+ "qt_hpfxpath=:/qt",
+ "qt_hbinpath=:/qt/bin",
+ "qt_hdatpath=:/qt",
+ "qt_targspec=genode-g++",
+ "qt_hostspec=linux-g++",
+#endif
+};
+static const char qt_configure_settings_path_str[256 + 12] = "qt_stngpath=:/qt/etc/xdg";
+
+/* strlen( "qt_lcnsxxxx" ) == 12 */
+#define QT_CONFIGURE_LICENSEE qt_configure_licensee_str + 12;
+#define QT_CONFIGURE_LICENSED_PRODUCTS qt_configure_licensed_products_str + 12;
+
+#define QT_CONFIGURE_SETTINGS_PATH qt_configure_settings_path_str + 12;
diff --git a/libports/src/lib/qt5/qtbase/src/corelib/global/qconfig.h b/libports/src/lib/qt5/qtbase/src/corelib/global/qconfig.h
new file mode 100644
index 0000000000..f9361ac946
--- /dev/null
+++ b/libports/src/lib/qt5/qtbase/src/corelib/global/qconfig.h
@@ -0,0 +1,195 @@
+#ifndef QT_BOOTSTRAPPED
+#include "qconfig-genode.h"
+#endif
+
+/* Qt Edition */
+#ifndef QT_EDITION
+# define QT_EDITION QT_EDITION_OPENSOURCE
+#endif
+
+/* Compile time features */
+#ifdef QT_ARCH_X86_64
+# define QT_POINTER_SIZE 8
+#endif
+#ifdef QT_ARCH_I386
+# define QT_POINTER_SIZE 4
+#endif
+
+//#define QT_REDUCE_RELOCATIONS
+
+// Compiler sub-arch support
+
+#if defined(QT_BUILTIN_GIF_READER) && defined(QT_NO_BUILTIN_GIF_READER)
+# undef QT_BUILTIN_GIF_READER
+#elif !defined(QT_BUILTIN_GIF_READER) && !defined(QT_NO_BUILTIN_GIF_READER)
+# define QT_BUILTIN_GIF_READER 1
+#endif
+
+#if defined(QT_LINKED_OPENSSL) && defined(QT_NO_LINKED_OPENSSL)
+# undef QT_LINKED_OPENSSL
+#elif !defined(QT_LINKED_OPENSSL) && !defined(QT_NO_LINKED_OPENSSL)
+# define QT_LINKED_OPENSSL
+#endif
+
+#if defined(QT_NO_ACCESSIBILITY) && defined(QT_ACCESSIBILITY)
+# undef QT_NO_ACCESSIBILITY
+#elif !defined(QT_NO_ACCESSIBILITY) && !defined(QT_ACCESSIBILITY)
+# define QT_NO_ACCESSIBILITY
+#endif
+
+#if defined(QT_NO_CLOCK_MONOTONIC) && defined(QT_CLOCK_MONOTONIC)
+# undef QT_NO_CLOCK_MONOTONIC
+#elif !defined(QT_NO_CLOCK_MONOTONIC) && !defined(QT_CLOCK_MONOTONIC)
+# define QT_NO_CLOCK_MONOTONIC
+#endif
+
+#if defined(QT_NO_CUPS) && defined(QT_CUPS)
+# undef QT_NO_CUPS
+#elif !defined(QT_NO_CUPS) && !defined(QT_CUPS)
+# define QT_NO_CUPS
+#endif
+
+#if defined(QT_NO_DBUS) && defined(QT_DBUS)
+# undef QT_NO_DBUS
+#elif !defined(QT_NO_DBUS) && !defined(QT_DBUS)
+# define QT_NO_DBUS
+#endif
+
+#if defined(QT_NO_EGL) && defined(QT_EGL)
+# undef QT_NO_EGL
+#elif !defined(QT_NO_EGL) && !defined(QT_EGL)
+# define QT_NO_EGL
+#endif
+
+#if defined(QT_NO_EGLFS) && defined(QT_EGLFS)
+# undef QT_NO_EGLFS
+#elif !defined(QT_NO_EGLFS) && !defined(QT_EGLFS)
+# define QT_NO_EGLFS
+#endif
+
+#if defined(QT_NO_EVENTFD) && defined(QT_EVENTFD)
+# undef QT_NO_EVENTFD
+#elif !defined(QT_NO_EVENTFD) && !defined(QT_EVENTFD)
+# define QT_NO_EVENTFD
+#endif
+
+#if defined(QT_NO_FONTCONFIG) && defined(QT_FONTCONFIG)
+# undef QT_NO_FONTCONFIG
+#elif !defined(QT_NO_FONTCONFIG) && !defined(QT_FONTCONFIG)
+# define QT_NO_FONTCONFIG
+#endif
+
+#if defined(QT_NO_GLIB) && defined(QT_GLIB)
+# undef QT_NO_GLIB
+#elif !defined(QT_NO_GLIB) && !defined(QT_GLIB)
+# define QT_NO_GLIB
+#endif
+
+#if defined(QT_NO_GSTREAMER) && defined(QT_GSTREAMER)
+# undef QT_NO_GSTREAMER
+#elif !defined(QT_NO_GSTREAMER) && !defined(QT_GSTREAMER)
+# define QT_NO_GSTREAMER
+#endif
+
+#if defined(QT_NO_ICONV) && defined(QT_ICONV)
+# undef QT_NO_ICONV
+#elif !defined(QT_NO_ICONV) && !defined(QT_ICONV)
+# define QT_NO_ICONV
+#endif
+
+#if defined(QT_NO_NIS) && defined(QT_NIS)
+# undef QT_NO_NIS
+#elif !defined(QT_NO_NIS) && !defined(QT_NIS)
+# define QT_NO_NIS
+#endif
+
+#if defined(QT_NO_OPENGL) && defined(QT_OPENGL)
+# undef QT_NO_OPENGL
+#elif !defined(QT_NO_OPENGL) && !defined(QT_OPENGL)
+# define QT_NO_OPENGL
+#endif
+
+#if defined(QT_NO_OPENVG) && defined(QT_OPENVG)
+# undef QT_NO_OPENVG
+#elif !defined(QT_NO_OPENVG) && !defined(QT_OPENVG)
+# define QT_NO_OPENVG
+#endif
+
+#if defined(QT_NO_PULSEAUDIO) && defined(QT_PULSEAUDIO)
+# undef QT_NO_PULSEAUDIO
+#elif !defined(QT_NO_PULSEAUDIO) && !defined(QT_PULSEAUDIO)
+# define QT_NO_PULSEAUDIO
+#endif
+
+#if defined(QT_NO_STYLE_GTK) && defined(QT_STYLE_GTK)
+# undef QT_NO_STYLE_GTK
+#elif !defined(QT_NO_STYLE_GTK) && !defined(QT_STYLE_GTK)
+# define QT_NO_STYLE_GTK
+#endif
+
+#if defined(QT_NO_ZLIB) && defined(QT_ZLIB)
+# undef QT_NO_ZLIB
+#elif !defined(QT_NO_ZLIB) && !defined(QT_ZLIB)
+# define QT_NO_ZLIB
+#endif
+
+#if defined(QT_RUNTIME_XCURSOR) && defined(QT_NO_RUNTIME_XCURSOR)
+# undef QT_RUNTIME_XCURSOR
+#elif !defined(QT_RUNTIME_XCURSOR) && !defined(QT_NO_RUNTIME_XCURSOR)
+# define QT_RUNTIME_XCURSOR
+#endif
+
+#if defined(QT_RUNTIME_XFIXES) && defined(QT_NO_RUNTIME_XFIXES)
+# undef QT_RUNTIME_XFIXES
+#elif !defined(QT_RUNTIME_XFIXES) && !defined(QT_NO_RUNTIME_XFIXES)
+# define QT_RUNTIME_XFIXES
+#endif
+
+#if defined(QT_RUNTIME_XINERAMA) && defined(QT_NO_RUNTIME_XINERAMA)
+# undef QT_RUNTIME_XINERAMA
+#elif !defined(QT_RUNTIME_XINERAMA) && !defined(QT_NO_RUNTIME_XINERAMA)
+# define QT_RUNTIME_XINERAMA
+#endif
+
+#if defined(QT_RUNTIME_XINPUT) && defined(QT_NO_RUNTIME_XINPUT)
+# undef QT_RUNTIME_XINPUT
+#elif !defined(QT_RUNTIME_XINPUT) && !defined(QT_NO_RUNTIME_XINPUT)
+# define QT_RUNTIME_XINPUT
+#endif
+
+#if defined(QT_RUNTIME_XRANDR) && defined(QT_NO_RUNTIME_XRANDR)
+# undef QT_RUNTIME_XRANDR
+#elif !defined(QT_RUNTIME_XRANDR) && !defined(QT_NO_RUNTIME_XRANDR)
+# define QT_RUNTIME_XRANDR
+#endif
+
+#if defined(QT_USE_MATH_H_FLOATS) && defined(QT_NO_USE_MATH_H_FLOATS)
+# undef QT_USE_MATH_H_FLOATS
+#elif !defined(QT_USE_MATH_H_FLOATS) && !defined(QT_NO_USE_MATH_H_FLOATS)
+# define QT_USE_MATH_H_FLOATS
+#endif
+
+#ifndef Q_WS_QPA
+# define Q_WS_QPA
+#endif
+
+#define QT_VISIBILITY_AVAILABLE
+
+#define QT_QPA_DEFAULT_PLATFORM_NAME "nitpicker"
+
+/* needed for QtScript classic */
+#ifndef QT_STATIC
+# if defined(QT_BUILD_SCRIPT_LIB)
+# define Q_SCRIPT_EXPORT Q_DECL_EXPORT
+# else
+# define Q_SCRIPT_EXPORT Q_DECL_IMPORT
+# endif
+# if defined(QT_BUILD_SCRIPTTOOLS_LIB)
+# define Q_SCRIPTTOOLS_EXPORT Q_DECL_EXPORT
+# else
+# define Q_SCRIPTTOOLS_EXPORT Q_DECL_IMPORT
+# endif
+#else
+# define Q_SCRIPT_EXPORT
+# define Q_SCRIPTTOOLS_EXPORT
+#endif
diff --git a/libports/src/lib/qt5/qtbase/src/corelib/io/qprocess_genode.cpp b/libports/src/lib/qt5/qtbase/src/corelib/io/qprocess_genode.cpp
new file mode 100644
index 0000000000..1446b9c01a
--- /dev/null
+++ b/libports/src/lib/qt5/qtbase/src/corelib/io/qprocess_genode.cpp
@@ -0,0 +1,1595 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+//#define QPROCESS_DEBUG
+#include "qdebug.h"
+
+#ifndef QT_NO_PROCESS
+
+#ifndef Q_OS_GENODE
+#if defined QPROCESS_DEBUG
+#include "qstring.h"
+#include
+
+
+/*
+ Returns a human readable representation of the first \a len
+ characters in \a data.
+*/
+QT_BEGIN_NAMESPACE
+static QByteArray qt_prettyDebug(const char *data, int len, int maxSize)
+{
+ if (!data) return "(null)";
+ QByteArray out;
+ for (int i = 0; i < len; ++i) {
+ char c = data[i];
+ if (isprint(c)) {
+ out += c;
+ } else switch (c) {
+ case '\n': out += "\\n"; break;
+ case '\r': out += "\\r"; break;
+ case '\t': out += "\\t"; break;
+ default:
+ QString tmp;
+ tmp.sprintf("\\%o", c);
+ out += tmp.toLatin1();
+ }
+ }
+
+ if (len < maxSize)
+ out += "...";
+
+ return out;
+}
+QT_END_NAMESPACE
+#endif
+#endif /* Q_OS_GENODE */
+
+#include "qplatformdefs.h"
+
+#include "qprocess.h"
+#include "qprocess_p.h"
+#include "private/qcore_unix_p.h"
+
+#ifdef Q_OS_MAC
+#include
+#endif
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#include
+#include
+#include
+#ifdef Q_OS_QNX
+#include "qvarlengtharray.h"
+
+#include
+#include
+#endif
+
+QT_BEGIN_NAMESPACE
+
+// POSIX requires PIPE_BUF to be 512 or larger
+// so we will use 512
+static const int errorBufferMax = 512;
+#ifndef Q_OS_GENODE
+static int qt_qprocess_deadChild_pipe[2];
+static struct sigaction qt_sa_old_sigchld_handler;
+static void qt_sa_sigchld_handler(int signum)
+{
+ qt_safe_write(qt_qprocess_deadChild_pipe[1], "", 1);
+#if defined (QPROCESS_DEBUG)
+ fprintf(stderr, "*** SIGCHLD\n");
+#endif
+
+ // load it as volatile
+ void (*oldAction)(int) = ((volatile struct sigaction *)&qt_sa_old_sigchld_handler)->sa_handler;
+ if (oldAction && oldAction != SIG_IGN)
+ oldAction(signum);
+}
+#endif /* Q_OS_GENODE */
+
+static inline void add_fd(int &nfds, int fd, fd_set *fdset)
+{
+ FD_SET(fd, fdset);
+ if ((fd) > nfds)
+ nfds = fd;
+}
+
+struct QProcessInfo {
+ QProcess *process;
+ int deathPipe;
+ int exitResult;
+ pid_t pid;
+ int serialNumber;
+};
+
+#ifndef Q_OS_GENODE
+class QProcessManager : public QThread
+{
+ Q_OBJECT
+public:
+ QProcessManager();
+ ~QProcessManager();
+
+ void run();
+ void catchDeadChildren();
+ void add(pid_t pid, QProcess *process);
+ void remove(QProcess *process);
+ void lock();
+ void unlock();
+
+private:
+ QMutex mutex;
+ QHash children;
+};
+
+
+static QProcessManager *processManagerInstance = 0;
+
+static QProcessManager *processManager()
+{
+ // The constructor of QProcessManager should be called only once
+ // so we cannot use Q_GLOBAL_STATIC directly for QProcessManager
+ static QBasicMutex processManagerGlobalMutex;
+ QMutexLocker locker(&processManagerGlobalMutex);
+
+ if (!processManagerInstance)
+ new QProcessManager;
+
+ Q_ASSERT(processManagerInstance);
+ return processManagerInstance;
+}
+
+QProcessManager::QProcessManager()
+{
+#if defined (QPROCESS_DEBUG)
+ qDebug() << "QProcessManager::QProcessManager()";
+#endif
+ // initialize the dead child pipe and make it non-blocking. in the
+ // extremely unlikely event that the pipe fills up, we do not under any
+ // circumstances want to block.
+ qt_safe_pipe(qt_qprocess_deadChild_pipe, O_NONBLOCK);
+
+ // set up the SIGCHLD handler, which writes a single byte to the dead
+ // child pipe every time a child dies.
+ struct sigaction action;
+ memset(&action, 0, sizeof(action));
+ action.sa_handler = qt_sa_sigchld_handler;
+ action.sa_flags = SA_NOCLDSTOP;
+ ::sigaction(SIGCHLD, &action, &qt_sa_old_sigchld_handler);
+
+ processManagerInstance = this;
+}
+
+QProcessManager::~QProcessManager()
+{
+ // notify the thread that we're shutting down.
+ qt_safe_write(qt_qprocess_deadChild_pipe[1], "@", 1);
+ qt_safe_close(qt_qprocess_deadChild_pipe[1]);
+ wait();
+
+ // on certain unixes, closing the reading end of the pipe will cause
+ // select in run() to block forever, rather than return with EBADF.
+ qt_safe_close(qt_qprocess_deadChild_pipe[0]);
+
+ qt_qprocess_deadChild_pipe[0] = -1;
+ qt_qprocess_deadChild_pipe[1] = -1;
+
+ qDeleteAll(children.values());
+ children.clear();
+
+ struct sigaction currentAction;
+ ::sigaction(SIGCHLD, 0, ¤tAction);
+ if (currentAction.sa_handler == qt_sa_sigchld_handler) {
+ ::sigaction(SIGCHLD, &qt_sa_old_sigchld_handler, 0);
+ }
+
+ processManagerInstance = 0;
+}
+
+void QProcessManager::run()
+{
+ forever {
+ fd_set readset;
+ FD_ZERO(&readset);
+ FD_SET(qt_qprocess_deadChild_pipe[0], &readset);
+
+#if defined (QPROCESS_DEBUG)
+ qDebug() << "QProcessManager::run() waiting for children to die";
+#endif
+
+ // block forever, or until activity is detected on the dead child
+ // pipe. the only other peers are the SIGCHLD signal handler, and the
+ // QProcessManager destructor.
+ int nselect = select(qt_qprocess_deadChild_pipe[0] + 1, &readset, 0, 0, 0);
+ if (nselect < 0) {
+ if (errno == EINTR)
+ continue;
+ break;
+ }
+
+ // empty only one byte from the pipe, even though several SIGCHLD
+ // signals may have been delivered in the meantime, to avoid race
+ // conditions.
+ char c;
+ if (qt_safe_read(qt_qprocess_deadChild_pipe[0], &c, 1) < 0 || c == '@')
+ break;
+
+ // catch any and all children that we can.
+ catchDeadChildren();
+ }
+}
+
+void QProcessManager::catchDeadChildren()
+{
+ QMutexLocker locker(&mutex);
+
+ // try to catch all children whose pid we have registered, and whose
+ // deathPipe is still valid (i.e, we have not already notified it).
+ QHash::Iterator it = children.begin();
+ while (it != children.end()) {
+ // notify all children that they may have died. they need to run
+ // waitpid() in their own thread.
+ QProcessInfo *info = it.value();
+ qt_safe_write(info->deathPipe, "", 1);
+
+#if defined (QPROCESS_DEBUG)
+ qDebug() << "QProcessManager::run() sending death notice to" << info->process;
+#endif
+ ++it;
+ }
+}
+
+static QBasicAtomicInt idCounter = Q_BASIC_ATOMIC_INITIALIZER(1);
+
+void QProcessManager::add(pid_t pid, QProcess *process)
+{
+#if defined (QPROCESS_DEBUG)
+ qDebug() << "QProcessManager::add() adding pid" << pid << "process" << process;
+#endif
+
+ // insert a new info structure for this process
+ QProcessInfo *info = new QProcessInfo;
+ info->process = process;
+ info->deathPipe = process->d_func()->deathPipe[1];
+ info->exitResult = 0;
+ info->pid = pid;
+
+ int serial = idCounter.fetchAndAddRelaxed(1);
+ process->d_func()->serial = serial;
+ children.insert(serial, info);
+}
+
+void QProcessManager::remove(QProcess *process)
+{
+ QMutexLocker locker(&mutex);
+
+ int serial = process->d_func()->serial;
+ QProcessInfo *info = children.take(serial);
+#if defined (QPROCESS_DEBUG)
+ if (info)
+ qDebug() << "QProcessManager::remove() removing pid" << info->pid << "process" << info->process;
+#endif
+ delete info;
+}
+
+void QProcessManager::lock()
+{
+ mutex.lock();
+}
+
+void QProcessManager::unlock()
+{
+ mutex.unlock();
+}
+
+static void qt_create_pipe(int *pipe)
+{
+ if (pipe[0] != -1)
+ qt_safe_close(pipe[0]);
+ if (pipe[1] != -1)
+ qt_safe_close(pipe[1]);
+ if (qt_safe_pipe(pipe) != 0) {
+ qWarning("QProcessPrivate::createPipe: Cannot create pipe %p: %s",
+ pipe, qPrintable(qt_error_string(errno)));
+ }
+}
+#endif /* Q_OS_GENODE */
+
+void QProcessPrivate::destroyPipe(int *pipe)
+{
+#ifdef Q_OS_GENODE
+#if defined QPROCESS_DEBUG
+ qDebug() << "destroyPipe()";
+#endif
+#else
+ if (pipe[1] != -1) {
+ qt_safe_close(pipe[1]);
+ pipe[1] = -1;
+ }
+ if (pipe[0] != -1) {
+ qt_safe_close(pipe[0]);
+ pipe[0] = -1;
+ }
+#endif /* Q_OS_GENODE */
+}
+
+void QProcessPrivate::destroyChannel(Channel *channel)
+{
+#ifdef Q_OS_GENODE
+#if defined QPROCESS_DEBUG
+ qDebug() << "destroyChannel()";
+#endif
+#else
+ destroyPipe(channel->pipe);
+#endif /* Q_OS_GENODE */
+}
+
+/*
+ Create the pipes to a QProcessPrivate::Channel.
+
+ This function must be called in order: stdin, stdout, stderr
+*/
+bool QProcessPrivate::createChannel(Channel &channel)
+{
+#ifdef Q_OS_GENODE
+#if defined QPROCESS_DEBUG
+ qDebug() << "createChannel()";
+#endif
+#else
+ Q_Q(QProcess);
+
+ if (&channel == &stderrChannel && processChannelMode == QProcess::MergedChannels) {
+ channel.pipe[0] = -1;
+ channel.pipe[1] = -1;
+ return true;
+ }
+
+ if (channel.type == Channel::Normal) {
+ // we're piping this channel to our own process
+ qt_create_pipe(channel.pipe);
+
+ // create the socket notifiers
+ if (threadData->eventDispatcher) {
+ if (&channel == &stdinChannel) {
+ channel.notifier = new QSocketNotifier(channel.pipe[1],
+ QSocketNotifier::Write, q);
+ channel.notifier->setEnabled(false);
+ QObject::connect(channel.notifier, SIGNAL(activated(int)),
+ q, SLOT(_q_canWrite()));
+ } else {
+ channel.notifier = new QSocketNotifier(channel.pipe[0],
+ QSocketNotifier::Read, q);
+ const char *receiver;
+ if (&channel == &stdoutChannel)
+ receiver = SLOT(_q_canReadStandardOutput());
+ else
+ receiver = SLOT(_q_canReadStandardError());
+ QObject::connect(channel.notifier, SIGNAL(activated(int)),
+ q, receiver);
+ }
+ }
+
+ return true;
+ } else if (channel.type == Channel::Redirect) {
+ // we're redirecting the channel to/from a file
+ QByteArray fname = QFile::encodeName(channel.file);
+
+ if (&channel == &stdinChannel) {
+ // try to open in read-only mode
+ channel.pipe[1] = -1;
+ if ( (channel.pipe[0] = qt_safe_open(fname, O_RDONLY)) != -1)
+ return true; // success
+
+ q->setErrorString(QProcess::tr("Could not open input redirection for reading"));
+ } else {
+ int mode = O_WRONLY | O_CREAT;
+ if (channel.append)
+ mode |= O_APPEND;
+ else
+ mode |= O_TRUNC;
+
+ channel.pipe[0] = -1;
+ if ( (channel.pipe[1] = qt_safe_open(fname, mode, 0666)) != -1)
+ return true; // success
+
+ q->setErrorString(QProcess::tr("Could not open output redirection for writing"));
+ }
+
+ // could not open file
+ processError = QProcess::FailedToStart;
+ emit q->error(processError);
+ cleanup();
+ return false;
+ } else {
+ Q_ASSERT_X(channel.process, "QProcess::start", "Internal error");
+
+ Channel *source;
+ Channel *sink;
+
+ if (channel.type == Channel::PipeSource) {
+ // we are the source
+ source = &channel;
+ sink = &channel.process->stdinChannel;
+
+ Q_ASSERT(source == &stdoutChannel);
+ Q_ASSERT(sink->process == this && sink->type == Channel::PipeSink);
+ } else {
+ // we are the sink;
+ source = &channel.process->stdoutChannel;
+ sink = &channel;
+
+ Q_ASSERT(sink == &stdinChannel);
+ Q_ASSERT(source->process == this && source->type == Channel::PipeSource);
+ }
+
+ if (source->pipe[1] != INVALID_Q_PIPE || sink->pipe[0] != INVALID_Q_PIPE) {
+ // already created, do nothing
+ return true;
+ } else {
+ Q_ASSERT(source->pipe[0] == INVALID_Q_PIPE && source->pipe[1] == INVALID_Q_PIPE);
+ Q_ASSERT(sink->pipe[0] == INVALID_Q_PIPE && sink->pipe[1] == INVALID_Q_PIPE);
+
+ Q_PIPE pipe[2] = { -1, -1 };
+ qt_create_pipe(pipe);
+ sink->pipe[0] = pipe[0];
+ source->pipe[1] = pipe[1];
+
+ return true;
+ }
+ }
+#endif /* Q_OS_GENODE */
+}
+
+#ifndef Q_OS_GENODE
+QT_BEGIN_INCLUDE_NAMESPACE
+#if defined(Q_OS_MAC) && !defined(Q_OS_IOS)
+# include
+# define environ (*_NSGetEnviron())
+#else
+ extern char **environ;
+#endif
+QT_END_INCLUDE_NAMESPACE
+
+QProcessEnvironment QProcessEnvironment::systemEnvironment()
+{
+ QProcessEnvironment env;
+#if !defined(Q_OS_IOS)
+ const char *entry;
+ for (int count = 0; (entry = environ[count]); ++count) {
+ const char *equal = strchr(entry, '=');
+ if (!equal)
+ continue;
+
+ QByteArray name(entry, equal - entry);
+ QByteArray value(equal + 1);
+ env.d->hash.insert(QProcessEnvironmentPrivate::Key(name),
+ QProcessEnvironmentPrivate::Value(value));
+ }
+#endif
+ return env;
+}
+
+static char **_q_dupEnvironment(const QProcessEnvironmentPrivate::Hash &environment, int *envc)
+{
+ *envc = 0;
+ if (environment.isEmpty())
+ return 0;
+
+ // if LD_LIBRARY_PATH exists in the current environment, but
+ // not in the environment list passed by the programmer, then
+ // copy it over.
+#if defined(Q_OS_MAC)
+ static const char libraryPath[] = "DYLD_LIBRARY_PATH";
+#else
+ static const char libraryPath[] = "LD_LIBRARY_PATH";
+#endif
+ const QByteArray envLibraryPath = qgetenv(libraryPath);
+ bool needToAddLibraryPath = !envLibraryPath.isEmpty() &&
+ !environment.contains(QProcessEnvironmentPrivate::Key(QByteArray(libraryPath)));
+
+ char **envp = new char *[environment.count() + 2];
+ envp[environment.count()] = 0;
+ envp[environment.count() + 1] = 0;
+
+ QProcessEnvironmentPrivate::Hash::ConstIterator it = environment.constBegin();
+ const QProcessEnvironmentPrivate::Hash::ConstIterator end = environment.constEnd();
+ for ( ; it != end; ++it) {
+ QByteArray key = it.key().key;
+ QByteArray value = it.value().bytes();
+ key.reserve(key.length() + 1 + value.length());
+ key.append('=');
+ key.append(value);
+
+ envp[(*envc)++] = ::strdup(key.constData());
+ }
+
+ if (needToAddLibraryPath)
+ envp[(*envc)++] = ::strdup(QByteArray(QByteArray(libraryPath) + '=' +
+ envLibraryPath).constData());
+ return envp;
+}
+#endif /* Q_OS_GENODE */
+
+void QProcessPrivate::startProcess()
+{
+ Q_Q(QProcess);
+
+#if defined (QPROCESS_DEBUG)
+ qDebug("QProcessPrivate::startProcess()");
+#endif
+
+#ifndef Q_OS_GENODE
+ processManager()->start();
+
+ // Initialize pipes
+ if (!createChannel(stdinChannel) ||
+ !createChannel(stdoutChannel) ||
+ !createChannel(stderrChannel))
+ return;
+ qt_create_pipe(childStartedPipe);
+ qt_create_pipe(deathPipe);
+
+ if (threadData->eventDispatcher) {
+ startupSocketNotifier = new QSocketNotifier(childStartedPipe[0],
+ QSocketNotifier::Read, q);
+ QObject::connect(startupSocketNotifier, SIGNAL(activated(int)),
+ q, SLOT(_q_startupNotification()));
+
+ deathNotifier = new QSocketNotifier(deathPipe[0],
+ QSocketNotifier::Read, q);
+ QObject::connect(deathNotifier, SIGNAL(activated(int)),
+ q, SLOT(_q_processDied()));
+ }
+#endif /* Q_OS_GENODE */
+
+ // Start the process (platform dependent)
+ q->setProcessState(QProcess::Starting);
+
+#ifdef Q_OS_GENODE
+ launchpad_child = launchpad()->start_child(program.toLocal8Bit().constData(),
+ ram_quota_hash()->value(program),
+ Genode::Dataspace_capability());
+ if (launchpad_child) {
+ _q_startupNotification();
+ }
+#else
+ // Create argument list with right number of elements, and set the final
+ // one to 0.
+ char **argv = new char *[arguments.count() + 2];
+ argv[arguments.count() + 1] = 0;
+
+ // Encode the program name.
+ QByteArray encodedProgramName = QFile::encodeName(program);
+#ifdef Q_OS_MAC
+ // allow invoking of .app bundles on the Mac.
+ QFileInfo fileInfo(program);
+ if (encodedProgramName.endsWith(".app") && fileInfo.isDir()) {
+ QCFType