| // Copyright 2017 Google Inc. All rights reserved. |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| |
| package build |
| |
| import ( |
| "os/exec" |
| ) |
| |
| type Sandbox string |
| |
| const ( |
| noSandbox = "" |
| globalSandbox = "build/soong/ui/build/sandbox/darwin/global.sb" |
| dumpvarsSandbox = globalSandbox |
| soongSandbox = globalSandbox |
| katiSandbox = globalSandbox |
| ninjaSandbox = noSandbox |
| ) |
| |
| var sandboxExecPath string |
| |
| func init() { |
| if p, err := exec.LookPath("sandbox-exec"); err == nil { |
| sandboxExecPath = p |
| } |
| } |
| |
| func (c *Cmd) sandboxSupported() bool { |
| if c.Sandbox == "" { |
| return false |
| } else if sandboxExecPath == "" { |
| c.ctx.Verboseln("sandbox-exec not found, disabling sandboxing") |
| return false |
| } |
| return true |
| } |
| |
| func (c *Cmd) wrapSandbox() { |
| homeDir, _ := c.Environment.Get("HOME") |
| outDir := absPath(c.ctx, c.config.OutDir()) |
| distDir := absPath(c.ctx, c.config.DistDir()) |
| |
| c.Args[0] = c.Path |
| c.Path = sandboxExecPath |
| c.Args = append([]string{ |
| "sandbox-exec", "-f", string(c.Sandbox), |
| "-D", "HOME=" + homeDir, |
| "-D", "OUT_DIR=" + outDir, |
| "-D", "DIST_DIR=" + distDir, |
| }, c.Args...) |
| } |