150 lines
3.6 KiB
Bash
150 lines
3.6 KiB
Bash
#!/bin/sh
|
|
#
|
|
# Name: set_install_name
|
|
# Purpose: set install_name for wx shared libraries under Mac OS X
|
|
# Usage: run with --help option to see the instructions
|
|
# Copyright: (c) 2005 Vadim Zeitlin <vadim@wxwindows.org>
|
|
# Licence: wxWindows licence
|
|
################################################################################
|
|
|
|
quiet=0
|
|
verbose=0
|
|
libdir=
|
|
tool_prefix=
|
|
install_path=
|
|
cmd=
|
|
|
|
Usage()
|
|
{
|
|
name=`basename $0`
|
|
cat 1>&2 <<EOF
|
|
Usage: $name [OPTIONS] [--prefix=PFX] [--libdir=DIR] [install_path]
|
|
|
|
Change the install name of all wxWidgets libraries in the directory DIR (or
|
|
current directory if libdir option is not specified) to correspond to the given
|
|
install_path (defaults to the libraries directory if not specified).
|
|
|
|
If prefix option is given, its value is prefixed to the tool names used. E.g.
|
|
to use this script when cross-building, use "--prefix=powerpc-apple-darwin8-".
|
|
|
|
-n, --dry-run Don't really do anything, just print the commands
|
|
-q, --quiet Don't display any non error messages
|
|
-v, --verbose Just show the commands being executed, don't run them
|
|
-h, --help Show this help screen and exit
|
|
|
|
Examples:
|
|
* do "$name --libdir=MyApp.app/Contents/Frameworks @executable_path/../Frameworks"
|
|
when distributing wxWidgets shared libraries with application MyApp
|
|
* run "$name" without parameters in the directory containing wxWidgets libraries
|
|
to use them without installing
|
|
EOF
|
|
exit 2
|
|
}
|
|
|
|
Message()
|
|
{
|
|
if [ $quiet != 1 ]; then
|
|
echo "$*"
|
|
fi
|
|
}
|
|
|
|
VerboseMessage()
|
|
{
|
|
if [ $verbose = 1 ]; then
|
|
Message "$*"
|
|
fi
|
|
}
|
|
|
|
Error()
|
|
{
|
|
echo "$*" 1>&2
|
|
}
|
|
|
|
GiveUsageErrorAndExit()
|
|
{
|
|
Error "$@"
|
|
Usage
|
|
}
|
|
|
|
ChangeInstallNames()
|
|
{
|
|
# only change the libs themselves, not symlinks to them
|
|
all_libs=`find "$libdir" -type f -name libwx_\*.dylib`
|
|
if [ -z "$all_libs" ]; then
|
|
Error "No wx libraries found in \"$libdir\"."
|
|
exit 1
|
|
fi
|
|
|
|
VerboseMessage "Processing $all_libs\n"
|
|
|
|
for lib in $all_libs; do
|
|
libname=`basename $lib`
|
|
oldname=`${tool_prefix}otool -D $lib | tail -1`
|
|
Message "Updating install name of and references to $libname:"
|
|
for lib2 in $all_libs; do
|
|
VerboseMessage " updating $lib2"
|
|
eval "$cmd ${tool_prefix}install_name_tool -change "$oldname" $install_path/$libname $lib2"
|
|
done
|
|
VerboseMessage " updating $libname id"
|
|
eval "$cmd ${tool_prefix}install_name_tool -id $install_path/$libname $lib"
|
|
done
|
|
}
|
|
|
|
while [ $# -ge 1 ]; do
|
|
case "$1" in
|
|
--help|-h)
|
|
Usage
|
|
;;
|
|
|
|
--dry-run|-n)
|
|
cmd="echo"
|
|
;;
|
|
|
|
--quiet|-q)
|
|
quiet=1
|
|
;;
|
|
|
|
--verbose|-v)
|
|
verbose=1
|
|
;;
|
|
|
|
--libdir=*)
|
|
if [ -n "$libdir" ]; then
|
|
GiveUsageErrorAndExit "Multiple --libdir options not allowed."
|
|
fi
|
|
libdir=`echo $1 | cut -c10-`
|
|
;;
|
|
|
|
--prefix=*)
|
|
if [ -n "$tool_prefix" ]; then
|
|
GiveUsageErrorAndExit "At most one --prefix option can be given."
|
|
fi
|
|
tool_prefix=`echo $1 | cut -c10-`
|
|
;;
|
|
|
|
-*)
|
|
GiveUsageErrorAndExit "Unknown option \"$1\"."
|
|
;;
|
|
|
|
*)
|
|
if [ -n "$install_path" ]; then
|
|
GiveUsageErrorAndExit "Too many parameters."
|
|
fi
|
|
install_path=$1
|
|
esac
|
|
|
|
shift
|
|
done
|
|
|
|
if [ -z $libdir ]; then
|
|
libdir=`pwd`
|
|
fi
|
|
|
|
if [ -z $install_path ]; then
|
|
install_path=$libdir
|
|
fi
|
|
|
|
ChangeInstallNames
|
|
|
|
exit 0
|