#!/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
