|
#!/bin/sh ## # 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 'Mach-O fat file' > /dev/null; then # File is fat. Undo ranlib. unranlib "${archive}"; fi ar $*; syntax highlighted by Code2HTML, v. 0.9.1 |