| #!/bin/bash -e | 
 |  | 
 | # Copyright 2019 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. | 
 |  | 
 | # Script to extract and repack an archive with specified object files. | 
 | # Inputs: | 
 | #  Environment: | 
 | #   CLANG_BIN: path to the clang bin directory | 
 | #  Arguments: | 
 | #   -i ${file}: input file | 
 | #   -o ${file}: output file | 
 | #   -d ${file}: deps file | 
 |  | 
 | set -o pipefail | 
 |  | 
 | OPTSTRING=d:i:o: | 
 |  | 
 | usage() { | 
 |     cat <<EOF | 
 | Usage: archive_repack.sh [options] <objects to repack> | 
 |  | 
 | OPTIONS: | 
 |     -i <file>: input file | 
 |     -o <file>: output file | 
 |     -d <file>: deps file | 
 | EOF | 
 |     exit 1 | 
 | } | 
 |  | 
 | while getopts $OPTSTRING opt; do | 
 |     case "$opt" in | 
 |         d) depsfile="${OPTARG}" ;; | 
 |         i) infile="${OPTARG}" ;; | 
 |         o) outfile="${OPTARG}" ;; | 
 |         ?) usage ;; | 
 |     esac | 
 | done | 
 | shift "$(($OPTIND -1))" | 
 |  | 
 | if [ -z "${infile}" ]; then | 
 |     echo "-i argument is required" | 
 |     usage | 
 | fi | 
 |  | 
 | if [ -z "${outfile}" ]; then | 
 |     echo "-o argument is required" | 
 |     usage | 
 | fi | 
 |  | 
 | # Produce deps file | 
 | if [ ! -z "${depsfile}" ]; then | 
 |     cat <<EOF > "${depsfile}" | 
 | ${outfile}: ${infile} ${CLANG_BIN}/llvm-ar | 
 | EOF | 
 | fi | 
 |  | 
 | # Get absolute path for outfile and llvm-ar. | 
 | LLVM_AR="${PWD}/${CLANG_BIN}/llvm-ar" | 
 | if [[ "$outfile" != /* ]]; then | 
 |     outfile="${PWD}/${outfile}" | 
 | fi | 
 |  | 
 | tempdir="${outfile}.tmp" | 
 |  | 
 | # Clean up any previous temporary files. | 
 | rm -f "${outfile}" | 
 | rm -rf "${tempdir}" | 
 |  | 
 | # Do repack | 
 | # We have to change working directory since ar only allows extracting to CWD. | 
 | mkdir "${tempdir}" | 
 | cp "${infile}" "${tempdir}/archive" | 
 | cd "${tempdir}" | 
 | "${LLVM_AR}" x "archive" | 
 | "${LLVM_AR}" --format=gnu qc "${outfile}" "$@" |