[Qt] Re-generate QtWebKit API forwarding headers when API changes
authorvestbo@webkit.org <vestbo@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 23 Nov 2011 18:19:18 +0000 (18:19 +0000)
committervestbo@webkit.org <vestbo@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 23 Nov 2011 18:19:18 +0000 (18:19 +0000)
The forwarding headers are generated by syncqt, and syncqt is run by qmake,
so we need sync.profile to live in the same directory as the project file
that will be touched when adding/removing API (api.pri in our case).

Since the WebKit2 APIs live in a separate static library, we have to
add the project file for WebKit2 as a dependency of the api.pri file
as well, so that any changes to the WebKit2 API will still trigger a
run of qmake (and then syncqt).

Lastly, we use the new QMAKE_SYNCQT_OUTDIR variable in Qt 5 to ensure
that the forwarding headers are still generated in the root build dir,
not in the Source dir along with the internal forwarding headers.

Reviewed by Andreas Kling.

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

ChangeLog
Source/QtWebKit.pro
Source/api.pri
Source/sync.profile [moved from sync.profile with 65% similarity]
Tools/ChangeLog
Tools/qmake/mkspecs/features/default_pre.prf
Tools/qmake/mkspecs/features/functions.prf

index 5b76b9f..13e5de9 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,26 @@
+2011-11-23  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>
+
+        [Qt] Re-generate QtWebKit API forwarding headers when API changes
+
+        The forwarding headers are generated by syncqt, and syncqt is run by qmake,
+        so we need sync.profile to live in the same directory as the project file
+        that will be touched when adding/removing API (api.pri in our case).
+
+        Since the WebKit2 APIs live in a separate static library, we have to
+        add the project file for WebKit2 as a dependency of the api.pri file
+        as well, so that any changes to the WebKit2 API will still trigger a
+        run of qmake (and then syncqt).
+
+        Lastly, we use the new QMAKE_SYNCQT_OUTDIR variable in Qt 5 to ensure
+        that the forwarding headers are still generated in the root build dir,
+        not in the Source dir along with the internal forwarding headers.
+
+        Reviewed by Andreas Kling.
+
+        * Source/QtWebKit.pro:
+        * Source/api.pri:
+        * Source/sync.profile: Renamed from sync.profile.
+
 2011-11-23  Halton Huo  <halton.huo@intel.com>
 
         [EFL] Add zlib depend when freetype is used.
index 8b27cae..02fc9e1 100644 (file)
@@ -29,30 +29,3 @@ examples.CONFIG += no_default_target
 examples.makefile = Makefile
 SUBDIRS += examples
 
-haveQt(4):!build_pass {
-    # Use our own copy of syncqt from Qt 4.8 to generate forwarding headers
-    syncqt = $$toSystemPath($${ROOT_WEBKIT_DIR}/Tools/qmake/syncqt-4.8)
-    command = $$syncqt
-    win32-msvc*: command = $$command -windows
-
-    outdir = $$toSystemPath($${ROOT_BUILD_DIR})
-
-    # The module root has to be the same as directory of the pro-file that generates
-    # the install rules (api.pri), otherwise the relative paths in the generated
-    # headers.pri will be incorrect.
-    module_rootdir = $$toSystemPath($${_PRO_FILE_PWD_})
-
-    module = $${TARGET}$${DIRLIST_SEPARATOR}$${module_rootdir}$${DIRLIST_SEPARATOR}$$toSystemPath(WebKit/qt/Api)
-    fwheader_generator.commands = perl $${command} -outdir $${outdir} -separate-module $${module}
-    fwheader_generator.depends = $${syncqt}
-
-    variables = $$computeSubdirVariables(api)
-
-    api_qmake.target = $$eval($${variables}.target)-qmake_all
-    api_qmake.depends = fwheader_generator
-
-    api_makefile.target = $$eval($${variables}.makefile)
-    api_makefile.depends = fwheader_generator
-
-    QMAKE_EXTRA_TARGETS += fwheader_generator api_qmake api_makefile
-}
index 6d83016..34c65b2 100644 (file)
@@ -9,6 +9,8 @@ TARGET = QtWebKit
 
 DESTDIR = $${ROOT_BUILD_DIR}/lib
 
+runSyncQt() # Generate forwarding headers for the QtWebKit API
+
 load(features)
 
 include(WebKit/WebKit.pri)
