Touch soong_build output at the end of main

This fixes an incrementality bug that resulted in superfluous
build.ninja regeneration after a new glob definition is added.

Fixes: 279674820
Test: Treehugger
Test; New integration test in this CL

Change-Id: Ifefe66a0eb1c125e9ad5373d60437a1cb1e6fdec
This commit is contained in:
Chris Parsons
2023-05-10 21:10:08 +00:00
parent 923a40777b
commit a3ae007641
2 changed files with 41 additions and 7 deletions

View File

@@ -540,10 +540,16 @@ func main() {
}
writeMetrics(configuration, ctx.EventHandler, metricsDir)
}
writeUsedEnvironmentFile(configuration, finalOutputFile)
writeUsedEnvironmentFile(configuration)
// Touch the output file so that it's the newest file created by soong_build.
// This is necessary because, if soong_build generated any files which
// are ninja inputs to the main output file, then ninja would superfluously
// rebuild this output file on the next build invocation.
touch(shared.JoinPath(topDir, finalOutputFile))
}
func writeUsedEnvironmentFile(configuration android.Config, finalOutputFile string) {
func writeUsedEnvironmentFile(configuration android.Config) {
if usedEnvFile == "" {
return
}
@@ -562,11 +568,6 @@ func writeUsedEnvironmentFile(configuration android.Config, finalOutputFile stri
}
err = os.WriteFile(path, data, 0666)
maybeQuit(err, "error writing used environment file '%s'", usedEnvFile)
// Touch the output file so that it's not older than the file we just
// wrote. We can't write the environment file earlier because one an access
// new environment variables while writing it.
touch(shared.JoinPath(topDir, finalOutputFile))
}
func touch(path string) {