From 9df14dff86fcc2daa0d9342174dba62ec32169bc Mon Sep 17 00:00:00 2001
From: Michal Klocek <michal.klocek@qt.io>
Date: Wed, 26 Apr 2017 15:39:33 +0200
Subject: [PATCH] Clean "system" calls to build&run gn and ninja

There was a time when gn build was called during make step,
however this was not working with recursive qmake calls.
Clean up leftovers and fix path and warnings like
"Conditional must expand to exactly one word." during builds.

Change-Id: I8546520345a5f89ee829558fa0fd9183587848b3
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
---
 src/buildtools/gn.pro    | 46 +++++++++++++++++-----------------------
 src/buildtools/ninja.pro | 36 +++++++++++++------------------
 src/core/gn_run.pro      | 24 ++++++++++-----------
 3 files changed, 46 insertions(+), 60 deletions(-)

diff --git a/src/buildtools/gn.pro b/src/buildtools/gn.pro
index f8f8b20da..829e7a31a 100644
--- a/src/buildtools/gn.pro
+++ b/src/buildtools/gn.pro
@@ -1,36 +1,30 @@
 TEMPLATE = aux
-CONFIG += release
-
 option(host_build)
 
-defineReplace(buildGn) {
-    gn_args = $$1
-    out = $$gnPath()
-    !qtConfig(system-ninja): ninja_path = "--path $$ninjaPath()"
-    # check if it is not already build
-    !exists($$out) {
-        mkpath($$dirname(out))
-        src_3rd_party_dir = $$absolute_path("$${getChromiumSrcDir()}/../", "$$QTWEBENGINE_ROOT")
-        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))) && $$pythonPathForSystem() $$gn_configure") {
-            error("GN build error!")
-        }
-    }
-}
+!debug_and_release: CONFIG += release
 
 isQtMinimum(5, 8) {
     include($$QTWEBENGINE_OUT_ROOT/qtwebengine-config.pri)
     QT_FOR_CONFIG += webengine-private
 }
 
-!qtConfig(system-gn) {
-    buildgn.target = build_gn
-    buildgn.commands = $$buildGn($$gnArgs())
-    QMAKE_EXTRA_TARGETS += buildgn
-
-    default_target.target = first
-    default_target.depends = buildgn
-    QMAKE_EXTRA_TARGETS += default_target
+build_pass|!debug_and_release {
+    !qtConfig(system-gn): CONFIG(release, debug|release) {
+        buildgn.target = build_gn
+        gn_args = $$gnArgs()
+        out = $$gnPath()
+        !qtConfig(system-ninja): ninja_path = "--path $$ninjaPath()"
+        # check if it is not already build
+        !exists($$out) {
+            mkpath($$dirname(out))
+            src_3rd_party_dir = $$absolute_path("$${getChromiumSrcDir()}/../", "$$QTWEBENGINE_ROOT")
+            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))) && $$pythonPathForSystem() $$gn_configure") {
+                error("GN build error!")
+            }
+        }
+        QMAKE_DISTCLEAN += $$out
+    }
 }
diff --git a/src/buildtools/ninja.pro b/src/buildtools/ninja.pro
index 0a01f1f4e..1b17c6dfa 100644
--- a/src/buildtools/ninja.pro
+++ b/src/buildtools/ninja.pro
@@ -1,31 +1,25 @@
 TEMPLATE = aux
-CONFIG += release
 
-defineReplace(buildNinja) {
-   out = $$ninjaPath()
-   # check if it is not already build
-   !exists($$out) {
-       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))) && $$pythonPathForSystem() $$ninja_configure --bootstrap") {
-            error("NINJA build error!")
-       }
-   }
-}
+!debug_and_release: CONFIG += release
 
 isQtMinimum(5, 8) {
     include($$QTWEBENGINE_OUT_ROOT/qtwebengine-config.pri)
     QT_FOR_CONFIG += webengine-private
 }
 
-!qtConfig(system-ninja) {
-    buildninja.target = build_ninja
-    buildninja.commands = $$buildNinja()
-    QMAKE_EXTRA_TARGETS += buildninja
-
-    default_target.target = first
-    default_target.depends = buildninja
-    QMAKE_EXTRA_TARGETS += default_target
+build_pass|!debug_and_release {
+    !qtConfig(system-ninja): CONFIG(release, debug|release) {
+        out = $$ninjaPath()
+        # check if it is not already build
+        !exists($$out) {
+            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))) && $$pythonPathForSystem() $$ninja_configure --bootstrap") {
+                error("NINJA build error!")
+            }
+        }
+    QMAKE_DISTCLEAN += $$out
+    }
 }
 
diff --git a/src/core/gn_run.pro b/src/core/gn_run.pro
index b6966a51d..ee4e7892e 100644
--- a/src/core/gn_run.pro
+++ b/src/core/gn_run.pro
@@ -5,13 +5,6 @@ isQtMinimum(5, 8) {
 
 TEMPLATE = aux
 
-defineReplace(runGn) {
-    message("Running: $$1")
-    !system($$1) {
-        error("GN run error!")
-    }
-}
-
 qtConfig(debug_and_release): CONFIG += debug_and_release build_all
 
 qtConfig(system-ninja) {
@@ -42,17 +35,22 @@ build_pass|!debug_and_release {
         gn_args += is_debug=false
     }
 
-    gn_args += "qtwebengine_target=\"$$shell_path($$OUT_PWD/$$getConfigDir()):QtWebEngineCore\""
+    gn_args += "qtwebengine_target=\"$$system_path($$OUT_PWD/$$getConfigDir()):QtWebEngineCore\""
 
     !qtConfig(system-gn) {
-        gn_binary = $$shell_quote($$shell_path($$gnPath()))
+        gn_binary = $$system_quote($$system_path($$gnPath()))
     }
 
-    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()))
+    gn_args = $$system_quote($$gn_args)
+    gn_src_root = $$system_quote($$system_path($$QTWEBENGINE_ROOT/$$getChromiumSrcDir()))
+    gn_build_root = $$system_quote($$system_path($$OUT_PWD/$$getConfigDir()))
     gn_python = "--script-executable=$$pythonPathForSystem()"
-    $$runGn($$gn_binary gen $$gn_build_root $$gn_python --args=$$gn_args --root=$$gn_src_root)
+    gn_run = $$gn_binary gen $$gn_build_root $$gn_python --args=$$gn_args --root=$$gn_src_root
+
+    message("Running: $$gn_run ")
+    !system($$gn_run) {
+        error("GN run error!")
+    }
 
     runninja.commands = $$NINJA \$\(NINJAFLAGS\) -C $$gn_build_root QtWebEngineCore
     QMAKE_EXTRA_TARGETS += runninja
-- 
GitLab