2022-03-18 22:49:47 +00:00
|
|
|
# SPDX-License-Identifier: GPL-2.0-or-later
|
|
|
|
# https://gitlab.com/inkscape/inkscape/-/blob/master/packaging/macos/bash_d/lib_.sh
|
|
|
|
# examples:
|
|
|
|
# lib_change_path \
|
|
|
|
# @executable_path/../Resources/lib/lib2geom.1.0.0.dylib \
|
|
|
|
# $APP_LIB_DIR/inkscape/libinkscape_base.dylib \
|
|
|
|
# $APP_EXE_DIR/inkscape
|
|
|
|
#
|
|
|
|
#lib_change_paths \
|
|
|
|
# @executable_path/../lib \
|
|
|
|
# $APP_LIB_DIR \
|
|
|
|
# $APP_BIN_DIR/gs
|
|
|
|
#
|
|
|
|
# lib_change_siblings $APP_LIB_DIR dylib
|
|
|
|
# lib_change_siblings $APP_LIB_DIR so
|
|
|
|
|
|
|
|
# include_guard
|
|
|
|
|
|
|
|
### includes ###################################################################
|
|
|
|
|
|
|
|
# Nothing here.
|
|
|
|
|
|
|
|
### variables ##################################################################
|
|
|
|
|
|
|
|
# Nothing here.
|
|
|
|
|
|
|
|
### functions ##################################################################
|
|
|
|
|
|
|
|
function lib_change_path
|
|
|
|
{
|
|
|
|
# This is a simple wrapper around install_name_tool to reduce the
|
|
|
|
# number of arguments (like $source does not have to be provided
|
|
|
|
# here as it can be deducted from $target).
|
2024-01-05 10:20:33 +00:00
|
|
|
# Also, the requested change can be applied to multiple binaries
|
2022-03-18 22:49:47 +00:00
|
|
|
# at once since 2-n arguments can be supplied.
|
|
|
|
|
|
|
|
local target=$1 # new path to dynamically linked library
|
|
|
|
local binaries=${*:2} # binaries to modify
|
|
|
|
|
|
|
|
local source_lib=${target##*/} # get library filename from target location
|
|
|
|
|
|
|
|
for binary in $binaries; do # won't work with spaces in paths
|
|
|
|
if [[ $binary == *.so ]] || [[ $binary == *.dylib ]]; then
|
|
|
|
lib_reset_id $binary
|
|
|
|
fi
|
|
|
|
local source=$(otool -L $binary | grep $source_lib | awk '{ print $1 }')
|
|
|
|
install_name_tool -change $source $target $binary
|
|
|
|
done
|
|
|
|
}
|
|
|
|
|
|
|
|
function lib_change_paths
|
|
|
|
{
|
|
|
|
# This is a slightly more advanced wrapper around install_name_tool.
|
|
|
|
# Given a directory $lib_dir that contains the libraries, all libraries
|
|
|
|
# linked in $binary can be changed at once to a specified $target path.
|
|
|
|
|
|
|
|
local target=$1 # new path to dynamically linked library
|
|
|
|
local lib_dir=$2
|
|
|
|
local binaries=${*:3}
|
|
|
|
|
|
|
|
for binary in $binaries; do
|
|
|
|
if [[ $binary == *.so ]] || [[ $binary == *.dylib ]]; then
|
|
|
|
lib_reset_id $binary
|
|
|
|
fi
|
|
|
|
for linked_lib in $(otool -L $binary | tail -n +2 | awk '{ print $1 }'); do
|
|
|
|
if [ "$(basename $binary)" != "$(basename $linked_lib)" ] &&
|
|
|
|
[ -f $lib_dir/$(basename $linked_lib) ]; then
|
|
|
|
lib_change_path $target/$(basename $linked_lib) $binary
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
done
|
|
|
|
}
|
|
|
|
|
|
|
|
function lib_change_siblings
|
|
|
|
{
|
|
|
|
# This is a slightly more advanced wrapper around install_name_tool.
|
|
|
|
# All libraries inside a given $dir that are linked to libraries present
|
|
|
|
# in that $dir can be automatically adjusted.
|
|
|
|
|
|
|
|
local dir=$1
|
|
|
|
local target=$2
|
|
|
|
|
|
|
|
for lib in $dir/*.dylib; do
|
|
|
|
lib_reset_id $lib
|
|
|
|
for linked_lib in $(otool -L $lib | tail -n +2 | awk '{ print $1 }'); do
|
|
|
|
if [ "$(basename $lib)" != "$(basename $linked_lib)" ] &&
|
|
|
|
[ -f $dir/$(basename $linked_lib) ]; then
|
|
|
|
lib_change_path $target/$(basename $linked_lib) $lib
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
done
|
|
|
|
|
|
|
|
if ls $dir/*.so 1> /dev/null 2>&1; then
|
|
|
|
for lib in $dir/*.so; do
|
|
|
|
lib_reset_id $lib
|
|
|
|
for linked_lib in $(otool -L $lib | tail -n +2 | awk '{ print $1 }'); do
|
|
|
|
if [ "$(basename $lib)" != "$(basename $linked_lib)" ] &&
|
|
|
|
[ -f $dir/$(basename $linked_lib) ]; then
|
|
|
|
lib_change_path $target/$(basename $linked_lib) $lib
|
|
|
|
fi
|
|
|
|
done
|
2024-01-05 10:20:33 +00:00
|
|
|
done
|
2022-03-18 22:49:47 +00:00
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
|
|
|
function lib_reset_id
|
|
|
|
{
|
|
|
|
local lib=$1
|
|
|
|
|
|
|
|
install_name_tool -id $(basename $lib) $lib
|
|
|
|
}
|
|
|
|
|
|
|
|
### aliases ####################################################################
|
|
|
|
|
|
|
|
# Nothing here.
|
|
|
|
|
|
|
|
### main #######################################################################
|
|
|
|
|
|
|
|
# Nothing here.
|