OLD | NEW |
1 #!/bin/bash | 1 #!/bin/bash |
2 | 2 |
3 # Copyright (c) 2012 The Chromium Authors. All rights reserved. | 3 # Copyright (c) 2012 The Chromium Authors. All rights reserved. |
4 # Use of this source code is governed by a BSD-style license that can be | 4 # Use of this source code is governed by a BSD-style license that can be |
5 # found in the LICENSE file. | 5 # found in the LICENSE file. |
6 | 6 |
7 # This script expects the following environment variables to be set. Xcode | 7 # This script expects the following environment variables to be set. Xcode |
8 # normally sets them: | 8 # normally sets them: |
9 # | 9 # |
10 # CONFIGURATION - Release or Debug; this script only operates when Release. | 10 # CONFIGURATION - Release or Debug; this script only operates when Release. |
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
100 # SRC_STEM is the name of the file within the DWARF directory of the .dSYM | 100 # SRC_STEM is the name of the file within the DWARF directory of the .dSYM |
101 # bundle, which comes from the on-disk name of an executable or dylib within | 101 # bundle, which comes from the on-disk name of an executable or dylib within |
102 # its enclosing .app, .framework or .plugin bundle. This is the bundle name | 102 # its enclosing .app, .framework or .plugin bundle. This is the bundle name |
103 # without .app, .framework or .plugin appended. For non-bundled types, the | 103 # without .app, .framework or .plugin appended. For non-bundled types, the |
104 # stem is just the name of the singular file on disk. | 104 # stem is just the name of the singular file on disk. |
105 SRC_STEM=$(echo "${SRC_NAME}" | sed -Ee 's/\.(app|framework|plugin)$//') | 105 SRC_STEM=$(echo "${SRC_NAME}" | sed -Ee 's/\.(app|framework|plugin)$//') |
106 DSYM_NAME="${SRC_NAME}.dSYM" | 106 DSYM_NAME="${SRC_NAME}.dSYM" |
107 DSYM_PATH="${BUILT_PRODUCTS_DIR}/${DSYM_NAME}" | 107 DSYM_PATH="${BUILT_PRODUCTS_DIR}/${DSYM_NAME}" |
108 DWARF_PATH="${DSYM_PATH}/Contents/Resources/DWARF/${SRC_STEM}" | 108 DWARF_PATH="${DSYM_PATH}/Contents/Resources/DWARF/${SRC_STEM}" |
109 | 109 |
| 110 # SRC_PATH is the path to the Mach-O file to which the DSYM_PATH corresponds. |
| 111 # If this is a directory, it is a bundle, and the path to the actual image |
| 112 # needs to be computed for dump_syms. |
| 113 SRC_PREFIX="${BUILT_PRODUCTS_DIR}/${SRC_NAME}" |
| 114 SRC_PATH="" |
| 115 if [[ -d "${SRC_PREFIX}" ]]; then |
| 116 BUNDLED_OPTIONS=( |
| 117 # Executables and plugins: |
| 118 "${SRC_PREFIX}/Contents/MacOS/${SRC_STEM}" |
| 119 # Frameworks: |
| 120 "${SRC_PREFIX}/Versions/Current/${SRC_STEM}" |
| 121 ) |
| 122 for BUNDLED_OPTION in "${BUNDLED_OPTIONS[@]}"; do |
| 123 if [[ -fx "${BUNDLED_OPTION}" ]]; then |
| 124 SRC_PATH="${BUNDLED_OPTION}" |
| 125 break |
| 126 fi |
| 127 done |
| 128 |
| 129 if [[ -z "${SRC_PATH}" ]]; then |
| 130 echo "${0}: Could not find bundled Mach-O file for ${SRC_NAME}" |
| 131 exit 1 |
| 132 fi |
| 133 else |
| 134 # The Mach-O file is not a bundle. |
| 135 SRC_PATH="${SRC_PREFIX}" |
| 136 fi |
| 137 |
110 ARCHS=$(file "${DWARF_PATH}" | sed -Ene 's/^.*(i386|x86_64)$/\1/p') | 138 ARCHS=$(file "${DWARF_PATH}" | sed -Ene 's/^.*(i386|x86_64)$/\1/p') |
111 if [[ -z "${ARCHS}" ]]; then | 139 if [[ -z "${ARCHS}" ]]; then |
112 echo "${0}: expected something dumpable in ${DWARF_PATH}" >& 2 | 140 echo "${0}: expected something dumpable in ${DWARF_PATH}" >& 2 |
113 exit 1 | 141 exit 1 |
114 fi | 142 fi |
115 | 143 |
116 for ARCH in ${ARCHS}; do | 144 for ARCH in ${ARCHS}; do |
117 BPAD_SYM_NAME="${SRC_NAME}-${FULL_VERSION}-${ARCH}.breakpad" | 145 BPAD_SYM_NAME="${SRC_NAME}-${FULL_VERSION}-${ARCH}.breakpad" |
118 BPAD_SYM_PATH="${BUILT_PRODUCTS_DIR}/${BPAD_SYM_NAME}" | 146 BPAD_SYM_PATH="${BUILT_PRODUCTS_DIR}/${BPAD_SYM_NAME}" |
119 | 147 |
120 # Only run dump_syms if the file has changed since the last dump. Use -c | 148 # Only run dump_syms if the file has changed since the last dump. Use -g |
121 # to avoid dumping CFI, because the Breakpad stackwalk is incompatible | 149 # to dump data from the dSYM and CFI data from the Mach-O library or |
122 # with CFI produced by clang. | 150 # executable. |
123 # http://code.google.com/p/google-breakpad/issues/detail?id=443 | 151 if [ "${DWARF_PATH}" -nt "${BPAD_SYM_PATH}" -o \ |
124 if [ "${DWARF_PATH}" -nt "${BPAD_SYM_PATH}" ] ; then | 152 "${SRC_PATH}" -nt "${BPAD_SYM_PATH}" ] ; then |
125 "${BREAKPAD_DUMP_SYMS}" -a "${ARCH}" -c "${DWARF_PATH}" > \ | 153 "${BREAKPAD_DUMP_SYMS}" -a "${ARCH}" -g "${DWARF_PATH}" "${SRC_PATH}" > \ |
126 "${BPAD_SYM_PATH}" | 154 "${BPAD_SYM_PATH}" |
127 fi | 155 fi |
128 | 156 |
129 # Some executables will show up with variant names. The Breakpad symbol | 157 # Some executables will show up with variant names. The Breakpad symbol |
130 # server looks up modules based on a combination of the module name and | 158 # server looks up modules based on a combination of the module name and |
131 # identifier (UUID). Produce symbol files for these variant names so that | 159 # identifier (UUID). Produce symbol files for these variant names so that |
132 # the Breakpad symbol server will have something to return for stacks that | 160 # the Breakpad symbol server will have something to return for stacks that |
133 # travel through these modules. | 161 # travel through these modules. |
134 case "${SRC_NAME}" in | 162 case "${SRC_NAME}" in |
135 "${SRC_APP_NAME}.app") | 163 "${SRC_APP_NAME}.app") |
(...skipping 24 matching lines...) Expand all Loading... |
160 # the .dSYM archive if a new one is needed | 188 # the .dSYM archive if a new one is needed |
161 DSYMS[${#DSYMS[@]}]="${DSYM_NAME}" | 189 DSYMS[${#DSYMS[@]}]="${DSYM_NAME}" |
162 done | 190 done |
163 | 191 |
164 # Create the archive of .dSYM bundles. | 192 # Create the archive of .dSYM bundles. |
165 if [ ! -e "${DSYM_TAR_PATH}" ] ; then | 193 if [ ! -e "${DSYM_TAR_PATH}" ] ; then |
166 # Change directory so that absolute paths aren't included in the archive. | 194 # Change directory so that absolute paths aren't included in the archive. |
167 (cd "${BUILT_PRODUCTS_DIR}" && | 195 (cd "${BUILT_PRODUCTS_DIR}" && |
168 tar -jcf "${DSYM_TAR_PATH}" "${DSYMS[@]}") | 196 tar -jcf "${DSYM_TAR_PATH}" "${DSYMS[@]}") |
169 fi | 197 fi |
OLD | NEW |