aboutsummaryrefslogtreecommitdiffstats
path: root/java/java_resources.go
diff options
context:
space:
mode:
Diffstat (limited to 'java/java_resources.go')
-rw-r--r--java/java_resources.go106
1 files changed, 106 insertions, 0 deletions
diff --git a/java/java_resources.go b/java/java_resources.go
new file mode 100644
index 00000000..a596fd7e
--- /dev/null
+++ b/java/java_resources.go
@@ -0,0 +1,106 @@
+// Copyright 2015 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 java
+
+import (
+ "fmt"
+ "path/filepath"
+ "strings"
+
+ "android/soong/android"
+)
+
+var resourceExcludes = []string{
+ "**/*.java",
+ "**/package.html",
+ "**/overview.html",
+ "**/.*.swp",
+ "**/.DS_Store",
+ "**/*~",
+}
+
+func ResourceDirsToJarArgs(ctx android.ModuleContext,
+ resourceDirs, excludeDirs []string) (args []string, deps android.Paths) {
+ var excludes []string
+
+ for _, exclude := range excludeDirs {
+ excludes = append(excludes,
+ filepath.Join(android.PathForModuleSrc(ctx, exclude).String(), "**/*"))
+ }
+
+ excludes = append(excludes, resourceExcludes...)
+
+ for _, dir := range resourceDirs {
+ dir := android.PathForModuleSrc(ctx, dir).String()
+ files := ctx.Glob(filepath.Join(dir, "**/*"), excludes)
+
+ deps = append(deps, files...)
+
+ if len(files) > 0 {
+ args = append(args, "-C", dir)
+
+ for _, f := range files {
+ path := f.String()
+ if !strings.HasPrefix(path, dir) {
+ panic(fmt.Errorf("path %q does not start with %q", path, dir))
+ }
+ args = append(args, "-f", path)
+ }
+ }
+ }
+
+ return args, deps
+}
+
+// Convert java_resources properties to arguments to soong_zip -jar, ignoring common patterns
+// that should not be treated as resources (including *.java).
+func ResourceFilesToJarArgs(ctx android.ModuleContext,
+ res, exclude []string) (args []string, deps android.Paths) {
+
+ exclude = append([]string(nil), exclude...)
+ exclude = append(exclude, resourceExcludes...)
+ return resourceFilesToJarArgs(ctx, res, exclude)
+}
+
+// Convert java_resources properties to arguments to soong_zip -jar, keeping files that should
+// normally not used as resources like *.java
+func SourceFilesToJarArgs(ctx android.ModuleContext,
+ res, exclude []string) (args []string, deps android.Paths) {
+
+ return resourceFilesToJarArgs(ctx, res, exclude)
+}
+
+func resourceFilesToJarArgs(ctx android.ModuleContext,
+ res, exclude []string) (args []string, deps android.Paths) {
+
+ files := ctx.ExpandSources(res, exclude)
+
+ lastDir := ""
+ for i, f := range files {
+ rel := f.Rel()
+ path := f.String()
+ if !strings.HasSuffix(path, rel) {
+ panic(fmt.Errorf("path %q does not end with %q", path, rel))
+ }
+ dir := filepath.Clean(strings.TrimSuffix(path, rel))
+ if i == 0 || dir != lastDir {
+ args = append(args, "-C", dir)
+ }
+ args = append(args, "-f", path)
+ lastDir = dir
+ }
+
+ return args, files
+}