[Qt] Add a configure step to the Qt build system
authorvestbo@webkit.org <vestbo@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 11 Sep 2012 13:06:39 +0000 (13:06 +0000)
committervestbo@webkit.org <vestbo@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 11 Sep 2012 13:06:39 +0000 (13:06 +0000)
This allows building the Qt port using just 'qmake WebKit.pro'. Using
the build-webkit script is still supported, and will add slightly more
logic to the build, such as detecting the need for clean or incremental
builds.

Internally, the build system now uses a new variable, WEBKIT_CONFIG, for
all things related to configuring the build, such as use/have/enable flags,
and these are translated to defines in default_post. Project files should
no longer check contains(DEFINES,...) to detect features, but use the new
enable?(), use?(), and have?() functions. The no_webkit1 and no_webkit2
options have been translated into WEBKIT_CONFIG options as well, and can
be checked using build?().

Reviewed by Simon Hausmann.

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

47 files changed:
ChangeLog
Source/QtWebKit.pro
Source/WTF/ChangeLog
Source/WTF/WTF.pri
Source/WTF/wtf/Platform.h
Source/WebCore/ChangeLog
Source/WebCore/DerivedSources.pri
Source/WebCore/Target.pri
Source/WebCore/WebCore.pri
Source/WebKit/ChangeLog
Source/WebKit/WebKit1.pri
Source/WebKit/WebKit1.pro
Source/WebKit/qt/ChangeLog
Source/WebKit/qt/declarative/declarative.pro
Source/WebKit/qt/declarative/public.pri
Source/WebKit/qt/tests/qgraphicswebview/qgraphicswebview.pro
Source/WebKit2/ChangeLog
Source/WebKit2/Target.pri
Source/WebKit2/UIProcess/API/qt/tests/tests.pri
Source/WebKit2/WebKit2.pri
Source/WebKit2/config.h
Source/api.pri
Source/tests.pri
Tools/ChangeLog
Tools/DumpRenderTree/qt/DumpRenderTree.pro
Tools/MiniBrowser/qt/MiniBrowser.pro
Tools/QtTestBrowser/QtTestBrowser.pro
Tools/Scripts/build-webkit
Tools/Scripts/webkitdirs.pm
Tools/Tools.pro
Tools/WebKitTestRunner/InjectedBundle/DerivedSources.pri
Tools/WebKitTestRunner/InjectedBundle/Target.pri
Tools/WebKitTestRunner/Target.pri
Tools/qmake/.qmake.cache [new file with mode: 0644]
Tools/qmake/configure.pri [deleted file]
Tools/qmake/configure.pro [deleted file]
Tools/qmake/dump-features.pl [new file with mode: 0644]
Tools/qmake/mkspecs/features/configure.prf [new file with mode: 0644]
Tools/qmake/mkspecs/features/default_post.prf
Tools/qmake/mkspecs/features/default_pre.prf
Tools/qmake/mkspecs/features/features.prf
Tools/qmake/mkspecs/features/features.pri
Tools/qmake/mkspecs/features/functions.prf
Tools/qmake/mkspecs/features/gprof.prf
Tools/qmake/mkspecs/features/mac/default_pre.prf
Tools/qmake/mkspecs/features/win32/default_pre.prf
WebKit.pro

index 499705b..677b85a 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,27 @@
+2012-09-11  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>
+
+        [Qt] Add a configure step to the Qt build system
+
+        This allows building the Qt port using just 'qmake WebKit.pro'. Using
+        the build-webkit script is still supported, and will add slightly more
+        logic to the build, such as detecting the need for clean or incremental
+        builds.
+
+        Internally, the build system now uses a new variable, WEBKIT_CONFIG, for
+        all things related to configuring the build, such as use/have/enable flags,
+        and these are translated to defines in default_post. Project files should
+        no longer check contains(DEFINES,...) to detect features, but use the new
+        enable?(), use?(), and have?() functions. The no_webkit1 and no_webkit2
+        options have been translated into WEBKIT_CONFIG options as well, and can
+        be checked using build?().
+
+        Reviewed by Simon Hausmann.
+
+        * Source/QtWebKit.pro:
+        * Source/api.pri:
+        * Source/tests.pri:
+        * WebKit.pro:
+
 2012-09-10  Thiago Marcos P. Santos  <thiago.santos@intel.com>
 
         [CMake][EFL] Enable the LLInt
index b10c7ac..b158625 100644 (file)
@@ -10,10 +10,10 @@ CONFIG += ordered
 api.file = api.pri
 SUBDIRS += api
 
