Loading android/defs.go +1 −1 Original line number Diff line number Diff line Loading @@ -145,7 +145,7 @@ var ( func buildWriteFileRule(ctx BuilderContext, outputFile WritablePath, content string) { content = echoEscaper.Replace(content) content = proptools.ShellEscape(content) content = proptools.NinjaEscape(proptools.ShellEscapeIncludingSpaces(content)) if content == "" { content = "''" } Loading android/rule_builder.go +7 −1 Original line number Diff line number Diff line Loading @@ -523,6 +523,12 @@ func (r *RuleBuilder) Build(name string, desc string) { }) } // Outputs that were marked Temporary will not be checked that they are in the output // directory by the loop above, check them here. for path := range r.temporariesSet { Rel(r.ctx, r.outDir.String(), path.String()) } // Add a hash of the list of input files to the manifest so that the textproto file // changes when the list of input files changes and causes the sbox rule that // depends on it to rerun. Loading @@ -537,7 +543,7 @@ func (r *RuleBuilder) Build(name string, desc string) { } // Create a rule to write the manifest as a the textproto. WriteFileRule(r.ctx, r.sboxManifestPath, proptools.NinjaEscape(proto.MarshalTextString(&manifest))) WriteFileRule(r.ctx, r.sboxManifestPath, proto.MarshalTextString(&manifest)) // Generate a new string to use as the command line of the sbox rule. This uses // a RuleBuilderCommand as a convenience method of building the command line, then Loading cmd/sbox/sbox.go +30 −2 Original line number Diff line number Diff line Loading @@ -229,13 +229,18 @@ func runCommand(command *sbox_proto.Command, tempDir string) (depFile string, er return "", err } pathToTempDirInSbox := tempDir if command.GetChdir() { pathToTempDirInSbox = "." } if strings.Contains(rawCommand, depFilePlaceholder) { depFile = filepath.Join(tempDir, "deps.d") depFile = filepath.Join(pathToTempDirInSbox, "deps.d") rawCommand = strings.Replace(rawCommand, depFilePlaceholder, depFile, -1) } if strings.Contains(rawCommand, sandboxDirPlaceholder) { rawCommand = strings.Replace(rawCommand, sandboxDirPlaceholder, tempDir, -1) rawCommand = strings.Replace(rawCommand, sandboxDirPlaceholder, pathToTempDirInSbox, -1) } // Emulate ninja's behavior of creating the directories for any output files before Loading @@ -254,6 +259,15 @@ func runCommand(command *sbox_proto.Command, tempDir string) (depFile string, er if command.GetChdir() { cmd.Dir = tempDir path := os.Getenv("PATH") absPath, err := makeAbsPathEnv(path) if err != nil { return "", err } err = os.Setenv("PATH", absPath) if err != nil { return "", fmt.Errorf("Failed to update PATH: %w", err) } } err = cmd.Run() Loading Loading @@ -466,3 +480,17 @@ func joinPath(dir, file string) string { } return filepath.Join(dir, file) } func makeAbsPathEnv(pathEnv string) (string, error) { pathEnvElements := filepath.SplitList(pathEnv) for i, p := range pathEnvElements { if !filepath.IsAbs(p) { absPath, err := filepath.Abs(p) if err != nil { return "", fmt.Errorf("failed to make PATH entry %q absolute: %w", p, err) } pathEnvElements[i] = absPath } } return strings.Join(pathEnvElements, string(filepath.ListSeparator)), nil } Loading
android/defs.go +1 −1 Original line number Diff line number Diff line Loading @@ -145,7 +145,7 @@ var ( func buildWriteFileRule(ctx BuilderContext, outputFile WritablePath, content string) { content = echoEscaper.Replace(content) content = proptools.ShellEscape(content) content = proptools.NinjaEscape(proptools.ShellEscapeIncludingSpaces(content)) if content == "" { content = "''" } Loading
android/rule_builder.go +7 −1 Original line number Diff line number Diff line Loading @@ -523,6 +523,12 @@ func (r *RuleBuilder) Build(name string, desc string) { }) } // Outputs that were marked Temporary will not be checked that they are in the output // directory by the loop above, check them here. for path := range r.temporariesSet { Rel(r.ctx, r.outDir.String(), path.String()) } // Add a hash of the list of input files to the manifest so that the textproto file // changes when the list of input files changes and causes the sbox rule that // depends on it to rerun. Loading @@ -537,7 +543,7 @@ func (r *RuleBuilder) Build(name string, desc string) { } // Create a rule to write the manifest as a the textproto. WriteFileRule(r.ctx, r.sboxManifestPath, proptools.NinjaEscape(proto.MarshalTextString(&manifest))) WriteFileRule(r.ctx, r.sboxManifestPath, proto.MarshalTextString(&manifest)) // Generate a new string to use as the command line of the sbox rule. This uses // a RuleBuilderCommand as a convenience method of building the command line, then Loading
cmd/sbox/sbox.go +30 −2 Original line number Diff line number Diff line Loading @@ -229,13 +229,18 @@ func runCommand(command *sbox_proto.Command, tempDir string) (depFile string, er return "", err } pathToTempDirInSbox := tempDir if command.GetChdir() { pathToTempDirInSbox = "." } if strings.Contains(rawCommand, depFilePlaceholder) { depFile = filepath.Join(tempDir, "deps.d") depFile = filepath.Join(pathToTempDirInSbox, "deps.d") rawCommand = strings.Replace(rawCommand, depFilePlaceholder, depFile, -1) } if strings.Contains(rawCommand, sandboxDirPlaceholder) { rawCommand = strings.Replace(rawCommand, sandboxDirPlaceholder, tempDir, -1) rawCommand = strings.Replace(rawCommand, sandboxDirPlaceholder, pathToTempDirInSbox, -1) } // Emulate ninja's behavior of creating the directories for any output files before Loading @@ -254,6 +259,15 @@ func runCommand(command *sbox_proto.Command, tempDir string) (depFile string, er if command.GetChdir() { cmd.Dir = tempDir path := os.Getenv("PATH") absPath, err := makeAbsPathEnv(path) if err != nil { return "", err } err = os.Setenv("PATH", absPath) if err != nil { return "", fmt.Errorf("Failed to update PATH: %w", err) } } err = cmd.Run() Loading Loading @@ -466,3 +480,17 @@ func joinPath(dir, file string) string { } return filepath.Join(dir, file) } func makeAbsPathEnv(pathEnv string) (string, error) { pathEnvElements := filepath.SplitList(pathEnv) for i, p := range pathEnvElements { if !filepath.IsAbs(p) { absPath, err := filepath.Abs(p) if err != nil { return "", fmt.Errorf("failed to make PATH entry %q absolute: %w", p, err) } pathEnvElements[i] = absPath } } return strings.Join(pathEnvElements, string(filepath.ListSeparator)), nil }