Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(286)

Side by Side Diff: build/mac/copy_framework_unversioned.sh

Issue 10535037: copy_framework_unversioned without install_name_tool (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 8 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | chrome/chrome_dll.gypi » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/bin/bash 1 #!/bin/bash
2 2
3 # Copyright (c) 2009 The Chromium Authors. All rights reserved. 3 # Copyright (c) 2009 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 # Copies a framework to its new home, "unversioning" it. 7 # Copies a framework to its new home, "unversioning" it.
8 # 8 #
9 # Normally, frameworks are versioned bundles. The contents of a framework are 9 # Normally, frameworks are versioned bundles. The contents of a framework are
10 # stored in a versioned directory within the bundle, and symbolic links 10 # stored in a versioned directory within the bundle, and symbolic links
(...skipping 19 matching lines...) Expand all
30 # original outer .framework directory as the framework that ships within the 30 # original outer .framework directory as the framework that ships within the
31 # .app, the inner versioned directory is used. Instead of accessing bundled 31 # .app, the inner versioned directory is used. Instead of accessing bundled
32 # resources through symbolic links, they are accessed directly. In normal 32 # resources through symbolic links, they are accessed directly. In normal
33 # situations, the only hard-coded use of the versioned directory is by dyld, 33 # situations, the only hard-coded use of the versioned directory is by dyld,
34 # when loading the framework's code, but this is handled through a normal 34 # when loading the framework's code, but this is handled through a normal
35 # Mach-O load command, and it is easy to adjust the load command to point to 35 # Mach-O load command, and it is easy to adjust the load command to point to
36 # the unversioned framework code rather than the versioned counterpart. 36 # the unversioned framework code rather than the versioned counterpart.
37 # 37 #
38 # The resulting framework bundles aren't strictly conforming, but they work 38 # The resulting framework bundles aren't strictly conforming, but they work
39 # as well as normal versioned framework bundles. 39 # as well as normal versioned framework bundles.
40 #
41 # An option to skip running install_name_tool is available. By passing -I as
42 # the first argument to this script, install_name_tool will be skipped. This
43 # is only suitable for copied frameworks that will not be linked against, or
44 # when install_name_tool will be run on any linker output when something is
45 # linked against the copied framework. This option exists to allow signed
46 # frameworks to pass through without subjecting them to any modifications that
47 # would break their signatures.
40 48
41 set -e 49 set -e
42 50
51 RUN_INSTALL_NAME_TOOL=1
52 if [ $# -eq 3 ] && [ "${1}" = "-I" ] ; then
53 shift
54 RUN_INSTALL_NAME_TOOL=
55 fi
56
43 if [ $# -ne 2 ] ; then 57 if [ $# -ne 2 ] ; then
44 echo "usage: ${0} FRAMEWORK DESTINATION_DIR" >& 2 58 echo "usage: ${0} [-I] FRAMEWORK DESTINATION_DIR" >& 2
45 exit 1 59 exit 1
46 fi 60 fi
47 61
48 # FRAMEWORK should be a path to a versioned framework bundle, ending in 62 # FRAMEWORK should be a path to a versioned framework bundle, ending in
49 # .framework. DESTINATION_DIR is the directory that the unversioned framework 63 # .framework. DESTINATION_DIR is the directory that the unversioned framework
50 # bundle will be copied to. 64 # bundle will be copied to.
51 65
52 FRAMEWORK="${1}" 66 FRAMEWORK="${1}"
53 DESTINATION_DIR="${2}" 67 DESTINATION_DIR="${2}"
54 68
(...skipping 17 matching lines...) Expand all
72 fi 86 fi
73 87
74 DESTINATION="${DESTINATION_DIR}/${FRAMEWORK_NAME}" 88 DESTINATION="${DESTINATION_DIR}/${FRAMEWORK_NAME}"
75 89
76 # Copy the versioned directory within the versioned framework to its 90 # Copy the versioned directory within the versioned framework to its
77 # destination location. 91 # destination location.
78 mkdir -p "${DESTINATION_DIR}" 92 mkdir -p "${DESTINATION_DIR}"
79 rsync -acC --delete --exclude Headers --exclude PrivateHeaders \ 93 rsync -acC --delete --exclude Headers --exclude PrivateHeaders \
80 --include '*.so' "${CURRENT_VERSION}/" "${DESTINATION}" 94 --include '*.so' "${CURRENT_VERSION}/" "${DESTINATION}"
81 95
82 # Adjust the Mach-O LC_ID_DYLIB load command in the framework. This does not 96 if [[ -n "${RUN_INSTALL_NAME_TOOL}" ]]; then
83 # change the LC_LOAD_DYLIB load commands in anything that may have already 97 # Adjust the Mach-O LC_ID_DYLIB load command in the framework. This does not
84 # linked against the framework. Not all frameworks will actually need this 98 # change the LC_LOAD_DYLIB load commands in anything that may have already
85 # to be changed. Some frameworks may already be built with the proper 99 # linked against the framework. Not all frameworks will actually need this
86 # LC_ID_DYLIB for use as an unversioned framework. Xcode users can do this 100 # to be changed. Some frameworks may already be built with the proper
87 # by setting LD_DYLIB_INSTALL_NAME to 101 # LC_ID_DYLIB for use as an unversioned framework. Xcode users can do this
88 # $(DYLIB_INSTALL_NAME_BASE:standardizepath)/$(WRAPPER_NAME)/$(PRODUCT_NAME) 102 # by setting LD_DYLIB_INSTALL_NAME to
89 # If invoking ld via gcc or g++, pass the desired path to -Wl,-install_name 103 # $(DYLIB_INSTALL_NAME_BASE:standardizepath)/$(WRAPPER_NAME)/$(PRODUCT_NAME)
90 # at link time. 104 # If invoking ld via gcc or g++, pass the desired path to -Wl,-install_name
91 FRAMEWORK_DYLIB="${DESTINATION}/${FRAMEWORK_NAME_NOEXT}" 105 # at link time.
92 LC_ID_DYLIB_OLD="$(otool -l "${FRAMEWORK_DYLIB}" | 106 FRAMEWORK_DYLIB="${DESTINATION}/${FRAMEWORK_NAME_NOEXT}"
TVL 2012/06/06 20:00:44 part of me wonders if there is a way to use codesi
93 grep -A10 "^ *cmd LC_ID_DYLIB$" | 107 LC_ID_DYLIB_OLD="$(otool -l "${FRAMEWORK_DYLIB}" |
94 grep -m1 "^ *name" | 108 grep -A10 "^ *cmd LC_ID_DYLIB$" |
95 sed -Ee 's/^ *name (.*) \(offset [0-9]+\)$/\1/')" 109 grep -m1 "^ *name" |
96 VERSION_PATH="/Versions/${CURRENT_VERSION_ID}/${FRAMEWORK_NAME_NOEXT}" 110 sed -Ee 's/^ *name (.*) \(offset [0-9]+\)$/\1/')"
97 LC_ID_DYLIB_NEW="$(echo "${LC_ID_DYLIB_OLD}" | 111 VERSION_PATH="/Versions/${CURRENT_VERSION_ID}/${FRAMEWORK_NAME_NOEXT}"
98 sed -Ee "s%${VERSION_PATH}$%/${FRAMEWORK_NAME_NOEXT}%")" 112 LC_ID_DYLIB_NEW="$(echo "${LC_ID_DYLIB_OLD}" |
113 sed -Ee "s%${VERSION_PATH}$%/${FRAMEWORK_NAME_NOEXT}%")"
99 114
100 if [ "${LC_ID_DYLIB_NEW}" != "${LC_ID_DYLIB_OLD}" ] ; then 115 if [ "${LC_ID_DYLIB_NEW}" != "${LC_ID_DYLIB_OLD}" ] ; then
101 install_name_tool -id "${LC_ID_DYLIB_NEW}" "${FRAMEWORK_DYLIB}" 116 install_name_tool -id "${LC_ID_DYLIB_NEW}" "${FRAMEWORK_DYLIB}"
117 fi
102 fi 118 fi
OLDNEW
« no previous file with comments | « no previous file | chrome/chrome_dll.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698