[Qt] Ensure that QT is finalized before loading qt_module.prf
authorvestbo@webkit.org <vestbo@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 13 Sep 2012 15:10:43 +0000 (15:10 +0000)
committervestbo@webkit.org <vestbo@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 13 Sep 2012 15:10:43 +0000 (15:10 +0000)
As qt_module.prf does dependency tracking based on the content of the
QT variable. The intermediate WebKit modules modify the variable in
their .pri files, so we have to ensure we've loaded all the modules
before loading qt_module.

Reviewed by Tor Arne Vestbø.
Patch by Oswald Buddenhagen <oswald.buddenhagen@nokia.com> on 2012-09-13

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

ChangeLog
Source/api.pri
Tools/ChangeLog
Tools/qmake/mkspecs/features/default_post.prf
Tools/qmake/mkspecs/features/webkit_modules.prf [new file with mode: 0644]

index 542b4f5..6b9aa66 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,19 @@
 2012-09-13  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>
 
+        [Qt] Ensure that QT is finalized before loading qt_module.prf
+
+        As qt_module.prf does dependency tracking based on the content of the
+        QT variable. The intermediate WebKit modules modify the variable in
+        their .pri files, so we have to ensure we've loaded all the modules
+        before loading qt_module.
+
+        Reviewed by Tor Arne Vestbø.
+        Patch by Oswald Buddenhagen <oswald.buddenhagen@nokia.com> on 2012-09-13
+
+        * Source/api.pri:
+
+2012-09-13  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>
+
         [Qt] Make sure LIBS, PKGCONFIG, and QT, do not affect QtWebKit's prl file
 
         Unless it's actually a dependency of the public QtWebKit API.
index 2837082..01d5acc 100644 (file)
@@ -4,13 +4,30 @@
 # See 'Tools/qmake/README' for an overview of the build system
 # -------------------------------------------------------------------
 
+# Use Qt5's module system
+load(qt_build_config)
+
 TEMPLATE = lib
 TARGET = QtWebKit
 
 WEBKIT_DESTDIR = $${ROOT_BUILD_DIR}/lib
 
-# Use Qt5's module system
-load(qt_build_config)
+WEBKIT += wtf javascriptcore webcore
+
+build?(webkit1): WEBKIT += webkit1
+build?(webkit2): WEBKIT += webkit2
+
+# Ensure that changes to the WebKit1 and WebKit2 API will trigger a qmake of this
+# file, which in turn runs syncqt to update the forwarding headers.
+build?(webkit1): QMAKE_INTERNAL_INCLUDED_FILES *= WebKit/WebKit1.pro
+build?(webkit2): QMAKE_INTERNAL_INCLUDED_FILES *= WebKit2/Target.pri
+
+use?(3D_GRAPHICS): WEBKIT += angle
+
+# We load the relevant modules here, so that the effects of each module
+# on the QT variable can be picked up when we later load(qt_module).
+load(webkit_modules)
+
 MODULE = webkit
 MODULE_PRI = ../Tools/qmake/qt_webkit.pri
 
@@ -73,18 +90,6 @@ macx {
     }
 }
 
