diff options
author | 2015-07-21 08:47:08 +0000 | |
---|---|---|
committer | 2015-07-21 15:13:38 -0400 | |
commit | 0caf33251bfb55d32e758d92a7db9e3f746ec06a (patch) | |
tree | af635bc857aab5a039048530a0cd007a8c3716e6 /src/tools/xcode-common/java/com/google | |
parent | 73893ccb1b1a11d5146c246ac0f704c48ae0d506 (diff) |
Rollback of commit b8d1e700841d8aa7186ccbdfb0eba53e12a672d0.
*** Reason for rollback ***
Breaks most of the iOS targets on our continuous build.
*** Original change description ***
Move actoolzip, momczip and swiftstdlibtoolzip to tools/xcode and convert them to scripts instead of java apps.
RELNOTES: actoolzip, momczip and swiftstdlibtoolzip have all been made into bash scripts and have been renamed to actoolwrapper, momcwrapper and swiftstdlibtoolwrapper respectively. The old versions will be deleted in a later change.
--
MOS_MIGRATED_REVID=98716081
Diffstat (limited to 'src/tools/xcode-common/java/com/google')
6 files changed, 217 insertions, 0 deletions
diff --git a/src/tools/xcode-common/java/com/google/devtools/build/xcode/actoolzip/ActoolZip.java b/src/tools/xcode-common/java/com/google/devtools/build/xcode/actoolzip/ActoolZip.java new file mode 100644 index 0000000000..cd4466748c --- /dev/null +++ b/src/tools/xcode-common/java/com/google/devtools/build/xcode/actoolzip/ActoolZip.java @@ -0,0 +1,116 @@ +// Copyright 2014 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 com.google.devtools.build.xcode.actoolzip; + +import com.google.common.base.Optional; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Iterables; +import com.google.devtools.build.xcode.zippingoutput.Arguments; +import com.google.devtools.build.xcode.zippingoutput.Wrapper; +import com.google.devtools.build.xcode.zippingoutput.Wrappers; +import com.google.devtools.build.xcode.zippingoutput.Wrappers.CommandFailedException; +import com.google.devtools.build.xcode.zippingoutput.Wrappers.OutErr; + +import java.io.File; +import java.io.IOException; +import java.util.Set; + +/** + * A tool which wraps actool by running actool and zipping its output. See the JavaDoc for + * {@link Wrapper} for more information. + */ +public class ActoolZip implements Wrapper { + + @Override + public String name() { + return "ActoolZip"; + } + + @Override + public String subtoolName() { + return "actool"; + } + + @Override + public Iterable<String> subCommand(Arguments args, String outputDirectory) { + return new ImmutableList.Builder<String>() + .add(args.subtoolCmd()) + .add("--output-format").add("human-readable-text") + .add("--notices") + .add("--warnings") + .add("--errors") + .add("--compress-pngs") + .add("--compile") + .add(outputDirectory) + // actool munges paths in some way which doesn't work if one of the directories in the path + // is a symlink. + .addAll(Iterables.transform(args.subtoolExtraArgs(), Wrappers.CANONICALIZE_IF_PATH)) + .build(); + } + + public static void main(String[] args) throws IOException, InterruptedException { + Optional<File> infoPlistPath = replaceInfoPlistPath(args); + try { + OutErr outErr = Wrappers.executeCapturingOutput(args, new ActoolZip()); + if (infoPlistPath.isPresent() && !infoPlistPath.get().exists()) { + outErr.print(); + System.exit(1); + } + } catch (CommandFailedException e) { + Wrappers.handleException(e); + } + } + + /** + * Absolute-ify output partial info plist's path. + * + * <p>actool occasionally writes the partial info plist file to the wrong directory if a + * non-absolute path is passed as --output-partial-info-plist, so we optimistically try to + * absolute-ify its path. This isn't caught by the "CANONICAL_PATH" transform above, because the + * file doesn't exist at the time of flag parsing. + * + * <p>Modifies args in-place. + * + * @return new value of the output-partial-info-plist flag. + */ + private static Optional<File> replaceInfoPlistPath(String[] args) { + String flag = "output-partial-info-plist"; + Set<String> flagOptions = ImmutableSet.of( + "-" + flag, + "--" + flag); + Optional<File> newPath = Optional.absent(); + for (int i = 0; i < args.length; ++i) { + for (String flagOption : flagOptions) { + String arg = args[i]; + String flagEquals = flagOption + "="; + if (arg.startsWith(flagEquals)) { + newPath = Optional.of(new File(arg.substring(flagEquals.length()))); + args[i] = flagEquals + newPath.get().getAbsolutePath(); + } + if (arg.equals(flagOption) && i + 1 < args.length) { + newPath = Optional.of(new File(args[i + 1])); + args[i + 1] = newPath.get().getAbsolutePath(); + } + } + } + return newPath; + } + + @Override + public boolean outputDirectoryMustExist() { + return true; + } +} diff --git a/src/tools/xcode-common/java/com/google/devtools/build/xcode/actoolzip/BUILD b/src/tools/xcode-common/java/com/google/devtools/build/xcode/actoolzip/BUILD new file mode 100644 index 0000000000..8e08b62c82 --- /dev/null +++ b/src/tools/xcode-common/java/com/google/devtools/build/xcode/actoolzip/BUILD @@ -0,0 +1,17 @@ +package(default_visibility = ["//src:__subpackages__"]) + +filegroup( + name = "srcs", + srcs = glob(["**"]), +) + +java_binary( + name = "actoolzip", + srcs = ["ActoolZip.java"], + main_class = "com.google.devtools.build.xcode.actoolzip.ActoolZip", + visibility = ["//visibility:public"], + deps = [ + "//src/tools/xcode-common/java/com/google/devtools/build/xcode/zippingoutput", + "//third_party:guava", + ], +) diff --git a/src/tools/xcode-common/java/com/google/devtools/build/xcode/actoolzip/README b/src/tools/xcode-common/java/com/google/devtools/build/xcode/actoolzip/README new file mode 100644 index 0000000000..7aaae168bb --- /dev/null +++ b/src/tools/xcode-common/java/com/google/devtools/build/xcode/actoolzip/README @@ -0,0 +1,4 @@ +actoolzip runs actool, which compiles asset catalog files and zips up the +output, because actool returns an unpredictable number of output files. + +actool only runs on Darwin, so actoolzip only runs on Darwin. diff --git a/src/tools/xcode-common/java/com/google/devtools/build/xcode/swiftstdlibtoolzip/BUILD b/src/tools/xcode-common/java/com/google/devtools/build/xcode/swiftstdlibtoolzip/BUILD new file mode 100644 index 0000000000..b42968804a --- /dev/null +++ b/src/tools/xcode-common/java/com/google/devtools/build/xcode/swiftstdlibtoolzip/BUILD @@ -0,0 +1,17 @@ +package(default_visibility = ["//src:__subpackages__"]) + +filegroup( + name = "srcs", + srcs = glob(["**"]), +) + +java_binary( + name = "swiftstdlibtoolzip", + srcs = ["SwiftStdlibToolZip.java"], + main_class = "com.google.devtools.build.xcode.swiftstdlibtoolzip.SwiftStdlibToolZip", + visibility = ["//visibility:public"], + deps = [ + "//src/tools/xcode-common/java/com/google/devtools/build/xcode/zippingoutput", + "//third_party:guava", + ], +) diff --git a/src/tools/xcode-common/java/com/google/devtools/build/xcode/swiftstdlibtoolzip/README b/src/tools/xcode-common/java/com/google/devtools/build/xcode/swiftstdlibtoolzip/README new file mode 100644 index 0000000000..0c8b3f082d --- /dev/null +++ b/src/tools/xcode-common/java/com/google/devtools/build/xcode/swiftstdlibtoolzip/README @@ -0,0 +1,4 @@ +swiftstdlibtoolzip runs swift-stdlib-tool, which scans executables and copies required Swift +framework dylibs to the specified path, then zips up the output for further bundle merging. + +swift-stdlib-tool only runs on Darwin, so swiftstdlibtoolzip only runs on Darwin. diff --git a/src/tools/xcode-common/java/com/google/devtools/build/xcode/swiftstdlibtoolzip/SwiftStdlibToolZip.java b/src/tools/xcode-common/java/com/google/devtools/build/xcode/swiftstdlibtoolzip/SwiftStdlibToolZip.java new file mode 100644 index 0000000000..2043a08fd3 --- /dev/null +++ b/src/tools/xcode-common/java/com/google/devtools/build/xcode/swiftstdlibtoolzip/SwiftStdlibToolZip.java @@ -0,0 +1,59 @@ +// 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 com.google.devtools.build.xcode.swiftstdlibtoolzip; + +import com.google.common.collect.ImmutableList; +import com.google.devtools.build.xcode.zippingoutput.Arguments; +import com.google.devtools.build.xcode.zippingoutput.Wrapper; +import com.google.devtools.build.xcode.zippingoutput.Wrappers; + +import java.io.IOException; + +/** + * A tool which wraps swift-stdlib-tool by running and zipping its output. See {@link Wrapper} for + * more information. + */ +public class SwiftStdlibToolZip implements Wrapper { + + @Override + public String name() { + return "SwiftStdlibToolZip"; + } + + @Override + public String subtoolName() { + return "swift-stdlib-tool"; + } + + @Override + public Iterable<String> subCommand(Arguments arguments, String outputDirectory) { + return new ImmutableList.Builder<String>() + .add(arguments.subtoolCmd()) + .addAll(arguments.subtoolExtraArgs()) + .add("--copy") + .add("--verbose") + .add("--destination").add(outputDirectory) + .build(); + } + + @Override + public boolean outputDirectoryMustExist() { + return true; + } + + public static void main(String[] args) throws IOException, InterruptedException { + Wrappers.executePipingOutput(args, new SwiftStdlibToolZip()); + } +} |