|
@@ -53,7 +53,7 @@ Returns: 0 if success or 1 in case of error
|
|
|
EOF
|
|
|
}
|
|
|
|
|
|
-: ${PATCHELF:=${HOST_DIR}/bin/patchelf}
|
|
|
+: "${PATCHELF:=${HOST_DIR}/bin/patchelf}"
|
|
|
|
|
|
# ELF files should not be in these sub-directories
|
|
|
HOST_EXCLUDEPATHS="/share/terminfo"
|
|
@@ -61,19 +61,23 @@ STAGING_EXCLUDEPATHS="/usr/include /usr/share/terminfo"
|
|
|
TARGET_EXCLUDEPATHS="/lib/firmware"
|
|
|
|
|
|
patch_file() {
|
|
|
+ local PATCHELF rootdir file
|
|
|
+ local -a sanitize_extra_args
|
|
|
+
|
|
|
PATCHELF="${1}"
|
|
|
rootdir="${2}"
|
|
|
- sanitize_extra_args="${3}"
|
|
|
- file="${4}"
|
|
|
+ file="${3}"
|
|
|
+ shift 3
|
|
|
+ sanitize_extra_args=("${@}")
|
|
|
|
|
|
# check if it's an ELF file
|
|
|
- rpath=$(${PATCHELF} --print-rpath "${file}" 2>&1)
|
|
|
+ rpath="$("${PATCHELF}" --print-rpath "${file}" 2>&1)"
|
|
|
if test $? -ne 0 ; then
|
|
|
return 0
|
|
|
fi
|
|
|
|
|
|
# make files writable if necessary
|
|
|
- changed=$(chmod -c u+w "${file}")
|
|
|
+ changed="$(chmod -c u+w "${file}")"
|
|
|
|
|
|
# With per-package directory support, most RPATH of host
|
|
|
# binaries will point to per-package directories. This won't
|
|
@@ -81,26 +85,27 @@ patch_file() {
|
|
|
# the per-package host directory is not within ${rootdir}. So,
|
|
|
# we rewrite all RPATHs pointing to per-package directories so
|
|
|
# that they point to the global host directry.
|
|
|
- changed_rpath=$(echo ${rpath} | sed "s@${PER_PACKAGE_DIR}/[^/]\+/host@${HOST_DIR}@")
|
|
|
+ # shellcheck disable=SC2001 # ${var//search/replace} hard when search or replace have / in them
|
|
|
+ changed_rpath="$(echo "${rpath}" | sed "s@${PER_PACKAGE_DIR}/[^/]\+/host@${HOST_DIR}@")"
|
|
|
if test "${rpath}" != "${changed_rpath}" ; then
|
|
|
- ${PATCHELF} --set-rpath ${changed_rpath} "${file}"
|
|
|
+ "${PATCHELF}" --set-rpath "${changed_rpath}" "${file}"
|
|
|
fi
|
|
|
|
|
|
# call patchelf to sanitize the rpath
|
|
|
- ${PATCHELF} --make-rpath-relative "${rootdir}" ${sanitize_extra_args[@]} "${file}"
|
|
|
+ "${PATCHELF}" --make-rpath-relative "${rootdir}" "${sanitize_extra_args[@]}" "${file}"
|
|
|
# restore the original permission
|
|
|
test "${changed}" != "" && chmod u-w "${file}"
|
|
|
}
|
|
|
|
|
|
main() {
|
|
|
- local rootdir
|
|
|
- local tree="${1}"
|
|
|
- local find_args=( )
|
|
|
- local sanitize_extra_args=( )
|
|
|
+ local rootdir tree
|
|
|
+ local -a find_args sanitize_extra_args
|
|
|
+
|
|
|
+ tree="${1}"
|
|
|
|
|
|
if ! "${PATCHELF}" --version > /dev/null 2>&1; then
|
|
|
- echo "Error: can't execute patchelf utility '${PATCHELF}'"
|
|
|
- exit 1
|
|
|
+ echo "Error: can't execute patchelf utility '${PATCHELF}'"
|
|
|
+ exit 1
|
|
|
fi
|
|
|
|
|
|
case "${tree}" in
|
|
@@ -161,7 +166,10 @@ main() {
|
|
|
|
|
|
export -f patch_file
|
|
|
# Limit the number of cores used
|
|
|
- find "${rootdir}" ${find_args[@]} | xargs -0 -r -P ${PARALLEL_JOBS} -I {} bash -c "patch_file '${PATCHELF}' '${rootdir}' '${sanitize_extra_args}' $@" _ {}
|
|
|
+ # shellcheck disable=SC2016 # ${@} has to be expanded in the sub-shell.
|
|
|
+ find "${rootdir}" "${find_args[@]}" \
|
|
|
+ | xargs -0 -r -P "${PARALLEL_JOBS:-1}" -I {} \
|
|
|
+ bash -c 'patch_file "${@}"' _ "${PATCHELF}" "${rootdir}" {} "${sanitize_extra_args[@]}"
|
|
|
|
|
|
# Restore patched patchelf utility
|
|
|
test "${tree}" = "host" && mv "${PATCHELF}.__to_be_patched" "${PATCHELF}"
|
|
@@ -170,4 +178,4 @@ main() {
|
|
|
return 0
|
|
|
}
|
|
|
|
|
|
-main ${@}
|
|
|
+main "${@}"
|