diff options
author | Damien Martin-Guillerez <dmarting@google.com> | 2015-09-03 21:54:08 +0000 |
---|---|---|
committer | David Chen <dzc@google.com> | 2015-09-03 22:18:50 +0000 |
commit | 129976722b0dc2e0f73c5bac1148c6cbe8ec3e44 (patch) | |
tree | b8f934f0909aab57bc9970376b6a2690db52a578 | |
parent | ae0f8b0f05ed3d6af7cf47c15157337d05f00e65 (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.md | 4 | ||||
-rw-r--r-- | src/BUILD | 49 | ||||
-rw-r--r-- | src/main/cpp/blaze.cc | 2 | ||||
-rw-r--r-- | src/main/java/BUILD | 8 | ||||
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/bazel/rules/android/android.WORKSPACE | 2 | ||||
-rw-r--r-- | src/main/java/options.BUILD | 13 | ||||
-rw-r--r-- | src/tools/android/java/com/google/devtools/build/android/ziputils/BUILD | 5 |
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>", @@ -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( |