| #!/bin/bash -e |
| # |
| # Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| # This script is used to unpack a .a file into object files. |
| # |
| # Arguments: |
| # |
| # d - Output directory. |
| # a - List of possible locations of the archive. |
| # f - List of files to extract. |
| # |
| |
| export LC_ALL=C |
| |
| # Avoid things like -n messing up the grepping below. |
| unset GREP_OPTIONS |
| |
| while getopts "d:a:f:r:" flag |
| do |
| if [ "$flag" = "d" ]; then |
| out_dir=$OPTARG |
| elif [ "$flag" = "a" ]; then |
| lib_files="$OPTARG $lib_files" |
| elif [ "$flag" = "f" ]; then |
| obj_files="$OPTARG $obj_files" |
| elif [ "$flag" = "r" ]; then |
| ar=$OPTARG |
| fi |
| done |
| |
| for f in $lib_files; do |
| if [ -a $f ]; then |
| lib_file=$f |
| break |
| fi |
| done |
| |
| if [ -z "$lib_file" ]; then |
| echo "Failed to locate a static library." |
| false |
| exit |
| fi |
| |
| if [ ! -f "$ar" ]; then |
| # Find the appropriate ar to use. |
| ar="ar" |
| if [ -n "$AR_target" ]; then |
| ar=$AR_target |
| elif [ -n "$AR" ]; then |
| ar=$AR |
| fi |
| fi |
| |
| obj_list="$($ar t $lib_file | grep '\.o$')" |
| |
| function extract_object { |
| for f in $obj_list; do |
| filename="${f##*/}" |
| |
| if [ -z "$(echo $filename | grep $1)" ]; then |
| continue |
| fi |
| |
| # Only echo this if debugging. |
| # echo "Extract $filename from archive to $out_dir/$1." |
| $ar p $lib_file $filename > $out_dir/$1 |
| [ -s $out_dir/$1 ] || exit 1 |
| break |
| done |
| } |
| |
| for f in $obj_files; do |
| extract_object $f |
| done |