diff --git a/configure.json b/configure.json index 62b56bbb1ab5a63087a6271c3960a5453fcaf900..605807a365b40ccdd339d24dec35e92a1a38dd7a 100644 --- a/configure.json +++ b/configure.json @@ -58,6 +58,11 @@ }, "tests" : { + "python2": { + "label": "Python 2", + "type": "detectPython2", + "log": "location" + }, "ninja": { "label": "system ninja", "type": "detectNinja" @@ -73,6 +78,13 @@ }, "features": { + "python2": { + "label": "Python 2", + "condition": "tests.python2", + "output": [ + { "type": "varAssign", "name": "QMAKE_PYTHON2", "value": "tests.python2.location" } + ] + }, "embedded": { "label": "Embedded build", "condition": "config.unix", @@ -157,6 +169,14 @@ } }, + "report": [ + { + "type": "warning", + "condition": "!features.python2", + "message": "Python version 2 (2.7.5 or later) is required to build QtWebEngine." + } + ], + "summary": [ { "section": "Qt WebEngine", diff --git a/configure.pri b/configure.pri index 23f31686e8e88f61a2bf55acc4ac40707f5cf873..ce36642bbbf939c73e9e37e3a7e33079eb1431b6 100644 --- a/configure.pri +++ b/configure.pri @@ -1,5 +1,46 @@ equals(QMAKE_HOST.os, Windows): EXE_SUFFIX = .exe +defineTest(isPythonVersionSupported) { + python = $$system_quote($$system_path($$1)) + python_version = $$system('$$python -c "import sys; print(sys.version_info[0:3])"') + python_version ~= s/[()]//g + python_version = $$split(python_version, ',') + python_major_version = $$first(python_version) + greaterThan(python_major_version, 2) { + qtLog("Python version 3 is not supported by Chromium.") + return(false) + } + python_minor_version = $$member(python_version, 1) + python_patch_version = $$member(python_version, 2) + greaterThan(python_major_version, 1): greaterThan(python_minor_version, 6): greaterThan(python_patch_version, 4): return(true) + qtLog("Unsupported python version: $${python_major_version}.$${python_minor_version}.$${python_patch_version}.") + return(false) +} + +defineTest(qtConfTest_detectPython2) { + python = $$qtConfFindInPath("python2") + isEmpty(python) { + qtLog("'python2' not found in PATH. Checking for 'python'.") + python = $$qtConfFindInPath("python$$EXE_SUFFIX") + } + isEmpty(python) { + qtLog("'python$$EXE_SUFFIX' not found in PATH. Giving up.") + return(false) + } + !isPythonVersionSupported($$python) { + qtLog("A suitable Python 2 executable could not be located.") + return(false) + } + + # Make tests.python2.location available in configure.json. + $${1}.location = $$clean_path($$python) + export($${1}.location) + $${1}.cache += location + export($${1}.cache) + + return(true) +} + defineTest(qtConfTest_detectNinja) { ninja = $$qtConfFindInPath("ninja$$EXE_SUFFIX") !isEmpty(ninja) { diff --git a/src/buildtools/gn.pro b/src/buildtools/gn.pro index 092888e0e59f59d5e0a6479ab484848b431ce9ea..f8f8b20da3a3497fcac287e4702de01efdf797f2 100644 --- a/src/buildtools/gn.pro +++ b/src/buildtools/gn.pro @@ -14,7 +14,7 @@ defineReplace(buildGn) { gn_bootstrap = $$system_path($$absolute_path(chromium/tools/gn/bootstrap/bootstrap.py, $$src_3rd_party_dir)) gn_args = $$system_quote($$gn_args) gn_configure = $$system_quote($$gn_bootstrap) --shadow --gn-gen-args=$$gn_args $$ninja_path - !system("cd $$system_quote($$system_path($$dirname(out))) && python $$gn_configure") { + !system("cd $$system_quote($$system_path($$dirname(out))) && $$pythonPathForSystem() $$gn_configure") { error("GN build error!") } } diff --git a/src/buildtools/ninja.pro b/src/buildtools/ninja.pro index c391d6e84f3c7697a2dbcf2da4bc7dbf21a8b805..0a01f1f4e81de0001d573a5b936b5216cd7c3f7a 100644 --- a/src/buildtools/ninja.pro +++ b/src/buildtools/ninja.pro @@ -8,7 +8,7 @@ defineReplace(buildNinja) { mkpath($$dirname(out)) src_3rd_party_dir = $$absolute_path("$${getChromiumSrcDir()}/../", "$$QTWEBENGINE_ROOT") ninja_configure = $$system_quote($$system_path($$absolute_path(ninja/configure.py, $$src_3rd_party_dir))) - !system("cd $$system_quote($$system_path($$dirname(out))) && python $$ninja_configure --bootstrap") { + !system("cd $$system_quote($$system_path($$dirname(out))) && $$pythonPathForSystem() $$ninja_configure --bootstrap") { error("NINJA build error!") } } diff --git a/src/core/gn_run.pro b/src/core/gn_run.pro index 07635d04c6d0c0749511c45a3d3054e7fab0fce9..b6966a51d04a2cb5efa3702808a4c00717ea9b0e 100644 --- a/src/core/gn_run.pro +++ b/src/core/gn_run.pro @@ -51,7 +51,8 @@ build_pass|!debug_and_release { gn_args = $$shell_quote($$gn_args) gn_src_root = $$shell_quote($$shell_path($$QTWEBENGINE_ROOT/$$getChromiumSrcDir())) gn_build_root = $$shell_quote($$shell_path($$OUT_PWD/$$getConfigDir())) - $$runGn($$gn_binary gen $$gn_build_root --args=$$gn_args --root=$$gn_src_root) + gn_python = "--script-executable=$$pythonPathForSystem()" + $$runGn($$gn_binary gen $$gn_build_root $$gn_python --args=$$gn_args --root=$$gn_src_root) runninja.commands = $$NINJA \$\(NINJAFLAGS\) -C $$gn_build_root QtWebEngineCore QMAKE_EXTRA_TARGETS += runninja diff --git a/src/webengine/webengine.pro b/src/webengine/webengine.pro index 27239225b6af709e713e403c6cc5e200e5e057bc..5ac93c9a7ee4e491c2d90922ad933954926b6172 100644 --- a/src/webengine/webengine.pro +++ b/src/webengine/webengine.pro @@ -71,9 +71,10 @@ use?(pdf) { } !build_pass { + python = $$pythonPathForShell() chromium_attributions.commands = \ cd $$shell_quote($$shell_path($$PWD/../3rdparty)) && \ - python chromium/tools/licenses.py \ + $$python chromium/tools/licenses.py \ --file-template ../../tools/about_credits.tmpl \ --entry-template ../../tools/about_credits_entry.tmpl credits \ > $$shell_quote($$shell_path($$OUT_PWD/chromium_attributions.qdoc)) diff --git a/tools/qmake/mkspecs/features/functions.prf b/tools/qmake/mkspecs/features/functions.prf index ed113303783c386ce558b85b6f7988233be38993..eb421f8b5f92b426cc4b5f0caac9e999c2b8a6e9 100644 --- a/tools/qmake/mkspecs/features/functions.prf +++ b/tools/qmake/mkspecs/features/functions.prf @@ -86,7 +86,6 @@ defineTest(isPlatformSupported) { skipBuild("Static builds of QtWebEngine aren't supported.") return(false) } - !isPythonVersionSupported(): return(false) !isArchSupported(): return(false) isSanitizerEnabled():!isSanitizerSupported():!forceSanitizerBuild(): return(false) return(true) @@ -101,25 +100,6 @@ defineTest(isArchSupported) { return(false) } -defineTest(isPythonVersionSupported) { - python_error_msg = "Python version 2 (2.7.5 or later) is required to build Qt WebEngine." - python_version = $$system('python -c "import sys; print(sys.version_info[0:3])"') - python_version ~= s/[()]//g - python_version = $$split(python_version, ',') - python_major_version = $$first(python_version) - greaterThan(python_major_version, 2) { - skipBuild("Python version 3 is not supported by Chromium.") - skipBuild($$python_error_msg) - return(false) - } - python_minor_version = $$member(python_version, 1) - python_patch_version = $$member(python_version, 2) - greaterThan(python_major_version, 1): greaterThan(python_minor_version, 6): greaterThan(python_patch_version, 4): return(true) - skipBuild("Using Python version $${python_major_version}.$${python_minor_version}.$${python_patch_version}.") - skipBuild($$python_error_msg) - return(false) -} - defineTest(isSanitizerEnabled) { sanitize_address|sanitize_memory|sanitize_undefined|sanitize_thread: return(true) return(false) @@ -358,6 +338,25 @@ defineTest(use?) { return(false) } +# Returns the unquoted path to the python executable. +defineReplace(pythonPath) { + isEmpty(QMAKE_PYTHON2) { + # Fallback for building QtWebEngine with Qt < 5.8 + QMAKE_PYTHON2 = python + } + return($$QMAKE_PYTHON2) +} + +# Returns the python executable for use with shell / make targets. +defineReplace(pythonPathForShell) { + return($$shell_quote($$shell_path($$pythonPath()))) +} + +# Returns the python executable for use with $$system() +defineReplace(pythonPathForSystem) { + return($$system_quote($$system_path($$pythonPath()))) +} + defineReplace(ninjaPath) { src_3rd_party_dir = $$absolute_path("$${getChromiumSrcDir()}/../", "$$QTWEBENGINE_ROOT") out = $$shadowed($$absolute_path(ninja/ninja, $$src_3rd_party_dir))