-!no_webkit2 {
+build?(webkit2) {
     webprocess.file = WebKit2/WebProcess.pro
     SUBDIRS += webprocess
-    contains(DEFINES, ENABLE_PLUGIN_PROCESS=1) {
+    enable?(PLUGIN_PROCESS) {
         pluginprocess.file = WebKit2/PluginProcess.pro
         SUBDIRS += pluginprocess
     }
@@ -23,10 +23,10 @@ include(WebKit/qt/docs/docs.pri)
 
 declarative.file = WebKit/qt/declarative/declarative.pro
 declarative.makefile = Makefile.declarative
-contains(DEFINES, HAVE_QTQUICK=1): SUBDIRS += declarative
+have?(QTQUICK): SUBDIRS += declarative
 
-!no_webkit1 {
-    contains(DEFINES, HAVE_QTTESTLIB=1) {
+build?(webkit1) {
+    build?(tests) {
         tests.file = tests.pri
         SUBDIRS += tests
     }
index 2761df8..59fc8c2 100644 (file)
@@ -1,3 +1,25 @@
+2012-09-11  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>
+
+        [Qt] Add a configure step to the Qt build system
+
+        This allows building the Qt port using just 'qmake WebKit.pro'. Using
+        the build-webkit script is still supported, and will add slightly more
+        logic to the build, such as detecting the need for clean or incremental
+        builds.
+
+        Internally, the build system now uses a new variable, WEBKIT_CONFIG, for
+        all things related to configuring the build, such as use/have/enable flags,
+        and these are translated to defines in default_post. Project files should
+        no longer check contains(DEFINES,...) to detect features, but use the new
+        enable?(), use?(), and have?() functions. The no_webkit1 and no_webkit2
+        options have been translated into WEBKIT_CONFIG options as well, and can
+        be checked using build?().
+
+        Reviewed by Simon Hausmann.
+
+        * WTF.pri:
+        * wtf/Platform.h:
+
 2012-09-10  Ilya Tikhonovsky  <loislo@chromium.org>
 
         Web Inspector: NMI: move MemoryInstrumentation.h to wtf
index 9e94933..bcfb491 100644 (file)
@@ -22,7 +22,7 @@ mac {
     }
 }
 
-linux-*:contains(DEFINES, WTF_USE_GSTREAMER=1) {
+linux-*:use?(GSTREAMER) {
     DEFINES += ENABLE_GLIB_SUPPORT=1
     PKGCONFIG += glib-2.0 gio-2.0
 }
index eb0e732..e5cc9cc 100644 (file)
 
 #endif  /* OS(WINCE) && !PLATFORM(QT) */
 
-#if PLATFORM(QT)
-#ifndef WTF_USE_ICU_UNICODE
-#define WTF_USE_QT4_UNICODE 1
-#endif
-#elif OS(WINCE)
+#if OS(WINCE)
 #define WTF_USE_WCHAR_UNICODE 1
 #elif PLATFORM(GTK)
 /* The GTK+ Unicode backend is configurable */
index 4a8f146..9685650 100644 (file)
@@ -1,3 +1,26 @@
+2012-09-11  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>
+
+        [Qt] Add a configure step to the Qt build system
+
+        This allows building the Qt port using just 'qmake WebKit.pro'. Using
+        the build-webkit script is still supported, and will add slightly more
+        logic to the build, such as detecting the need for clean or incremental
+        builds.
+
+        Internally, the build system now uses a new variable, WEBKIT_CONFIG, for
+        all things related to configuring the build, such as use/have/enable flags,
+        and these are translated to defines in default_post. Project files should
+        no longer check contains(DEFINES,...) to detect features, but use the new
+        enable?(), use?(), and have?() functions. The no_webkit1 and no_webkit2
+        options have been translated into WEBKIT_CONFIG options as well, and can
+        be checked using build?().
+
+        Reviewed by Simon Hausmann.
+
+        * DerivedSources.pri:
+        * Target.pri:
+        * WebCore.pri:
+
 2012-09-11  Alexander Pavlov  <apavlov@chromium.org>
 
         Web Inspector: Remove no-op TreeElement.prototype.didChange method
index 011d7f4..51f2861 100644 (file)
@@ -26,7 +26,7 @@ XLINK_NAMES = $$PWD/svg/xlinkattrs.in
 
 CSSBISON = $$PWD/css/CSSGrammar.y
 
-contains(DEFINES, ENABLE_XSLT=1) {
+enable?(XSLT) {
     XMLVIEWER_CSS = $$PWD/xml/XMLViewer.css
     XMLVIEWER_JS = $$PWD/xml/XMLViewer.js
 }
@@ -69,7 +69,7 @@ ARRAY_BUFFER_VIEW_CUSTOM_SCRIPT_SOURCE = $$PWD/bindings/v8/custom/V8ArrayBufferV
 
 XPATHBISON = $$PWD/xml/XPathGrammar.y
 
-contains(DEFINES, ENABLE_SVG=1) {
+enable?(SVG) {
     EXTRACSSPROPERTIES += $$PWD/css/SVGCSSPropertyNames.in
     EXTRACSSVALUES += $$PWD/css/SVGCSSValueKeywords.in
 }
@@ -479,7 +479,7 @@ IDL_BINDINGS += \
     $$PWD/xml/XPathEvaluator.idl \
     $$PWD/xml/XSLTProcessor.idl
 
-contains(DEFINES, ENABLE_SVG=1) {
+enable?(SVG) {
   IDL_BINDINGS += \
     $$PWD/svg/SVGAElement.idl \
     $$PWD/svg/SVGAltGlyphDefElement.idl \
@@ -626,14 +626,14 @@ contains(DEFINES, ENABLE_SVG=1) {
     $$PWD/svg/SVGZoomEvent.idl
 }
 
-contains(DEFINES, ENABLE_GAMEPAD=1) {
+enable?(GAMEPAD) {
   IDL_BINDINGS += \
     $$PWD/Modules/gamepad/Gamepad.idl \
     $$PWD/Modules/gamepad/GamepadList.idl \
     $$PWD/Modules/gamepad/NavigatorGamepad.idl
 }
 
-contains(DEFINES, ENABLE_VIDEO_TRACK=1) {
+enable?(VIDEO_TRACK) {
   IDL_BINDINGS += \
     $$PWD/html/track/TextTrack.idl \
     $$PWD/html/track/TextTrackCue.idl \
@@ -642,7 +642,7 @@ contains(DEFINES, ENABLE_VIDEO_TRACK=1) {
     $$PWD/html/track/TrackEvent.idl \
 }
 
-contains(DEFINES, ENABLE_MEDIA_SOURCE=1) {
+enable?(MEDIA_SOURCE) {
   IDL_BINDINGS += \
     $$PWD/Modules/mediasource/MediaSource.idl \
     $$PWD/Modules/mediasource/SourceBuffer.idl \
@@ -653,7 +653,7 @@ mathmlnames.output = MathMLNames.cpp
 mathmlnames.input = MATHML_NAMES
 mathmlnames.depends = $$PWD/mathml/mathattrs.in
 mathmlnames.script = $$PWD/dom/make_names.pl
-mathmlnames.commands = perl -I$$PWD/bindings/scripts $$mathmlnames.script --tags $$PWD/mathml/mathtags.in --attrs $$PWD/mathml/mathattrs.in --extraDefines \"$${DEFINES}\" --preprocessor \"$${QMAKE_MOC} -E\" --factory --wrapperFactory --outputDir ${QMAKE_FUNC_FILE_OUT_PATH}
+mathmlnames.commands = perl -I$$PWD/bindings/scripts $$mathmlnames.script --tags $$PWD/mathml/mathtags.in --attrs $$PWD/mathml/mathattrs.in --extraDefines \"$${DEFINES} $$configDefines()\" --preprocessor \"$${QMAKE_MOC} -E\" --factory --wrapperFactory --outputDir ${QMAKE_FUNC_FILE_OUT_PATH}
 mathmlnames.extra_sources = MathMLElementFactory.cpp
 GENERATORS += mathmlnames
 
@@ -662,7 +662,7 @@ svgnames.output = SVGNames.cpp
 svgnames.input = SVG_NAMES
 svgnames.depends = $$PWD/svg/svgattrs.in
 svgnames.script = $$PWD/dom/make_names.pl
-svgnames.commands = perl -I$$PWD/bindings/scripts $$svgnames.script --tags $$PWD/svg/svgtags.in --attrs $$PWD/svg/svgattrs.in --extraDefines \"$${DEFINES}\" --preprocessor \"$${QMAKE_MOC} -E\" --factory --wrapperFactory --outputDir ${QMAKE_FUNC_FILE_OUT_PATH}
+svgnames.commands = perl -I$$PWD/bindings/scripts $$svgnames.script --tags $$PWD/svg/svgtags.in --attrs $$PWD/svg/svgattrs.in --extraDefines \"$${DEFINES} $$configDefines()\" --preprocessor \"$${QMAKE_MOC} -E\" --factory --wrapperFactory --outputDir ${QMAKE_FUNC_FILE_OUT_PATH}
 svgnames.extra_sources = SVGElementFactory.cpp
     svgnames.extra_sources += JSSVGElementWrapperFactory.cpp
 GENERATORS += svgnames
@@ -678,7 +678,7 @@ GENERATORS += xlinknames
 cssprops.script = $$PWD/css/makeprop.pl
 cssprops.output = CSSPropertyNames.cpp
 cssprops.input = WALDOCSSPROPS
-cssprops.commands = perl -ne \"print $1\" ${QMAKE_FILE_NAME} $${EXTRACSSPROPERTIES} > ${QMAKE_FUNC_FILE_OUT_PATH}/${QMAKE_FILE_BASE}.in && cd ${QMAKE_FUNC_FILE_OUT_PATH} && perl -I$$PWD/bindings/scripts $$cssprops.script --defines \"$${FEATURE_DEFINES_JAVASCRIPT}\" --preprocessor \"$${QMAKE_MOC} -E\" ${QMAKE_FILE_NAME} && $(DEL_FILE) ${QMAKE_FILE_BASE}.in ${QMAKE_FILE_BASE}.gperf
+cssprops.commands = perl -ne \"print $1\" ${QMAKE_FILE_NAME} $${EXTRACSSPROPERTIES} > ${QMAKE_FUNC_FILE_OUT_PATH}/${QMAKE_FILE_BASE}.in && cd ${QMAKE_FUNC_FILE_OUT_PATH} && perl -I$$PWD/bindings/scripts $$cssprops.script --defines \"$$javascriptFeatureDefines()\" --preprocessor \"$${QMAKE_MOC} -E\" ${QMAKE_FILE_NAME} && $(DEL_FILE) ${QMAKE_FILE_BASE}.in ${QMAKE_FILE_BASE}.gperf
 cssprops.depends = ${QMAKE_FILE_NAME} $${EXTRACSSPROPERTIES} $$cssprops.script
 GENERATORS += cssprops
 
@@ -686,7 +686,7 @@ GENERATORS += cssprops
 cssvalues.script = $$PWD/css/makevalues.pl
 cssvalues.output = CSSValueKeywords.cpp
 cssvalues.input = WALDOCSSVALUES
-cssvalues.commands = perl -ne \"print $1\" ${QMAKE_FILE_NAME} $$EXTRACSSVALUES > ${QMAKE_FUNC_FILE_OUT_PATH}/${QMAKE_FILE_BASE}.in && cd ${QMAKE_FUNC_FILE_OUT_PATH} && perl -I$$PWD/bindings/scripts $$cssvalues.script --defines \"$${FEATURE_DEFINES_JAVASCRIPT}\" --preprocessor \"$${QMAKE_MOC} -E\" ${QMAKE_FILE_NAME} && $(DEL_FILE) ${QMAKE_FILE_BASE}.in ${QMAKE_FILE_BASE}.gperf
+cssvalues.commands = perl -ne \"print $1\" ${QMAKE_FILE_NAME} $$EXTRACSSVALUES > ${QMAKE_FUNC_FILE_OUT_PATH}/${QMAKE_FILE_BASE}.in && cd ${QMAKE_FUNC_FILE_OUT_PATH} && perl -I$$PWD/bindings/scripts $$cssvalues.script --defines \"$$javascriptFeatureDefines()\" --preprocessor \"$${QMAKE_MOC} -E\" ${QMAKE_FILE_NAME} && $(DEL_FILE) ${QMAKE_FILE_BASE}.in ${QMAKE_FILE_BASE}.gperf
 cssvalues.depends = ${QMAKE_FILE_NAME} $${EXTRACSSVALUES} $$cssvalues.script
 cssvalues.clean = ${QMAKE_FILE_OUT} ${QMAKE_FUNC_FILE_OUT_PATH}/${QMAKE_FILE_BASE}.h
 GENERATORS += cssvalues
@@ -700,7 +700,6 @@ IDL_ATTRIBUTES_FILE = $$PWD/bindings/scripts/IDLAttributes.txt
 preprocessIdls.input = IDL_ATTRIBUTES_FILE
 preprocessIdls.script = $$PREPROCESS_IDLS_SCRIPT
 # FIXME : We need to use only perl at some point.
-EOC = $$escape_expand(\\n\\t)
 win_cmd_shell: preprocessIdls.commands = type nul > $$IDL_FILES_TMP $$EOC
 else: preprocessIdls.commands = cat /dev/null > $$IDL_FILES_TMP $$EOC
 for(binding, IDL_BINDINGS) {
@@ -709,7 +708,7 @@ for(binding, IDL_BINDINGS) {
     preprocessIdls.commands += echo $$binding>> $$IDL_FILES_TMP$$EOC
 }
 preprocessIdls.commands += perl -I$$PWD/bindings/scripts $$preprocessIdls.script \
-                               --defines \"$${FEATURE_DEFINES_JAVASCRIPT}\" \
+                               --defines \"$$javascriptFeatureDefines()\" \
                                --idlFilesList $$IDL_FILES_TMP \
                                --supplementalDependencyFile ${QMAKE_FUNC_FILE_OUT_PATH}/$$SUPPLEMENTAL_DEPENDENCY_FILE \
                                --idlAttributesFile $${IDL_ATTRIBUTES_FILE} \
@@ -729,7 +728,7 @@ win32 {
 generateBindings.input = IDL_BINDINGS
 generateBindings.script = $$PWD/bindings/scripts/generate-bindings.pl
 generateBindings.commands = $$env_export \"SOURCE_ROOT=$$toSystemPath($$PWD)\" && perl -I$$PWD/bindings/scripts $$generateBindings.script \
-                            --defines \"$${FEATURE_DEFINES_JAVASCRIPT}\" \
+                            --defines \"$$javascriptFeatureDefines()\" \
                             --generator JS \
                             --include Modules/filesystem \
                             --include Modules/geolocation \
@@ -838,7 +837,7 @@ htmlnames.output = HTMLNames.cpp
 htmlnames.input = HTML_NAMES
 htmlnames.script = $$PWD/dom/make_names.pl
 htmlnames.depends = $$PWD/html/HTMLAttributeNames.in
-htmlnames.commands = perl -I$$PWD/bindings/scripts $$htmlnames.script --tags $$PWD/html/HTMLTagNames.in --attrs $$PWD/html/HTMLAttributeNames.in --extraDefines \"$${DEFINES}\" --preprocessor \"$${QMAKE_MOC} -E\"  --factory --wrapperFactory --outputDir ${QMAKE_FUNC_FILE_OUT_PATH}
+htmlnames.commands = perl -I$$PWD/bindings/scripts $$htmlnames.script --tags $$PWD/html/HTMLTagNames.in --attrs $$PWD/html/HTMLAttributeNames.in --extraDefines \"$${DEFINES} $$configDefines()\" --preprocessor \"$${QMAKE_MOC} -E\"  --factory --wrapperFactory --outputDir ${QMAKE_FUNC_FILE_OUT_PATH}
 htmlnames.extra_sources = HTMLElementFactory.cpp
 htmlnames.extra_sources += JSHTMLElementWrapperFactory.cpp
 GENERATORS += htmlnames
@@ -908,7 +907,7 @@ colordata.clean = ${QMAKE_FILE_OUT}
 colordata.depends = $$PWD/make-hash-tools.pl
 GENERATORS += colordata
 
-contains(DEFINES, ENABLE_XSLT=1) {
+enable?(XSLT) {
     # GENERATOR 8-C:
     xmlviewercss.output = XMLViewerCSS.h
     xmlviewercss.input = XMLVIEWER_CSS
@@ -955,4 +954,3 @@ webkitversion.commands = perl $$webkitversion.script --config $$PWD/../WebKit/ma
 webkitversion.clean = ${QMAKE_FUNC_FILE_OUT_PATH}/WebKitVersion.h
 webkitversion.add_output_to_sources = false
 GENERATORS += webkitversion
-
index 918c629..873254e 100644 (file)
@@ -2053,6 +2053,7 @@ HEADERS += \
     platform/graphics/filters/CustomFilterOperation.h \
     platform/graphics/filters/CustomFilterParameter.h \
     platform/graphics/filters/CustomFilterProgram.h \
+    platform/graphics/filters/CustomFilterProgramInfo.h \
     platform/graphics/filters/CustomFilterTransformParameter.h \
     platform/graphics/filters/CustomFilterValidatedProgram.h \
     platform/graphics/filters/FEBlend.h \
@@ -2806,7 +2807,7 @@ SOURCES += \
     platform/text/qt/TextCodecQt.cpp \
     platform/qt/WidgetQt.cpp
 
-contains(DEFINES, WTF_USE_LIBXML2=1) {
+use?(LIBXML2) {
     HEADERS += xml/parser/XMLDocumentParserScope.h
     SOURCES += \
             xml/parser/XMLDocumentParserLibxml2.cpp \
@@ -2815,7 +2816,7 @@ contains(DEFINES, WTF_USE_LIBXML2=1) {
     SOURCES += xml/parser/XMLDocumentParserQt.cpp
 }
 
-contains(DEFINES, ENABLE_SMOOTH_SCROLLING=1) {
+enable?(SMOOTH_SCROLLING) {
     HEADERS += platform/ScrollAnimatorNone.h
     SOURCES += platform/ScrollAnimatorNone.cpp
 }
@@ -2843,7 +2844,7 @@ mac {
     SOURCES += editing/SmartReplaceICU.cpp
 }
 
-contains(DEFINES, ENABLE_NETSCAPE_PLUGIN_API=1) {
+enable?(NETSCAPE_PLUGIN_API) {
 
     SOURCES += plugins/npapi.cpp
 
@@ -2881,12 +2882,12 @@ contains(DEFINES, ENABLE_NETSCAPE_PLUGIN_API=1) {
         plugins/PluginViewNone.cpp
 }
 
-plugin_backend_xlib {
+use?(PLUGIN_BACKEND_XLIB) {
     SOURCES += plugins/qt/QtX11ImageConversion.cpp
     HEADERS += plugins/qt/QtX11ImageConversion.h
 }
 
-contains(DEFINES, ENABLE_SQL_DATABASE=1) {
+enable?(SQL_DATABASE) {
     SOURCES += \
         Modules/webdatabase/ChangeVersionWrapper.cpp \
         Modules/webdatabase/DatabaseTask.cpp \
@@ -2911,7 +2912,7 @@ contains(DEFINES, ENABLE_SQL_DATABASE=1) {
         bindings/js/JSSQLTransactionSyncCustom.cpp
 }
 
-contains(DEFINES, ENABLE_INDEXED_DATABASE=1) {
+enable?(INDEXED_DATABASE) {
     HEADERS += \
         bindings/js/IDBBindingUtilities.h \
 
@@ -2971,7 +2972,7 @@ contains(DEFINES, ENABLE_INDEXED_DATABASE=1) {
         Modules/indexeddb/WorkerContextIndexedDatabase.cpp
 }
 
-contains(DEFINES, ENABLE_DATA_TRANSFER_ITEMS=1) {
+enable?(DATA_TRANSFER_ITEMS) {
     HEADERS += \
         dom/DataTransferItem.h \
         dom/DataTransferItemList.h \
@@ -2985,7 +2986,7 @@ contains(DEFINES, ENABLE_DATA_TRANSFER_ITEMS=1) {
         platform/qt/DataTransferItemListQt.cpp
 }
 
-contains(DEFINES, ENABLE_FILE_SYSTEM=1) {
+enable?(FILE_SYSTEM) {
     HEADERS += \
         Modules/filesystem/AsyncFileWriter.h \
         Modules/filesystem/DOMFilePath.h \
@@ -3030,7 +3031,7 @@ contains(DEFINES, ENABLE_FILE_SYSTEM=1) {
         platform/AsyncFileSystem.cpp
 }
 
-contains(DEFINES, ENABLE_MEDIA_SOURCE=1) {
+enable?(MEDIA_SOURCE) {
     HEADERS += \
         Modules/mediasource/MediaSource.h \
         Modules/mediasource/MediaSourceRegistry.h \
@@ -3043,14 +3044,14 @@ contains(DEFINES, ENABLE_MEDIA_SOURCE=1) {
         Modules/mediasource/SourceBufferList.cpp
 }
 
-contains(DEFINES, ENABLE_ICONDATABASE=1) {
+enable?(ICONDATABASE) {
     SOURCES += \
         loader/icon/IconDatabase.cpp \
         loader/icon/IconRecord.cpp \
         loader/icon/PageURLRecord.cpp
 }
 
-contains(DEFINES, ENABLE_WORKERS=1) {
+enable?(WORKERS) {
     SOURCES += \
         bindings/js/JSDedicatedWorkerContextCustom.cpp \
         bindings/js/JSWorkerContextBase.cpp \
@@ -3075,7 +3076,7 @@ contains(DEFINES, ENABLE_WORKERS=1) {
         workers/WorkerScriptLoader.cpp
 }
 
-contains(DEFINES, ENABLE_SHARED_WORKERS=1) {
+enable?(SHARED_WORKERS) {
     SOURCES += \
         bindings/js/JSSharedWorkerCustom.cpp
 
@@ -3086,7 +3087,7 @@ contains(DEFINES, ENABLE_SHARED_WORKERS=1) {
         workers/SharedWorkerThread.cpp
 }
 
-contains(DEFINES, ENABLE_INPUT_SPEECH=1) {
+enable?(INPUT_SPEECH) {
     SOURCES += \
         page/SpeechInput.cpp \
         page/SpeechInputEvent.cpp \
@@ -3095,11 +3096,11 @@ contains(DEFINES, ENABLE_INPUT_SPEECH=1) {
         rendering/RenderInputSpeech.cpp
 }
 
-contains(DEFINES, ENABLE_SCRIPTED_SPEECH=1) {
+enable?(SCRIPTED_SPEECH) {
     SOURCES += # FIXME!
 }
 
-contains(DEFINES, ENABLE_QUOTA=1) {
+enable?(QUOTA) {
     HEADERS += \
         Modules/quota/DOMWindowQuota.idl \
         Modules/quota/StorageInfo.h \
@@ -3112,7 +3113,7 @@ contains(DEFINES, ENABLE_QUOTA=1) {
         Modules/quota/StorageInfo.cpp
 }
 
-contains(DEFINES, ENABLE_GAMEPAD=1) {
+enable?(GAMEPAD) {
     HEADERS += \
         Modules/gamepad/Gamepad.h\
         Modules/gamepad/GamepadList.h \
@@ -3128,7 +3129,7 @@ contains(DEFINES, ENABLE_GAMEPAD=1) {
         platform/qt/GamepadsQt.cpp
 }
 
-contains(DEFINES, WTF_USE_GSTREAMER=1) {
+use?(GSTREAMER) {
     HEADERS += \
             platform/graphics/gstreamer/GRefPtrGStreamer.h \
             platform/graphics/gstreamer/GStreamerUtilities.h \
@@ -3140,7 +3141,7 @@ contains(DEFINES, WTF_USE_GSTREAMER=1) {
             platform/graphics/gstreamer/GStreamerVersioning.cpp
 }
 
-contains(DEFINES, ENABLE_VIDEO=1) {
+enable?(VIDEO) {
     SOURCES += \
         html/HTMLAudioElement.cpp \
         html/HTMLMediaElement.cpp \
@@ -3154,7 +3155,7 @@ contains(DEFINES, ENABLE_VIDEO=1) {
         rendering/RenderVideo.cpp \
         rendering/RenderMedia.cpp
 
-    contains(DEFINES, WTF_USE_QTKIT=1) {
+    use?(QTKIT) {
         INCLUDEPATH += \
             $$SOURCE_DIR/../WebKitLibraries/ \
             $$PWD/platform/mac
@@ -3199,7 +3200,7 @@ contains(DEFINES, ENABLE_VIDEO=1) {
 
         QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.5
 
-    } else: contains(DEFINES, WTF_USE_GSTREAMER=1) {
+    } else: use?(GSTREAMER) {
         HEADERS += \
             platform/graphics/gstreamer/GStreamerGWorld.h \
             platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h \
@@ -3216,7 +3217,7 @@ contains(DEFINES, ENABLE_VIDEO=1) {
             platform/graphics/gstreamer/PlatformVideoWindowQt.cpp \
             platform/graphics/gstreamer/ImageGStreamerQt.cpp
 
-    } else:contains(DEFINES, WTF_USE_QT_MULTIMEDIA=1) {
+    } else:use?(QT_MULTIMEDIA) {
         HEADERS += \
             platform/graphics/qt/MediaPlayerPrivateQt.h
 
@@ -3225,7 +3226,7 @@ contains(DEFINES, ENABLE_VIDEO=1) {
     }
 }
 
-contains(DEFINES, ENABLE_WEB_AUDIO=1) {
+enable?(WEB_AUDIO) {
     HEADERS += \
         Modules/webaudio/AsyncAudioDecoder.h \
         Modules/webaudio/AudioBasicInspectorNode.h \
@@ -3394,7 +3395,7 @@ contains(DEFINES, ENABLE_WEB_AUDIO=1) {
         platform/audio/VectorMath.cpp \
         platform/audio/ZeroPole.cpp
 
-    contains(DEFINES, WTF_USE_GSTREAMER=1) {
+    use?(GSTREAMER) {
         HEADERS += \
             platform/audio/gstreamer/AudioDestinationGStreamer.h \
             platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.h
@@ -3406,21 +3407,21 @@ contains(DEFINES, ENABLE_WEB_AUDIO=1) {
     }
 }
 
-contains(DEFINES, ENABLE_FULLSCREEN_API=1) {
+enable?(FULLSCREEN_API) {
     SOURCES += \
         rendering/RenderFullScreen.cpp
     HEADERS += \
         rendering/RenderFullScreen.h
 }
 
-contains(DEFINES, ENABLE_XSLT=1) {
+enable?(XSLT) {
     SOURCES += \
         bindings/js/JSXSLTProcessorCustom.cpp
 
     SOURCES += xml/XMLTreeViewer.cpp
     HEADERS += xml/XMLTreeViewer.h
 
-    contains(DEFINES, WTF_USE_LIBXML2=1) {
+    use?(LIBXML2) {
         SOURCES += \
             xml/XSLTProcessor.cpp \
             xml/XSLTProcessorLibxslt.cpp \
@@ -3446,11 +3447,12 @@ contains(DEFINES, ENABLE_XSLT=1) {
     }
 }
 
-contains(DEFINES, ENABLE_FILTERS=1) {
+enable?(FILTERS) {
     SOURCES += \
         platform/graphics/filters/CustomFilterGlobalContext.cpp \
         platform/graphics/filters/CustomFilterOperation.cpp \
         platform/graphics/filters/CustomFilterProgram.cpp \
+        platform/graphics/filters/CustomFilterProgramInfo.cpp \
         platform/graphics/filters/CustomFilterCompiledProgram.cpp \
         platform/graphics/filters/CustomFilterMesh.cpp \
         platform/graphics/filters/CustomFilterMeshGenerator.cpp \
@@ -3485,7 +3487,7 @@ contains(DEFINES, ENABLE_FILTERS=1) {
         platform/graphics/filters/arm/FELightingNEON.cpp \
 }
 
-contains(DEFINES, ENABLE_MATHML=1) {
+enable?(MATHML) {
     SOURCES += \
         mathml/MathMLElement.cpp \
         mathml/MathMLInlineContainerElement.cpp \
@@ -3506,11 +3508,11 @@ contains(DEFINES, ENABLE_MATHML=1) {
         mathml/MathMLAllInOne.cpp
 }
 
-contains(DEFINES, ENABLE_TEXT_AUTOSIZING=1) {
+enable?(TEXT_AUTOSIZING) {
     SOURCES += # FIXME!
 }
 
-contains(DEFINES, ENABLE_DEVICE_ORIENTATION=1) {
+enable?(DEVICE_ORIENTATION) {
     HEADERS += \
         platform/qt/DeviceMotionClientQt.h \
         platform/qt/DeviceMotionProviderQt.h \
@@ -3523,7 +3525,7 @@ contains(DEFINES, ENABLE_DEVICE_ORIENTATION=1) {
         platform/qt/DeviceOrientationProviderQt.cpp
 }
 
-contains(DEFINES, ENABLE_SVG=1) {
+enable?(SVG) {
     SOURCES += \
 # TODO: this-one-is-not-auto-added! FIXME! tmp/SVGElementFactory.cpp \
         bindings/js/JSSVGElementInstanceCustom.cpp \
@@ -3760,7 +3762,7 @@ contains(DEFINES, ENABLE_SVG=1) {
         svg/SVGAllInOne.cpp
 }
 
-contains(DEFINES, ENABLE_JAVASCRIPT_DEBUGGER=1) {
+enable?(JAVASCRIPT_DEBUGGER) {
     SOURCES += \
         bindings/js/JSJavaScriptCallFrameCustom.cpp \
         bindings/js/ScriptProfiler.cpp \
@@ -3768,7 +3770,7 @@ contains(DEFINES, ENABLE_JAVASCRIPT_DEBUGGER=1) {
 }
 
 
-contains(DEFINES, ENABLE_VIDEO_TRACK=1) {
+enable?(VIDEO_TRACK) {
     SOURCES += \
         bindings/js/JSTextTrackCueCustom.cpp \
         bindings/js/JSTextTrackCustom.cpp \
@@ -3779,7 +3781,7 @@ contains(DEFINES, ENABLE_VIDEO_TRACK=1) {
         bindings/js/JSTextTrackListCustom.cpp
 }
 
-contains(DEFINES, ENABLE_WEB_SOCKETS=1) {
+enable?(WEB_SOCKETS) {
     HEADERS += \
         Modules/websockets/CloseEvent.h \
         Modules/websockets/ThreadableWebSocketChannel.h \
@@ -3818,7 +3820,7 @@ contains(DEFINES, ENABLE_WEB_SOCKETS=1) {
     SOURCES += \
         bindings/js/JSWebSocketCustom.cpp
 
-    contains(DEFINES, ENABLE_WORKERS=1) {
+    enable?(WORKERS) {
         HEADERS += \
             Modules/websockets/WorkerThreadableWebSocketChannel.h
 
@@ -3827,7 +3829,7 @@ contains(DEFINES, ENABLE_WEB_SOCKETS=1) {
     }
 }
 
-contains(DEFINES, ENABLE_WEBGL=1) {
+enable?(WEBGL) {
     HEADERS += \
         html/canvas/CanvasContextAttributes.h \
         html/canvas/WebGLObject.h \
@@ -3893,7 +3895,7 @@ contains(DEFINES, ENABLE_WEBGL=1) {
         html/canvas/WebGLVertexArrayObjectOES.cpp
 }
 
-contains(DEFINES, WTF_USE_3D_GRAPHICS=1) {
+use?(3D_GRAPHICS) {
     HEADERS += \
         platform/graphics/ANGLEWebKitBridge.h \
         platform/graphics/Extensions3D.h \
@@ -3945,7 +3947,7 @@ contains(DEFINES, WTF_USE_3D_GRAPHICS=1) {
 }
 
 
-contains(DEFINES, ENABLE_MHTML=1) {
+enable?(MHTML) {
 
     INCLUDEPATH += $$PWD/loader/archive/mhtml
 
@@ -3961,23 +3963,23 @@ contains(DEFINES, ENABLE_MHTML=1) {
         page/PageSerializer.cpp
 }
 
-contains(DEFINES, ENABLE_UNDO_MANAGER=1) {
+enable?(UNDO_MANAGER) {
     SOURCES += \
         editing/UndoManager.cpp
     HEADERS += \
         editing/UndoManager.h
 }
 
-contains(DEFINES, WTF_USE_LIBPNG=1) {
+use?(LIBPNG) {
     SOURCES += platform/image-decoders/ico/ICOImageDecoder.cpp \
                platform/image-decoders/png/PNGImageDecoder.cpp
 }
 
-contains(DEFINES, WTF_USE_LIBJPEG=1) {
+use?(LIBJPEG) {
     SOURCES += platform/image-decoders/jpeg/JPEGImageDecoder.cpp
 }
 
-contains(DEFINES, WTF_USE_WEBP=1) {
+use?(WEBP) {
     HEADERS += platform/image-decoders/webp/WEBPImageDecoder.h
     SOURCES += platform/image-decoders/webp/WEBPImageDecoder.cpp
 }
@@ -4012,12 +4014,12 @@ contains(CONFIG, opengl-shims) {
     DEFINES += QT_OPENGL_SHIMS=1
 }
 
-contains(DEFINES, WTF_USE_GRAPHICS_SURFACE=1) {
+use?(GRAPHICS_SURFACE) {
     mac {
         SOURCES += platform/graphics/surfaces/mac/GraphicsSurfaceMac.cpp
         INCLUDEPATH += /System/Library/Frameworks/CoreFoundation.framework/Headers
     }
-    contains(DEFINES, HAVE_XCOMPOSITE=1)  {
+    have?(XCOMPOSITE) {
         SOURCES += platform/graphics/surfaces/qt/GraphicsSurfaceGLX.cpp
     }
 }
@@ -4029,7 +4031,7 @@ ALL_IN_ONE_SOURCES += \
     platform/text/TextAllInOne.cpp \
     rendering/style/StyleAllInOne.cpp
 
-contains(DEFINES, ENABLE_XSLT=1):contains(DEFINES, WTF_USE_LIBXML2=1) {
+enable?(XSLT):use?(LIBXML2) {
     ALL_IN_ONE_SOURCES += \
         dom/DOMAllInOne.cpp
 }
index d2823a4..144a205 100644 (file)
@@ -102,8 +102,8 @@ INCLUDEPATH += \
 
 INCLUDEPATH += $$WEBCORE_GENERATED_SOURCES_DIR
 
-contains(DEFINES, ENABLE_XSLT=1) {
-    contains(DEFINES, WTF_USE_LIBXML2=1) {
+enable?(XSLT) {
+    use?(LIBXML2) {
         mac {
             INCLUDEPATH += /usr/include/libxml2
             LIBS += -lxml2 -lxslt
@@ -115,15 +115,15 @@ contains(DEFINES, ENABLE_XSLT=1) {
     }
 }
 
-contains(DEFINES, WTF_USE_LIBXML2=1) {
+use?(LIBXML2) {
     PKGCONFIG += libxml-2.0
 }
 
-contains(DEFINES, WTF_USE_ZLIB=1) {
+use?(ZLIB) {
     LIBS += -lz
 }
 
-contains(DEFINES, ENABLE_NETSCAPE_PLUGIN_API=1) {
+enable?(NETSCAPE_PLUGIN_API) {
     unix {
         mac {
             INCLUDEPATH += platform/mac
@@ -149,56 +149,56 @@ contains(DEFINES, ENABLE_NETSCAPE_PLUGIN_API=1) {
     }
 }
 
-contains(DEFINES, ENABLE_ORIENTATION_EVENTS=1)|contains(DEFINES, ENABLE_DEVICE_ORIENTATION=1) {
+enable?(ORIENTATION_EVENTS)|enable?(DEVICE_ORIENTATION) {
     QT += sensors
 }
 
-contains(DEFINES, WTF_USE_QT_MOBILITY_SYSTEMINFO=1) {
+use?(QT_MOBILITY_SYSTEMINFO) {
      CONFIG *= mobility
      MOBILITY *= systeminfo
 }
 
-contains(DEFINES, ENABLE_GAMEPAD=1) {
+enable?(GAMEPAD) {
     INCLUDEPATH += \
         $$SOURCE_DIR/platform/linux \
         $$SOURCE_DIR/Modules/gamepad
     PKGCONFIG += libudev
 }
 
-contains(DEFINES, WTF_USE_GSTREAMER=1) {
+use?(GSTREAMER) {
     DEFINES += ENABLE_GLIB_SUPPORT=1
     PKGCONFIG += glib-2.0 gio-2.0 gstreamer-0.10 gstreamer-app-0.10 gstreamer-base-0.10 gstreamer-interfaces-0.10 gstreamer-pbutils-0.10 gstreamer-plugins-base-0.10
 }
 
-contains(DEFINES, ENABLE_VIDEO=1) {
-    contains(DEFINES, WTF_USE_QTKIT=1) {
+enable?(VIDEO) {
+    use?(QTKIT) {
         INCLUDEPATH += $$SOURCE_DIR/platform/graphics/mac
 
         LIBS += -framework AppKit -framework AudioUnit \
                 -framework AudioToolbox -framework CoreAudio \
                 -framework QuartzCore -framework QTKit
 
-    } else:contains(DEFINES, WTF_USE_GSTREAMER=1) {
+    } else:use?(GSTREAMER) {
         INCLUDEPATH += $$SOURCE_DIR/platform/graphics/gstreamer
         PKGCONFIG += gstreamer-video-0.10
-    } else:contains(DEFINES, WTF_USE_QT_MULTIMEDIA=1) {
+    } else:use?(QT_MULTIMEDIA) {
         CONFIG   *= mobility
         MOBILITY *= multimedia
     }
 }
 
-contains(DEFINES, ENABLE_WEB_AUDIO=1) {
-    contains(DEFINES, WTF_USE_GSTREAMER=1) {
+enable?(WEB_AUDIO) {
+    use?(GSTREAMER) {
         DEFINES += WTF_USE_WEBAUDIO_GSTREAMER=1
         INCLUDEPATH += $$SOURCE_DIR/platform/audio/gstreamer
         PKGCONFIG += gstreamer-audio-0.10 gstreamer-fft-0.10
     }
 }
 
-contains(DEFINES, WTF_USE_3D_GRAPHICS=1) {
+use?(3D_GRAPHICS) {
     contains(QT_CONFIG, opengles2):!win32: LIBS += -lEGL
     mac: LIBS += -framework IOSurface -framework CoreFoundation
-    linux-*:contains(DEFINES, HAVE_XCOMPOSITE=1): LIBS += -lXcomposite
+    linux-*:have?(XCOMPOSITE): LIBS += -lXcomposite
 }
 
 !system-sqlite:exists( $${SQLITE3SRCDIR}/sqlite3.c ) {
@@ -209,23 +209,9 @@ contains(DEFINES, WTF_USE_3D_GRAPHICS=1) {
     LIBS += -lsqlite3
 }
 
-# Qt5 allows us to use config tests to check for the presence of these libraries
-config_libjpeg {
-    DEFINES += WTF_USE_LIBJPEG=1
-    LIBS += -ljpeg
-} else {
-    warning("JPEG library not found! QImageDecoder will decode JPEG images.")
-}
-config_libpng {
-    DEFINES += WTF_USE_LIBPNG=1
-    LIBS += -lpng
-} else {
-    warning("PNG library not found! QImageDecoder will decode PNG images.")
-}
-config_libwebp {
-    DEFINES += WTF_USE_WEBP=1
-    LIBS += -lwebp
-}
+use?(libjpeg): LIBS += -ljpeg
+use?(libpng): LIBS += -lpng
+use?(libwebp): LIBS += -lwebp
 
 mac {
     LIBS += -framework Carbon -framework AppKit
index 9e13907..7c1343b 100644 (file)
@@ -1,3 +1,25 @@
+2012-09-11  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>
+
+        [Qt] Add a configure step to the Qt build system
+
+        This allows building the Qt port using just 'qmake WebKit.pro'. Using
+        the build-webkit script is still supported, and will add slightly more
+        logic to the build, such as detecting the need for clean or incremental
+        builds.
+
+        Internally, the build system now uses a new variable, WEBKIT_CONFIG, for
+        all things related to configuring the build, such as use/have/enable flags,
+        and these are translated to defines in default_post. Project files should
+        no longer check contains(DEFINES,...) to detect features, but use the new
+        enable?(), use?(), and have?() functions. The no_webkit1 and no_webkit2
+        options have been translated into WEBKIT_CONFIG options as well, and can
+        be checked using build?().
+
+        Reviewed by Simon Hausmann.
+
+        * WebKit1.pri:
+        * WebKit1.pro:
+
 2012-09-06  Crystal Zhang  <haizhang@rim.com>
 
         [BlackBerry]  Implement a color picker
index cadb77e..fa2f6fa 100644 (file)
@@ -12,7 +12,7 @@ INCLUDEPATH += \
     $$SOURCE_DIR/qt/WebCoreSupport \
     $$ROOT_WEBKIT_DIR/Source/WTF/wtf/qt
 
-contains(DEFINES, ENABLE_VIDEO=1):contains(DEFINES, WTF_USE_QTKIT=1) {
+enable?(VIDEO):use?(QTKIT) {
     LIBS += -framework Security -framework IOKit
 
     # We can know the Mac OS version by using the Darwin major version
@@ -29,21 +29,21 @@ contains(DEFINES, ENABLE_VIDEO=1):contains(DEFINES, WTF_USE_QTKIT=1) {
     }
 }
 
-contains(DEFINES, ENABLE_DEVICE_ORIENTATION=1)|contains(DEFINES, ENABLE_ORIENTATION_EVENTS=1) {
+enable?(DEVICE_ORIENTATION)|enable?(ORIENTATION_EVENTS) {
     QT += sensors
 }
 
-contains(DEFINES, ENABLE_GEOLOCATION=1): QT += location
+enable?(GEOLOCATION): QT += location
 
 contains(CONFIG, texmap): DEFINES += WTF_USE_TEXTURE_MAPPER=1
 
-plugin_backend_xlib: PKGCONFIG += x11
+use?(PLUGIN_BACKEND_XLIB): PKGCONFIG += x11
 
 QT += network widgets
-contains(DEFINES, HAVE_QTQUICK=1): QT += quick
-contains(DEFINES, HAVE_QTPRINTSUPPORT=1): QT += printsupport
+have?(QTQUICK): QT += quick
+have?(QTPRINTSUPPORT): QT += printsupport
 
-contains(DEFINES, WTF_USE_TEXTURE_MAPPER_GL=1)|contains(DEFINES, ENABLE_WEBGL=1) {
+use?(TEXTURE_MAPPER_GL)|enable?(WEBGL) {
     QT *= opengl
     # Make sure OpenGL libs are after the webcore lib so MinGW can resolve symbols
     win32*:!win32-msvc*: LIBS += $$QMAKE_LIBS_OPENGL
index b29b7bd..ae23c4e 100644 (file)
@@ -103,18 +103,18 @@ INCLUDEPATH += \
     $$PWD/qt/Api \
     $$PWD/qt/WebCoreSupport
 
-contains(DEFINES, ENABLE_VIDEO=1) {
-    !contains(DEFINES, WTF_USE_QTKIT=1):!contains(DEFINES, WTF_USE_GSTREAMER=1):contains(DEFINES, WTF_USE_QT_MULTIMEDIA=1) {
+enable?(VIDEO) {
+    !use?(QTKIT):!use?(GSTREAMER):use?(QT_MULTIMEDIA) {
         HEADERS += $$PWD/qt/WebCoreSupport/FullScreenVideoWidget.h
         SOURCES += $$PWD/qt/WebCoreSupport/FullScreenVideoWidget.cpp
     }
 
-    contains(DEFINES, WTF_USE_QTKIT=1) | contains(DEFINES, WTF_USE_GSTREAMER=1) | contains(DEFINES, WTF_USE_QT_MULTIMEDIA=1) {
+    use?(QTKIT) | use?(GSTREAMER) | use?(QT_MULTIMEDIA) {
         HEADERS += $$PWD/qt/WebCoreSupport/FullScreenVideoQt.h
         SOURCES += $$PWD/qt/WebCoreSupport/FullScreenVideoQt.cpp
     }
 
-    contains(DEFINES, WTF_USE_QTKIT=1) {
+    use?(QTKIT) {
         INCLUDEPATH += \
             $$PWD/../WebCore/platform/qt/ \
             $$PWD/../WebCore/platform/mac/ \
@@ -136,7 +136,7 @@ contains(DEFINES, ENABLE_VIDEO=1) {
     }
 }
 
-contains(DEFINES, ENABLE_ICONDATABASE=1) {
+enable?(ICONDATABASE) {
     HEADERS += \
         $$PWD/../WebCore/loader/icon/IconDatabaseClient.h \
         $$PWD/qt/WebCoreSupport/IconDatabaseClientQt.h
@@ -145,12 +145,12 @@ contains(DEFINES, ENABLE_ICONDATABASE=1) {
         $$PWD/qt/WebCoreSupport/IconDatabaseClientQt.cpp
 }
 
-contains(DEFINES, ENABLE_GEOLOCATION=1) {
+enable?(GEOLOCATION) {
      HEADERS += \
         $$PWD/qt/WebCoreSupport/GeolocationClientQt.h
      SOURCES += \
         $$PWD/qt/WebCoreSupport/GeolocationClientQt.cpp
 }
 
-contains(DEFINES, WTF_USE_3D_GRAPHICS=1): WEBKIT += angle
+use?(3D_GRAPHICS): WEBKIT += angle
 
index 257e592..2f159f6 100644 (file)
@@ -1,3 +1,26 @@
+2012-09-11  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>
+
+        [Qt] Add a configure step to the Qt build system
+
+        This allows building the Qt port using just 'qmake WebKit.pro'. Using
+        the build-webkit script is still supported, and will add slightly more
+        logic to the build, such as detecting the need for clean or incremental
+        builds.
+
+        Internally, the build system now uses a new variable, WEBKIT_CONFIG, for
+        all things related to configuring the build, such as use/have/enable flags,
+        and these are translated to defines in default_post. Project files should
+        no longer check contains(DEFINES,...) to detect features, but use the new
+        enable?(), use?(), and have?() functions. The no_webkit1 and no_webkit2
+        options have been translated into WEBKIT_CONFIG options as well, and can
+        be checked using build?().
+
+        Reviewed by Simon Hausmann.
+
+        * declarative/declarative.pro:
+        * declarative/public.pri:
+        * tests/qgraphicswebview/qgraphicswebview.pro:
+
 2012-09-11  Andras Becsi  <andras.becsi@nokia.com>
 
         [Qt][WK2] Fix the build with recent Qt5
index 04f2298..71ed4f1 100644 (file)
@@ -11,7 +11,7 @@ public_api.file = public.pri
 public_api.makefile = Makefile.declarative.public
 SUBDIRS += public_api
 
-!no_webkit2 {
+build?(webkit2): {
     experimental_api.file = experimental/experimental.pri
     experimental_api.makefile = Makefile.declarative.experimental
     SUBDIRS += experimental_api
index e5c43db..754284b 100644 (file)
@@ -26,7 +26,7 @@ wince*:LIBS += $$QMAKE_LIBS_GUI
 
 QT += webkit webkit-private widgets quick quick-private
 
-contains(DEFINES, HAVE_QQUICK1=1) {
+have?(QQUICK1) {
     SOURCES += qdeclarativewebview.cpp
     HEADERS += qdeclarativewebview_p.h
 }
@@ -40,7 +40,7 @@ RPATHDIR_RELATIVE_TO_DESTDIR = ../../lib
 
 SOURCES += plugin.cpp
 
-!no_webkit2: {
+build?(webkit2): {
     DEFINES += HAVE_WEBKIT2
     QT += network
 }
index 3e9fb15..78e17a0 100644 (file)
@@ -1,6 +1,6 @@
 include(../tests.pri)
 exists($${TARGET}.qrc):RESOURCES += $${TARGET}.qrc
 
-contains(DEFINES, ENABLE_WEBGL=1) {
+enable?(WEBGL) {
     QT += opengl
 }
index 17c2a33..5f1554e 100644 (file)
@@ -1,3 +1,27 @@
+2012-09-11  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>
+
+        [Qt] Add a configure step to the Qt build system
+
+        This allows building the Qt port using just 'qmake WebKit.pro'. Using
+        the build-webkit script is still supported, and will add slightly more
+        logic to the build, such as detecting the need for clean or incremental
+        builds.
+
+        Internally, the build system now uses a new variable, WEBKIT_CONFIG, for
+        all things related to configuring the build, such as use/have/enable flags,
+        and these are translated to defines in default_post. Project files should
+        no longer check contains(DEFINES,...) to detect features, but use the new
+        enable?(), use?(), and have?() functions. The no_webkit1 and no_webkit2
+        options have been translated into WEBKIT_CONFIG options as well, and can
+        be checked using build?().
+
+        Reviewed by Simon Hausmann.
+
+        * Target.pri:
+        * UIProcess/API/qt/tests/tests.pri:
+        * WebKit2.pri:
+        * config.h:
+
 2012-09-11  Christophe Dumez  <christophe.dumez@intel.com>
 
         [WK2][WKTR] TestRunner needs to implement clearApplicationCacheForOrigin
index 8d70367..629852e 100644 (file)
@@ -745,7 +745,7 @@ SOURCES += \
     WebProcess/qt/WebProcessMainQt.cpp \
     WebProcess/qt/WebProcessQt.cpp
 
-contains(DEFINES, HAVE_QTQUICK=1) {
+have?(QTQUICK) {
     QT += qml quick quick-private
 
     HEADERS += \
@@ -822,7 +822,7 @@ contains(DEFINES, HAVE_QTQUICK=1) {
         UIProcess/qt/QtWebIconDatabaseClient.cpp \
         UIProcess/qt/QtWebPageUIClient.cpp
 
-    contains(DEFINES, ENABLE_INPUT_TYPE_COLOR=1) {
+    enable?(INPUT_TYPE_COLOR) {
         HEADERS += \
             UIProcess/qt/WebColorChooserProxyQt.h
         SOURCES += \
@@ -831,7 +831,7 @@ contains(DEFINES, HAVE_QTQUICK=1) {
 }
 
 mac: {
-    contains(DEFINES, WTF_USE_QTKIT=1) {
+    use?(QTKIT) {
         DEFINES += NSGEOMETRY_TYPES_SAME_AS_CGGEOMETRY_TYPES
         INCLUDEPATH += \
             $$PWD/../../WebKitLibraries/
@@ -876,7 +876,7 @@ win32 {
 }
 
 
-contains(DEFINES, ENABLE_INSPECTOR_SERVER=1) {
+enable?(INSPECTOR_SERVER) {
     HEADERS += \
         UIProcess/InspectorServer/WebInspectorServer.h \
         UIProcess/InspectorServer/WebSocketServer.h \
@@ -892,7 +892,7 @@ contains(DEFINES, ENABLE_INSPECTOR_SERVER=1) {
         UIProcess/InspectorServer/qt/WebSocketServerQt.cpp
 }
 
-contains(DEFINES, ENABLE_TOUCH_EVENTS=1) {
+enable?(TOUCH_EVENTS) {
     HEADERS += \
         Shared/NativeWebTouchEvent.h
     SOURCES += \
@@ -900,11 +900,11 @@ contains(DEFINES, ENABLE_TOUCH_EVENTS=1) {
 }
 
 
-contains(DEFINES, ENABLE_GEOLOCATION=1): QT += location
+enable?(GEOLOCATION): QT += location
 
-contains(DEFINES, WTF_USE_3D_GRAPHICS=1): WEBKIT += angle
+use?(3D_GRAPHICS): WEBKIT += angle
 
-plugin_backend_xlib {
+use?(PLUGIN_BACKEND_XLIB) {
     DEFINES += XP_UNIX
     PKGCONFIG += x11
     DEFINES += MOZ_X11
index b87659b..a113353 100644 (file)
@@ -7,7 +7,7 @@ INCLUDEPATH += $$PWD
 SOURCES +=  ../util.cpp
 
 QT += testlib webkit
-contains(DEFINES, HAVE_QTQUICK=1) {
+have?(QTQUICK) {
     QT += qml quick quick-private
     HEADERS += ../bytearraytestdata.h \
                ../util.h
index 9166874..536b779 100644 (file)
@@ -75,6 +75,6 @@ linux-*: {
     LIBS += -lrt
 }
 
-contains(DEFINES, HAVE_QTQUICK=1): QT += qml quick
+have?(QTQUICK): QT += qml quick
 
-contains(DEFINES, ENABLE_GEOLOCATION=1): QT += location
+enable?(GEOLOCATION): QT += location
index 4bb1f8d..8072046 100644 (file)
@@ -108,6 +108,8 @@ static const type& name() \
 #define PLUGIN_ARCHITECTURE_WIN 1
 #elif PLATFORM(GTK) && (OS(UNIX) && !OS(MAC_OS_X))
 #define PLUGIN_ARCHITECTURE_X11 1
+#elif PLATFORM(QT)
+// Qt handles this features.prf
 #else
 #define PLUGIN_ARCHITECTURE_UNSUPPORTED 1
 #endif
index e6b4aec..da3a08d 100644 (file)
@@ -68,13 +68,11 @@ macx {
     }
 }
 
-WEBKIT += wtf
+WEBKIT += wtf javascriptcore webcore
 
-WEBKIT += javascriptcore
+build?(webkit1): WEBKIT += webkit1
 
-WEBKIT += webcore
-
-!no_webkit2 {
+build?(webkit2) {
     WEBKIT += webkit2
 
     # Ensure that changes to the WebKit1 and WebKit2 API will trigger a qmake of this
@@ -83,9 +81,7 @@ WEBKIT += webcore
     QMAKE_INTERNAL_INCLUDED_FILES *= WebKit/WebKit1.pro
 }
 
-!no_webkit1: WEBKIT += webkit1
-
-contains(DEFINES, WTF_USE_3D_GRAPHICS=1): WEBKIT += angle
+use?(3D_GRAPHICS): WEBKIT += angle
 
 qnx {
     # see: https://bugs.webkit.org/show_bug.cgi?id=93460
index 3c09864..c7cacaa 100644 (file)
@@ -27,7 +27,7 @@ linux-* {
     SUBDIRS += $$WEBKIT_TESTS_DIR/MIMESniffing
 }
 
-contains(DEFINES, HAVE_QQUICK1=1): SUBDIRS += $$WEBKIT_TESTS_DIR/qdeclarativewebview
+have?(QQUICK1): SUBDIRS += $$WEBKIT_TESTS_DIR/qdeclarativewebview
 
 # Benchmarks
 SUBDIRS += \
@@ -37,14 +37,14 @@ SUBDIRS += \
 # WebGL performance tests are disabled temporarily.
 # https://bugs.webkit.org/show_bug.cgi?id=80503
 #
-#contains(DEFINES, ENABLE_WEBGL=1) {
+#enable?(WEBGL) {
 #    SUBDIRS += $$WEBKIT_TESTS_DIR/benchmarks/webgl
 #}
 
-!no_webkit2 {
+build?(webkit2): {
     WEBKIT2_TESTS_DIR = $$PWD/WebKit2/UIProcess/API/qt/tests
 
-    contains(DEFINES, HAVE_QTQUICK=1):SUBDIRS += \
+    have?(QTQUICK):SUBDIRS += \
         $$WEBKIT2_TESTS_DIR/inspectorserver \
         $$WEBKIT2_TESTS_DIR/publicapi \
         $$WEBKIT2_TESTS_DIR/qquickwebview \
index c6fbf76..7572cef 100644 (file)
@@ -1,3 +1,47 @@
+2012-09-11  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>
+
+        [Qt] Add a configure step to the Qt build system
+
+        This allows building the Qt port using just 'qmake WebKit.pro'. Using
+        the build-webkit script is still supported, and will add slightly more
+        logic to the build, such as detecting the need for clean or incremental
+        builds.
+
+        Internally, the build system now uses a new variable, WEBKIT_CONFIG, for
+        all things related to configuring the build, such as use/have/enable flags,
+        and these are translated to defines in default_post. Project files should
+        no longer check contains(DEFINES,...) to detect features, but use the new
+        enable?(), use?(), and have?() functions. The no_webkit1 and no_webkit2
+        options have been translated into WEBKIT_CONFIG options as well, and can
+        be checked using build?().
+
+        Reviewed by Simon Hausmann.
+
+        * DumpRenderTree/qt/DumpRenderTree.pro:
+        * MiniBrowser/qt/MiniBrowser.pro:
+        * QtTestBrowser/QtTestBrowser.pro:
+        * Scripts/build-webkit:
+        * Scripts/webkitdirs.pm:
+        (qtFeatureDefaults):
+        (buildQMakeProjects):
+        * Tools.pro:
+        * WebKitTestRunner/InjectedBundle/DerivedSources.pri:
+        * WebKitTestRunner/InjectedBundle/Target.pri:
+        * WebKitTestRunner/Target.pri:
+        * qmake/.qmake.cache: Added.
+        * qmake/configure.pri: Removed.
+        * qmake/configure.pro: Removed.
+        * qmake/dump-features: Added.
+        * qmake/mkspecs/features/configure.prf: Added.
+        * qmake/mkspecs/features/default_post.prf:
+        * qmake/mkspecs/features/default_pre.prf:
+        * qmake/mkspecs/features/features.prf:
+        * qmake/mkspecs/features/features.pri:
+        * qmake/mkspecs/features/functions.prf:
+        * qmake/mkspecs/features/gprof.prf:
+        * qmake/mkspecs/features/mac/default_pre.prf:
+        * qmake/mkspecs/features/win32/default_pre.prf:
+
 2012-09-11  Christophe Dumez  <christophe.dumez@intel.com>
 
         [WK2][WKTR] TestRunner needs to implement clearApplicationCacheForOrigin
index 1936f64..03954b1 100644 (file)
@@ -19,10 +19,10 @@ INCLUDEPATH += \
     $${ROOT_WEBKIT_DIR}/Source/WTF
 
 QT = core gui network testlib webkit widgets
-contains(DEFINES, HAVE_QTPRINTSUPPORT=1): QT += printsupport
+have?(QTPRINTSUPPORT): QT += printsupport
 macx: QT += xml
 
-contains(DEFINES, HAVE_FONTCONFIG=1): PKGCONFIG += fontconfig
+have?(FONTCONFIG): PKGCONFIG += fontconfig
 
 HEADERS += \
     $$PWD/../WorkQueue.h \
index e453051..31a39eb 100644 (file)
@@ -29,7 +29,7 @@ HEADERS += \
 TARGET = MiniBrowser
 DESTDIR = $${ROOT_BUILD_DIR}/bin
 
-contains(DEFINES, HAVE_FONTCONFIG=1): PKGCONFIG += fontconfig
+have?(FONTCONFIG): PKGCONFIG += fontconfig
 
 QT += network gui-private quick quick-private webkit webkit-private
 macx: QT += xml
index 4d64af9..60d1b4f 100644 (file)
@@ -43,11 +43,11 @@ WEBKIT += wtf webcore
 DESTDIR = $$ROOT_BUILD_DIR/bin
 
 QT += network webkit widgets
-contains(DEFINES, HAVE_QTPRINTSUPPORT=1): QT += printsupport
+have?(QTPRINTSUPPORT): QT += printsupport
 
 macx:QT += xml
 
-contains(DEFINES, HAVE_FONTCONFIG=1): PKGCONFIG += fontconfig
+have?(FONTCONFIG): PKGCONFIG += fontconfig
 
 contains(QT_CONFIG, opengl) {
     QT += opengl
index a81922a..4b161a5 100755 (executable)
@@ -256,7 +256,7 @@ if (isGtk()) {
     push @options, "--install-headers=" . $installHeaders if defined($installHeaders);
     push @options, "--install-libs=" . $installLibs if defined($installLibs);
     push @options, "--makeargs=" . $makeArgs if $makeArgs;
-    push @options, "--qmakearg=CONFIG+=no_webkit2" if $noWebKit2;
+    push @options, "WEBKIT_CONFIG-=build_webkit2" if $noWebKit2;
 
     if (checkForArgumentAndRemoveFromARGV("-2")) {
         print "Note: WebKit2 is now built by default, you don't need to pass -2. Disable using --no-webkit2\n";
@@ -265,7 +265,11 @@ if (isGtk()) {
     @options = (@ARGV, @options);
 
     foreach (@features) {
-        push @options, "DEFINES+=$_->{define}=${$_->{value}}" if $_->{define} && ${$_->{value}} != $_->{default};
+        if ($_->{define} && ${$_->{value}} != $_->{default}) {
+            my $define = lc($_->{define});
+            $define =~ s/^enable_//;
+            push @options, "WEBKIT_CONFIG" . (${$_->{value}} == 1 ? "+" : "-") . "=" . $define;
+        }
     }
 }
 
index a2a0dd7..cc1f09f 100755 (executable)
@@ -834,45 +834,27 @@ sub qtFeatureDefaults
 {
     die "ERROR: qmake missing but required to build WebKit.\n" if not commandExists($qmakebin);
 
-    my $qmakepath = File::Spec->catfile(sourceDir(), "Tools", "qmake");
-    my $qmakecommand;
-    if (isWindows()) {
-        $qmakecommand = "(set QMAKEPATH=$qmakepath) && $qmakebin";
-    } else {
-        $qmakecommand = "QMAKEPATH=$qmakepath $qmakebin";
-    }
+    my $oldQmakeEval = $ENV{QMAKE_CACHE_EVAL};
+    $ENV{QMAKE_CACHE_EVAL} = "CONFIG+=print_defaults";
 
     my $originalCwd = getcwd();
+    my $qmakepath = File::Spec->catfile(sourceDir(), "Tools", "qmake");
+    chdir $qmakepath or die "Failed to cd into " . $qmakepath . "\n";
+
+    my $file = File::Spec->catfile(sourceDir(), "WebKit.pro");
 
-    my $file = File::Spec->catfile($qmakepath, "configure.pro");
     my @buildArgs;
-    my $qconfigs;
-
-    if (@_) {
-        @buildArgs = (@buildArgs, @{$_[0]});
-        $qconfigs = $_[1];
-        my $dir = File::Spec->catfile(productDir(), "Tools", "qmake");
-        File::Path::mkpath($dir);
-        chdir $dir or die "Failed to cd into " . $dir . "\n";
-    } else {
-        # Do a quick check of the features without running the config tests
-        push @buildArgs, "CONFIG+=quick_check";
-    }
+    @buildArgs = (@buildArgs, @{$_[0]}) if (@_);
 
-    my @defaults = `$qmakecommand @buildArgs -nocache $file 2>&1`;
+    my @defaults = `$qmakebin @buildArgs $file 2>&1`;
 
     my %qtFeatureDefaults;
     for (@defaults) {
-        if (/ DEFINES: /) {
+        if (/DEFINES: /) {
             while (/(\S+?)=(\S+?)/gi) {
                 $qtFeatureDefaults{$1}=$2;
             }
-        } elsif (/ CONFIG:(.*)$/) {
-            if (@_) {
-                $$qconfigs = $1;
-            }
         } elsif (/Done computing defaults/) {
-            print "\n";
             last;
         } elsif (@_) {
             print $_;
@@ -880,6 +862,7 @@ sub qtFeatureDefaults
     }
 
     chdir $originalCwd;
+    $ENV{QMAKE_CACHE_EVAL} = $oldQmakeEval;
 
     return %qtFeatureDefaults;
 }
@@ -2212,6 +2195,7 @@ sub buildQMakeProjects
 
     my $make = qtMakeCommand($qmakebin);
     my $makeargs = "";
+    my $command;
     my $installHeaders;
     my $installLibs;
     for my $i (0 .. $#buildParams) {
@@ -2236,14 +2220,23 @@ sub buildQMakeProjects
         $makeargs .= " -j" . numberOfCPUs();
     }
 
-    my $qmakepath = File::Spec->catfile(sourceDir(), "Tools", "qmake");
-    my $qmakecommand;
-    if (isWindows()) {
-        $qmakecommand = "(set QMAKEPATH=$qmakepath) && $qmakebin";
-    } else {
-        $qmakecommand = "QMAKEPATH=$qmakepath $qmakebin";
+    $make = "$make $makeargs";
+    $make =~ s/\s+$//;
+
+    my $originalCwd = getcwd();
+    my $dir = File::Spec->canonpath(productDir());
+    File::Path::mkpath($dir);
+    chdir $dir or die "Failed to cd into " . $dir . "\n";
+
+    if ($clean) {
+        $command = "$make distclean";
+        print "\nCalling '$command' in " . $dir . "\n\n";
+        return system $command;
     }
 
+    my $qmakepath = File::Spec->catfile(sourceDir(), "Tools", "qmake");
+    my $qmakecommand = $qmakebin;
+
     my $config = configuration();
     push @buildArgs, "INSTALL_HEADERS=" . $installHeaders if defined($installHeaders);
     push @buildArgs, "INSTALL_LIBS=" . $installLibs if defined($installLibs);
@@ -2252,7 +2245,7 @@ sub buildQMakeProjects
     if ($passedConfig =~ m/debug/i) {
         push @buildArgs, "CONFIG-=release";
         push @buildArgs, "CONFIG+=debug";
-    } elsif (!$passedConfig or $passedConfig =~ m/release/i) {
+    } elsif ($passedConfig =~ m/release/i) {
         push @buildArgs, "CONFIG+=release";
         push @buildArgs, "CONFIG-=debug";
     } else {
@@ -2260,145 +2253,73 @@ sub buildQMakeProjects
     }
     push @buildArgs, "CONFIG-=debug_and_release" if ($passedConfig && isDarwin());
 
-    my $originalCwd = getcwd();
-    my $dir = File::Spec->canonpath(productDir());
-    File::Path::mkpath($dir);
-    chdir $dir or die "Failed to cd into " . $dir . "\n";
-
-    my %defines = qtFeatureDefaults(\@buildArgs, \$qconfigs);
+    # Using build-webkit to build assumes you want a developer-build
+    push @buildArgs, "CONFIG-=production_build";
 
     my $svnRevision = currentSVNRevision();
+    my $previousSvnRevision = "unknown";
 
     my $buildHint = "";
 
-    my $pathToDefinesCache = File::Spec->catfile($dir, ".webkit.config");
-    my $pathToOldDefinesFile = File::Spec->catfile($dir, "defaults.txt");
-
-    # FIXME: Get rid of .webkit.config and defaults.txt and move all the logic to .qmake.cache
-
-    # Ease transition to new build layout
-    if (-e $pathToOldDefinesFile) {
-        print "Old build layout detected";
-        $buildHint = "clean";
-    } elsif (-e $pathToDefinesCache && open(DEFAULTS, $pathToDefinesCache)) {
-        my %previousDefines;
-        while (<DEFAULTS>) {
-            if ($_ =~ m/(\S+)=(\S+)/gi) {
-                $previousDefines{$1} = $2;
-            }
-        }
-        close (DEFAULTS);
-
-        $previousDefines{"SVN_REVISION"} = "unknown" if not exists $previousDefines{"SVN_REVISION"};
-
-        if ($svnRevision ne $previousDefines{"SVN_REVISION"}) {
-            print "Last built revision was " . $previousDefines{"SVN_REVISION"} .
-                ", now at revision $svnRevision. Full incremental build needed.\n";
-
-            $buildHint = "incremental";
-        }
-
-        # Don't confuse the should-we-clean heuristics below
-        delete($previousDefines{"SVN_REVISION"});
-
-        my @uniqueDefineNames = keys %{ +{ map { $_, 1 } (keys %defines, keys %previousDefines) } };
-        foreach my $define (@uniqueDefineNames) {
-            if (! exists $previousDefines{$define}) {
-                print "Feature $define added";
-                $buildHint = "clean";
-                last;
-            }
-
-            if (! exists $defines{$define}) {
-                print "Feature $define removed";
-                $buildHint = "clean";
-                last;
-            }
-
-            if ($defines{$define} != $previousDefines{$define}) {
-                print "Feature $define changed ($previousDefines{$define} -> $defines{$define})";
-                $buildHint = "clean";
-                last;
+    my $pathToQmakeCache = File::Spec->catfile($dir, ".qmake.cache");
+    if (-e $pathToQmakeCache && open(QMAKECACHE, $pathToQmakeCache)) {
+        while (<QMAKECACHE>) {
+            if ($_ =~ m/^SVN_REVISION\s=\s(\d+)$/) {
+                $previousSvnRevision = $1;
             }
         }
-    } else {
-        # Missing build cache suggests we had a broken build after a clean,
-        # so we assume we have to do an incremental build just in case.
-        $buildHint = "incremental";
     }
 
-    if ($buildHint eq "clean") {
-        print ", clean build needed!\n";
-        # FIXME: This STDIN/STDOUT check does not work on the bots. Disable until it does.
-        # if (! -t STDIN || ( &promptUser("Would you like to clean the build directory?", "yes") eq "yes")) {
-            chdir $originalCwd;
-            File::Path::rmtree($dir);
-            File::Path::mkpath($dir);
-            chdir $dir or die "Failed to cd into " . $dir . "\n";
-        #}
+    my $result = 0;
 
-        # Still trigger an incremental build
-        $buildHint = "incremental";
-    }
+    # Run qmake, regadless of having a makefile or not, so that qmake can
+    # detect changes to the configuration.
 
-    if ($buildHint eq "incremental") {
-        my $qmakeDefines = "DEFINES +=";
-        foreach my $key (sort keys %defines) {
-            $qmakeDefines .= " \\\n    $key=$defines{$key}";
-        }
-        open(QMAKE_CACHE, ">.qmake.cache") or die "Cannot create .qmake.cache!\n";
-        print QMAKE_CACHE "CONFIG += webkit_configured $qconfigs\n";
-        print QMAKE_CACHE $qmakeDefines."\n";
-        close(QMAKE_CACHE);
-    }
+    push @buildArgs, "-after OVERRIDE_SUBDIRS=\"@{$projects}\"" if @{$projects};
+    unshift @buildArgs, File::Spec->catfile(sourceDir(), "WebKit.pro");
+    $command = "$qmakecommand @buildArgs";
+    print "Calling '$command' in " . $dir . "\n\n";
+    print "Installation headers directory: $installHeaders\n" if(defined($installHeaders));
+    print "Installation libraries directory: $installLibs\n" if(defined($installLibs));
 
-    # Save config up-front so we can detect changes to the build config even
-    # when the user re-configures after aborting the build.
-    open(DEFAULTS, ">$pathToDefinesCache");
-    print DEFAULTS "# These defines were set when building WebKit last time\n";
-    foreach my $key (sort keys %defines) {
-        print DEFAULTS "$key=$defines{$key}\n";
+    my $configChanged = 0;
+    open(QMAKE, "$command 2>&1 |") || die "Could not execute qmake";
+    while (<QMAKE>) {
+        $configChanged = 1 if $_ =~ m/The configuration was changed since the last build/;
+        print $_;
     }
-    close(DEFAULTS);
 
-    my $result = 0;
-
-    my $makefile = File::Spec->catfile($dir, "Makefile");
-    if (! -e $makefile) {
-        push @buildArgs, "-after OVERRIDE_SUBDIRS=\"@{$projects}\"" if @{$projects};
+    close(QMAKE);
+    $result = $?;
 
-        push @buildArgs, File::Spec->catfile(sourceDir(), "WebKit.pro");
-        my $command = "$qmakecommand @buildArgs";
-        print "Calling '$command' in " . $dir . "\n\n";
-        print "Installation headers directory: $installHeaders\n" if(defined($installHeaders));
-        print "Installation libraries directory: $installLibs\n" if(defined($installLibs));
+    $command = "$make";
 
-        $result = system "$command";
-        if ($result ne 0) {
-           die "Failed to setup build environment using $qmakebin!\n";
-        }
+    if ($result ne 0) {
+       die "\nFailed to set up build environment using $qmakebin!\n";
     }
 
-    my $command = "$make $makeargs";
-    $command =~ s/\s+$//;
+    if ($configChanged) {
+        print "Calling '$command wipeclean' in " . $dir . "\n\n";
+        $result = system "$command wipeclean";
+    }
 
-    if ($clean) {
-        $command = "$command distclean";
-    } elsif ($buildHint eq "incremental") {
-        $command = "$command incremental";
+    if ($svnRevision ne $previousSvnRevision) {
+        print "Last built revision was " . $previousSvnRevision .
+            ", now at revision $svnRevision. Full incremental build needed.\n";
+        $command .= " incremental";
     }
 
-    print "Calling '$command' in " . $dir . "\n\n";
+    print "\nCalling '$command' in " . $dir . "\n\n";
     $result = system $command;
 
     chdir ".." or die;
 
     if ($result eq 0) {
         # Now that the build completed successfully we can save the SVN revision
-        open(DEFAULTS, ">>$pathToDefinesCache");
-        print DEFAULTS "SVN_REVISION=$svnRevision\n";
-        close(DEFAULTS);
-    } elsif ($buildHint eq "" && exitStatus($result)) {
+        open(QMAKECACHE, ">>$pathToQmakeCache");
+        print QMAKECACHE "SVN_REVISION = $svnRevision\n";
+        close(QMAKECACHE);
+    } elsif (!$command =~ /incremental/ && exitStatus($result)) {
         my $exitCode = exitStatus($result);
         my $failMessage = <<EOF;
 
@@ -2411,11 +2332,11 @@ The build failed with exit code $exitCode. This may have been because you
   - added a new resource to a qrc file
 
 as dependencies are not automatically re-computed for local developer builds.
-You may try computing dependencies manually by running 'make qmake' in:
+You may try computing dependencies manually by running 'make qmake_all' in:
 
   $dir
 
-or passing --makeargs="qmake" to build-webkit.
+or passing --makeargs="qmake_all" to build-webkit.
 
 =========================
 
index 749013c..1448c01 100644 (file)
@@ -7,21 +7,21 @@
 TEMPLATE = subdirs
 CONFIG += ordered
 
-!no_webkit1 {
+build?(webkit1) {
     SUBDIRS += QtTestBrowser/QtTestBrowser.pro
-    contains(DEFINES, HAVE_QTTESTLIB=1): SUBDIRS += DumpRenderTree/qt/DumpRenderTree.pro
+    build?(drt): SUBDIRS += DumpRenderTree/qt/DumpRenderTree.pro
     SUBDIRS += DumpRenderTree/qt/ImageDiff.pro
 }
 
-!no_webkit2 {
+build?(webkit2) {
     # WTR's InjectedBundle depends currently on WK1's DumpRenderTreeSupport
-    !no_webkit1:contains(DEFINES, HAVE_QTQUICK=1):contains(DEFINES, HAVE_QTTESTLIB=1): SUBDIRS += WebKitTestRunner/WebKitTestRunner.pro
+    build?(webkit1):build?(wtr):have?(QTQUICK): SUBDIRS += WebKitTestRunner/WebKitTestRunner.pro
 
-    contains(DEFINES, HAVE_QTQUICK=1): SUBDIRS += MiniBrowser/qt/MiniBrowser.pro
+    have?(QTQUICK): SUBDIRS += MiniBrowser/qt/MiniBrowser.pro
     SUBDIRS += MiniBrowser/qt/raw/MiniBrowserRaw.pro
 }
 
-!win32:contains(DEFINES, ENABLE_NETSCAPE_PLUGIN_API=1) {
+!win32:enable?(NETSCAPE_PLUGIN_API) {
     SUBDIRS += DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro
 }
 
@@ -30,7 +30,7 @@ OTHER_FILES = \
     $$files(Scripts/webkitpy/*.py, true) \
     $$files(Scripts/webkitperl/*.p[l|m], true) \
     qmake/README \
-    qmake/configure.* \
+    qmake/dump-features.pl \
     qmake/qt_webkit.pri \
     qmake/config.tests/README \
     qmake/config.tests/fontconfig/* \
index 1521183..8a2fa4d 100644 (file)
@@ -25,7 +25,7 @@ IDL_BINDINGS += \
 idl.output = JS${QMAKE_FILE_BASE}.cpp
 idl.input = IDL_BINDINGS
 idl.script = $${ROOT_WEBKIT_DIR}/Source/WebCore/bindings/scripts/generate-bindings.pl
-idl.commands = perl -I$${ROOT_WEBKIT_DIR}/Source/WebCore/bindings/scripts -I$$PWD/Bindings $$idl.script --defines \"$${FEATURE_DEFINES_JAVASCRIPT}\" --generator TestRunner --include $$PWD/Bindings --outputDir ${QMAKE_FUNC_FILE_OUT_PATH} --preprocessor \"$${QMAKE_MOC} -E\" ${QMAKE_FILE_NAME}
+idl.commands = perl -I$${ROOT_WEBKIT_DIR}/Source/WebCore/bindings/scripts -I$$PWD/Bindings $$idl.script --defines \"$$javascriptFeatureDefines()\" --generator TestRunner --include $$PWD/Bindings --outputDir ${QMAKE_FUNC_FILE_OUT_PATH} --preprocessor \"$${QMAKE_MOC} -E\" ${QMAKE_FILE_NAME}
 idl.depends = $${ROOT_WEBKIT_DIR}/Source/WebCore/bindings/scripts/CodeGenerator.pm \
               $$PWD/Bindings/CodeGeneratorTestRunner.pm \
               $${ROOT_WEBKIT_DIR}/Source/WebCore/bindings/scripts/IDLParser.pm \
index f46e44c..32769ac 100644 (file)
@@ -56,7 +56,7 @@ WEBKIT += wtf javascriptcore webcore
 
 CONFIG += plugin rpath
 
-contains(DEFINES, HAVE_FONTCONFIG=1): PKGCONFIG += fontconfig
+have?(FONTCONFIG): PKGCONFIG += fontconfig
 
 INCLUDEPATH += \
     $$PWD/.. \
index 27b65c6..7165c1b 100644 (file)
@@ -35,7 +35,7 @@ WEBKIT += wtf javascriptcore webkit2
 
 DEFINES += USE_SYSTEM_MALLOC=1
 
-contains(DEFINES, HAVE_FONTCONFIG=1): PKGCONFIG += fontconfig
+have?(FONTCONFIG): PKGCONFIG += fontconfig
 
 INCLUDEPATH += \
     $${ROOT_WEBKIT_DIR}/Tools/DumpRenderTree/qt
diff --git a/Tools/qmake/.qmake.cache b/Tools/qmake/.qmake.cache
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/Tools/qmake/configure.pri b/Tools/qmake/configure.pri
deleted file mode 100644 (file)
index 5057f57..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-# -------------------------------------------------------------------
-# This file is used by build-webkit to compute the various feature
-# defines, which are then cached in .qmake.cache.
-#
-# See 'Tools/qmake/README' for an overview of the build system
-# -------------------------------------------------------------------
-
-!quick_check {
-    load(configure)
-    QMAKE_CONFIG_TESTS_DIR = $$PWD/config.tests
-
-    CONFIG_TESTS = \
-        fontconfig \
-        gccdepends \
-        glx \
-        libpng \
-        libjpeg \
-        libwebp \
-        libXcomposite \
-        libXrender \
-        libxml2 \
-        libxslt \
-        libzlib
-
-    for(test, CONFIG_TESTS): qtCompileTest($$test)
-}
-
-load(features)
diff --git a/Tools/qmake/configure.pro b/Tools/qmake/configure.pro
deleted file mode 100644 (file)
index bb200d3..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-# -------------------------------------------------------------------
-# This file is used by build-webkit to compute the various feature
-# defines, which are then cached in .qmake.cache.
-#
-# See 'Tools/qmake/README' for an overview of the build system
-# -------------------------------------------------------------------
-
-# Will compute features based on command line arguments, config tests,
-# dependency availability, and defaults.
-include(configure.pri)
-
-# Compute delta
-CONFIG -= $$BASE_CONFIG
-DEFINES -= $$BASE_DEFINES
-
-message(CONFIG: $$CONFIG)
-message(DEFINES: $$DEFINES)
-error("Done computing defaults")
diff --git a/Tools/qmake/dump-features.pl b/Tools/qmake/dump-features.pl
new file mode 100644 (file)
index 0000000..f026430
--- /dev/null
@@ -0,0 +1,27 @@
+#!/usr/bin/perl -w
+
+use strict;
+use warnings;
+
+use FeatureList;
+
+foreach my $feature (getFeatureOptionList())
+{
+    next if $feature->{'option'} eq 'system-malloc';
+
+    my $desc = $feature->{'desc'};
+    $desc =~ s/^Toggle\s//;
+    $desc =~ s/\ssupport$//;
+    $desc = ucfirst($desc);
+
+    $desc .= ' ' . '.' x (30 - length($desc));
+    $desc =~ s/\s/_/g;
+
+    my $define = $feature->{'define'};
+    $define =~ s/^ENABLE_//;
+    $define = lc($define);
+
+    $desc .= "=$define";
+
+    print "$desc "
+}
diff --git a/Tools/qmake/mkspecs/features/configure.prf b/Tools/qmake/mkspecs/features/configure.prf
new file mode 100644 (file)
index 0000000..849eeef
--- /dev/null
@@ -0,0 +1,239 @@
+# -------------------------------------------------------------------
+# This file does basic 'configure' style checks to determine the
+# set of enable/use/have defines and their values.
+#
+# See 'Tools/qmake/README' for an overview of the build system
+# -------------------------------------------------------------------
+
+# This file is read after .qmake.cache, but before command line options,
+# which means we might have a config from a previous build.
+
+load(features)
+load(configure)
+
+defineTest(runConfigure) {
+    !webkit_configured:!print_defaults {
+        log($${EOL}Running configure tests...$${EOL}$${EOL})
+        QMAKE_CONFIG_TESTS_DIR = $$ROOT_WEBKIT_DIR/Tools/qmake/config.tests
+        CONFIG_TESTS = $$files($$QMAKE_CONFIG_TESTS_DIR/*.pro, true)
+        for(test, CONFIG_TESTS) {
+            test = $$basename(test)
+            test ~= s/\\.pro$//
+            qtCompileTest($$test)
+        }
+    } else {
+        CONFIG += skipped_config_tests
+
+        # Save and reset configuration from .qmake.cache, so that we can
+        # detect changes to the configuration and abort the build.
+        PREVIOUS_WEBKIT_CONFIG = $$WEBKIT_CONFIG
+        unset(WEBKIT_CONFIG)
+        export(PREVIOUS_WEBKIT_CONFIG)
+    }
+
+    # Running feature detection inside a function ensures that we only
+    # export WEBKIT_CONFIG, and don not mess up any other variables.
+    detectFeatures()
+
+    # Set up a base list of optional things to build, which we later on
+    # sanitize based on constraints of the platform.
+
+    WEBKIT_CONFIG += \
+        build_webkit1 \
+        build_webkit2 \
+        build_drt \
+        build_wtr \
+        build_tests
+
+    # Sanatize WebKit1/WebKit2, as WebKit.pro uses these two options
+    # to determine which pro-files to include. The remaining sanitazion
+    # is done when finalizing configure.
+
+    !haveQtModule(widgets) {
+        CONFIGURE_WARNINGS += "Missing QtWidgets module, disabling WebKit1"
+        WEBKIT_CONFIG -= build_webkit1
+    }
+
+    # WebKit2 not supported on Windows yet
+    win32*: WEBKIT_CONFIG -= build_webkit2
+
+    export(CONFIG)
+    export(WEBKIT_CONFIG)
+    export(CONFIGURE_WARNINGS)
+}
+
+defineReplace(configEnabled) {
+    trueValue = $$2
+    isEmpty(trueValue): trueValue = yes
+
+    falseValue = $$3
+    isEmpty(falseValue): falseValue = no
+
+    $$1: return($$trueValue)
+    return($$falseValue)
+}
+
+# This is called from default_post, at which point we've also parsed
+# command line options
+defineTest(finalizeConfigure) {
+
+    # Sanitize clashing options
+    santizeFeatures()
+
+    # Sanitize build options
+    !haveQtModule(testlib) {
+        CONFIGURE_WARNINGS += "Missing QtTest module, disabling DumpRenderTree, WebKitTestRunner and tests"
+        WEBKIT_CONFIG -= build_drt build_wtr build_tests
+    }
+
+    production_build {
+        WEBKIT_CONFIG -= build_drt build_wtr build_tests
+    }
+
+    print_defaults {
+        log(DEFINES: $$configDefines()$${EOL})
+        error(Done computing defaults)
+    }
+
+    # Detect changes to the configuration. Changes need a clean build.
+    webkit_configured {
+        added_features = $$WEBKIT_CONFIG
+        added_features -= $$PREVIOUS_WEBKIT_CONFIG
+
+        removed_features = $$PREVIOUS_WEBKIT_CONFIG
+        removed_features -= $$WEBKIT_CONFIG
+
+        !isEmpty(added_features)|!isEmpty(removed_features) {
+            CONFIG += configuration_changed
+        }
+    }
+
+    reconfigureMsg = \
+        "Reconfiguration likely requires a clean build. You$${QUOTE}ve been warned!" \
+        "You may execute $${QUOTE}make wipeclean$${QUOTE} to wipe the build directory."
+
+    # Add target for reconfiguring the build
+    reconfigure.target = reconfigure
+    double_quote = $$escape_expand(\")
+    reconfigure.commands = echo > .qmake.cache && $(MAKE) -f $(MAKEFILE) qmake $$EOC
+    reconfigure.commands += @echo $${double_quote}WARNING: $$join(reconfigureMsg,\\n,,)\\n$${double_quote}
+    QMAKE_EXTRA_TARGETS += reconfigure
+    export(reconfigure.target)
+    export(reconfigure.commands)
+    export(QMAKE_EXTRA_TARGETS)
+
+    # Add target for wiping clean the build
+    wipeclean.target = wipeclean
+    win_cmd_shell: wipeclean.commands = FOR /D %%p IN (.) DO rmdir "%%p" /s /q
+    else: wipeclean.commands = $(COPY_FILE) $(MAKEFILE) .$(MAKEFILE) && rm -Rf * && $(MOVE) .$(MAKEFILE) $(MAKEFILE)
+    QMAKE_EXTRA_TARGETS += wipeclean
+    export(wipeclean.target)
+    export(wipeclean.commands)
+    export(QMAKE_EXTRA_TARGETS)
+
+    # Print a prettified dump of the configuration, for easier debugging
+    !webkit_configured|configuration_changed|buildbot {
+
+        skipped_config_tests {
+            log($${EOL}Skipping configure tests. Execute $${QUOTE}make reconfigure$${QUOTE} to re-run.$${EOL})
+        }
+
+        leftoverConfig = $$WEBKIT_CONFIG
+
+        for(config, WEBKIT_CONFIG) {
+            match = $$find(config, "^build_")
+            !isEmpty(match) {
+                build += $$replace(match, ^build_,)
+                leftoverConfig -= $$config
+                next()
+            }
+            match = $$find(config, "^have_")
+            !isEmpty(match) {
+                have += $$replace(match, ^have_,)
+                leftoverConfig -= $$config
+                next()
+            }
+            match = $$find(config, "^use_")
+            !isEmpty(match) {
+                use += $$replace(match, ^use_,)
+                leftoverConfig -= $$config
+            }
+        }
+
+        scripts_dir = $$toSystemPath($$ROOT_WEBKIT_DIR/Tools/Scripts)
+        features = $$system(perl -I $${scripts_dir} -I $${scripts_dir}$${QMAKE_DIR_SEP}webkitperl $$toSystemPath($$ROOT_WEBKIT_DIR/Tools/qmake/dump-features.pl))
+        for(feature, features) {
+            parts = $$split(feature, =)
+            desc = $$member(parts, 0, 0)
+            desc ~= s/_/ /
+            value = $$member(parts, 1, 1)
+
+            contains(WEBKIT_CONFIG, $$value) {
+                leftoverConfig -= $$value
+                value = yes
+            } else {
+                value = no
+            }
+
+            featureConfiguration += "$$desc $$value$${EOL}"
+        }
+
+        log($${EOL}Final configuration:$${EOL}$${EOL})
+
+        debug: buildConfig += debug
+        release: buildConfig += release
+        buildConfig = $$join(buildConfig,/,,)
+        debug:release:debug_and_release:buildConfig += (combined)
+
+        log(Build ......................... $$build$${EOL})
+        log(Configuration ................. $$buildConfig$${EOL})
+        log(All-in-one files .............. $$configEnabled(use_all_in_one_files)$$EOL)
+        log(GNUmake ....................... $$configEnabled(GNUmake)$$EOL)
+        log(Static libs as shared ......... $$configEnabled(force_static_libs_as_shared)$$EOL)
+        log(Production build .............. $$configEnabled(production_build)$$EOL)
+        log($$EOL)
+
+        log(Have .......................... $$have$${EOL})
+        log(Use ........................... $$use$${EOL})
+        log(Features ...................... $${leftoverConfig}$${EOL})
+        log($$EOL)
+
+        for(feature, featureConfiguration) {
+            log($$feature)
+        }
+
+        !isEmpty(CONFIGURE_WARNINGS) {
+            log("$${EOL}Encountered $$size(CONFIGURE_WARNINGS) configuration warning(s):$${EOL}$${EOL}")
+            for(warn, CONFIGURE_WARNINGS) {
+                log(" ! $$warn$${EOL}")
+            }
+        }
+
+        log("$${EOL}WebKit is now configured for building. Just run 'make'.$${EOL}$${EOL}")
+
+        configuration_changed {
+            log(WARNING: The configuration was changed since the last build:$${EOL}$${EOL})
+
+            !isEmpty(added_features): log($${TAB}Added feature(s): $${added_features}$${EOL})
+            !isEmpty(removed_features): log($${TAB}Removed feature(s): $${removed_features}$${EOL})
+
+            log($$join(reconfigureMsg,$${EOL},$${EOL},$${EOL}$${EOL}))
+        }
+    }
+
+    # Cache the result for all the other project files, and for
+    # the next build, so we can detect changes to the config.
+    !webkit_configured|configuration_changed {
+        !configuration_changed: cache(CONFIG, add, $$list(webkit_configured))
+
+        msg = "$${EOL}$${LITERAL_HASH} Configuration changed $$_DATE_"
+        write_file($$_QMAKE_CACHE_, msg, append)
+
+        !configuration_changed {
+            cache(WEBKIT_CONFIG, set, WEBKIT_CONFIG)
+        } else {
+            !isEmpty(added_features): cache(WEBKIT_CONFIG, add, added_features)
+            !isEmpty(removed_features): cache(WEBKIT_CONFIG, sub, removed_features)
+        }
+    }
+}
index 5f513fa..f3e604c 100644 (file)
@@ -10,6 +10,8 @@
 # or include() and a CONFIG += feature.
 CONFIG += config_step
 
+root_project_file: finalizeConfigure()
+
 # Help keep the build tree clean
 MOC_DIR = moc
 RCC_DIR = rcc
@@ -21,6 +23,8 @@ DEFINES += \
 
 CONFIG(release, debug|release): DEFINES *= NDEBUG
 
+DEFINES += $$configDefines()
+
 CONFIG += depend_includepath
 DEPENDPATH += $$OUT_PWD
 
@@ -152,7 +156,7 @@ contains(QT, webkit) {
     force_static_libs_as_shared {
         WEBKIT += wtf webcore
         !v8: WEBKIT += javascriptcore
-        !no_webkit2: WEBKIT += webkit2
+        build?(webkit2): WEBKIT += webkit2
     }
 }
 
index 7cdeb12..44372f9 100644 (file)
@@ -5,6 +5,10 @@
 # See 'Tools/qmake/README' for an overview of the build system
 # -------------------------------------------------------------------
 
+# Allow environment tweaks to pre-loaded .qmake.cache content
+env_cache = $$(QMAKE_CACHE_EVAL)
+eval($$env_cache)
+
 load(functions)
 
 # Derived sources often need QMAKE_MOC
@@ -19,7 +23,7 @@ isEmpty(pro_file): CONFIG += recursive_include
 # Resolve root directories for source and build
 ROOT_WEBKIT_DIR = $$replace(PWD, /Tools/qmake/mkspecs/features$,)
 WEBKIT_SUBDIR = $$replace(_PRO_FILE_PWD_, $${ROOT_WEBKIT_DIR},)
-ROOT_BUILD_DIR = $$toSystemPath($$replace(OUT_PWD, $${WEBKIT_SUBDIR}$,))
+ROOT_BUILD_DIR = $$replace(OUT_PWD, $${WEBKIT_SUBDIR}$,)
 
 # We want the QtWebKit API forwarding includes to live in the root build dir.
 MODULE_BASE_DIR = $$ROOT_WEBKIT_DIR
@@ -31,12 +35,6 @@ MODULE_QMAKE_OUTDIR = $$ROOT_BUILD_DIR/Tools/qmake
 # Now we're ready to load default_pre from Qt
 load(default_pre)
 
-unix:config_gccdepends {
-    # We have a compiler that supports the -MD option (and neither
-    # teambuilder nor icecream is messing up the .d file output).
-    CONFIG += GNUmake gcc_MD_depends
-}
-
 equals(OUT_PWD, $${ROOT_BUILD_DIR}) {
     !recursive_include:CONFIG += root_project_file
     BUILD_ROOT_RELATIVE_TO_OUT_PWD = .
@@ -68,6 +66,9 @@ win_cmd_shell {
     QUOTE = "\'"
     DOUBLE_ESCAPED_QUOTE = "\\\'"
 }
+EOL = $$escape_expand(\\n)
+EOC = $$escape_expand(\\n\\t)
+TAB = $$escape_expand(\\t)
 
 MAKEFILE_NOOP_COMMAND = @echo -n
 win32-msvc*: MAKEFILE_NOOP_COMMAND = @echo >NUL
@@ -76,13 +77,20 @@ win32-msvc*: MAKEFILE_NOOP_COMMAND = @echo >NUL
 scratchbox: PYTHON = python2.6
 else: PYTHON = python
 
-!haveQt(5):!recursive_include: error("Building WebKit with Qt versions older than 5.0 is not supported.")
+# Run configure before making decisions that depend on the result
+root_project_file {
+    load(configure)
+    runConfigure()
+}
 
-!haveQtModule(widgets) {
-    root_project_file: message("WebKit1 requires the QtWidgets module. Disabling WebKit1.")
-    CONFIG += no_webkit1
+unix:config_gccdepends {
+    # We have a compiler that supports the -MD option (and neither
+    # teambuilder nor icecream is messing up the .d file output).
+    CONFIG += GNUmake gcc_MD_depends
 }
 
+!haveQt(5):!recursive_include: error("Building WebKit with Qt versions older than 5.0 is not supported.")
+
 # 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
@@ -90,26 +98,13 @@ contains(QT_CONFIG, private_tests): CONFIG += qt_developer_build
 # Set some defaults for specific platforms
 CONFIG += include_webinspector
 
+# By default we enable "production build", and build-webkit, which is
+# used by bots and developers, will disable it, to enable warnings etc.
+CONFIG += production_build
+
 # Try to locate sqlite3 source (for WebCore)
 SQLITE3SRCDIR = $$(SQLITE3SRCDIR)
 isEmpty(SQLITE3SRCDIR) {
     SQLITE3SRCDIR = $$QT.core.sources/../3rdparty/sqlite/
 }
 
-# --------- Make features available to JSC ------------
-
-## Forward enabled feature macros to JavaScript enabled features macros
-FEATURE_DEFINES_JAVASCRIPT = LANGUAGE_JAVASCRIPT=1
-v8: FEATURE_DEFINES_JAVASCRIPT += V8_BINDING=1
-
-for(define, DEFINES) {
-    enabled_feature_define = $$find(define, ^ENABLE_.+=1$)
-    isEmpty(enabled_feature_define): next()
-
-    FEATURE_DEFINES_JAVASCRIPT += $$enabled_feature_define
-}
-
-# Save the base config and defines so we can compute the delta between
-# what features.prf introduced and what was already there.
-BASE_CONFIG = $$CONFIG
-BASE_DEFINES = $$DEFINES
index f267014..9c9fde1 100644 (file)
 # -------------------------------------------------------------------
 # This file does basic 'configure' style checks to determine the
-# set of ENABLE_FOO defines and their values.
+# set of enable/use/have defines and their values.
 #
 # See 'Tools/qmake/README' for an overview of the build system
 # -------------------------------------------------------------------
 
-# Since features.prf is currently loaded from .pro/.pri files, not
-# defaults_pre.prf, we have at this point parsed any optional command
-# line arguments to qmake (eg qmake DEFINES+=ENABLE_VIDEO=0), that are
-# intended to override default values (static or dynamic) of the
-# feature defines.
-#
-# This is why the checks below look for !contains(DEFINES, ENABLE_FOO=.)
-# so that the static or dynamic defaults will only be set if the user did
-# not make an explicit choice by passing an argument to qmake/build-webkit.
+defineTest(detectFeatures) {
 
-# ------------- Prepare for feature detection -------------
+    # -------------- Fill in static defaults --------------
 
-## load mobilityconfig if mobility is available
-load(mobilityconfig, true)
+    include(features.pri)
 
-# ---------- Dynamically detect optional features -------------
-#
-# Please note, static feature defaults go in features.pri
-#
-# Do not add new CONFIG options, but use the existing patterns
-# of WTF_USE, ENABLE_, etc, and detect the precense of those
-# defines in the relevant target files. You do not need to have
-# a fallback in your logic for the disabling feature, that's handled
-# by having the feature disabled in features.pri. Nor do you have to
-# unset the opposite value, that's handled automatically for you.
-
-DEFINES += WTF_USE_ICU_UNICODE=1
-DEFINES -= WTF_USE_QT4_UNICODE=1
-
-# We need fontconfig to set up the test fonts for DumpRenderTree and WebKitTestRunner.
-config_fontconfig:!mac {
-    DEFINES += HAVE_FONTCONFIG=1
-}
+    for(feature, FEATURE_DEFAULTS) {
+        enabledFeature = $$find(feature, =1$)
+        !isEmpty(enabledFeature) {
+        line ~= s/^.+include \"(.*)\"/\\1/
+            enabledFeature ~= s/=1$//
+            enabledFeature ~= s/^ENABLE_//
+            WEBKIT_CONFIG += $$lower($$enabledFeature)
+        }
+    }
 
-!contains(DEFINES, HAVE_QTQUICK=.) {
-    haveQtModule(quick): DEFINES += HAVE_QTQUICK=1
-}
+    WEBKIT_CONFIG += use_tiled_backing_store
 
-!contains(DEFINES, HAVE_QTPRINTSUPPORT=.) {
-    haveQtModule(printsupport): DEFINES += HAVE_QTPRINTSUPPORT=1
-}
+    # ------------- Prepare for feature detection -------------
 
-!contains(DEFINES, HAVE_QTTESTLIB=.) {
-    haveQtModule(testlib) {
-        DEFINES += HAVE_QTTESTLIB=1
-    } else {
-        message("Missing QtTest module, disabling DumpRenderTree, WebKitTestRunner and tests")
-    }
-}
+    # Load mobilityconfig if mobility is available
+    load(mobilityconfig, true)
 
-# We need libxml2 config test to determine to use libxml2 or not
-!contains(DEFINES, WTF_USE_LIBXML2=.) {
-    config_libxml2: DEFINES += WTF_USE_LIBXML2=1
-}
+    # ---------- Dynamically detect optional features -------------
+    #
+    # Please note: static feature defaults go in features.pri
+    #
 
-# We need libxslt config test to determine to use libxslt or not
-!contains(DEFINES, ENABLE_XSLT=.) {
-    config_libxslt: DEFINES += ENABLE_XSLT=1
-}
+    haveQtModule(quick): WEBKIT_CONFIG += have_qtquick
+    haveQtModule(printsupport): WEBKIT_CONFIG += have_qtprintsupport
+    haveQtModule(widgets): WEBKIT_CONFIG += have_qstyle
+    haveQtModule(testlib): WEBKIT_CONFIG += have_qttestlib
 
-# We need libzlib config test to determine to use enable websocket extension or not
-!contains(DEFINES, WTF_USE_ZLIB=.) {
-    config_libzlib: DEFINES += WTF_USE_ZLIB=1
-}
+    config_libxml2: WEBKIT_CONFIG += use_libxml2
+    config_libxslt: WEBKIT_CONFIG += xslt
+    config_libzlib: WEBKIT_CONFIG += use_zlib
+    config_libwebp: WEBKIT_CONFIG += use_webp
 
-# Tiled Backing Store support
-!contains(DEFINES, WTF_USE_TILED_BACKING_STORE=.): DEFINES += WTF_USE_TILED_BACKING_STORE=1
+    config_libjpeg: WEBKIT_CONFIG += use_libjpeg
+    else: CONFIGURE_WARNINGS += "JPEG library not found, QImageDecoder will decode JPEG images"
 
-# Turn on legacy viewport adaption
-!contains(DEFINES, ENABLE_LEGACY_VIEWPORT_ADAPTION=.): DEFINES += ENABLE_LEGACY_VIEWPORT_ADAPTION=1
+    config_libpng: WEBKIT_CONFIG += use_libpng
+    else: CONFIGURE_WARNINGS += "PNG library not found, QImageDecoder will decode PNG images"
 
-# Nescape plugins support (NPAPI)
-!contains(DEFINES, ENABLE_NETSCAPE_PLUGIN_API=.) {
-    xlibAvailable() {
-        DEFINES += ENABLE_NETSCAPE_PLUGIN_API=1
-        CONFIG += plugin_backend_xlib
-    } else: unix|win32-*:!embedded:!wince* {
-        DEFINES += ENABLE_NETSCAPE_PLUGIN_API=1
-    }
-}
+    linux-* {
+        config_libXcomposite: WEBKIT_CONFIG += have_xcomposite
+        config_libXrender: WEBKIT_CONFIG += have_xrender
 
-# Netscape plugins support for WebKit2
-!contains(DEFINES, PLUGIN_ARCHITECTURE_UNSUPPORTED=.) {
-    no_webkit2 {
-        DEFINES += PLUGIN_ARCHITECTURE_UNSUPPORTED=1
-    } else {
-        contains(QT_CONFIG, xcb-xlib) {
-            CONFIG += plugin_backend_xlib
-            DEFINES += PLUGIN_ARCHITECTURE_X11=1 \
-                       PLUGIN_ARCHITECTURE_UNSUPPORTED=0 \
-                       ENABLE_PLUGIN_PROCESS=1
-        } else {
-            DEFINES += PLUGIN_ARCHITECTURE_UNSUPPORTED=1
-        }
+        config_glx:!contains(QT_CONFIG, opengles2): WEBKIT_CONFIG += have_glx
+
+        # We need fontconfig to set up the test fonts for DumpRenderTree and WebKitTestRunner.
+        config_fontconfig: WEBKIT_CONFIG += have_fontconfig
     }
-}
 
-# QStyle detection
-haveQtModule(widgets): DEFINES += HAVE_QSTYLE=1
+    # Nescape plugins support (NPAPI)
+    xlibAvailable() {
+        WEBKIT_CONFIG += \
+            netscape_plugin_api \
+            use_plugin_backend_xlib
 
-# Enable the USE(3D_GRAPHICS) flag when QtOpenGL is enabled.
-!contains(DEFINES, WTF_USE_3D_GRAPHICS=.):contains(QT_CONFIG, opengl) {
-    # Disable USE(3D_GRAPHICS) on Windows temporarily, see https://bugs.webkit.org/show_bug.cgi?id=90850 for details.
-    # Also disable on QNX, see https://bugs.webkit.org/show_bug.cgi?id=93278
-    !win32-*:!qnx {
-        DEFINES += WTF_USE_3D_GRAPHICS=1
-    }
-}
+        # WebKit2
+        WEBKIT_CONFIG += \
+            plugin_architecture_x11 \
+            plugin_process
 
-# WebGL support - only enabled if we can use 3D graphics
-!contains(DEFINES, ENABLE_WEBGL=.):contains(DEFINES, WTF_USE_3D_GRAPHICS=1) {
-    DEFINES += ENABLE_WEBGL=1
-}
+    } else: unix|win32-*:!embedded:!wince* {
+        WEBKIT_CONFIG += netscape_plugin_api
+        # WebKit2
+        WEBKIT_CONFIG += plugin_architecture_unsupported
+    } else {
+        WEBKIT_CONFIG += plugin_architecture_unsupported
+    }
 
-# CSS Shaders support
-!contains(DEFINES, ENABLE_CSS_SHADERS=.) {
-    # Enable CSS shaders when CSS filters and WebGL are enabled.
-    contains(DEFINES, ENABLE_CSS_FILTERS=1):contains(DEFINES, ENABLE_WEBGL=1): DEFINES += ENABLE_CSS_SHADERS=1
-}
+    # Enable the USE(3D_GRAPHICS) flag when QtOpenGL is enabled.
+    contains(QT_CONFIG, opengl) {
+        # Disable USE(3D_GRAPHICS) on Windows temporarily, see https://bugs.webkit.org/show_bug.cgi?id=90850 for details.
+        # Also disable on QNX, see https://bugs.webkit.org/show_bug.cgi?id=93278
+        !win32-*:!qnx {
+            WEBKIT_CONFIG += use_3d_graphics
+        }
+    }
 
-!contains(DEFINES, ENABLE_XSLT=.) {
-    # Using QtXmlPatterns
-    contains(QT_CONFIG, xmlpatterns): DEFINES += ENABLE_XSLT=1
+    # WebGL support - only enabled if we can use 3D graphics
+    use?(3d_graphics): WEBKIT_CONFIG += webgl
 
-    # Or libxml2 -- experimental and only works on Linux so far
-    contains(DEFINES, WTF_USE_LIBXML2=1): DEFINES += ENABLE_XSLT=1
-}
+    # Enable CSS shaders when CSS filters and WebGL are enabled
+    enable?(css_filters):enable?(webgl): WEBKIT_CONFIG += css_shaders
 
-# Geolocation support if QtMobility exists
-!contains(DEFINES, ENABLE_GEOLOCATION=.) {
+    # Geolocation support if QtMobility exists
     contains(MOBILITY_CONFIG, location)|contains(QT_CONFIG, location) {
-       DEFINES += ENABLE_GEOLOCATION=1
+        WEBKIT_CONFIG += geolocation
     }
-}
 
-# orientation support
-haveQtModule(sensors) {
-    !contains(DEFINES, ENABLE_ORIENTATION_EVENTS=.): DEFINES += ENABLE_ORIENTATION_EVENTS=1
-    !contains(DEFINES, ENABLE_DEVICE_ORIENTATION=.): DEFINES += ENABLE_DEVICE_ORIENTATION=1
-}
+    # Orientation support
+    haveQtModule(sensors): WEBKIT_CONFIG += orientation_events device_orientation
 
-# HTML5 Media Support
-!contains(DEFINES, ENABLE_VIDEO=.) {
-    mac:!contains(DEFINES, USE_QTMULTIMEDIA=1) {
+    # HTML5 Media Support
+    mac {
         DARWIN_VERSION = $$split(QMAKE_HOST.version, ".")
         DARWIN_MAJOR_VERSION = $$first(DARWIN_VERSION)
         # QTKIT support requires 10.7 or newer
         greaterThan(DARWIN_MAJOR_VERSION, 10) {
-            DEFINES += ENABLE_VIDEO=1
-            DEFINES += WTF_USE_QTKIT=1
+            WEBKIT_CONFIG += video use_qtkit
         }
-    } else: linux-*:!contains(DEFINES, USE_QTMULTIMEDIA=1) {
+
+    } else: linux-* {
         !contains(QT_CONFIG, no-pkg-config):system(pkg-config --exists glib-2.0 gio-2.0 \'gstreamer-0.10 >= 0.10.30\' \'gstreamer-plugins-base-0.10 >= 0.10.30\'): {
-            DEFINES += ENABLE_VIDEO=1
-            DEFINES += WTF_USE_GSTREAMER=1
+            WEBKIT_CONFIG += video use_gstreamer
         } else {
-            root_project_file: message("Missing GLib/Gio/GStreamer, disabling media element support")
+            CONFIGURE_WARNINGS += "Missing GLib/Gio/GStreamer, disabling media element support"
         }
     } else: contains(MOBILITY_CONFIG, multimedia) {
-        DEFINES += ENABLE_VIDEO=1
-        DEFINES += WTF_USE_QT_MULTIMEDIA=1
+        WEBKIT_CONFIG += video use_qt_multimedia
     }
-}
 
-!contains(DEFINES, ENABLE_FULLSCREEN_API=.) {
-    !no_webkit2: DEFINES += ENABLE_FULLSCREEN_API=1
-}
+    # Gamepad API Support
+    packagesExist(libudev): WEBKIT_CONFIG += gamepad
 
-# Gamepad API Support
-linux-*:!contains(DEFINES, ENABLE_GAMEPAD=.) {
-    packagesExist(libudev): DEFINES += ENABLE_GAMEPAD=1
-}
-
-# Xcomposite Support
-linux-*:config_libXcomposite: DEFINES += HAVE_XCOMPOSITE=1
+    # Support for Graphics Surface
+    mac: WEBKIT_CONFIG += use_graphics_surface
+    linux-*:contains(WEBKIT_CONFIG, have_glx):contains(WEBKIT_CONFIG, have_xcomposite):contains(WEBKIT_CONFIG, have_xrender): WEBKIT_CONFIG += use_graphics_surface
 
-# Xrender Support
-haveQt(5):linux-*:config_libXrender: DEFINES += HAVE_XRENDER=1
+    # Slider Touch is sensible to use when compiling WebKit2
+    enable?(touch_events): WEBKIT_CONFIG += touch_slider
 
-# GLX Support
-haveQt(5):linux-*:config_glx:!contains(QT_CONFIG, opengles2): DEFINES += HAVE_GLX=1
+    # ---------------- Sanitize features -------------------
 
-# Support for Graphics Surface
-!contains(DEFINES, WTF_USE_GRAPHICS_SURFACE=.) {
-    mac: DEFINES += WTF_USE_GRAPHICS_SURFACE=1
-    # On linux we require GLX, libXcomposite and libXrender to enable graphics surface.
-    linux-*:contains(DEFINES, HAVE_GLX=1):contains(DEFINES, HAVE_XCOMPOSITE=1):contains(DEFINES, HAVE_XRENDER=1): DEFINES += WTF_USE_GRAPHICS_SURFACE=1
+    export(WEBKIT_CONFIG)
+    export(CONFIGURE_WARNINGS)
 }
 
-# -------------- Fill in static defaults --------------
-#
-# Only applies to features that don't have a dynamic default
-# or have been overriden on the command line.
+defineTest(santizeFeatures) {
+    # Disable SVG fonts if SVG is disabled
+    !enable?(svg): WEBKIT_CONFIG -= svg_fonts
 
-include(features.pri)
+    # JavaScript debugger requires the inspector
+    !enable?(inspector): WEBKIT_CONFIG -= javascript_debugger inspector_server
 
-for(feature, FEATURE_DEFAULTS) {
-    anyFeatureDefine = $$replace(feature, =.$, =.)
-    !contains(DEFINES, $$anyFeatureDefine) {
-        DEFINES += $$feature
-    }
-}
-
-# ---------------- Sanitize defines -------------------
-
-# Disable SVG fonts if SVG is disabled
-contains(DEFINES, ENABLE_SVG=0): DEFINES += ENABLE_SVG_FONTS=0
-
-# JavaScript debugger requires the inspector
-contains(DEFINES, ENABLE_INSPECTOR=0) {
-    DEFINES += ENABLE_JAVASCRIPT_DEBUGGER=0
-    DEFINES += ENABLE_INSPECTOR_SERVER=0
-}
-
-# Disable animated smooth scrolling if request-animation-frame is disabled
-contains(DEFINES, ENABLE_REQUEST_ANIMATION_FRAME=0): DEFINES += ENABLE_SMOOTH_SCROLLING=0
+    # Disable animated smooth scrolling if request-animation-frame is disabled
+    !enable?(request_animation_frame): WEBKIT_CONFIG -= smooth_scrolling
 
-# Remove conflicting defines. The preprocessor would take care of this
-# anyways, but doing it here makes for nicer command lines when building.
-for(define, DEFINES) {
-    parts = $$split(define, =)
-    value = $$member(parts, 1, 1)
-    isEmpty(value): next()
-
-    equals(value, 1): opposite = $$replace(define, =1$, =0)
-    equals(value, 0): opposite = $$replace(define, =0$, =1)
-
-    # Is there a later define that overrides this one?
-    contains(DEFINES, $$opposite): DEFINES -= $$define
-}
-
-contains(DEFINES, ENABLE_GAMEPAD=1) {
-    !packagesExist(libudev) {
-        error("Gamepad API requires libudev to build. Please install libudev development files, or build WebKit without gamepad.")
-    } else:!linux-* {
-        error("Currently the Gamepad API is supported only on Linux, build WebKit without gamepad.")
-    }
-}
+    # Fullscreen API relies on WebKit2
+    !build?(webkit2): WEBKIT_CONFIG -= fullscreen_api
 
-# Slider Touch is sensible to use when compiling WebKit2
-haveQt(5):contains(DEFINES, ENABLE_TOUCH_EVENTS=1) {
-    DEFINES += ENABLE_TOUCH_SLIDER=1
+    export(WEBKIT_CONFIG)
 }
index 1748ee1..9526bf6 100644 (file)
@@ -45,7 +45,7 @@ FEATURE_DEFAULTS = \
     ENABLE_FILE_SYSTEM=0 \
     ENABLE_FILTERS=1 \
     ENABLE_FTPDIR=1 \
-    ENABLE_FULLSCREEN_API=0 \
+    ENABLE_FULLSCREEN_API=1 \
     ENABLE_GAMEPAD=0 \
     ENABLE_GEOLOCATION=0 \
     ENABLE_GESTURE_EVENTS=1 \
@@ -66,6 +66,7 @@ FEATURE_DEFAULTS = \
     ENABLE_JAVASCRIPT_DEBUGGER=1 \
     ENABLE_LEGACY_CSS_VENDOR_PREFIXES=0 \
     ENABLE_LEGACY_NOTIFICATIONS=1 \
+    ENABLE_LEGACY_VIEWPORT_ADAPTION=1 \
     ENABLE_LEGACY_WEBKIT_BLOB_BUILDER=1 \
     ENABLE_LINK_PREFETCH=0 \
     ENABLE_LINK_PRERENDER=0 \
index 44996e5..4bf5402 100644 (file)
@@ -295,3 +295,84 @@ defineTest(xlibAvailable) {
         return(false)
     }
 }
+
+defineTest(build?) {
+    contains(WEBKIT_CONFIG, build_$$lower($$1)): return(true)
+    return(false)
+}
+
+defineTest(have?) {
+    contains(WEBKIT_CONFIG, have_$$lower($$1)): return(true)
+    return(false)
+}
+
+defineTest(use?) {
+    contains(WEBKIT_CONFIG, use_$$lower($$1)): return(true)
+    return(false)
+}
+
+defineTest(enable?) {
+    contains(WEBKIT_CONFIG, $$lower($$1)): return(true)
+    return(false)
+}
+
+# Used by configDefines below
+include(features.pri)
+
+# Turn Webkit config into defines
+defineReplace(configDefines) {
+    unset(defines)
+
+    args = $$split(1, |)
+
+    possible_args = enable have use plugin_architecture
+    !isEmpty(args) {
+        for(arg, possible_args): contains(args, $$arg): CONFIG += $$arg
+    } else {
+        CONFIG += $$possible_args
+    }
+
+    for(config, WEBKIT_CONFIG) {
+        match = $$find(config, "^build_")
+        !isEmpty(match) {
+            # We don't translate build_ to defines
+            next()
+        }
+        match = $$find(config, "^have_")
+        !isEmpty(match) {
+            have: defines += $$upper($$config)=1
+            next()
+        }
+        match = $$find(config, "^plugin_architecture_")
+        !isEmpty(match) {
+            plugin_architecture: defines += $$upper($$config)=1
+            next()
+        }
+        match = $$find(config, "^use_")
+        !isEmpty(match) {
+            use: defines += WTF_$$upper($$config)=1
+            next()
+        }
+
+        enable: defines += ENABLE_$$upper($$config)=1
+    }
+
+    # To prevent clashes with Platform.h, we have to explicitly
+    # disable features that are not enabled.
+    for(define, FEATURE_DEFAULTS) {
+        disabledFeature = $$find(define, =0$)
+        isEmpty(disabledFeature): next()
+
+        enabledFeature = $$replace(disabledFeature, =0$, =1)
+        !contains(defines, $$enabledFeature) {
+            defines += $$disabledFeature
+        }
+    }
+
+    return($$defines)
+}
+
+defineReplace(javascriptFeatureDefines) {
+    defines = LANGUAGE_JAVASCRIPT=1 $$configDefines(enable)
+    return($$defines)
+}
index 38a7755..51b78c3 100644 (file)
@@ -5,7 +5,7 @@
 # See 'Tools/qmake/README' for an overview of the build system
 # -------------------------------------------------------------------
 
-!contains(CONFIG,no_webkit2): error("WebKit2 is not supported with gprof")
+build?(webkit2): error("WebKit2 is not supported with gprof")
 
 QMAKE_CXXFLAGS += -pg
 QMAKE_LFLAGS += -pg
index b7f88ed..581b98c 100644 (file)
@@ -9,8 +9,5 @@ CONFIG += debug_and_release
 
 load(default_pre)
 
-debug {
-    root_project_file:message("Building WebKit Debug on mac. Switching to use_all_in_one_files configuration.")
-    CONFIG += use_all_in_one_files
-}
+debug: CONFIG += use_all_in_one_files
 
index fe8799a..b306c3b 100644 (file)
@@ -8,5 +8,3 @@ load(default_pre)
 
 debug: CONFIG += use_all_in_one_files
 
-# WebKit2 not supported on Windows yet
-CONFIG += no_webkit2
index a0a1e5f..0816e3c 100644 (file)
@@ -5,39 +5,6 @@
 # See 'Tools/qmake/README' for an overview of the build system
 # -------------------------------------------------------------------
 
-!webkit_configured {
-    CONFIG += production_build
-    include(Tools/qmake/configure.pri)
-    the_config = $$CONFIG
-    the_config -= $$BASE_CONFIG $$find(CONFIG, "^(done_)?config_")
-    cache(CONFIG, add, the_config)
-    the_defines = $$DEFINES
-    the_defines -= $$BASE_DEFINES
-    cache(DEFINES, add, the_defines)
-
-    # We inherit the build type from Qt, unless it was specified on the qmake command
-    # line. Note that the perl build script defaults to forcing a release build.
-    contains(the_config, debug|release) {
-        contains(the_config, debug) {
-            contains(the_config, release) {
-                !debug_and_release:cache(CONFIG, add, $$list(debug_and_release))
-            } else {
-                release:cache(CONFIG, del, $$list(release))
-                debug_and_release:cache(CONFIG, del, $$list(debug_and_release))
-            }
-        } else { # release
-            debug:cache(CONFIG, del, $$list(debug))
-            debug_and_release:cache(CONFIG, del, $$list(debug_and_release))
-        }
-    } else {
-        contains(QT_CONFIG, release, debug|release): \
-            cache(CONFIG, add, $$list(release))
-        else: \
-            cache(CONFIG, add, $$list(debug))
-        macx:!debug_and_release:cache(CONFIG, add, $$list(debug_and_release))
-    }
-}
-
 TEMPLATE = subdirs
 CONFIG += ordered
 
@@ -49,7 +16,7 @@ JavaScriptCore.file = Source/JavaScriptCore/JavaScriptCore.pro
 JavaScriptCore.makefile = Makefile.JavaScriptCore
 SUBDIRS += JavaScriptCore
 
-contains(DEFINES, WTF_USE_3D_GRAPHICS=1) {
+use?(3D_GRAPHICS) {
     ANGLE.file = Source/ThirdParty/ANGLE/ANGLE.pro
     ANGLE.makefile = Makefile.ANGLE
     SUBDIRS += ANGLE
@@ -59,13 +26,13 @@ WebCore.file = Source/WebCore/WebCore.pro
 WebCore.makefile = Makefile.WebCore
 SUBDIRS += WebCore
 
-!no_webkit1 {
+build?(webkit1) {
     webkit1.file = Source/WebKit/WebKit1.pro
     webkit1.makefile = Makefile.WebKit1
     SUBDIRS += webkit1
 }
 
-!no_webkit2 {
+build?(webkit2) {
     webkit2.file = Source/WebKit2/WebKit2.pro
     webkit2.makefile = Makefile.WebKit2
     SUBDIRS += webkit2