[Qt] Use Qt's module system for install rules and depending on QtWebKit
authorvestbo@webkit.org <vestbo@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 9 Mar 2012 07:39:50 +0000 (07:39 +0000)
committervestbo@webkit.org <vestbo@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 9 Mar 2012 07:39:50 +0000 (07:39 +0000)
Instead of rolling our own install rules we now use the same approach as
every other Qt module, by loading qt_module.prf and qt_module_config.prf.

This ensures that we follow the same semantics as the rest of Qt on
what sort of config options are enabled by default (create_cmake eg.).
It also allows us to use QT += webkit instead of the workaround we had
with CONFIG += qtwebkit.

We do however force Qt to always treat our build as a non-developer build,
so the libraries will end up in the WebKit lib directory instead of the
qtbase directory (as with a normal developer-build). This allows us to
keep the webkit-build self-contained. If Qt is a developer build we still
copy the module file manually to Qt, so that you don't have to install
WebKit to make it available.

For non-developer builds of Qt, it is still possible to use the built
WebKit libraries without having to install them, by having the variable
QMAKE_EXTRA_MODULE_FORWARDS set in the project's .qmake.cache file,
pointing to $WEBKITOUTUTDIR/$CONFIGURATION/modules.

https://bugs.webkit.org/show_bug.cgi?id=80590

Reviewed by Simon Hausmann.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@110272 268f45cc-cd09-0410-ab3c-d52691b4dbfc

38 files changed:
ChangeLog
Source/WebKit/qt/ChangeLog
Source/WebKit/qt/declarative/experimental/experimental.pri
Source/WebKit/qt/declarative/experimental/plugin.cpp
Source/WebKit/qt/declarative/plugin.cpp
Source/WebKit/qt/declarative/public.pri
Source/WebKit/qt/tests/tests.pri
Source/WebKit2/ChangeLog
Source/WebKit2/UIProcess/API/qt/tests/publicapi/publicapi.pro
Source/WebKit2/UIProcess/API/qt/tests/publicapi/tst_publicapi.cpp
Source/WebKit2/UIProcess/API/qt/tests/qmltests/DesktopBehavior.pro
Source/WebKit2/UIProcess/API/qt/tests/qmltests/WebView.pro
Source/WebKit2/UIProcess/API/qt/tests/qmltests/tst_qmltests.cpp
Source/WebKit2/UIProcess/API/qt/tests/qquickwebview/qquickwebview.pro
Source/WebKit2/UIProcess/API/qt/tests/qquickwebview/tst_qquickwebview.cpp
Source/WebKit2/UIProcess/API/qt/tests/tests.pri
Source/WebKit2/UIProcess/API/qt/tests/util.cpp
Source/WebKit2/WebProcess.pro
Source/api.pri
Source/sync.profile
Tools/ChangeLog
Tools/DumpRenderTree/qt/DumpRenderTree.pro
Tools/MiniBrowser/qt/BrowserWindow.cpp
Tools/MiniBrowser/qt/MiniBrowser.pro
Tools/MiniBrowser/qt/MiniBrowserApplication.cpp
Tools/MiniBrowser/qt/UrlLoader.cpp
Tools/QtTestBrowser/QtTestBrowser.pro
Tools/Tools.pro
Tools/WebKitTestRunner/InjectedBundle/Target.pri
Tools/WebKitTestRunner/Target.pri
Tools/qmake/mkspecs/features/default_post.prf
Tools/qmake/mkspecs/features/default_pre.prf
Tools/qmake/mkspecs/features/functions.prf
Tools/qmake/mkspecs/features/qtwebkit-private.prf [deleted file]
Tools/qmake/mkspecs/features/qtwebkit.prf
Tools/qmake/mkspecs/features/rpath.prf
Tools/qmake/mkspecs/modules/qt_webkit.pri [deleted file]
Tools/qmake/qt_webkit.pri [new file with mode: 0644]

index 3df5af6166f37ac92ccbed2123d9cae7a2f0af74..4184f3eae420f2b87dbfd20de3738bc3b1f6bd16 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,34 @@
+2012-03-08  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>
+
+        [Qt] Use Qt's module system for install rules and depending on QtWebKit
+
+        Instead of rolling our own install rules we now use the same approach as
+        every other Qt module, by loading qt_module.prf and qt_module_config.prf.
+
+        This ensures that we follow the same semantics as the rest of Qt on
+        what sort of config options are enabled by default (create_cmake eg.).
+        It also allows us to use QT += webkit instead of the workaround we had
+        with CONFIG += qtwebkit.
+
+        We do however force Qt to always treat our build as a non-developer build,
+        so the libraries will end up in the WebKit lib directory instead of the
+        qtbase directory (as with a normal developer-build). This allows us to
+        keep the webkit-build self-contained. If Qt is a developer build we still
+        copy the module file manually to Qt, so that you don't have to install
+        WebKit to make it available.
+
+        For non-developer builds of Qt, it is still possible to use the built
+        WebKit libraries without having to install them, by having the variable
+        QMAKE_EXTRA_MODULE_FORWARDS set in the project's .qmake.cache file,
+        pointing to $WEBKITOUTUTDIR/$CONFIGURATION/modules.
+
+        https://bugs.webkit.org/show_bug.cgi?id=80590
+
+        Reviewed by Simon Hausmann.
+
+        * Source/api.pri:
+        * Source/sync.profile:
+
 2012-03-08  Ryosuke Niwa  <rniwa@webkit.org>
 
         perf-o-matic should incrementally update JSON responses
index a462127fdfe75020d63ba733fea2e983763e2dc3..8c39fc165c7bf4f6eaee177ea1f5241a50eacb61 100644 (file)
@@ -1,3 +1,37 @@
+2012-03-08  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>
+
+        [Qt] Use Qt's module system for install rules and depending on QtWebKit
+
+        Instead of rolling our own install rules we now use the same approach as
+        every other Qt module, by loading qt_module.prf and qt_module_config.prf.
+
+        This ensures that we follow the same semantics as the rest of Qt on
+        what sort of config options are enabled by default (create_cmake eg.).
+        It also allows us to use QT += webkit instead of the workaround we had
+        with CONFIG += qtwebkit.
+
+        We do however force Qt to always treat our build as a non-developer build,
+        so the libraries will end up in the WebKit lib directory instead of the
+        qtbase directory (as with a normal developer-build). This allows us to
+        keep the webkit-build self-contained. If Qt is a developer build we still
+        copy the module file manually to Qt, so that you don't have to install
+        WebKit to make it available.
+
+        For non-developer builds of Qt, it is still possible to use the built
+        WebKit libraries without having to install them, by having the variable
+        QMAKE_EXTRA_MODULE_FORWARDS set in the project's .qmake.cache file,
+        pointing to $WEBKITOUTUTDIR/$CONFIGURATION/modules.
+
+        https://bugs.webkit.org/show_bug.cgi?id=80590
+
+        Reviewed by Simon Hausmann.
+
+        * declarative/experimental/experimental.pri:
+        * declarative/experimental/plugin.cpp:
+        * declarative/plugin.cpp:
+        * declarative/public.pri:
+        * tests/tests.pri:
+
 2012-03-08  Antti Koivisto  <antti@apple.com>
 
         https://bugs.webkit.org/show_bug.cgi?id=80370
