diff --git a/scripts/build/internals.sh b/scripts/build/internals.sh index acaf8647..51272e69 100644 --- a/scripts/build/internals.sh +++ b/scripts/build/internals.sh @@ -4,6 +4,8 @@ # un-wanted files, to add tuple aliases, and to add the final # crosstool-NG-provided files. do_finish() { + local _t + CT_DoStep INFO "Cleaning-up the toolchain's directory" CT_DoLog EXTRA "Removing access to the build system tools" @@ -39,6 +41,23 @@ do_finish() { done CT_Popd + # If using the companion libraries, we need a wrapper + # that will set LD_LIBRARY_PATH approriately + if [ "${CT_GMP_MPFR}" = "y" \ + -o "${CT_PPL_CLOOG_MPC}" = "y" ]; then + CT_DoLog EXTRA "Installing toolchain wrappers" + CT_Pushd "${CT_PREFIX_DIR}/bin" + sed -r -e 's|@@CT_bash@@|'"${bash}"'|g;' \ + "${CT_LIB_DIR}/scripts/wrapper.in" \ + >".${CT_TARGET}-wrapper" + CT_DoExecLog ALL chmod 755 ".${CT_TARGET}-wrapper" + for t in "${CT_TARGET}-"*; do + CT_DoExecLog ALL mv "${t}" ".${t}" + CT_DoExecLog ALL ln ".${CT_TARGET}-wrapper" "${t}" + done + CT_Popd + fi + # Remove the generated documentation files if [ "${CT_REMOVE_DOCS}" = "y" ]; then CT_DoLog EXTRA "Removing installed documentation" diff --git a/scripts/wrapper.in b/scripts/wrapper.in new file mode 100644 index 00000000..70cb5d31 --- /dev/null +++ b/scripts/wrapper.in @@ -0,0 +1,15 @@ +#!@@CT_bash@@ +# There are bashisms on the last line + +dirname="$(dirname "${0}")" +basename="$(basename "${0}")" + +ld_lib_path="$(dirname "${dirname}")/lib" + +case ":${LD_LIBRARY_PATH}:" in + *":${ld_lib_path}:"*) ;; + *) LD_LIBRARY_PATH="${ld_lib_path}${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}";; +esac + +export LD_LIBRARY_PATH +exec -a "${basename}" "${dirname}/.${basename}" "$@"