Merge "GccCppStdVersion should not be needed anymore"
diff --git a/android/paths.go b/android/paths.go
index 91abeba..daaf857 100644
--- a/android/paths.go
+++ b/android/paths.go
@@ -554,7 +554,7 @@
var deps []string
// We cannot add build statements in this context, so we fall back to
// AddNinjaFileDeps
- files, deps, err = pathtools.Glob(path.String(), nil)
+ files, deps, err = pathtools.Glob(path.String(), nil, pathtools.FollowSymlinks)
ctx.AddNinjaFileDeps(deps...)
}
diff --git a/cc/config/tidy.go b/cc/config/tidy.go
index dd52a0e..2e49c16 100644
--- a/cc/config/tidy.go
+++ b/cc/config/tidy.go
@@ -36,6 +36,7 @@
"performance*",
"-google-readability*",
"-google-runtime-references",
+ "-performance-noexcept-move-constructor",
}, ",")
})
diff --git a/java/app_builder.go b/java/app_builder.go
index 954ca44..e27b1b7 100644
--- a/java/app_builder.go
+++ b/java/app_builder.go
@@ -103,10 +103,10 @@
`cp ${manifest} ${outDir}/AndroidManifest.xml && ` +
`cp ${classesJar} ${outDir}/classes.jar && ` +
`cp ${rTxt} ${outDir}/R.txt && ` +
- `${config.SoongZipCmd} -jar -o $out -C ${outDir} -D ${outDir} ${resArgs}`,
+ `${config.SoongZipCmd} -jar -o $out -C ${outDir} -D ${outDir}`,
CommandDeps: []string{"${config.SoongZipCmd}"},
},
- "manifest", "classesJar", "rTxt", "resArgs", "outDir")
+ "manifest", "classesJar", "rTxt", "outDir")
func BuildAAR(ctx android.ModuleContext, outputFile android.WritablePath,
classesJar, manifest, rTxt android.Path, res android.Paths) {
diff --git a/java/builder.go b/java/builder.go
index 48b5a7b..07af8eb 100644
--- a/java/builder.go
+++ b/java/builder.go
@@ -321,7 +321,7 @@
Output: outputFile,
Implicits: deps,
Args: map[string]string{
- "jarArgs": strings.Join(proptools.NinjaEscape(jarArgs), " "),
+ "jarArgs": strings.Join(proptools.NinjaAndShellEscape(jarArgs), " "),
},
})
}
diff --git a/java/droiddoc.go b/java/droiddoc.go
index e9b7c0e..bfe72f6 100644
--- a/java/droiddoc.go
+++ b/java/droiddoc.go
@@ -307,31 +307,34 @@
// the tag name used to distinguish if the API files belong to public/system/test.
Api_tag_name *string
- // the generated public API filename by Doclava.
+ // the generated public API filename by Metalava.
Api_filename *string
- // the generated public Dex API filename by Doclava.
+ // the generated public Dex API filename by Metalava.
Dex_api_filename *string
- // the generated private API filename by Doclava.
+ // the generated private API filename by Metalava.
Private_api_filename *string
- // the generated private Dex API filename by Doclava.
+ // the generated private Dex API filename by Metalava.
Private_dex_api_filename *string
- // the generated removed API filename by Doclava.
+ // the generated removed API filename by Metalava.
Removed_api_filename *string
- // the generated removed Dex API filename by Doclava.
+ // the generated removed Dex API filename by Metalava.
Removed_dex_api_filename *string
// mapping of dex signatures to source file and line number. This is a temporary property and
// will be deleted; you probably shouldn't be using it.
Dex_mapping_filename *string
- // the generated exact API filename by Doclava.
+ // the generated exact API filename by Metalava.
Exact_api_filename *string
+ // the generated proguard filename by Metalava.
+ Proguard_filename *string
+
Check_api struct {
Last_released ApiToCheck
@@ -1213,6 +1216,7 @@
removedDexApiFile android.WritablePath
apiMappingFile android.WritablePath
exactApiFile android.WritablePath
+ proguardFile android.WritablePath
checkCurrentApiTimestamp android.WritablePath
updateCurrentApiTimestamp android.WritablePath
@@ -1363,6 +1367,12 @@
*implicitOutputs = append(*implicitOutputs, d.apiMappingFile)
}
+ if String(d.properties.Proguard_filename) != "" {
+ d.proguardFile = android.PathForModuleOut(ctx, String(d.properties.Proguard_filename))
+ metalavaFlags += " --proguard " + d.proguardFile.String()
+ *implicitOutputs = append(*implicitOutputs, d.proguardFile)
+ }
+
if Bool(d.properties.Write_sdk_values) {
metalavaFlags = metalavaFlags + " --sdk-values " + android.PathForModuleOut(ctx, "out").String()
}
diff --git a/java/java_resources.go b/java/java_resources.go
index fdc1590..4d8a757 100644
--- a/java/java_resources.go
+++ b/java/java_resources.go
@@ -20,6 +20,8 @@
"strings"
"android/soong/android"
+
+ "github.com/google/blueprint/pathtools"
)
var resourceExcludes = []string{
@@ -64,7 +66,7 @@
if !strings.HasPrefix(path, dir.String()) {
panic(fmt.Errorf("path %q does not start with %q", path, dir))
}
- args = append(args, "-f", path)
+ args = append(args, "-f", pathtools.MatchEscape(path))
}
}
}
@@ -107,7 +109,7 @@
if i == 0 || dir != lastDir {
args = append(args, "-C", dir)
}
- args = append(args, "-f", path)
+ args = append(args, "-f", pathtools.MatchEscape(path))
lastDir = dir
}
diff --git a/zip/cmd/main.go b/zip/cmd/main.go
index dfd56dc..c4e1196 100644
--- a/zip/cmd/main.go
+++ b/zip/cmd/main.go
@@ -186,6 +186,8 @@
emulateJar := flags.Bool("jar", false, "modify the resultant .zip to emulate the output of 'jar'")
writeIfChanged := flags.Bool("write_if_changed", false, "only update resultant .zip if it has changed")
+ symlinks := flags.Bool("symlinks", true, "store symbolic links in zip instead of following them")
+
parallelJobs := flags.Int("parallel", runtime.NumCPU(), "number of parallel threads to use")
cpuProfile := flags.String("cpuprofile", "", "write cpu profile to file")
traceFile := flags.String("trace", "", "write trace to file")
@@ -199,6 +201,11 @@
flags.Parse(expandedArgs[1:])
+ if flags.NArg() > 0 {
+ fmt.Fprintf(os.Stderr, "unexpected arguments %s\n", strings.Join(flags.Args(), " "))
+ usage()
+ }
+
err := zip.Run(zip.ZipArgs{
FileArgs: fArgs,
OutputFilePath: *out,
@@ -211,9 +218,10 @@
NumParallelJobs: *parallelJobs,
NonDeflatedFiles: nonDeflatedFiles,
WriteIfChanged: *writeIfChanged,
+ StoreSymlinks: *symlinks,
})
if err != nil {
- fmt.Fprintln(os.Stderr, err.Error())
+ fmt.Fprintln(os.Stderr, "error:", err.Error())
os.Exit(1)
}
}
diff --git a/zip/zip.go b/zip/zip.go
index 6b36e10..d9645b8 100644
--- a/zip/zip.go
+++ b/zip/zip.go
@@ -107,6 +107,7 @@
compressorPool sync.Pool
compLevel int
+ followSymlinks pathtools.ShouldFollowSymlinks
}
type zipEntry struct {
@@ -132,6 +133,7 @@
NumParallelJobs int
NonDeflatedFiles map[string]bool
WriteIfChanged bool
+ StoreSymlinks bool
}
const NOQUOTE = '\x00'
@@ -212,21 +214,36 @@
args.AddDirectoryEntriesToZip = true
}
+ // Have Glob follow symlinks if they are not being stored as symlinks in the zip file.
+ followSymlinks := pathtools.ShouldFollowSymlinks(!args.StoreSymlinks)
+
w := &ZipWriter{
- time: jar.DefaultTime,
- createdDirs: make(map[string]string),
- createdFiles: make(map[string]string),
- directories: args.AddDirectoryEntriesToZip,
- compLevel: args.CompressionLevel,
+ time: jar.DefaultTime,
+ createdDirs: make(map[string]string),
+ createdFiles: make(map[string]string),
+ directories: args.AddDirectoryEntriesToZip,
+ compLevel: args.CompressionLevel,
+ followSymlinks: followSymlinks,
}
pathMappings := []pathMapping{}
noCompression := args.CompressionLevel == 0
for _, fa := range args.FileArgs {
- srcs := fa.SourceFiles
+ var srcs []string
+ for _, s := range fa.SourceFiles {
+ globbed, _, err := pathtools.Glob(s, nil, followSymlinks)
+ if err != nil {
+ return err
+ }
+ srcs = append(srcs, globbed...)
+ }
if fa.GlobDir != "" {
- srcs = append(srcs, recursiveGlobFiles(fa.GlobDir)...)
+ globbed, _, err := pathtools.Glob(filepath.Join(fa.GlobDir, "**/*"), nil, followSymlinks)
+ if err != nil {
+ return err
+ }
+ srcs = append(srcs, globbed...)
}
for _, src := range srcs {
err := fillPathPairs(fa, src, &pathMappings, args.NonDeflatedFiles, noCompression)
@@ -461,7 +478,15 @@
var fileSize int64
var executable bool
- if s, err := os.Lstat(src); err != nil {
+ var s os.FileInfo
+ var err error
+ if z.followSymlinks {
+ s, err = os.Stat(src)
+ } else {
+ s, err = os.Lstat(src)
+ }
+
+ if err != nil {
return err
} else if s.IsDir() {
if z.directories {