index bbecabb5c7c8901920c088c93c2ef02eb12833e9..583726f62cfcb6ba896b5559a99ebd4fe7ce1a49 100644 (file)
@@ -24,9 +24,7 @@ contains(QT_CONFIG, reduce_exports):CONFIG += hide_symbols
 
 wince*:LIBS += $$QMAKE_LIBS_GUI
 
-CONFIG += qtwebkit qtwebkit-private
-
-QT += declarative widgets network quick
+QT += declarative widgets network quick webkit webkit-private
 
 DESTDIR = $${ROOT_BUILD_DIR}/imports/$${TARGET.module_name}
 
@@ -37,8 +35,8 @@ SOURCES += plugin.cpp
 
 DEFINES += HAVE_WEBKIT2
 
+# FIXME: Why are these needed, and why can't we use WEBKIT += ... ?
 INCLUDEPATH += \
-    ../../../../WebKit2/UIProcess/API/qt \
     ../../../../WebKit2/Shared/qt \
     ../../../../JavaScriptCore \
     ../../../../JavaScriptCore/wtf \
index c00b5beb4efab73ad3b674b76e66abf82691bf69..7d380e66a80a7d5621576a103ebd6bd6f9667482 100644 (file)
 
 #include "config.h"
 
-#include "qquicknetworkreply_p.h"
-#include "qquicknetworkrequest_p.h"
-#include "qquickwebpage_p.h"
-#include "qquickwebview_p.h"
-#include "qtwebsecurityorigin_p.h"
-#include "qwebdownloaditem_p.h"
-#include "qwebnavigationhistory_p.h"
-#include "qwebpermissionrequest_p.h"
-#include "qwebpreferences_p.h"
-#include "qwebviewportinfo_p.h"
+#include "private/qquicknetworkreply_p.h"
+#include "private/qquicknetworkrequest_p.h"
+#include "private/qquickwebpage_p.h"
+#include "private/qquickwebview_p.h"
+#include "private/qtwebsecurityorigin_p.h"
+#include "private/qwebdownloaditem_p.h"
+#include "private/qwebnavigationhistory_p.h"
+#include "private/qwebpermissionrequest_p.h"
+#include "private/qwebpreferences_p.h"
+#include "private/qwebviewportinfo_p.h"
 
 #include <QtDeclarative/qdeclarative.h>
 #include <QtDeclarative/qdeclarativeextensionplugin.h>
index 9d53b276fbd056e808a88d14053726b0e19ee7f1..7688c1c94eb6e63ef7923f6349d07c97ac14f90d 100644 (file)
 #include <QtDeclarative/qdeclarativeextensionplugin.h>
 
 #if defined(HAVE_WEBKIT2)
-#include "qquickwebpage_p.h"
-#include "qquickwebview_p.h"
-#include "qwebiconimageprovider_p.h"
-#include "qwebloadrequest_p.h"
-#include "qwebnavigationrequest_p.h"
+#include "private/qquickwebpage_p.h"
+#include "private/qquickwebview_p.h"
+#include "private/qwebiconimageprovider_p.h"
+#include "private/qwebloadrequest_p.h"
+#include "private/qwebnavigationrequest_p.h"
 
 #include <QtDeclarative/qdeclarativeengine.h>
 #include <QtNetwork/qnetworkreply.h>
index e1a21598887a42f87143bf90951c0bda90e3968b..9943e1c674f672d42e2fbe3c100797fa1a2baf40 100644 (file)
@@ -24,9 +24,7 @@ contains(QT_CONFIG, reduce_exports):CONFIG += hide_symbols
 
 wince*:LIBS += $$QMAKE_LIBS_GUI
 
