aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--cmd/zipsync/Android.bp25
-rw-r--r--cmd/zipsync/zipsync.go124
-rw-r--r--java/builder.go12
-rw-r--r--java/config/config.go2
-rw-r--r--java/config/makevars.go2
-rw-r--r--java/droiddoc.go4
-rwxr-xr-xscripts/extract-srcjars.sh44
7 files changed, 159 insertions, 54 deletions
diff --git a/cmd/zipsync/Android.bp b/cmd/zipsync/Android.bp
new file mode 100644
index 00000000..22feadc8
--- /dev/null
+++ b/cmd/zipsync/Android.bp
@@ -0,0 +1,25 @@
+// Copyright 2016 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.
+
+blueprint_go_binary {
+ name: "zipsync",
+ deps: [
+ "android-archive-zip",
+ "blueprint-pathtools",
+ ],
+ srcs: [
+ "zipsync.go",
+ ],
+}
+
diff --git a/cmd/zipsync/zipsync.go b/cmd/zipsync/zipsync.go
new file mode 100644
index 00000000..035a1455
--- /dev/null
+++ b/cmd/zipsync/zipsync.go
@@ -0,0 +1,124 @@
+// Copyright 2018 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 main
+
+import (
+ "archive/zip"
+ "flag"
+ "fmt"
+ "io"
+ "io/ioutil"
+ "log"
+ "os"
+ "path/filepath"
+ "strings"
+)
+
+var (
+ outputDir = flag.String("d", "", "output dir")
+ outputFile = flag.String("l", "", "output list file")
+ filter = flag.String("f", "", "optional filter pattern")
+)
+
+func must(err error) {
+ if err != nil {
+ log.Fatal(err)
+ }
+}
+
+func writeFile(filename string, in io.Reader, perm os.FileMode) error {
+ out, err := os.OpenFile(filename, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, perm)
+ if err != nil {
+ return err
+ }
+ _, err = io.Copy(out, in)
+ if err != nil {
+ out.Close()
+ return err
+ }
+
+ return out.Close()
+}
+
+func main() {
+ flag.Usage = func() {
+ fmt.Fprintln(os.Stderr, "usage: zipsync -d <output dir> [-l <output file>] [-f <pattern>] [zip]...")
+ flag.PrintDefaults()
+ }
+
+ flag.Parse()
+
+ if *outputDir == "" {
+ flag.Usage()
+ os.Exit(1)
+ }
+
+ inputs := flag.Args()
+
+ // For now, just wipe the output directory and replace its contents with the zip files
+ // Eventually this could only modify the directory contents as necessary to bring it up
+ // to date with the zip files.
+ must(os.RemoveAll(*outputDir))
+
+ must(os.MkdirAll(*outputDir, 0777))
+
+ var files []string
+ seen := make(map[string]string)
+
+ for _, input := range inputs {
+ reader, err := zip.OpenReader(input)
+ if err != nil {
+ log.Fatal(err)
+ }
+ defer reader.Close()
+
+ for _, f := range reader.File {
+ if *filter != "" {
+ if match, err := filepath.Match(*filter, filepath.Base(f.Name)); err != nil {
+ log.Fatal(err)
+ } else if !match {
+ continue
+ }
+ }
+ if filepath.IsAbs(f.Name) {
+ log.Fatal("%q in %q is an absolute path", f.Name, input)
+ }
+
+ if prev, exists := seen[f.Name]; exists {
+ log.Fatal("%q found in both %q and %q", f.Name, prev, input)
+ }
+ seen[f.Name] = input
+
+ filename := filepath.Join(*outputDir, f.Name)
+ if f.FileInfo().IsDir() {
+ must(os.MkdirAll(filename, f.FileInfo().Mode()))
+ } else {
+ must(os.MkdirAll(filepath.Dir(filename), 0777))
+ in, err := f.Open()
+ if err != nil {
+ log.Fatal(err)
+ }
+ must(writeFile(filename, in, f.FileInfo().Mode()))
+ in.Close()
+ files = append(files, filename)
+ }
+ }
+ }
+
+ if *outputFile != "" {
+ data := strings.Join(files, "\n") + "\n"
+ must(ioutil.WriteFile(*outputFile, []byte(data), 0666))
+ }
+}
diff --git a/java/builder.go b/java/builder.go
index ee0d8a83..12110f2f 100644
--- a/java/builder.go
+++ b/java/builder.go
@@ -41,7 +41,7 @@ var (
javac = pctx.AndroidGomaStaticRule("javac",
blueprint.RuleParams{
Command: `rm -rf "$outDir" "$annoDir" "$srcJarDir" && mkdir -p "$outDir" "$annoDir" "$srcJarDir" && ` +
- `${config.ExtractSrcJarsCmd} $srcJarDir $srcJarDir/list $srcJars && ` +
+ `${config.ZipSyncCmd} -d $srcJarDir -l $srcJarDir/list -f "*.java" $srcJars && ` +
`${config.SoongJavacWrapper} ${config.JavacWrapper}${config.JavacCmd} ${config.JavacHeapFlags} ${config.CommonJdkFlags} ` +
`$javacFlags $bootClasspath $classpath ` +
`-source $javaVersion -target $javaVersion ` +
@@ -50,7 +50,7 @@ var (
CommandDeps: []string{
"${config.JavacCmd}",
"${config.SoongZipCmd}",
- "${config.ExtractSrcJarsCmd}",
+ "${config.ZipSyncCmd}",
},
CommandOrderOnly: []string{"${config.SoongJavacWrapper}"},
Rspfile: "$out.rsp",
@@ -62,7 +62,7 @@ var (
kotlinc = pctx.AndroidGomaStaticRule("kotlinc",
blueprint.RuleParams{
Command: `rm -rf "$outDir" "$srcJarDir" && mkdir -p "$outDir" "$srcJarDir" && ` +
- `${config.ExtractSrcJarsCmd} $srcJarDir $srcJarDir/list $srcJars && ` +
+ `${config.ZipSyncCmd} -d $srcJarDir -l $srcJarDir/list -f "*.java" $srcJars && ` +
`${config.GenKotlinBuildFileCmd} $classpath $outDir $out.rsp $srcJarDir/list > $outDir/kotlinc-build.xml &&` +
`${config.KotlincCmd} $kotlincFlags ` +
`-jvm-target $kotlinJvmTarget -Xbuild-file=$outDir/kotlinc-build.xml && ` +
@@ -72,7 +72,7 @@ var (
"${config.KotlinCompilerJar}",
"${config.GenKotlinBuildFileCmd}",
"${config.SoongZipCmd}",
- "${config.ExtractSrcJarsCmd}",
+ "${config.ZipSyncCmd}",
},
Rspfile: "$out.rsp",
RspfileContent: `$in`,
@@ -82,7 +82,7 @@ var (
errorprone = pctx.AndroidStaticRule("errorprone",
blueprint.RuleParams{
Command: `rm -rf "$outDir" "$annoDir" "$srcJarDir" && mkdir -p "$outDir" "$annoDir" "$srcJarDir" && ` +
- `${config.ExtractSrcJarsCmd} $srcJarDir $srcJarDir/list $srcJars && ` +
+ `${config.ZipSyncCmd} -d $srcJarDir -l $srcJarDir/list -f "*.java" $srcJars && ` +
`${config.SoongJavacWrapper} ${config.ErrorProneCmd} ` +
`$javacFlags $bootClasspath $classpath ` +
`-source $javaVersion -target $javaVersion ` +
@@ -93,7 +93,7 @@ var (
"${config.ErrorProneJavacJar}",
"${config.ErrorProneJar}",
"${config.SoongZipCmd}",
- "${config.ExtractSrcJarsCmd}",
+ "${config.ZipSyncCmd}",
},
CommandOrderOnly: []string{"${config.SoongJavacWrapper}"},
Rspfile: "$out.rsp",
diff --git a/java/config/config.go b/java/config/config.go
index fc2444f4..3d7f910f 100644
--- a/java/config/config.go
+++ b/java/config/config.go
@@ -82,13 +82,13 @@ func init() {
pctx.SourcePathVariable("JrtFsJar", "${JavaHome}/lib/jrt-fs.jar")
pctx.SourcePathVariable("Ziptime", "prebuilts/build-tools/${hostPrebuiltTag}/bin/ziptime")
- pctx.SourcePathVariable("ExtractSrcJarsCmd", "build/soong/scripts/extract-srcjars.sh")
pctx.SourcePathVariable("GenKotlinBuildFileCmd", "build/soong/scripts/gen-kotlin-build-file.sh")
pctx.SourcePathVariable("JarArgsCmd", "build/soong/scripts/jar-args.sh")
pctx.HostBinToolVariable("SoongZipCmd", "soong_zip")
pctx.HostBinToolVariable("MergeZipsCmd", "merge_zips")
pctx.HostBinToolVariable("Zip2ZipCmd", "zip2zip")
+ pctx.HostBinToolVariable("ZipSyncCmd", "zipsync")
pctx.VariableFunc("DxCmd", func(ctx android.PackageVarContext) string {
config := ctx.Config()
if config.IsEnvFalse("USE_D8") {
diff --git a/java/config/makevars.go b/java/config/makevars.go
index 7e125d59..5210f202 100644
--- a/java/config/makevars.go
+++ b/java/config/makevars.go
@@ -73,7 +73,7 @@ func makeVarsProvider(ctx android.MakeVarsContext) {
}
ctx.Strict("SOONG_JAVAC_WRAPPER", "${SoongJavacWrapper}")
- ctx.Strict("EXTRACT_SRCJARS", "${ExtractSrcJarsCmd}")
+ ctx.Strict("ZIPSYNC", "${ZipSyncCmd}")
ctx.Strict("JACOCO_CLI_JAR", "${JacocoCLIJar}")
ctx.Strict("DEFAULT_JACOCO_EXCLUDE_FILTER", strings.Join(DefaultJacocoExcludeFilter, ","))
diff --git a/java/droiddoc.go b/java/droiddoc.go
index 8c605355..9a86ab55 100644
--- a/java/droiddoc.go
+++ b/java/droiddoc.go
@@ -28,14 +28,14 @@ var (
javadoc = pctx.AndroidStaticRule("javadoc",
blueprint.RuleParams{
Command: `rm -rf "$outDir" "$srcJarDir" "$stubsDir" && mkdir -p "$outDir" "$srcJarDir" "$stubsDir" && ` +
- `${config.ExtractSrcJarsCmd} $srcJarDir $srcJarDir/list $srcJars && ` +
+ `${config.ZipSyncCmd} -d $srcJarDir -l $srcJarDir/list -f "*.java" $srcJars && ` +
`${config.JavadocCmd} -encoding UTF-8 @$out.rsp @$srcJarDir/list ` +
`$opts $bootclasspathArgs $classpathArgs -sourcepath $sourcepath ` +
`-d $outDir -quiet && ` +
`${config.SoongZipCmd} -write_if_changed -d -o $docZip -C $outDir -D $outDir && ` +
`${config.SoongZipCmd} -write_if_changed -jar -o $out -C $stubsDir -D $stubsDir`,
CommandDeps: []string{
- "${config.ExtractSrcJarsCmd}",
+ "${config.ZipSyncCmd}",
"${config.JavadocCmd}",
"${config.SoongZipCmd}",
"$JsilverJar",
diff --git a/scripts/extract-srcjars.sh b/scripts/extract-srcjars.sh
deleted file mode 100755
index f81032b6..00000000
--- a/scripts/extract-srcjars.sh
+++ /dev/null
@@ -1,44 +0,0 @@
-#!/bin/bash -e
-
-# 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.
-
-# Extracts .java files from source jars in a specified directory and writes out a list of the files
-
-if [ -z "$1" -o -z "$2" ]; then
- echo "usage: $0 <output dir> <output file> [<jar> ...]" >&2
- exit 1
-fi
-
-output_dir=$1
-shift
-output_file=$1
-shift
-
-rm -f $output_file
-touch $output_file
-
-for j in "$@"; do
- for f in $(zipinfo -1 $j '*.java'); do
- echo $output_dir/$f >> $output_file
- done
- unzip -qn -d $output_dir $j '*.java'
-done
-
-duplicates=$(cat $output_file | sort | uniq -d | uniq)
-if [ -n "$duplicates" ]; then
- echo Duplicate source files:
- echo $duplicates
- exit 1
-fi