|  | #!/bin/bash | 
|  | # | 
|  | # Copyright 2015 The Bazel Authors. 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. | 
|  | # | 
|  | # actoolwrapper runs actool and zips up the output. | 
|  | # This script only runs on darwin and you must have Xcode installed. | 
|  | # | 
|  | # $1 OUTZIP - the path to place the output zip file. | 
|  |  | 
|  | set -eu | 
|  |  | 
|  | MY_LOCATION=${MY_LOCATION:-"$0.runfiles/bazel_tools/tools/objc"} | 
|  | REALPATH="${MY_LOCATION}/realpath" | 
|  | WRAPPER="${MY_LOCATION}/xcrunwrapper.sh" | 
|  |  | 
|  | OUTZIP=$("${REALPATH}" "$1") | 
|  | shift 1 | 
|  | TEMPDIR=$(mktemp -d "${TMPDIR:-/tmp}/actoolZippingOutput.XXXXXX") | 
|  | trap "rm -rf \"$TEMPDIR\"" EXIT | 
|  |  | 
|  | # actool needs to have absolute paths sent to it, so we call realpaths on | 
|  | # on all arguments seeing if we can expand them. | 
|  | # The argument for --output-partial-info-plist doesn't actually exist at the | 
|  | # time of flag parsing, so we create it so that we can call realpaths on it | 
|  | # to make the path absolute. | 
|  | # actool and ibtool appear to depend on the same code base. | 
|  | # Radar 21045660 ibtool has difficulty dealing with relative paths. | 
|  |  | 
|  | TOOLARGS=() | 
|  | LASTARG="" | 
|  | for i in $@; do | 
|  | if [ "$LASTARG" = "--output-partial-info-plist" ]; then | 
|  | touch "$i" | 
|  | fi | 
|  | if [ -e "$i" ]; then | 
|  | ARG=$("${REALPATH}" "$i") | 
|  | TOOLARGS+=("$ARG") | 
|  | else | 
|  | TOOLARGS+=("$i") | 
|  | fi | 
|  | LASTARG="$i" | 
|  | done | 
|  |  | 
|  | # If we are running into problems figuring out actool issues, there are a couple | 
|  | # of env variables that may help. Both of the following must be set to work. | 
|  | #   IBToolDebugLogFile=<OUTPUT FILE PATH> | 
|  | #   IBToolDebugLogLevel=4 | 
|  | # you may also see if | 
|  | #   IBToolNeverDeque=1 | 
|  | # helps. | 
|  | # Yes IBTOOL appears to be correct here due to actool and ibtool being based | 
|  | # on the same codebase. | 
|  | "${WRAPPER}" actool --errors --warnings --notices \ | 
|  | --compress-pngs --output-format human-readable-text \ | 
|  | --compile "$TEMPDIR" "${TOOLARGS[@]}" | 
|  |  | 
|  | # Need to push/pop tempdir so it isn't the current working directory | 
|  | # when we remove it via the EXIT trap. | 
|  | pushd "$TEMPDIR" > /dev/null | 
|  | # Reset all dates to Zip Epoch so that two identical zips created at different | 
|  | # times appear the exact same for comparison purposes. | 
|  | find . -exec touch -h -t 198001010000 {} \+ | 
|  |  | 
|  | # Added include "*" to fix case where we may want an empty zip file because | 
|  | # there is no data. | 
|  | zip --compression-method store --symlinks --recurse-paths --quiet "$OUTZIP" . --include "*" | 
|  | popd > /dev/null |