+Linux::getRpath () {
+ local exe_file="${1}"
+
+ local exe_dir="$(dirname "${exe_file}")"
+ local path_start="$(printf '%s' "${bundle_dir}" | wc -c)"
+ path_start="$((${path_start} + 1))"
+
+ local exe_subdir="$(echo "${exe_dir}" | cut -c "${path_start}-" | sed -e 's|//*|/|;s|^/||')"
+
+ local rpath_origin='$ORIGIN'
+
+ if [ "${exe_subdir}" = '' ]
+ then
+ printf '%s/lib\n' "${rpath_origin}"
+ else
+ if [ "${exe_subdir}" = 'lib' ]
+ then
+ printf '%s\n' "${rpath_origin}"
+ else
+ local num_parent_dir="$(echo "${exe_subdir}" | tr '/' '\n' | wc -l)"
+ local rpath_subdir
+ local i=0
+ while [ "${i}" -lt "${num_parent_dir}" ]
+ do
+ rpath_subdir="${rpath_subdir}/.."
+ i="$((${i} + 1))"
+ done
+ printf '%s%s/lib\n' "${rpath_origin}" "${rpath_subdir}"
+ fi
+ fi
+}
+
+Linux::patchExe () {
+ local exe_file="${1}"
+
+ local linux_rpath_string=$"$(Linux::getRpath "${exe_file}")"
+ patchelf --set-rpath "${linux_rpath_string}" "${exe_file}"
+}
+
+Linux::patchLib () {
+ local lib_dir="${1}"
+ local exe_file
+
+ find "${lib_dir}" \
+ -type f \
+ -name '*.so*' \
+ | while read exe_file
+ do
+ Linux::patchExe "${exe_file}"
+ done
+}
+