Created
March 16, 2024 20:24
-
-
Save ndrewh/93e651689514c48c434410cf1db269ac to your computer and use it in GitHub Desktop.
copy_deps.sh
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%# | |
# Copy Shared Library Dependencies Original by [Thomas Lange <code@nerdmind.de>] # | |
# Modified by [Andrew Haberlandt <andrew.haberlandt@gmail.com>] # | |
#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%# | |
# # | |
# This script copies all shared library dependencies from a binary source file # | |
# to a desired target directory. The directory structure of the libraries will # | |
# be mapped relative to the target directory. The binary file itself will also # | |
# be copied to the target directory. # | |
# # | |
# OPTION [-b]: Full path to the binary whose dependencies shall be copied. # | |
# OPTION [-t]: Full path to the target directory for the dependencies. # | |
# # | |
#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%# | |
#=============================================================================== | |
# Parsing command-line arguments with the getopts shell builtin | |
#=============================================================================== | |
while getopts :b:t: option | |
do | |
case $option in | |
b) ARGUMENT_BINARY="$OPTARG" ;; | |
t) ARGUMENT_TARGET="$OPTARG" ;; | |
esac | |
done | |
#=============================================================================== | |
# Checking if all required command-line arguments are provided | |
#=============================================================================== | |
[ -z "${ARGUMENT_BINARY}" ] && echo "$0: Missing argument: [-b binary]" >&2 | |
[ -z "${ARGUMENT_TARGET}" ] && echo "$0: Missing argument: [-t target]" >&2 | |
#=============================================================================== | |
# Abort execution if required command-line argument is missing | |
#=============================================================================== | |
[ -z "${ARGUMENT_BINARY}" ] || [ -z "${ARGUMENT_TARGET}" ] && exit 1 | |
#=============================================================================== | |
# Checking if binary or target path does not exists and abort | |
#=============================================================================== | |
[ ! -f "${ARGUMENT_BINARY}" ] && echo "$0: Binary path does not exists." >&2 && exit 1 | |
[ ! -d "${ARGUMENT_TARGET}" ] && echo "$0: Target path does not exists." >&2 && exit 1 | |
#=============================================================================== | |
# Copy binary file with its parent directories to the target directory | |
#=============================================================================== | |
cp --verbose --parents "${ARGUMENT_BINARY}" "${ARGUMENT_TARGET}" | |
#=============================================================================== | |
# Copy each library with its parent directories to the target directory | |
#=============================================================================== | |
for library in $(ldd "${ARGUMENT_BINARY}" | cut -d '>' -f 2 | awk '{print $1}') | |
do | |
[ -f "${library}" ] && cp --verbose "${library}" "${ARGUMENT_TARGET}" | |
done |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment