+#!/bin/sh
+# Copyright (c) 2005 Apple Computer, Inc. All rights reserved.
+#
+# @APPLE_LICENSE_HEADER_START@
+#
+# This file contains Original Code and/or Modifications of Original Code
+# as defined in and that are subject to the Apple Public Source License
+# Version 2.0 (the 'License'). You may not use this file except in
+# compliance with the License. Please obtain a copy of the License at
+# http://www.opensource.apple.com/apsl/ and read it before using this
+# file.
+#
+# The Original Code and all software distributed under the License are
+# distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+# EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+# INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
+# Please see the License for the specific language governing rights and
+# limitations under the License.
+#
+# @APPLE_LICENSE_HEADER_END@
+##
+# Wrapper around ar which behaves more like ar.
+# Problem is Rhapsody's ar doesn't work on a file that's been ranlib'ed
+# and some makefiles want to edit ranlib'ed archives.
+#
+# The interesting and functional routine here in unranlib().
+# The "main" code, which wraps ar, is a hack and may not parse the
+# arguments correctly, but seems to work for most uses of ar, where
+# the library is argv[2].
+##
+# Wilfredo Sanchez Jr. | wsanchez@apple.com
+# Copyright 1998 Apple Computer, Inc.
+##
+
+##
+# Set up PATH
+##
+
+MyPath=/usr/bin:/bin;
+
+if [ -z "${PATH}" ]; then
+ export PATH=${MyPath};
+else
+ export PATH=${PATH}:${MyPath};
+fi
+
+##
+# Functions
+##
+
+unranlib ()
+{
+ local archive;
+
+ for archive in $*; do
+
+ local name="$(basename ${archive})";
+ local dir="/tmp/unranlib.$$/${name}";
+ local ofiles="";
+ local archs="$(file ${archive} | \
+ grep '(for architecture' | \
+ awk '{print $4}' | \
+ sed 's/)://')";
+
+ for arch in ${archs}; do
+ local archdir="${dir}/${arch}";
+ mkdir -p "${archdir}";
+
+ lipo -thin "${arch}" "${archive}" -o "${archdir}/${name}";
+
+ ( cd "${archdir}" && ar -xo "./${name}"; );
+
+ local ofile;
+ for ofile in `find "${archdir}" -name \*.o`; do
+ ofiles="${ofiles} $(basename ${ofile})";
+ done
+
+ done
+
+ ofiles=$(echo ${ofiles} | tr ' ' '\012' | sort | uniq);
+
+ local ofile;
+ for ofile in ${ofiles}; do
+ lipo -create $(find "${dir}" -name "${ofile}" -print) -o "${dir}/${ofile}";
+ done
+
+ ( cd "${dir}" && ar -cr "${name}" ${ofiles}; );
+
+ mv "${dir}/${name}" "${archive}";
+
+ rm -rf "${dir}";
+
+ done
+
+ rm -rf "/tmp/unranlib.$$";
+}
+
+##
+# Handle command line
+##
+
+# This is totally bogus, but enough for now.
+archive=$2;
+
+if [ -f "${archive}" ] &&
+ file "${archive}" | grep -E 'Mach-O (fat file|universal binary)' > /dev/null; then
+
+ # File is fat. Undo ranlib.
+ unranlib "${archive}";
+fi
+
+ar $*;