1 #!/bin/bash -e 2 # 3 # Copyright (c) 2012 The Chromium Authors. All rights reserved. 4 # Use of this source code is governed by a BSD-style license that can be 5 # found in the LICENSE file. 6 7 # This script is used to unpack a .a file into object files. 8 # 9 # Arguments: 10 # 11 # d - Output directory. 12 # a - List of possible locations of the archive. 13 # f - List of files to extract. 14 # 15 16 export LC_ALL=C 17 18 # Avoid things like -n messing up the grepping below. 19 unset GREP_OPTIONS 20 21 while getopts "d:a:f:r:" flag 22 do 23 if [ "$flag" = "d" ]; then 24 out_dir=$OPTARG 25 elif [ "$flag" = "a" ]; then 26 lib_files="$OPTARG $lib_files" 27 elif [ "$flag" = "f" ]; then 28 obj_files="$OPTARG $obj_files" 29 elif [ "$flag" = "r" ]; then 30 ar=$OPTARG 31 fi 32 done 33 34 for f in $lib_files; do 35 if [ -a $f ]; then 36 lib_file=$f 37 break 38 fi 39 done 40 41 if [ -z "$lib_file" ]; then 42 echo "Failed to locate a static library." 43 false 44 exit 45 fi 46 47 if [ ! -f "$ar" ]; then 48 # Find the appropriate ar to use. 49 ar="ar" 50 if [ -n "$AR_target" ]; then 51 ar=$AR_target 52 elif [ -n "$AR" ]; then 53 ar=$AR 54 fi 55 fi 56 57 obj_list="$($ar t $lib_file | grep '\.o$')" 58 59 function extract_object { 60 for f in $obj_list; do 61 filename="${f##*/}" 62 63 if [ -z "$(echo $filename | grep $1)" ]; then 64 continue 65 fi 66 67 # Only echo this if debugging. 68 # echo "Extract $filename from archive to $out_dir/$1." 69 $ar p $lib_file $filename > $out_dir/$1 70 [ -s $out_dir/$1 ] || exit 1 71 break 72 done 73 } 74 75 for f in $obj_files; do 76 extract_object $f 77 done 78