-CONFIG += qtwebkit qtwebkit-private
-
-QT += declarative
+QT += declarative webkit webkit-private
 haveQt(5): QT += widgets quick
 
 contains(DEFINES, HAVE_QQUICK1=1) {
@@ -39,6 +37,7 @@ DESTDIR = $${ROOT_BUILD_DIR}/imports/$${TARGET.module_name}
 CONFIG += rpath
 RPATHDIR_RELATIVE_TO_DESTDIR = ../../lib
 
+# FIXME: Why are these needed, and why can't we use WEBKIT += ... ?
 INCLUDEPATH += \
     ../../../WebKit2/Shared/qt \
     ../../../JavaScriptCore \
index 363cf0dc04a49eb70b11b7447df0228b581dce57..90c61f093e9e4691a029b43bbd15ba8bf26af741 100644 (file)
@@ -16,11 +16,9 @@ INCLUDEPATH += \
     $$PWD \
     $$PWD/../Api
 
-QT += testlib network
+QT += testlib network webkit
 haveQt(5): QT += widgets
 
-CONFIG += qtwebkit
-
 haveQt(4): haveQtModule(declarative): QT += declarative
 
 # This define is used by some tests to look up resources in the source tree
index a13e871e7061ed9f9c834e7b10f14487b28f51d2..63f0e627de0fddaf239fe97347cf03b5c7735f35 100644 (file)
@@ -1,3 +1,42 @@
+2012-03-08  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>
+
+        [Qt] Use Qt's module system for install rules and depending on QtWebKit
+
+        Instead of rolling our own install rules we now use the same approach as
+        every other Qt module, by loading qt_module.prf and qt_module_config.prf.
+
+        This ensures that we follow the same semantics as the rest of Qt on
+        what sort of config options are enabled by default (create_cmake eg.).
+        It also allows us to use QT += webkit instead of the workaround we had
+        with CONFIG += qtwebkit.
+
+        We do however force Qt to always treat our build as a non-developer build,
+        so the libraries will end up in the WebKit lib directory instead of the
+        qtbase directory (as with a normal developer-build). This allows us to
+        keep the webkit-build self-contained. If Qt is a developer build we still
+        copy the module file manually to Qt, so that you don't have to install
+        WebKit to make it available.
+
+        For non-developer builds of Qt, it is still possible to use the built
+        WebKit libraries without having to install them, by having the variable
+        QMAKE_EXTRA_MODULE_FORWARDS set in the project's .qmake.cache file,
+        pointing to $WEBKITOUTUTDIR/$CONFIGURATION/modules.
+
+        https://bugs.webkit.org/show_bug.cgi?id=80590
+
+        Reviewed by Simon Hausmann.
+
+        * UIProcess/API/qt/tests/publicapi/publicapi.pro:
+        * UIProcess/API/qt/tests/publicapi/tst_publicapi.cpp:
+        * UIProcess/API/qt/tests/qmltests/DesktopBehavior.pro:
+        * UIProcess/API/qt/tests/qmltests/WebView.pro:
+        * UIProcess/API/qt/tests/qmltests/tst_qmltests.cpp:
+        * UIProcess/API/qt/tests/qquickwebview/qquickwebview.pro:
+        * UIProcess/API/qt/tests/qquickwebview/tst_qquickwebview.cpp:
+        * UIProcess/API/qt/tests/tests.pri:
+        * UIProcess/API/qt/tests/util.cpp:
+        * WebProcess.pro:
+
 2012-03-08  No'am Rosenthal  <noam.rosenthal@nokia.com>
 
         [Qt][WK2] Allow transparent WebViews
index 0f0d4f52c20ea8363a7b63e228376e6761511447..02dc197c79e7670e13b52f8afae4d672ef21b7b8 100644 (file)
@@ -1,3 +1,3 @@
 include(../tests.pri)
 SOURCES += $${TARGET}.cpp
-CONFIG += qtwebkit-private
+QT += webkit-private
index 2640337bfc58d80d34b93d9900020a28f956e0ee..f5f976663b28b346e26a897b010d00eab4245f9c 100644 (file)
@@ -23,9 +23,9 @@
 #include <QMetaProperty>
 #include <QMetaType>
 #include <QtTest/QtTest>
-#include <qquickwebview_p.h>
-#include <qwebloadrequest_p.h>
-#include <qwebnavigationrequest_p.h>
+#include <private/qquickwebview_p.h>
+#include <private/qwebloadrequest_p.h>
+#include <private/qwebnavigationrequest_p.h>
 
 class tst_publicapi : public QObject {
     Q_OBJECT
index 8b5b3cbb8d9468478ab798d40aa3bd9c1a20af03..9d16a7bddd656dc793a955d84a1a292116ab1e8c 100644 (file)
@@ -3,7 +3,7 @@ SOURCES += tst_qmltests.cpp
 TARGET = tst_qmltests_DesktopBehavior
 OBJECTS_DIR = obj_DesktopBehavior/$$activeBuildConfig()
 
-CONFIG += qtwebkit-private
+QT += webkit-private
 CONFIG += warn_on testcase
 
 QT -= testlib
index 7f4e3d12f4422d97306975b69972cd6b58bca5b6..57307f07a0ee1af81bce65916c0f178879b04134 100644 (file)
@@ -3,7 +3,7 @@ SOURCES += tst_qmltests.cpp
 TARGET = tst_qmltests_WebView
 OBJECTS_DIR = obj_WebView/$$activeBuildConfig()
 
-CONFIG += qtwebkit-private
+QT += webkit-private
 CONFIG += warn_on testcase
 
 QT -= testlib
index bcc246db471cab01c854a687c525913ee0cd0b5a..782b041ca50040c83d3b39a893f01ade9b5f5820 100644 (file)
@@ -20,7 +20,7 @@
 #include "../bytearraytestdata.h"
 #include "../util.h"
 
-#include "qquickwebview_p.h"
+#include "private/qquickwebview_p.h"
 #include <QGuiApplication>
 #include <QVarLengthArray>
 #include <QtQuickTest/quicktest.h>
index 25cd8324f89ab31799f3c192f4244dfa9593346d..4a8d86f80897d7ee12c1089bc1df949f31803380 100644 (file)
@@ -1,4 +1,4 @@
 include(../tests.pri)
 SOURCES += $${TARGET}.cpp
-CONFIG += qtwebkit-private
+QT += webkit-private
 DEFINES += IMPORT_DIR=\"\\\"$${ROOT_BUILD_DIR}$${QMAKE_DIR_SEP}imports\\\"\"
index 2d12219dd0aa6d347155e032098dcb1289f8b9ac..a6b13990a0b63637c91d1ef657e5244dd16a0ce7 100644 (file)
@@ -23,9 +23,9 @@
 #include <QDeclarativeEngine>
 #include <QScopedPointer>
 #include <QtTest/QtTest>
-#include <qquickwebpage_p.h>
-#include <qquickwebview_p.h>
-#include <qwebloadrequest_p.h>
+#include <private/qquickwebpage_p.h>
+#include <private/qquickwebview_p.h>
+#include <private/qwebloadrequest_p.h>
 
 class tst_QQuickWebView : public QObject {
     Q_OBJECT
index faf445397b9dd2c2fdc97ad12e80af6ec3ab9614..aa8da8bc9e05766ce6d2862409b0d353a623a419 100644 (file)
@@ -9,9 +9,7 @@ SOURCES += ../util.cpp \
            ../bytearraytestdata.cpp
 INCLUDEPATH += $$PWD
 
-QT += testlib declarative quick
-
-CONFIG += qtwebkit
+QT += testlib declarative quick webkit
 
 DEFINES += TESTS_SOURCE_DIR=\\\"$$PWD\\\" \
            QWP_PATH=\\\"$${ROOT_BUILD_DIR}/bin\\\"
index 251fde5674dad999e998bd90d3f1bc826524c9ba..43a6696efcf03133960ef9d08d4fb710eb266be0 100644 (file)
@@ -18,8 +18,8 @@
 */
 
 #include "util.h"
-#include "qquickwebview_p.h"
-#include "qwebloadrequest_p.h"
+#include "private/qquickwebview_p.h"
+#include "private/qwebloadrequest_p.h"
 #include <stdio.h>
 
 void addQtWebProcessToPath()
index e40077f95c0052ff321f536af5caa328f6c4e197..e3d2dde4b60b4ed3fb11e01f7830a4842238689b 100644 (file)
@@ -11,9 +11,7 @@ DESTDIR = $${ROOT_BUILD_DIR}/bin
 
 SOURCES += qt/MainQt.cpp
 
-CONFIG += qtwebkit
-
-QT += network
+QT += network webkit
 macx: QT += xml
 
 contains(QT_CONFIG, opengl) {
index a182fc32a8baa97edac2282c112db3db03d59fdd..8aa88e0a7ee67e603805540eabbdc1d3f9e87091 100644 (file)
@@ -7,7 +7,104 @@
 TEMPLATE = lib
 TARGET = QtWebKit
 
-DESTDIR = $${ROOT_BUILD_DIR}/lib
+WEBKIT_DESTDIR = $${ROOT_BUILD_DIR}/lib
+
+haveQt(5) {
+    # Use Qt5's module system
+    load(qt_module)
+    MODULE = webkit
+    MODULE_PRI = $$QT.webkit.module_pri
+    CONFIG += module
+
+    BASE_TARGET = $$TARGET
+
+    load(qt_module_config)
+
+    # Make sure the module config doesn't override our preferred build config
+    debug_and_release:if(!debug|!release): CONFIG -= debug_and_release
+
+    # Allow doing a debug-only build of WebKit (not supported by Qt)
+    macx:!debug_and_release:debug: TARGET = $$BASE_TARGET
+
+    # ---------------- Custom developer-build handling -------------------
+    #
+    # The assumption for Qt developer builds is that the module file
+    # will be put into qtbase/mkspecs/modules, and the libraries into
+    # qtbase/lib, with rpath/install_name set to the Qt lib dir.
+    #
+    # For WebKit we don't want that behavior for the libraries, as we want
+    # them to be self-contained in the WebKit build dir. To achive that we
+    # trick Qt into thinking it's not a developer build, but setting QTDIR
+    # to a bogus path in default_pre.prf.
+    #
+    # We still want the module file to live in the Qt dir so the module can
+    # be used by setting QT += webkit, so we copy the file manually. We also
+    # have to make sure the rpath/install_name of the libraries are relative
+    # to the webkit build dir.
+
+    # We use private_tests to detect developer build, since the destdir will
+    # always be our webkit build dir. This might change as configure changes.
+    contains(QT_CONFIG, private_tests): CONFIG += qt_developer_build
+
+    !build_pass {
+        # Make a more accessible copy of the module forward file
+        # in the WebKit build directory.
+        convenience_module_path = $${ROOT_BUILD_DIR}/modules
+        module_filename = $$basename(QT.webkit.module_pri)
+
+        make_module_fwd_convenience.target = $$convenience_module_path/$$module_filename
+        make_module_fwd_convenience.commands = $$QMAKE_MKDIR $$convenience_module_path \
+            && echo \"include($$QMAKE_EXTRA_MODULE_FORWARDS/$$module_filename)\" > $$convenience_module_path/$$module_filename
+        make_module_fwd_convenience.depends = $$QMAKE_EXTRA_MODULE_FORWARDS/$$module_filename
+
+        QMAKE_EXTRA_TARGETS += make_module_fwd_convenience
+        DEFAULT_TARGETS += make_module_fwd_convenience
+
+        qt_developer_build {
+            # Copy the module forward file into Qt so that the module
+            # is immediately accessible.
+            qt_modules_path = $$[QT_INSTALL_PREFIX]/mkspecs/modules
+
+            copy_module_fwd_file.target = $$qt_modules_path/$$module_filename
+            copy_module_fwd_file.commands = $$QMAKE_COPY $$QMAKE_EXTRA_MODULE_FORWARDS/$$module_filename $$qt_modules_path
+            # FIXME: Add dependendy that ensures we copy the forward file if the target is updated
+            copy_module_fwd_file.depends = $$QMAKE_EXTRA_MODULE_FORWARDS/$$module_filename
+
+            QMAKE_EXTRA_TARGETS += copy_module_fwd_file
+            DEFAULT_TARGETS += copy_module_fwd_file
+        }
+    }
+
+    # Make sure the install_name of the QtWebKit library point to webkit
+    macx {
+        # We do our own absolute path so that we can trick qmake into
+        # using the webkit build path instead of the Qt install path.
+        CONFIG -= absolute_library_soname
+        QMAKE_LFLAGS_SONAME = $$QMAKE_LFLAGS_SONAME$$WEBKIT_DESTDIR/
+
+        !debug_and_release|build_pass {
+            # We also have to make sure the install_name is correct when
+            # the library is installed.
+            change_install_name.depends = install_target
+
+            # The install rules generated by qmake for frameworks are busted in
+            # that both the debug and the release makefile copy QtWebKit.framework
+            # into the install dir, so whatever changes we did to the release library
+            # will get overwritten when the debug library is installed. We work around
+            # that by running install_name on both, for both configs.
+            change_install_name.commands = framework_dir=\$\$(dirname $(TARGETD)); \
+                for file in \$\$(ls $$[QT_INSTALL_LIBS]/\$\$framework_dir/$$BASE_TARGET*); do \
+                    install_name_tool -id \$\$file \$\$file; \
+                done
+            default_install_target.target = install
+            default_install_target.depends += change_install_name
+
+            QMAKE_EXTRA_TARGETS += change_install_name default_install_target
+        }
+    }
+} else {
+    DESTDIR = $$WEBKIT_DESTDIR
+}
 
 runSyncQt() # Generate forwarding headers for the QtWebKit API
 
@@ -176,55 +273,53 @@ contains(CONFIG, texmap) {
     DEFINES += WTF_USE_TEXTURE_MAPPER=1
 }
 
+plugin_backend_xlib: PKGCONFIG += x11
 
 # ------------- Install rules -------------
 
-modulefile.files = $$QT.webkit.modulefile
-mkspecs = $$[QMAKE_MKSPECS]
-mkspecs = $$split(mkspecs, :)
-modulefile.path = $$last(mkspecs)/modules
-INSTALLS += modulefile
-
-# Syncqt has already run at this point, so we can use headers.pri
-# as a basis for our install-rules
-HEADERS_PRI = $${ROOT_BUILD_DIR}/include/$$TARGET/headers.pri
-!include($$HEADERS_PRI): error(Failed to resolve install headers)
-
-headers.files = $$SYNCQT.HEADER_FILES $$SYNCQT.HEADER_CLASSES
-!isEmpty(INSTALL_HEADERS): headers.path = $$INSTALL_HEADERS/$${TARGET}
-else: headers.path = $$[QT_INSTALL_HEADERS]/$${TARGET}
-INSTALLS += headers
-
-!isEmpty(INSTALL_LIBS): target.path = $$INSTALL_LIBS
-else: target.path = $$[QT_INSTALL_LIBS]
-INSTALLS += target
-
-unix {
-    CONFIG += create_pc create_prl
-    QMAKE_PKGCONFIG_LIBDIR = $$target.path
-    QMAKE_PKGCONFIG_INCDIR = $$headers.path
-    QMAKE_PKGCONFIG_DESTDIR = pkgconfig
-    lib_replace.match = $$re_escape($$DESTDIR)
-    lib_replace.replace = $$[QT_INSTALL_LIBS]
-    QMAKE_PKGCONFIG_INSTALL_REPLACE += lib_replace
-}
+haveQt(5) {
+    # Install rules handled by Qt's module system
+} else {
+    # For Qt4 we have to set up install rules manually
+
+    # Syncqt has already run at this point, so we can use headers.pri
+    # as a basis for our install-rules
+    HEADERS_PRI = $${ROOT_BUILD_DIR}/include/$${QT.webkit.name}/headers.pri
+    !include($$HEADERS_PRI): error(Failed to resolve install headers)
+
+    headers.files = $$SYNCQT.HEADER_FILES $$SYNCQT.HEADER_CLASSES
+    !isEmpty(INSTALL_HEADERS): headers.path = $$INSTALL_HEADERS/$${TARGET}
+    else: headers.path = $$[QT_INSTALL_HEADERS]/$${TARGET}
+    INSTALLS += headers
+
+    !isEmpty(INSTALL_LIBS): target.path = $$INSTALL_LIBS
+    else: target.path = $$[QT_INSTALL_LIBS]
+    INSTALLS += target
+
+    unix {
+        CONFIG += create_pc create_prl
+        QMAKE_PKGCONFIG_LIBDIR = $$target.path
+        QMAKE_PKGCONFIG_INCDIR = $$headers.path
+        QMAKE_PKGCONFIG_DESTDIR = pkgconfig
+        lib_replace.match = $$re_escape($$DESTDIR)
+        lib_replace.replace = $$[QT_INSTALL_LIBS]
+        QMAKE_PKGCONFIG_INSTALL_REPLACE += lib_replace
+    }
 
-mac {
-    !static:contains(QT_CONFIG, qt_framework) {
-        # Build QtWebKit as a framework, to match how Qt was built
-        CONFIG += lib_bundle qt_no_framework_direct_includes qt_framework
-
-        # For debug_and_release configs, only copy headers in release
-        !debug_and_release|if(build_pass:CONFIG(release, debug|release)) {
-            FRAMEWORK_HEADERS.version = Versions
-            FRAMEWORK_HEADERS.files = $${headers.files}
-            FRAMEWORK_HEADERS.path = Headers
-            QMAKE_BUNDLE_DATA += FRAMEWORK_HEADERS
+    mac {
+        !static:contains(QT_CONFIG, qt_framework) {
+            # Build QtWebKit as a framework, to match how Qt was built
+            CONFIG += lib_bundle qt_no_framework_direct_includes qt_framework
+
+            # For debug_and_release configs, only copy headers in release
+            !debug_and_release|if(build_pass:CONFIG(release, debug|release)) {
+                FRAMEWORK_HEADERS.version = Versions
+                FRAMEWORK_HEADERS.files = $${headers.files}
+                FRAMEWORK_HEADERS.path = Headers
+                QMAKE_BUNDLE_DATA += FRAMEWORK_HEADERS
+            }
         }
-    }
 
-    QMAKE_LFLAGS_SONAME = "$${QMAKE_LFLAGS_SONAME}$${DESTDIR}$${QMAKE_DIR_SEP}"
+        QMAKE_LFLAGS_SONAME = "$${QMAKE_LFLAGS_SONAME}$${DESTDIR}$${QMAKE_DIR_SEP}"
+    }
 }
-
-plugin_backend_xlib: PKGCONFIG += x11
-
index 6cbcef33bd079236c209372fa547b6f122f72685..246b5c1795f1a1f7f8aba8888405e73f2edb5d6f 100644 (file)
@@ -13,6 +13,6 @@
     "script" => "#include <QtScript/QtScript>\n",
 );
 %modulepris = (
-    "QtWebKit" => "$basedir/../Tools/qmake/mkspecs/modules/qt_webkit.pri",
+    "QtWebKit" => "$basedir/../Tools/qmake/qt_webkit.pri",
 );
 @ignore_for_master_contents = ( "qwebscriptworld.h", "testwindow.h", "util.h" );
index 55e28a32cebdd1fa999f41037822059fec6a2524..bd5f2bb732feebb7dc96901619d9b89d9a199707 100644 (file)
@@ -1,3 +1,49 @@
+2012-03-08  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>
+
+        [Qt] Use Qt's module system for install rules and depending on QtWebKit
+
+        Instead of rolling our own install rules we now use the same approach as
+        every other Qt module, by loading qt_module.prf and qt_module_config.prf.
+
+        This ensures that we follow the same semantics as the rest of Qt on
+        what sort of config options are enabled by default (create_cmake eg.).
+        It also allows us to use QT += webkit instead of the workaround we had
+        with CONFIG += qtwebkit.
+
+        We do however force Qt to always treat our build as a non-developer build,
+        so the libraries will end up in the WebKit lib directory instead of the
+        qtbase directory (as with a normal developer-build). This allows us to
+        keep the webkit-build self-contained. If Qt is a developer build we still
+        copy the module file manually to Qt, so that you don't have to install
+        WebKit to make it available.
+
+        For non-developer builds of Qt, it is still possible to use the built
+        WebKit libraries without having to install them, by having the variable
+        QMAKE_EXTRA_MODULE_FORWARDS set in the project's .qmake.cache file,
+        pointing to $WEBKITOUTUTDIR/$CONFIGURATION/modules.
+
+        https://bugs.webkit.org/show_bug.cgi?id=80590
+
+        Reviewed by Simon Hausmann.
+
+        * DumpRenderTree/qt/DumpRenderTree.pro:
+        * MiniBrowser/qt/BrowserWindow.cpp:
+        * MiniBrowser/qt/MiniBrowser.pro:
+        * MiniBrowser/qt/MiniBrowserApplication.cpp:
+        * MiniBrowser/qt/UrlLoader.cpp:
+        * QtTestBrowser/QtTestBrowser.pro:
+        * Tools.pro:
+        * WebKitTestRunner/InjectedBundle/Target.pri:
+        * WebKitTestRunner/Target.pri:
+        * qmake/mkspecs/features/default_post.prf:
+        * qmake/mkspecs/features/default_pre.prf:
+        * qmake/mkspecs/features/functions.prf:
+        * qmake/mkspecs/features/qtwebkit-private.prf: Removed.
+        * qmake/mkspecs/features/qtwebkit.prf:
+        * qmake/mkspecs/features/rpath.prf:
+        * qmake/mkspecs/modules/qt_webkit.pri: Removed.
+        * qmake/qt_webkit.pri: Added.
+
 2012-03-08  Igor Oliveira  <igor.o@sisa.samsung.com>
 
         Unreviewed. Update my email.
index 9d4954b464fc22be79724226f1783c256abcc336..56604d51856c3db9db0052ada9f2b685b5dda060 100644 (file)
@@ -13,13 +13,11 @@ load(features)
 
 WEBKIT += wtf webcore
 
-CONFIG += qtwebkit
-
 INCLUDEPATH += \
     $$PWD/.. \
     $${ROOT_WEBKIT_DIR}/Source/WebKit/qt/WebCoreSupport
 
-QT = core gui network testlib
+QT = core gui network testlib webkit
 macx: QT += xml
 haveQt(5): QT += widgets printsupport
 
index 8979167025174581b459e609ac3828d95382634d..6ccd963bc36fc80db581139bbf502ece74238967 100644 (file)
@@ -28,8 +28,8 @@
 
 #include "BrowserWindow.h"
 
-#include "qquickwebpage_p.h"
-#include "qquickwebview_p.h"
+#include "private/qquickwebpage_p.h"
+#include "private/qquickwebview_p.h"
 #include "utils.h"
 
 #include <QDeclarativeEngine>
index f2290c86b8ecd278f13e83f049c6b907450d0d46..bf426452ab6d6bc4bde70dc2c5f127759cde2f92 100644 (file)
@@ -22,9 +22,7 @@ HEADERS += \
 TARGET = MiniBrowser
 DESTDIR = $${ROOT_BUILD_DIR}/bin
 
-CONFIG += qtwebkit qtwebkit-private
-
-QT += network declarative quick
+QT += network declarative quick webkit webkit-private
 macx: QT += xml
 
 RESOURCES += MiniBrowser.qrc
index 58c9dd7edb153d9e6c0bcb2137fe8eba75f4bee7..95891a463e7f5c61da26781b7b6a10a86e1edddf 100644 (file)
@@ -29,7 +29,7 @@
 #include "MiniBrowserApplication.h"
 
 #include "BrowserWindow.h"
-#include "qquickwebview_p.h"
+#include "private/qquickwebview_p.h"
 #include "utils.h"
 #include <QRegExp>
 #include <QEvent>
index daf5628dbb040079ff4665f8f38e3f8744106259..8b330fdb93ff22c340efae8dfbad161b3b166b08 100644 (file)
@@ -27,7 +27,7 @@
  */
 
 #include "UrlLoader.h"
-#include "qquickwebview_p.h"
+#include "private/qquickwebview_p.h"
 
 #include <QDebug>
 #include <QFile>
index d54dc6312664c371b0eedbcde081e986562ae1ac..628dc1f422b1f41417dc7b1d1d85230d953b197a 100644 (file)
@@ -41,11 +41,9 @@ HEADERS += \
 
 WEBKIT += wtf webcore
 
-CONFIG += qtwebkit
-
 DESTDIR = $$ROOT_BUILD_DIR/bin
 
-QT += network
+QT += network webkit
 
 macx:QT += xml
 haveQt(5): QT += printsupport widgets
index b43c26f84a0dafc18ddbbcff13352aa2c1e24aaa..fb2b19a37d956d96fb65a1a02760b204be27907f 100644 (file)
@@ -27,6 +27,7 @@ OTHER_FILES = \
     qmake/README \
     qmake/configure.pro \
     qmake/sync.profile \
+    qmake/qt_webkit.pri \
     qmake/config.tests/README \
     qmake/config.tests/fontconfig/* \
     qmake/config.tests/gccdepends/* \
index de5b63b9012b6c9b1f4fb73b1f410d8d69b4124d..7d382ac97be6157184e150a42a12c12215169e05 100644 (file)
@@ -50,13 +50,13 @@ HEADERS += \
 
 DESTDIR = $${ROOT_BUILD_DIR}/lib
 
-QT += declarative widgets
+QT += declarative widgets webkit
 
 load(features)
 
 WEBKIT += wtf javascriptcore webcore
 
-CONFIG += plugin qtwebkit rpath
+CONFIG += plugin rpath
 
 contains(DEFINES, HAVE_FONTCONFIG=1): PKGCONFIG += fontconfig
 
index bbd7cecfce27f22aa2f57cf7158372f2b54be469..6f1da953d0049edf95702018103a3a2af59d345e 100644 (file)
@@ -25,14 +25,12 @@ SOURCES += \
 
 DESTDIR = $${ROOT_BUILD_DIR}/bin
 
-QT = core gui widgets network declarative testlib quick
+QT = core gui widgets network declarative testlib quick webkit
 
 load(features)
 
 WEBKIT += wtf javascriptcore webkit2
 
-CONFIG += qtwebkit
-
 DEFINES += USE_SYSTEM_MALLOC=1
 
 PREFIX_HEADER = WebKitTestRunnerPrefix.h
index b8b084f9fe224470b2730452a61ba65384e0b0af..2c3c60bacb7efc4a7411104097932d46490805fc 100644 (file)
 # or include() and a CONFIG += feature.
 CONFIG += config_step
 
-# In addition to the main shared QtWebKit library we also
-# need to link to any intermediate shared libraries. We do
-# this check here instead of in qtwebkit.prf to take advantage
-# of the WEBKIT variable processing below.
-CONFIG(qtwebkit):force_static_libs_as_shared {
-    WEBKIT += wtf webcore
-    !v8: WEBKIT += javascriptcore
-    !no_webkit2: WEBKIT += webkit2
-}
-
-# Reorder libraries so that the link and include order is correct,
-# and make sure the case matches the original case.
-libraries = WebKit2 WebCore JavaScriptCore WTF
-for(library, libraries) {
-    contains(WEBKIT, $$lower($$library)) {
-        WEBKIT -= $$lower($$library)
-        WEBKIT *= $$library
-    }
-}
-
-defineTest(needToLink) {
-    # The main dynamic library always needs to link in the intermediate libraries
-    contains(TARGET, QtWebKit): return(true)
-
-    force_static_libs_as_shared {
-        # So do the individual libraries if they are dynamic
-        contains(libraries, $$TARGET): return(true)
-
-        # Or anything that uses QtWebKit in this special config
-        CONFIG(qtwebkit): return(true)
-    }
-
-    # Lastly, we allow apps (jsc) to link directly to the intermediate
-    # libraries intead of using the exported symbols from QtWebKit.
-    contains(TEMPLATE, app):!CONFIG(qtwebkit): return(true)
-
-    # Anything else should just get include paths, etc, not link
-    return(false)
-}
-
-for(library, WEBKIT) {
-    # Juggle LIBS to keep the static link order correct
-    existing_libs = $$LIBS
-    unset(LIBS)
-
-    # We definitly need include paths and such (this will set
-    # SOURCE_DIR to the right path so we can use it below).
-    library_identifier = $$lower($$library)
-    include(../modules/$${library_identifier}.prf)
-
-    # More juggling
-    dependent_libs = $$LIBS
-    unset(LIBS)
-
-    # But we might also need to link against it
-    needToLink() {
-        linkAgainstLibrary($$library, $$eval(WEBKIT.$${library_identifier}.root_source_dir))
-        LIBS += $$dependent_libs
-    }
-
-    LIBS = $$existing_libs $$LIBS
-}
-
 # Help keep the build tree clean
 MOC_DIR = moc
 RCC_DIR = rcc
@@ -187,8 +124,9 @@ contains(TEMPLATE, lib) {
     # Build both debug and release configurations
     mac: CONFIG += build_all
 
-    # Prevent name clashes when building both debug and release
-    debug_and_release: TARGET = $$qtLibraryTarget($$TARGET)
+    # Prevent name clashes when building both debug and release. Qt5's module
+    # system already takes care of this for the top level QtWebKit library.
+    !module:debug_and_release: TARGET = $$qtLibraryTarget($$TARGET)
 
     isEmpty(DESTDIR): DESTDIR = $$activeBuildConfig()
 
@@ -202,6 +140,74 @@ contains(TEMPLATE, lib) {
     }
 }
 
+contains(QT, webkit) {
+    haveQt(4) {
+        # Qt 4 still uses custom rules to depend on QtWebKit
+        load(qtwebkit)
+    }
+
+    # In addition to the main shared QtWebKit library we also
+    # need to link to any intermediate shared libraries.
+    force_static_libs_as_shared {
+        WEBKIT += wtf webcore
+        !v8: WEBKIT += javascriptcore
+        !no_webkit2: WEBKIT += webkit2
+    }
+}
+
+# Reorder libraries so that the link and include order is correct,
+# and make sure the case matches the original case.
+libraries = WebKit2 WebCore JavaScriptCore WTF
+for(library, libraries) {
+    contains(WEBKIT, $$lower($$library)) {
+        WEBKIT -= $$lower($$library)
+        WEBKIT *= $$library
+    }
+}
+
+defineTest(needToLink) {
+    # The main dynamic library always needs to link in the intermediate libraries
+    contains(TARGET, $$resolveFinalLibraryName($${QT.webkit.name})): return(true)
+
+    force_static_libs_as_shared {
+        # So do the individual libraries if they are dynamic
+        contains(libraries, $$TARGET): return(true)
+
+        # Or anything that uses QtWebKit in this special config
+        contains(QT, webkit): return(true)
+    }
+
+    # Lastly, we allow apps (jsc) to link directly to the intermediate
+    # libraries intead of using the exported symbols from QtWebKit.
+    contains(TEMPLATE, app):!contains(QT, webkit): return(true)
+
+    # Anything else should just get include paths, etc, not link
+    return(false)
+}
+
+for(library, WEBKIT) {
+    # Juggle LIBS to keep the static link order correct
+    existing_libs = $$LIBS
+    unset(LIBS)
+
+    # We definitly need include paths and such (this will set
+    # SOURCE_DIR to the right path so we can use it below).
+    library_identifier = $$lower($$library)
+    include(../modules/$${library_identifier}.prf)
+
+    # More juggling
+    dependent_libs = $$LIBS
+    unset(LIBS)
+
+    # But we might also need to link against it
+    needToLink() {
+        linkAgainstLibrary($$library, $$eval(WEBKIT.$${library_identifier}.root_source_dir))
+        LIBS += $$dependent_libs
+    }
+
+    LIBS = $$existing_libs $$LIBS
+}
+
 equals(_PRO_FILE_, $${ROOT_WEBKIT_DIR}/WebKit.pro):!isEmpty(OVERRIDE_SUBDIRS) {
     # The root WebKit project file is the only one that allows
     # you to pass a set of subtargets on the comand line.
@@ -292,4 +298,9 @@ for(target, $$list($$unique(DEFAULT_TARGETS))) {
 # relative.
 DESTDIR = $$replace(DESTDIR, ^$${ROOT_BUILD_DIR}, $${BUILD_ROOT_RELATIVE_TO_OUT_PWD})
 
+# Since we loaded our own rules for depending on QtWebKit, and we
+# have no more logic that checks contains(QT, webkit), we unset it
+# here so that Qt will not add its own include and library paths.
+haveQt(4): QT -= webkit webkit-private
+
 load(default_post) # Load Qt's defaults
index 82192a9e41244924a2a49d8557b089f58ea6af7f..1e6369dbcee40a48221715da137b1242648c8470 100644 (file)
@@ -29,8 +29,13 @@ pro_file_name = $$basename(_PRO_FILE_)
 !equals(pro_file_name, configure.pro): QMAKE_SYNCQT_OUTDIR = $$ROOT_BUILD_DIR
 
 # Load Qt's defaults after we've resolved the build directory. This will also
-# run syncqt if there is a sync.profile in the $$_PRO_FILE_PWD_
+# run syncqt if there is a sync.profile in the $$_PRO_FILE_PWD_. We never want
+# to enable Qt's concept of a developer-build, since we take care of installing
+# our own module file. See api.pri for details about how we utilize this.
+old_qtdir=$$QTDIR
+QTDIR=no-developer-build-please
 load(default_pre)
+QTDIR=$$old_qtdir
 
 # Load results of config tests (only supported in Qt 5)
 haveQt(5): include($${ROOT_BUILD_DIR}/Tools/qmake/.qmake.cache, , true)
@@ -100,9 +105,12 @@ haveQt(5): {
     }
 }
 
-QT.webkit.modulefile = $${ROOT_WEBKIT_DIR}/Tools/qmake/mkspecs/modules/qt_webkit.pri
-include($$QT.webkit.modulefile)
-VERSION = $${QT.webkit.VERSION}
+haveQt(4) {
+    # Qt5 will automatically load the module files for us, but for Qt4
+    # we have to do it manually so that the various QT.webkit.foo names
+    # are available.
+    include($${ROOT_WEBKIT_DIR}/Tools/qmake/qt_webkit.pri)
+}
 
 # Set some defaults for specific platforms
 CONFIG += include_webinspector
index 98ac7205f7d948a73fd021f3b252fadd0a3a4e8c..a0a13c27d8f4fd0ed2f0491a08527d2a5d290bc9 100644 (file)
@@ -231,6 +231,22 @@ defineTest(prependEach) {
     return(true)
 }
 
+defineReplace(resolveFinalLibraryName) {
+    !debug_and_release: return($$1)
+
+    original_template = $$TEMPLATE
+    original_framework_name = $$QMAKE_FRAMEWORK_BUNDLE_NAME
+
+    TEMPLATE = lib # So that qtLibraryTarget works
+    target = $$qtLibraryTarget($$1)
+
+    TEMPLATE = $$original_template
+    QMAKE_FRAMEWORK_BUNDLE_NAME = $$original_framework_name
+    export(QMAKE_FRAMEWORK_BUNDLE_NAME)
+
+    return($$target)
+}
+
 defineTest(linkAgainstLibrary) {
     unset(target)
     target = $$1
@@ -240,12 +256,7 @@ defineTest(linkAgainstLibrary) {
 
     library = $$lower($$target)
 
-    debug_and_release {
-        original_template = $$TEMPLATE
-        TEMPLATE = lib # So that qtLibraryTarget works
-        target = $$qtLibraryTarget($$target)
-        TEMPLATE = $$original_template
-    }
+    target = $$resolveFinalLibraryName($$target)
 
     path = $$replace(source_dir, $${ROOT_WEBKIT_DIR}, $${ROOT_BUILD_DIR})/$$activeBuildConfig()
 
diff --git a/Tools/qmake/mkspecs/features/qtwebkit-private.prf b/Tools/qmake/mkspecs/features/qtwebkit-private.prf
deleted file mode 100644 (file)
index 05c68d9..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-# -------------------------------------------------------------------
-# This file is used by tools that rely on private APIs of
-# the QtWebKit library
-#
-# FIXME: Can we use the same way as client applications would use?
-#
-# See 'Tools/qmake/README' for an overview of the build system
-# -------------------------------------------------------------------
-
-config_step {
-    INCLUDEPATH += $${ROOT_BUILD_DIR}/include/$${QT.webkit.name}/$${QT.webkit.VERSION}/$${QT.webkit.name}/private
-}
index 90cbd6e573bf1c7ee7be6b9f40e4e1ea6be3d3b2..60e0b8b6930f3cea007e74033be843de2d30a94a 100644 (file)
@@ -1,12 +1,12 @@
 # -------------------------------------------------------------------
 # This file is used by tools that rely on the QtWebKit library
 #
-# FIXME: Can we use the same way as client applications would use?
+# It is only used for Qt4, which does not have a module system.
 #
 # See 'Tools/qmake/README' for an overview of the build system
 # -------------------------------------------------------------------
 
-config_step {
+haveQt(4) {
     QMAKE_LIBDIR = $$ROOT_BUILD_DIR/lib $$QMAKE_LIBDIR
     QTWEBKITLIBNAME = QtWebKit
     mac:!static:contains(QT_CONFIG, qt_framework):!CONFIG(webkit_no_framework) {
@@ -25,5 +25,6 @@ config_step {
 
     DEPENDPATH += $$ROOT_WEBKIT_DIR/Source/WebKit/qt/Api
     INCLUDEPATH += $${ROOT_BUILD_DIR}/include/QtWebKit
+} else {
+    error(Relying on $$_FILE_ for Qt5 builds are not supported)
 }
-
index af12fdaafc95ef2f1ebdd0185fa8b00127289048..46a82e1e90ecb217978d7a93ed93713caedec1e8 100644 (file)
@@ -1,19 +1,23 @@
 # -------------------------------------------------------------------
 # Set rpath for the application/library we're building
 #
+# Only used by Qt4.
+#
 # See 'Tools/qmake/README' for an overview of the build system
 # -------------------------------------------------------------------
 
-equals(ROOT_BUILD_DIR, $$dirname(DESTDIR)): RPATHDIR_RELATIVE_TO_DESTDIR = ../lib
+haveQt(4) {
+    equals(ROOT_BUILD_DIR, $$dirname(DESTDIR)): RPATHDIR_RELATIVE_TO_DESTDIR = ../lib
 
-linux-*:!isEmpty(RPATHDIR_RELATIVE_TO_DESTDIR) {
-    # Do the rpath by hand since it's not possible to use ORIGIN in QMAKE_RPATHDIR
-    # this expands to $ORIGIN (after qmake and make), it does NOT read a qmake var.
-    QMAKE_RPATHDIR = \$\$ORIGIN/$${RPATHDIR_RELATIVE_TO_DESTDIR} $${QMAKE_RPATHDIR}
-    RPATH = $$join(QMAKE_RPATHDIR, ":")
+    linux-*:!isEmpty(RPATHDIR_RELATIVE_TO_DESTDIR) {
+        # Do the rpath by hand since it's not possible to use ORIGIN in QMAKE_RPATHDIR
+        # this expands to $ORIGIN (after qmake and make), it does NOT read a qmake var.
+        QMAKE_RPATHDIR = \$\$ORIGIN/$${RPATHDIR_RELATIVE_TO_DESTDIR} $${QMAKE_RPATHDIR}
+        RPATH = $$join(QMAKE_RPATHDIR, ":")
 
-    QMAKE_LFLAGS += -Wl,-z,origin \'-Wl,-rpath,$${RPATH}\'
-    QMAKE_RPATHDIR =
-} else {
-    QMAKE_RPATHDIR = $${ROOT_BUILD_DIR}/lib $${QMAKE_RPATHDIR}
+        QMAKE_LFLAGS += -Wl,-z,origin \'-Wl,-rpath,$${RPATH}\'
+        QMAKE_RPATHDIR =
+    } else {
+        QMAKE_RPATHDIR = $${ROOT_BUILD_DIR}/lib $${QMAKE_RPATHDIR}
+    }
 }
diff --git a/Tools/qmake/mkspecs/modules/qt_webkit.pri b/Tools/qmake/mkspecs/modules/qt_webkit.pri
deleted file mode 100644 (file)
index a4cf684..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-QT.webkit.VERSION = 4.10.0
-QT.webkit.MAJOR_VERSION = 4
-QT.webkit.MINOR_VERSION = 10
-QT.webkit.PATCH_VERSION = 0
-
-QT.webkit.name = QtWebKit
-QT.webkit.includes = $$QT_MODULE_INCLUDE_BASE $$QT_MODULE_INCLUDE_BASE/QtWebKit
-QT.webkit.private_includes = $$QT_MODULE_INCLUDE_BASE/$$QT.webkit.name/$$QT.webkit.VERSION
-QT.webkit.sources = $$QT_MODULE_BASE
-QT.webkit.libs = $$QT_MODULE_LIB_BASE
-QT.webkit.depends = core gui opengl network xmlpatterns script
-
-!contains(QT_CONFIG, modular)|contains(QT_ELIGIBLE_MODULES, webkit) {
-    QT_CONFIG += webkit
-} else {
-    warning("Attempted to include $$QT.webkit.name in the build, but it was not enabled in configure.")
-}
-
-# This is the old syntax for the WebKit version defines.
-# We keep them around in case someone was using them.
-QT_WEBKIT_VERSION = $$QT.webkit.VERSION
-QT_WEBKIT_MAJOR_VERSION = $$QT.webkit.MAJOR_VERSION
-QT_WEBKIT_MINOR_VERSION = $$QT.webkit.MINOR_VERSION
-QT_WEBKIT_PATCH_VERSION = $$QT.webkit.PATCH_VERSION
diff --git a/Tools/qmake/qt_webkit.pri b/Tools/qmake/qt_webkit.pri
new file mode 100644 (file)
index 0000000..b2f9840
--- /dev/null
@@ -0,0 +1,43 @@
+# These variables define the library version, which is based on the original
+# Qt library version. It is not related to the release-version of QtWebKit.
+QT.webkit.MAJOR_VERSION = 5
+QT.webkit.MINOR_VERSION = 0
+QT.webkit.PATCH_VERSION = 0
+QT.webkit.VERSION = 5.0.0
+
+QT.webkit.name = QtWebKit
+QT.webkit.includes = $$QT_MODULE_INCLUDE_BASE $$QT_MODULE_INCLUDE_BASE/QtWebKit
+QT.webkit.private_includes = $$QT_MODULE_INCLUDE_BASE/$$QT.webkit.name/$$QT.webkit.VERSION
+QT.webkit.sources = $$QT_MODULE_BASE
+QT.webkit.libs = $$QT_MODULE_LIB_BASE
+QT.webkit.depends = core gui opengl network xmlpatterns script
+QT.webkit.module_pri = $$_FILE_
+
+!contains(QT_CONFIG, modular)|contains(QT_ELIGIBLE_MODULES, webkit) {
+    QT_CONFIG += webkit
+} else {
+    warning("Attempted to include $$QT.webkit.name in the build, but it was not enabled in configure.")
+}
+
+# This is the old syntax for the WebKit version defines.
+# We keep them around in case someone was using them.
+QT_WEBKIT_VERSION = $$QT.webkit.VERSION
+QT_WEBKIT_MAJOR_VERSION = $$QT.webkit.MAJOR_VERSION
+QT_WEBKIT_MINOR_VERSION = $$QT.webkit.MINOR_VERSION
+QT_WEBKIT_PATCH_VERSION = $$QT.webkit.PATCH_VERSION
+
+unix:!mac {
+    install_prefix = $$find(_FILE_, ^$$[QT_INSTALL_PREFIX])
+    module_prefix = $$find(QMAKE_EXTRA_MODULE_FORWARDS, ^$$dirname(QT_MODULE_BIN_BASE))
+    isEmpty(install_prefix):!isEmpty(module_prefix) {
+        # We are loading the qt_webkit.pri forwarding file from the
+        # local webkit build directory, so set up rpath to point to
+        # to the local build. This ensures that any of the WebKit tools
+        # such as WebKitTestRunner and QtTestBrowser will link to the
+        # non-installed QtWebKit library. The same applies to third-
+        # party applications that set QMAKE_EXTRA_MODULE_FORWARDS.
+        QMAKE_LFLAGS *= "$${QMAKE_LFLAGS_RPATH}$${QT_MODULE_LIB_BASE}"
+    }
+    unset(install_prefix)
+    unset(module_prefix)
+}