diff --git a/build/build.pro b/build/build.pro
index f3da119a7c78830485a34edb9a2ff0ec4a52274f..4fcd5c5464c72be5a34d00e976934fb33c967598 100644
--- a/build/build.pro
+++ b/build/build.pro
@@ -5,11 +5,10 @@
 TEMPLATE = aux
 
 message(Running Gyp...)
-GYP_OUTPUT = $$system(python ./gyp_qtwebengine)
-message($$GYP_OUTPUT)
+!system(python ./gyp_qtwebengine): error("-- running gyp_qtwebengine failed --")
 
 ninja.target = invoke_ninja
-ninja.commands = $$findNinja() $$(NINJAFLAGS) -C $$getOutDir()/$$getConfigDir()
+ninja.commands = $$findOrBuildNinja() $$(NINJAFLAGS) -C $$getOutDir()/$$getConfigDir()
 ninja.depends: qmake
 QMAKE_EXTRA_TARGETS += ninja
 
diff --git a/build/qmake/mkspecs/features/functions.prf b/build/qmake/mkspecs/features/functions.prf
index 17e54cfe1aeb5f4ee64b6b5dbed92fbc3de19465..9a98852b97ee957c1e021a0cca9ace1a11c7dc8f 100644
--- a/build/qmake/mkspecs/features/functions.prf
+++ b/build/qmake/mkspecs/features/functions.prf
@@ -71,7 +71,7 @@ defineReplace(which) {
   return($$out)
 }
 
-defineReplace(findNinja) {
+defineReplace(findOrBuildNinja) {
   !isEmpty(CACHED_NINJA_EXECUTABLE):exists($$CACHED_NINJA_EXECUTABLE): return($$CACHED_NINJA_EXECUTABLE)
   out = $$which(ninja)
   # Try to be smart about it if we know where the chromium sources are located
diff --git a/qtwebengine.pro b/qtwebengine.pro
index 5a54df17ee9201450eb80c7cc277a899cca1562b..5db155c26e16a05bcdeed752ecbcd0708244345f 100644
--- a/qtwebengine.pro
+++ b/qtwebengine.pro
@@ -22,7 +22,7 @@ qtHaveModule(widgets) {
 SUBDIRS += examples
 
 # Ninja executable location needs to be determined early for extra targets. Should be fetched from cache most of the time anyway.
-NINJA_EXECUTABLE = $$findNinja()
+NINJA_EXECUTABLE = $$findOrBuildNinja()
 
 # Extra targets that invoke ninja on the desired configuration added for convenience
 release.target = release