-WEBKIT += wtf javascriptcore webcore
-
-build?(webkit1): WEBKIT += webkit1
-build?(webkit2): WEBKIT += webkit2
-
-# Ensure that changes to the WebKit1 and WebKit2 API will trigger a qmake of this
-# file, which in turn runs syncqt to update the forwarding headers.
-build?(webkit1): QMAKE_INTERNAL_INCLUDED_FILES *= WebKit/WebKit1.pro
-build?(webkit2): QMAKE_INTERNAL_INCLUDED_FILES *= WebKit2/Target.pri
-
-use?(3D_GRAPHICS): WEBKIT += angle
-
 qnx {
     # see: https://bugs.webkit.org/show_bug.cgi?id=93460
     # the gcc 4.4.2 used in the qnx bbndk cannot cope with
index eee21bd..e2ade3f 100644 (file)
@@ -1,3 +1,18 @@
+2012-09-13  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>
+
+        [Qt] Ensure that QT is finalized before loading qt_module.prf
+
+        As qt_module.prf does dependency tracking based on the content of the
+        QT variable. The intermediate WebKit modules modify the variable in
+        their .pri files, so we have to ensure we've loaded all the modules
+        before loading qt_module.
+
+        Reviewed by Tor Arne Vestbø.
+        Patch by Oswald Buddenhagen <oswald.buddenhagen@nokia.com> on 2012-09-13
+
+        * qmake/mkspecs/features/default_post.prf:
+        * qmake/mkspecs/features/webkit_modules.prf: Added.
+
 2012-09-13  Simon Hausmann  <simon.hausmann@nokia.com>
 
         [Qt] Fix build of Qt WTR/MiniBrowser with MSVC and nmake
index 053f463..de5a34c 100644 (file)
@@ -183,16 +183,6 @@ contains(QT, webkit) {
     }
 }
 
-# Reorder libraries so that the link and include order is correct,
-# and make sure the case matches the original case.
-libraries = WebKit1 WebKit2 WebCore ANGLE 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)
@@ -213,33 +203,17 @@ defineTest(needToLink) {
     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)
+# Make sure we have loaded the relevant modules, so the include paths,
+# etc, are correct, and we can use WEBKIT.foo.dependent_libs below.
+load(webkit_modules)
 
-    # More juggling
-    dependent_libs = $$LIBS
-    unset(LIBS)
-
-    # But we might also need to link against it
-    needToLink() {
+# We might need to link against the WebKit intermediate libraries
+needToLink() {
+    for(library, WEBKIT) {
+        library_identifier = $$lower($$library)
         linkAgainstLibrary($$library, $$eval(WEBKIT.$${library_identifier}.root_source_dir))
-        LIBS += $$dependent_libs
-    }
-
-    # Anything not linking dynamically to QtWebKit should make sure to have its export
-    # macros syncrhonized with the code that it will be linked with statically.
-    !contains(QT, webkit) {
-        DEFINES += STATICALLY_LINKED_WITH_$$library
+        LIBS += $$eval(WEBKIT.$${library_identifier}.dependent_libs)
     }
-
-    LIBS = $$existing_libs $$LIBS
 }
 
 # Sanitize PKGCONFIG and LIBS, as we don't want any of these libraries
diff --git a/Tools/qmake/mkspecs/features/webkit_modules.prf b/Tools/qmake/mkspecs/features/webkit_modules.prf
new file mode 100644 (file)
index 0000000..8d76027
--- /dev/null
@@ -0,0 +1,38 @@
+# -------------------------------------------------------------------
+# Used for applying the content of the WEBKIT variable into the
+# effect each library/module has on variables such as LIBS and QT.
+#
+# See 'Tools/qmake/README' for an overview of the build system
+# -------------------------------------------------------------------
+
+# Reorder libraries so that the link and include order is correct,
+# and make sure the case matches the original case.
+libraries = WebKit1 WebKit2 WebCore ANGLE JavaScriptCore WTF
+for(library, libraries) {
+    contains(WEBKIT, $$lower($$library)) {
+        WEBKIT -= $$lower($$library)
+        WEBKIT *= $$library
+    }
+}
+
+# Load the .pri file for each library, to pick up LIBS, INCLUDES,
+# and other dependencies the library adds.
+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, so that we can add the dependent libs later
+    # on if we decide that we need to link to the library.
+    eval(WEBKIT.$${library_identifier}.dependent_libs = $$LIBS)
+    LIBS = $$existing_libs
+
+    # Anything not linking dynamically to QtWebKit should make sure to have its export
+    # macros synchronized with the code that it will be linked with statically.
+    !contains(QT, webkit): DEFINES += STATICALLY_LINKED_WITH_$$library
+}