@@ -20,6 +22,10 @@ CONFIG += webcore
 !no_webkit2 {
     CONFIG += webkit2
     QT += declarative
+
+    # Ensure that changes to the WebKit2 API will trigger a qmake of this
+    # file, which in turn runs syncqt to update the forwarding headers.
+    QMAKE_INTERNAL_INCLUDED_FILES *= WebKit2/Target.pri
 }
 
 v8:linux-* {
similarity index 65%
rename from sync.profile
rename to Source/sync.profile
index dba483e..4a28fa6 100644 (file)
@@ -1,7 +1,5 @@
 %modules = ( # path to module name map
-    # Has to be the same directory as the pro file that generates install rules,
-    # otherwise the relative paths in headers.pri will not be correct.
-    "QtWebKit" => "$basedir/Source"
+    "QtWebKit" => "$basedir"
 );
 %moduleheaders = ( # restrict the module headers to those found in relative path
     "QtWebKit" => "WebKit/qt/Api;WebKit2/UIProcess/API/qt",
@@ -15,6 +13,6 @@
     "script" => "#include <QtScript/QtScript>\n",
 );
 %modulepris = (
-    "QtWebKit" => "$basedir/Tools/qmake/mkspecs/modules/qt_webkit.pri",
+    "QtWebKit" => "$basedir/../Tools/qmake/mkspecs/modules/qt_webkit.pri",
 );
 @ignore_for_master_contents = ( "qwebscriptworld.h" );
index 575de6b..b996b3f 100644 (file)
@@ -1,3 +1,25 @@
+2011-11-23  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>
+
+        [Qt] Re-generate QtWebKit API forwarding headers when API changes
+
+        The forwarding headers are generated by syncqt, and syncqt is run by qmake,
+        so we need sync.profile to live in the same directory as the project file
+        that will be touched when adding/removing API (api.pri in our case).
+
+        Since the WebKit2 APIs live in a separate static library, we have to
+        add the project file for WebKit2 as a dependency of the api.pri file
+        as well, so that any changes to the WebKit2 API will still trigger a
+        run of qmake (and then syncqt).
+
+        Lastly, we use the new QMAKE_SYNCQT_OUTDIR variable in Qt 5 to ensure
+        that the forwarding headers are still generated in the root build dir,
+        not in the Source dir along with the internal forwarding headers.
+
+        Reviewed by Andreas Kling.
+
+        * qmake/mkspecs/features/default_pre.prf:
+        * qmake/mkspecs/features/functions.prf:
+
 2011-11-23  Johnny Ding  <jnd@chromium.org>
 
         Set right default value to baseURL in LayoutTestController::queueLoadHTMLString.
index 6dca683..d647f2a 100644 (file)
@@ -5,7 +5,6 @@
 # See 'Tools/qmake/README' for an overview of the build system
 # -------------------------------------------------------------------
 
-load(default_pre) # Load Qt's defaults
 load(functions)
 
 # FIXME: In this case we probably want to exit early so that we
@@ -45,6 +44,13 @@ for(ever) {
 
 BUILD_SUBDIR = $$join(BUILD_SUBDIR, $${QMAKE_DIR_SEP})
 
+# We want the QtWebKit API forwarding includes to live in the root build dir,
+# except when we are running the config.tests in Tools/qmake.
+pro_file_name = $$basename(_PRO_FILE_)
+!equals(pro_file_name, configure.pro): QMAKE_SYNCQT_OUTDIR = $$ROOT_BUILD_DIR
+
+load(default_pre) # Load Qt's defaults after we've resolved the build directory
+
 equals(OUT_PWD, $${ROOT_BUILD_DIR}) {
     !recursive_include:CONFIG += root_project_file
     BUILD_ROOT_RELATIVE_TO_OUT_PWD = .
index 609b8df..8ac43f9 100644 (file)
@@ -280,3 +280,33 @@ defineTest(linkLibrary) {
     export(CONFIG)
     return(true)
 }
+
+defineTest(runSyncQt) {
+
+    build_pass:return(true)
+
+    haveQt(5) {
+        # Qt 5 will run synqt as part of defaults_pre, so no need to do anything
+    } else {
+        # Use our own copy of syncqt from Qt 4.8 to generate forwarding headers
+        syncqt = $$toSystemPath($${ROOT_WEBKIT_DIR}/Tools/qmake/syncqt-4.8)
+        command = $$syncqt
+        win32-msvc*: command = $$command -windows
+
+        outdir = $$toSystemPath($${ROOT_BUILD_DIR})
+
+        # The module root has to be the same as directory of the pro-file that generates
+        # the install rules (api.pri), otherwise the relative paths in the generated
+        # headers.pri will be incorrect.
+        module_rootdir = $$toSystemPath($${_PRO_FILE_PWD_})
+
+        module = $${TARGET}$${DIRLIST_SEPARATOR}$${module_rootdir}$${DIRLIST_SEPARATOR}$$toSystemPath(WebKit/qt/Api)
+        command = perl $${command} -outdir $${outdir} -separate-module $${module}
+        message(Running $$command)
+        !system($$command) {
+            error(Failed to run $${command})
+        }
+    }
+
+    return(true)
+}