Report which files are in the dependency graph for dist builds.
Bug: 383124666
Test: m dist and verify
Change-Id: Icc95327e8288bf1fbed86cd3d894f72229967155
diff --git a/ui/build/ninja.go b/ui/build/ninja.go
index f5f637f..ced1e20 100644
--- a/ui/build/ninja.go
+++ b/ui/build/ninja.go
@@ -17,6 +17,7 @@
import (
"fmt"
"os"
+ "os/exec"
"path/filepath"
"sort"
"strconv"
@@ -339,3 +340,40 @@
}
c.prevModTime = newModTime
}
+
+// Constructs and runs the Ninja command line to get the inputs of a goal.
+// For now, this will always run ninja, because ninjago, n2 and siso don't have the
+// `-t inputs` command. This command will use the inputs command's -d option,
+// to use the dep file iff ninja was the executor. For other executors, the
+// results will be wrong.
+func runNinjaInputs(ctx Context, config Config, goal string) ([]string, error) {
+ executable := config.PrebuiltBuildTool("ninja")
+
+ args := []string{
+ "-f",
+ config.CombinedNinjaFile(),
+ "-t",
+ "inputs",
+ }
+ // Add deps file arg for ninja
+ // TODO: Update as inputs command is implemented
+ if config.ninjaCommand == NINJA_NINJA && !config.UseABFS() {
+ args = append(args, "-d")
+ }
+ args = append(args, goal)
+
+ // This is just ninja -t inputs, so we won't bother running it in the sandbox,
+ // so use exec.Command, not soong_ui's command.
+ cmd := exec.Command(executable, args...)
+
+ cmd.Stdin = os.Stdin
+ cmd.Stderr = os.Stderr
+
+ out, err := cmd.Output()
+ if err != nil {
+ fmt.Printf("Error getting goal inputs for %s: %s\n", goal, err)
+ return nil, err
+ }
+
+ return strings.Split(strings.TrimSpace(string(out)), "\n"), nil
+}