summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPierre Rossi <pierre.rossi@theqtcompany.com>2015-01-09 11:05:04 +0100
committerMichael BrĂ¼ning <michael.bruning@theqtcompany.com>2015-01-16 14:39:21 +0100
commit1364ba04b2df4e91d8f648fb02e0c19dcac1ab30 (patch)
tree197488e4956acec62419499b6f883d1ca33bb0f0
parenta6ac2fdd2366f00610cd5e26c88d65f97e93e15c (diff)
Refactor our build skipping logic
Move the logic to mkspecs to keep the .pro files robust. Add the basic infrastructure for config.tests, the first one of which will consistently ensure we have libcap on linux. Change-Id: Iee4207e747e589ba67d5353cb4c18f156e555c11 Reviewed-by: Andras Becsi <andras.becsi@theqtcompany.com>
-rw-r--r--src/src.pro42
-rw-r--r--tools/qmake/config.tests/libcap/libcap.cpp44
-rw-r--r--tools/qmake/config.tests/libcap/libcap.pro3
-rw-r--r--tools/qmake/mkspecs/features/configure.prf23
-rw-r--r--tools/qmake/mkspecs/features/default_post.prf8
-rw-r--r--tools/qmake/mkspecs/features/default_pre.prf7
-rw-r--r--tools/qmake/mkspecs/features/functions.prf20
7 files changed, 118 insertions, 29 deletions
diff --git a/src/src.pro b/src/src.pro
index 60f873c76..ed402c582 100644
--- a/src/src.pro
+++ b/src/src.pro
@@ -1,30 +1,26 @@
TEMPLATE = subdirs
-isPlatformSupported() {
- process.depends = core
- webengine.depends = core
- webenginewidgets.depends = core webengine
- webengine_plugin.subdir = webengine/plugin
- webengine_plugin.target = sub-webengine-plugin
- webengine_plugin.depends = webengine
- webengine_experimental_plugin.subdir = webengine/plugin/experimental
- webengine_experimental_plugin.target = sub-webengine-experimental-plugin
- webengine_experimental_plugin.depends = webengine
+process.depends = core
+webengine.depends = core
+webenginewidgets.depends = core webengine
+webengine_plugin.subdir = webengine/plugin
+webengine_plugin.target = sub-webengine-plugin
+webengine_plugin.depends = webengine
+webengine_experimental_plugin.subdir = webengine/plugin/experimental
+webengine_experimental_plugin.target = sub-webengine-experimental-plugin
+webengine_experimental_plugin.depends = webengine
- SUBDIRS += core \
- process \
- webengine \
- webengine_plugin \
- webengine_experimental_plugin
+SUBDIRS += core \
+ process \
+ webengine \
+ webengine_plugin \
+ webengine_experimental_plugin
- # FIXME: We probably want a bit more control over config options to tweak what to build/ship or not.
- # Another example of where this could be necessary is to make it easy to build proprietery codecs support.
- !contains(WEBENGINE_CONFIG, no_ui_delegates): SUBDIRS += webengine/ui
+# FIXME: We probably want a bit more control over config options to tweak what to build/ship or not.
+# Another example of where this could be necessary is to make it easy to build proprietery codecs support.
+!contains(WEBENGINE_CONFIG, no_ui_delegates): SUBDIRS += webengine/ui
- qtHaveModule(widgets) {
- SUBDIRS += webenginewidgets
- }
-} else {
- warning("QtWebEngine is not maintained for this platform/configuration and is therefore disabled.")
+qtHaveModule(widgets) {
+ SUBDIRS += webenginewidgets
}
diff --git a/tools/qmake/config.tests/libcap/libcap.cpp b/tools/qmake/config.tests/libcap/libcap.cpp
new file mode 100644
index 000000000..c0bba3eae
--- /dev/null
+++ b/tools/qmake/config.tests/libcap/libcap.cpp
@@ -0,0 +1,44 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the QtWebEngine module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPLv3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <sys/capability.h>
+
+int main(int, char **)
+{
+ cap_t cap = cap_get_proc();
+ const char *text = cap_to_text(cap, 0);
+ return 0;
+}
diff --git a/tools/qmake/config.tests/libcap/libcap.pro b/tools/qmake/config.tests/libcap/libcap.pro
new file mode 100644
index 000000000..2c688f809
--- /dev/null
+++ b/tools/qmake/config.tests/libcap/libcap.pro
@@ -0,0 +1,3 @@
+linux: SOURCES += libcap.cpp
+LIBS += -lcap
+CONFIG -= qt
diff --git a/tools/qmake/mkspecs/features/configure.prf b/tools/qmake/mkspecs/features/configure.prf
new file mode 100644
index 000000000..d0cb50877
--- /dev/null
+++ b/tools/qmake/mkspecs/features/configure.prf
@@ -0,0 +1,23 @@
+# Load configure.prf from qtbase first
+load(configure)
+load(functions)
+
+defineTest(runConfigure) {
+ webengine_successfully_configured: return(true)
+ # Ignore the cached config tests results in case they were not successful
+ CONFIG += recheck
+ #Override the config.tests path
+ QMAKE_CONFIG_TESTS_DIR = $$QTWEBENGINE_ROOT/tools/qmake/config.tests
+ CONFIG_TESTS = $$files($$QMAKE_CONFIG_TESTS_DIR/*.pro, true)
+ log("Running configure tests$${EOL}")
+ for(test, CONFIG_TESTS) {
+ test = $$basename(test)
+ test ~= s/\\.pro$//
+ qtCompileTest($$test)
+ }
+ # libcap-dev package doesn't ship .pc files on Ubuntu.
+ linux:!config_libcap:skipBuild("libcap appears to be missing")
+
+ isEmpty(skipBuildReason):cache(CONFIG, add, $$list(webengine_successfully_configured))
+}
+
diff --git a/tools/qmake/mkspecs/features/default_post.prf b/tools/qmake/mkspecs/features/default_post.prf
new file mode 100644
index 000000000..d09ba05fd
--- /dev/null
+++ b/tools/qmake/mkspecs/features/default_post.prf
@@ -0,0 +1,8 @@
+load(default_post)
+
+!isEmpty(skipBuildReason) {
+ SUBDIRS =
+ export(SUBDIRS)
+ log($${skipBuildReason}$${EOL})
+ log(QtWebEngine will not be built.$${EOL})
+}
diff --git a/tools/qmake/mkspecs/features/default_pre.prf b/tools/qmake/mkspecs/features/default_pre.prf
index aeb7c0b3b..02f4f24d4 100644
--- a/tools/qmake/mkspecs/features/default_pre.prf
+++ b/tools/qmake/mkspecs/features/default_pre.prf
@@ -9,8 +9,15 @@ QTWEBENGINEPROCESS_NAME = QtWebEngineProcess
# Location of sync.profile
MODULE_BASE_DIR = $$QTWEBENGINE_ROOT
+EOL = $$escape_expand(\\n)
load(functions)
+# Check platform support and run config tests early enough to bail
+equals(_PRO_FILE_, "$$QTWEBENGINE_ROOT/qtwebengine.pro"): isPlatformSupported() {
+ load(configure)
+ runConfigure()
+}
+
# Call the original default_pre.
load(default_pre)
diff --git a/tools/qmake/mkspecs/features/functions.prf b/tools/qmake/mkspecs/features/functions.prf
index acf15a811..4c2547d57 100644
--- a/tools/qmake/mkspecs/features/functions.prf
+++ b/tools/qmake/mkspecs/features/functions.prf
@@ -1,16 +1,19 @@
defineTest(isPlatformSupported) {
- static: return(false)
+ static {
+ skipBuild("Static builds of QtWebEngine aren't supported.")
+ return(false)
+ }
osx:lessThan(QMAKE_XCODE_VERSION, 5.1) {
- warning("Using xcode version $$QMAKE_XCODE_VERSION, but at least version 5.1 is required to build Qt WebEngine.")
+ skipBuild("Using xcode version $$QMAKE_XCODE_VERSION, but at least version 5.1 is required to build Qt WebEngine.")
return(false)
}
- linux-g++*:!isGCCVersionSupported():return(false)
+ linux-g++*:!isGCCVersionSupported(): return(false)
!isPythonVersionSupported(): return(false)
linux-g++*|win32-msvc2013|macx-clang: return(true)
boot2qt: return(true)
- warning("Qt WebEngine can currently only be built for Linux (GCC), Windows (MSVC 2013), OS X (XCode 5.1+) or Qt for Device Creation".)
+ skipBuild("Qt WebEngine can currently only be built for Linux (GCC), Windows (MSVC 2013), OS X (XCode 5.1+) or Qt for Device Creation.")
return(false)
}
@@ -18,7 +21,7 @@ defineTest(isPythonVersionSupported) {
python_major_version = $$system('python -c "import sys; print sys.version_info.major"')
python_minor_version = $$system('python -c "import sys; print sys.version_info.minor"')
greaterThan(python_major_version, 1): greaterThan(python_minor_version, 6): return(true)
- warning("Using Python version "$$python_major_version"."$$python_minor_version", but at least Python version 2.7 is required to build Qt WebEngine.")
+ skipBuild("Using Python version "$$python_major_version"."$$python_minor_version", but at least Python version 2.7 is required to build Qt WebEngine.")
return(false)
}
@@ -26,7 +29,7 @@ defineTest(isGCCVersionSupported) {
# The below will work for gcc 4.6 and up and also match gcc 5
greaterThan(QT_GCC_MINOR_VERSION, 5):return(true)
greaterThan(QT_GCC_MAJOR_VERSION, 4):return(true)
- warning("Using gcc version "$$QT_GCC_MAJOR_VERSION"."$$QT_GCC_MINOR_VERSION", but at least gcc version 4.6 is required to build Qt WebEngine.")
+ skipBuild("Using gcc version "$$QT_GCC_MAJOR_VERSION"."$$QT_GCC_MINOR_VERSION", but at least gcc version 4.6 is required to build Qt WebEngine.")
return(false)
}
@@ -140,3 +143,8 @@ defineReplace(findOrBuildNinja) {
}
return($$out)
}
+
+defineTest(skipBuild) {
+ skipBuildReason = "$$skipBuildReason $${EOL}$$1"
+ export(skipBuildReason)
+}