Index: build/mac/copy_asan_runtime_dylib.sh |
=================================================================== |
--- build/mac/copy_asan_runtime_dylib.sh (revision 0) |
+++ build/mac/copy_asan_runtime_dylib.sh (revision 0) |
@@ -0,0 +1,43 @@ |
+#!/bin/bash |
+ |
Mark Mentovai
2013/03/06 17:03:19
Copyright boilerplate goes here.
Alexander Potapenko
2013/03/07 08:29:22
Done.
|
+# For app bundles built with ASan, copies the runtime lib |
+# (libclang_rt.asan_osx_dynamic.dylib), on which their executables depend, from |
+# the compiler installation path to appname.app/Contents/Resources and fixes the |
+# dylib's install name in the binary to be relative to @executable_path. |
+ |
+set -e |
+set -x |
Mark Mentovai
2013/03/06 17:03:19
set -ex is fine for both of these.
Alexander Potapenko
2013/03/07 08:29:22
I actually don't need -x, it was only used for deb
|
+ |
+BINARY="${BUILT_PRODUCTS_DIR}/${EXECUTABLE_PATH}" |
+BINARY_DIR="$(dirname "${BINARY}")" |
+ASAN_DYLIB_NAME=libclang_rt.asan_osx_dynamic.dylib |
+ASAN_DYLIB=$(find \ |
Mark Mentovai
2013/03/06 17:03:19
Again, this is really hokey. Can we get a fixed pa
Alexander Potapenko
2013/03/07 08:29:22
I'll look into this.
|
+ "${BUILT_PRODUCTS_DIR}/../../third_party/llvm-build/Release+Asserts/lib/clang/" \ |
+ -type f -path "*${ASAN_DYLIB_NAME}") |
+BUILTIN_DYLIB_PATH=$(otool -L "${BINARY}" | \ |
+ grep "${ASAN_DYLIB_NAME}" | \ |
Mark Mentovai
2013/03/06 17:03:19
grep -F to prevent it from being treated as a regu
Alexander Potapenko
2013/03/07 08:29:22
Decided to replace with sed.
|
+ tr -d '\011' | \ |
+ sed 's/dylib .*/dylib/') |
Mark Mentovai
2013/03/06 17:03:19
Or you can combine the grep, tr, and sed into one
Alexander Potapenko
2013/03/07 08:29:22
Done.
|
+ |
+if [ -z "${BUILTIN_DYLIB_PATH}" ] |
Mark Mentovai
2013/03/06 17:03:19
1. Use [[ instead of [.
2. Put the “then” on the
Alexander Potapenko
2013/03/07 08:29:22
Done.
|
+then |
+ echo "${BINARY} does not depend on the ASan runtime library!" |
Mark Mentovai
2013/03/06 17:03:19
Send this to stderr with >&2. Same on line 32.
Alexander Potapenko
2013/03/07 08:29:22
Done.
|
+ # TODO(glider): make this return 1 when we fully switch to the dynamic |
+ # runtime in ASan. |
+ exit 0 |
+fi |
+ |
+if [ "$(basename ${ASAN_DYLIB})" != "${ASAN_DYLIB_NAME}" ] |
Mark Mentovai
2013/03/06 17:03:19
You should put quotes around ${ASAN_DYLIB} here.
Alexander Potapenko
2013/03/07 08:29:22
Done.
|
+then |
+ echo "basename(${ASAN_DYLIB}) != ${ASAN_DYLIB_NAME}" |
+ exit 1 |
+fi |
+ |
+RESOURCES_DIR="$(dirname "${BINARY_DIR}")/Resources" |
Mark Mentovai
2013/03/06 17:03:19
This isn’t really a resource and does not belong i
Alexander Potapenko
2013/03/07 08:29:22
Done.
|
+mkdir -p "${RESOURCES_DIR}" |
+cp "${ASAN_DYLIB}" "${RESOURCES_DIR}" |
+ |
+install_name_tool \ |
Mark Mentovai
2013/03/06 17:03:19
You might as well also change the LC_ID_DYLIB in $
Alexander Potapenko
2013/03/07 08:29:22
Good idea. Done.
|
+ -change "${BUILTIN_DYLIB_PATH}" \ |
+ "@executable_path/../Resources/${ASAN_DYLIB_NAME}" \ |
+ "${BINARY}" |
Property changes on: build/mac/copy_asan_runtime_dylib.sh |
___________________________________________________________________ |
Added: svn:executable |
+ * |
Added: svn:eol-style |
+ LF |