aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Damien Martin-Guillerez <dmarting@google.com>2015-09-03 21:54:08 +0000
committerGravatar David Chen <dzc@google.com>2015-09-03 22:18:50 +0000
commit129976722b0dc2e0f73c5bac1148c6cbe8ec3e44 (patch)
treeb8f934f0909aab57bc9970376b6a2690db52a578
parentae0f8b0f05ed3d6af7cf47c15157337d05f00e65 (diff)
Quick fix for shipping the android tools in the Bazel binary
This is not really nice, there are several hacks there. This repository will get removed in the future and linked to a remote one instead. I tested it against the tutorial and it works like a charm. mobile-install seems like to work, maybe that's also fixing the last issue reported in #392. Known issue: Java compilation output errors about files being modified in the future. -- MOS_MIGRATED_REVID=102282979
-rw-r--r--examples/android/README.md4
-rw-r--r--src/BUILD49
-rw-r--r--src/main/cpp/blaze.cc2
-rw-r--r--src/main/java/BUILD8
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/android/android.WORKSPACE2
-rw-r--r--src/main/java/options.BUILD13
-rw-r--r--src/tools/android/java/com/google/devtools/build/android/ziputils/BUILD5
7 files changed, 71 insertions, 12 deletions
diff --git a/examples/android/README.md b/examples/android/README.md
index dd0a3694aa..36f3345b68 100644
--- a/examples/android/README.md
+++ b/examples/android/README.md
@@ -1,10 +1,6 @@
In order to build these examples, add the following two rules to the top-level `WORKSPACE` file (two directories above this file):
```python
-android_local_tools_repository(
- name="android_tools",
- path="<full path to the source tree of Bazel>")
-
android_sdk_repository(
name="androidsdk",
path="<full path to your Android SDK>",
diff --git a/src/BUILD b/src/BUILD
index 994eab5eef..e9c0f3d851 100644
--- a/src/BUILD
+++ b/src/BUILD
@@ -25,6 +25,7 @@ genrule(
"//src/main/tools:process-wrapper",
"//src/main/tools:namespace-sandbox",
"//src/main/tools:build_interface_so",
+ ":android_tools_repository_zip",
],
outs = ["install_base_key"],
cmd = select({
@@ -61,11 +62,36 @@ genrule(
)
genrule(
+ name = "android_tools_repository_zip",
+ srcs = [
+ "//tools:srcs",
+ "//third_party:srcs",
+ "//src/tools/android/java/com/google/devtools/build/android:srcs",
+ "//src/tools/android/java/com/google/devtools/build/android/incrementaldeployment:srcs",
+ "//src/tools/android/java/com/google/devtools/build/android/ziputils:srcs",
+ "//src/main/protobuf:srcs",
+ "//src/main/java:options-srcs",
+ ],
+ outs = ["android_tools_repository.zip"],
+ cmd = "\n".join([
+ "mkdir -p $(@D)/android-tools-zip",
+ "for i in $(SRCS); do",
+ " mkdir -p $$(dirname $(@D)/android-tools-zip/$$i)",
+ " cp $$i $$(dirname $(@D)/android-tools-zip/$$i)",
+ "done",
+ "touch $(@D)/android-tools-zip/WORKSPACE",
+ "mv $(@D)/android-tools-zip/src/main/java/options.BUILD" +
+ " $(@D)/android-tools-zip/src/main/java/BUILD",
+ "find $(@D)/android-tools-zip -exec touch -t 198001010000.00 '{}' ';'",
+ "P=$$PWD; (cd $(@D)/android-tools-zip && zip -qrD $$P/$@ *)",
+ "rm -fr $(@D)/android-tools-zip",
+ ]),
+)
+
+genrule(
name = "package-zip",
srcs = [
"//src/main/java:bazel-main_deploy.jar",
- # The jar must the first in the zip file because the client launcher
- # looks for the first entry in the zip file for the java server.
"//src/main/cpp:client",
":libunix",
"//src/main/tools:build-runfiles",
@@ -75,14 +101,23 @@ genrule(
"//src/main/tools:build_interface_so",
"install_base_key",
":java-version",
+ ":android_tools_repository_zip",
],
outs = ["package.zip"],
# Terrible hack to remove timestamps in the zip file
- cmd = "mkdir -p $(@D)/package-zip && " +
- "cp $(SRCS) $(@D)/package-zip && " +
- "touch -t 198001010000.00 $(@D)/package-zip/* && " +
- "zip -qj $@ $(@D)/package-zip/* && " +
- "rm -fr $(@D)/package-zip",
+ cmd = "\n".join([
+ "mkdir -p $(@D)/package-zip",
+ "cp $(SRCS) $(@D)/package-zip",
+ # TODO(dmarting): we should change the client to connect to server.jar
+ # instead of the first binary in the list.
+ "mv $(@D)/package-zip/bazel-main_deploy.jar $(@D)/package-zip/A-server.jar",
+ "touch -t 198001010000.00 $(@D)/package-zip/*",
+ "mkdir $(@D)/package-zip/android_tools",
+ "(cd $(@D)/package-zip/android_tools && unzip -q ../android_tools_repository.zip)",
+ "rm $(@D)/package-zip/android_tools_repository.zip",
+ "P=$$PWD; (cd $(@D)/package-zip && zip -qrD $$P/$@ *)",
+ "rm -fr $(@D)/package-zip",
+ ]),
)
genrule(
diff --git a/src/main/cpp/blaze.cc b/src/main/cpp/blaze.cc
index b3ec5aea61..89591aa1c9 100644
--- a/src/main/cpp/blaze.cc
+++ b/src/main/cpp/blaze.cc
@@ -967,7 +967,7 @@ static void ExtractData(const string &self_path) {
}
// Check that the timestamp is in the future. A past timestamp would indicate
// that the file has been tampered with. See ActuallyExtractData().
- if (buf.st_mtime <= time_now) {
+ if (!S_ISDIR(buf.st_mode) && buf.st_mtime <= time_now) {
die(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
"Error: corrupt installation: file '%s' "
"modified. Please remove '%s' and try again.",
diff --git a/src/main/java/BUILD b/src/main/java/BUILD
index 5efd2d0327..357f843867 100644
--- a/src/main/java/BUILD
+++ b/src/main/java/BUILD
@@ -105,6 +105,14 @@ java_library(
],
)
+filegroup(
+ name = "options-srcs",
+ srcs = glob([
+ "com/google/devtools/common/options/*.java",
+ ]) + ["options.BUILD"],
+ visibility = ["//src:__subpackages__"],
+)
+
java_library(
name = "packages",
srcs = glob([
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/android.WORKSPACE b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/android.WORKSPACE
index 711409aaa6..fa985a0ce5 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/android.WORKSPACE
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/android.WORKSPACE
@@ -1,3 +1,5 @@
+android_local_tools_repository(name = "default_android_tools", path = __embedded_dir__ + "/android_tools")
+
# bind(name = "android/proguard_whitelister", actual = "//tools/android:proguard_whitelister")
# bind(name = "android/merge_manifests", actual = "//tools/android:merge_manifests")
# bind(name = "android/build_incremental_dexmanifest", actual = "//tools/android:build_incremental_dexmanifest")
diff --git a/src/main/java/options.BUILD b/src/main/java/options.BUILD
new file mode 100644
index 0000000000..844cf2a61a
--- /dev/null
+++ b/src/main/java/options.BUILD
@@ -0,0 +1,13 @@
+# TODO(dmarting): to make clearer, instead of doing that, we should
+# move every target of the BUILD file into there java package.
+java_library(
+ name = "options",
+ srcs = glob([
+ "com/google/devtools/common/options/*.java",
+ ]),
+ visibility = ["//visibility:public"],
+ deps = [
+ "//third_party:guava",
+ "//third_party:jsr305",
+ ],
+)
diff --git a/src/tools/android/java/com/google/devtools/build/android/ziputils/BUILD b/src/tools/android/java/com/google/devtools/build/android/ziputils/BUILD
index f99ea5e701..3740a2a213 100644
--- a/src/tools/android/java/com/google/devtools/build/android/ziputils/BUILD
+++ b/src/tools/android/java/com/google/devtools/build/android/ziputils/BUILD
@@ -4,6 +4,11 @@ package(
default_visibility = ["//visibility:public"],
)
+filegroup(
+ name = "srcs",
+ srcs = glob(["**"]),
+)
+
java_library(
name = "ziputils_lib",
srcs = glob(