reexport.sh   [plain text]


#!/bin/bash -e -x

tmp="$(mktemp -d "${OBJROOT}/lipo.XXXXXX")"
output="$1"
input="$1"
input_base="$(basename ${input})"
exportlib="$2"
compat_version="$3"
current_version="$4"

if [[ "${RC_ARCHS/ /}" != "${RC_ARCHS}" ]] ; then
  for arch in ${RC_ARCHS}; do
    mkdir -p "$tmp/${arch}"
    lipo -thin "${arch}" "${input}" -output "${tmp}/${arch}/${input_base}"
    nm -gjU "${tmp}/${arch}/${input_base}" > "${tmp}/${arch}/exports"

    clang -arch "${arch}" -install_name "/usr/lib/${input_base}" -shared -o "${tmp}/${arch}/${input_base}" \
      -Xlinker -reexport_library -Xlinker "${exportlib}" \
      -Xlinker -exported_symbols_list -Xlinker "${tmp}/${arch}/exports" \
      -Xlinker -macosx_version_min -Xlinker "${MACOSX_DEPLOYMENT_TARGET}" \
      -Xlinker -compatibility_version -Xlinker "${compat_version}" \
      -Xlinker -current_version -Xlinker "${current_version}"
  done

  lipo -create -output "$output" "${tmp}"/*/*.dylib
else
  nm -gjU "${input}" > "${tmp}/exports"
  clang -arch "${RC_ARCHS}" -install_name "/usr/lib/${input_base}" -shared -o "${output}" \
    -Xlinker -reexport_library -Xlinker "${exportlib}" \
    -Xlinker -exported_symbols_list -Xlinker "${tmp}/exports" \
    -Xlinker -macosx_version_min -Xlinker "${MACOSX_DEPLOYMENT_TARGET}" \
    -Xlinker -compatibility_version -Xlinker "${compat_version}" \
    -Xlinker -current_version -Xlinker "${current_version}"
fi

codesign -f -s - "${output}"
rm -rf "${tmp}"