]> git.saurik.com Git - apple/configd.git/blobdiff - update-sanitizer-dylib-references
configd-963.tar.gz
[apple/configd.git] / update-sanitizer-dylib-references
diff --git a/update-sanitizer-dylib-references b/update-sanitizer-dylib-references
new file mode 100755 (executable)
index 0000000..da32ed4
--- /dev/null
@@ -0,0 +1,108 @@
+#!/bin/sh
+
+#
+# fix address-sanitizer library @rpath references
+#
+
+xsan_setup() {
+    XSAN_DIR="/usr/local/lib/sanitizers"
+    case "${PLATFORM_NAME}" in
+       macosx )
+           ASAN_DYLIB="clang_rt.asan_osx_dynamic.dylib"
+           TSAN_DYLIB="clang_rt.tsan_osx_dynamic.dylib"
+           ;;
+               iphoneos )
+           ASAN_DYLIB="clang_rt.asan_ios_dynamic.dylib"
+           TSAN_DYLIB="clang_rt.tsan_ios_dynamic.dylib"
+           ;;
+               iphonesimulator )
+           ASAN_DYLIB="clang_rt.asan_iossim_dynamic.dylib"
+           TSAN_DYLIB="clang_rt.tsan_iossim_dynamic.dylib"
+           ;;
+               tvos )
+           ASAN_DYLIB="clang_rt.asan_tvos_dynamic.dylib"
+           TSAN_DYLIB="clang_rt.tsan_tvos_dynamic.dylib"
+           ;;
+               tvsosimulator )
+           ASAN_DYLIB="clang_rt.asan_tvossim_dynamic.dylib"
+           TSAN_DYLIB="clang_rt.tsan_tvossim_dynamic.dylib"
+           ;;
+               watchos )
+           ASAN_DYLIB="clang_rt.asan_watchos_dynamic.dylib"
+           TSAN_DYLIB="clang_rt.tsan_watchos_dynamic.dylib"
+           ;;
+               watchsimulator )
+           ASAN_DYLIB="clang_rt.asan_watchossim_dynamic.dylib"
+           TSAN_DYLIB="clang_rt.tsan_watchossim_dynamic.dylib"
+           ;;
+               * )
+           ASAN_DYLIB="clang_rt.asan_$(RC_PROJECT_COMPILATION_PLATFORM)_dynamic.dylib"
+           TSAN_DYLIB="clang_rt.tsan_$(RC_PROJECT_COMPILATION_PLATFORM)_dynamic.dylib"
+           ;;
+    esac
+}
+
+xsan_setup=0
+for VARIANT in ${BUILD_VARIANTS}
+do
+    case "${VARIANT}" in
+       "asan" )
+           #
+           # change address sanitizer @rpath reference
+           #
+           ASAN_FILE="${DSTROOT}${INSTALL_PATH}/"
+           if [ -n "${EXECUTABLE_FOLDER_PATH}" ]; then
+               ASAN_FILE+="${EXECUTABLE_FOLDER_PATH}/"
+           fi
+           ASAN_FILE+="${EXECUTABLE_PREFIX}${PRODUCT_NAME}_asan${EXECUTABLE_SUFFIX}"
+
+           if [ -x "${ASAN_FILE}" ]; then
+               if [ ${xsan_setup} -eq 0 ]; then
+                   xsan_setup
+                   xsan_setup=1
+               fi
+
+               install_name_tool                       \
+                   -change                             \
+                   "@rpath/lib${ASAN_DYLIB}"           \
+                   "${XSAN_DIR}/lib${ASAN_DYLIB}"      \
+                   "${ASAN_FILE}"
+               if [ $? -ne 0 ]; then
+                   echo "install_name_tool failed"
+                   printenv | sort
+                   exit 1
+               fi
+           fi
+           ;;
+       "tsan" )
+           #
+           # change thread sanitizer @rpath reference
+           #
+           TSAN_FILE="${DSTROOT}${INSTALL_PATH}/"
+           if [ -n "${EXECUTABLE_FOLDER_PATH}" ]; then
+               TSAN_FILE+="${EXECUTABLE_FOLDER_PATH}/"
+           fi
+           TSAN_FILE+="${EXECUTABLE_PREFIX}${PRODUCT_NAME}_tsan${EXECUTABLE_SUFFIX}"
+
+           if [ -x "${TSAN_FILE}" ]; then
+               if [ ${xsan_setup} -eq 0 ]; then
+                   xsan_setup
+                   xsan_setup=1
+               fi
+
+               install_name_tool                       \
+                   -change                             \
+                   "@rpath/lib${TSAN_DYLIB}"           \
+                   "${XSAN_DIR}/lib${TSAN_DYLIB}"      \
+                   "${TSAN_FILE}"
+               if [ $? -ne 0 ]; then
+                   echo "install_name_tool failed"
+                   printenv | sort
+                   exit 1
+               fi
+           fi
+           ;;
+       * )
+           ;;
+    esac
+done